Skip to content

Commit 3c1010f

Browse files
committed
New batch.
1 parent b9f0bf7 commit 3c1010f

File tree

12 files changed

+79
-76
lines changed

12 files changed

+79
-76
lines changed

common/src/main/java/generations/gg/generations/core/generationscore/common/util/PokemonFunctions.kt

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,19 @@ import com.cobblemon.mod.common.pokemon.*
1616
import com.cobblemon.mod.common.pokemon.Pokemon.Companion.loadFromNBT
1717
import com.cobblemon.mod.common.util.asResource
1818
import com.cobblemon.mod.common.util.asTranslated
19+
import com.cobblemon.mod.common.util.server
1920
import com.cobblemon.mod.common.util.toNbtList
21+
import com.mojang.serialization.JsonOps
22+
import generations.gg.generations.core.generationscore.common.util.extensions.get
23+
import generations.gg.generations.core.generationscore.common.util.extensions.has
24+
import generations.gg.generations.core.generationscore.common.util.extensions.remove
25+
import generations.gg.generations.core.generationscore.common.util.extensions.set
2026
import generations.gg.generations.core.generationscore.common.world.item.StatueSpawnerItem
27+
import generations.gg.generations.core.generationscore.common.world.item.components.GenerationsItemComponents
28+
import net.minecraft.core.component.DataComponents
2129
import net.minecraft.nbt.CompoundTag
2230
import net.minecraft.nbt.ListTag
31+
import net.minecraft.nbt.NbtOps
2332
import net.minecraft.nbt.StringTag
2433
import net.minecraft.nbt.Tag
2534
import net.minecraft.network.chat.Component
@@ -29,6 +38,7 @@ import net.minecraft.resources.ResourceLocation
2938
import net.minecraft.server.level.ServerPlayer
3039
import net.minecraft.world.entity.player.Player
3140
import net.minecraft.world.item.ItemStack
41+
import net.minecraft.world.item.component.ItemLore
3242

3343
private val statColorMap = mapOf(
3444
Stats.HP to "&8",
@@ -40,7 +50,7 @@ private val statColorMap = mapOf(
4050
)
4151

4252
fun Pokemon.dembedPokemon(): Pokemon? = if(hasEmbeddedPokemon()) {
43-
persistentData.getCompound(DataKeys.EMBEDDED_POKEMON).let { Pokemon.loadFromNBT(it) }.also {
53+
persistentData.getCompound(DataKeys.EMBEDDED_POKEMON).let { Pokemon.loadFromNBT(server()!!.registryAccess(), it) }.also {
4454
persistentData.remove(DataKeys.EMBEDDED_POKEMON)
4555
this.anyChangeObservable.emit(this)
4656
}
@@ -52,7 +62,7 @@ fun Pokemon.embedPokemon(pokemon: Pokemon, needsToBeInWorld: Boolean = true): Bo
5262
val removedFromWorld = pokemon.storeCoordinates.get()?.remove() == true
5363

5464
return if (!needsToBeInWorld || removedFromWorld) {
55-
this.persistentData.put(DataKeys.EMBEDDED_POKEMON, Pokemon.CODEC.pokemon.saveToNBT(CompoundTag()))
65+
this.persistentData.put(DataKeys.EMBEDDED_POKEMON, pokemon.saveToNBT(server()!!.registryAccess()))
5666
this.anyChangeObservable.emit(this)
5767
true
5868
} else {
@@ -123,49 +133,29 @@ fun MutableList<Component>.add(pokemon: Pokemon) {
123133
}
124134

125135
fun ItemStack.savePokemon(poke: Pokemon) {
126-
var tag = this.getOrCreateTag()
127-
var clientPokemon = CompoundTag()
128-
129-
clientPokemon.putString("Species", poke.species.resourceIdentifier.toString())
130-
clientPokemon.put("Aspects", poke.aspects.map { StringTag.valueOf(it) }.toNbtList())
131-
tag.put(DataKeys.CLIENT_POKEMON_DATA, clientPokemon)
132-
tag.put("pokemon", poke.saveToNBT(CompoundTag()))
136+
set(GenerationsItemComponents.EMBEDDED_POKEMON, poke)
137+
set(GenerationsItemComponents.CLIENT_POKEMON_DATA, poke.asRenderablePokemon())
133138
}
134139

135140
fun ItemStack.removePokemon() {
136-
var tag = this.tag ?: return
137-
tag.remove("pokemon")
138-
tag.remove(DataKeys.CLIENT_POKEMON_DATA)
141+
remove(GenerationsItemComponents.EMBEDDED_POKEMON)
142+
remove(GenerationsItemComponents.CLIENT_POKEMON_DATA)
139143
}
140144

141145
fun ItemStack.getRenderablePokemon(): RenderablePokemon? {
142146
if(item is StatueSpawnerItem) {
143147
return (item as StatueSpawnerItem).pokemon?.asRenderablePokemon() //TODO: See if this explodes.
144148
}
145149

146-
return if (hasTag() && tag!!.contains(DataKeys.CLIENT_POKEMON_DATA)) {
147-
var nbt = getTagElement(DataKeys.CLIENT_POKEMON_DATA)!!
148-
149-
var species = PokemonSpecies.getByIdentifier(nbt.getString("Species").asResource()) ?: return null
150-
151-
var aspects = nbt.getList("Aspects", Tag.TAG_STRING.toInt()).mapNotNull { it as? StringTag }.map { it.asString }.toCollection(HashSet())
152-
153-
return RenderablePokemon(species, aspects)
154-
} else {
155-
null
156-
}
150+
return get(GenerationsItemComponents.CLIENT_POKEMON_DATA)
157151
}
158152

159153
fun ItemStack.getPokemon(): Pokemon? {
160154
if(item is StatueSpawnerItem) {
161155
return (item as StatueSpawnerItem).pokemon
162156
}
163157

164-
return if (hasTag() && tag!!.contains("pokemon")) {
165-
loadFromNBT(getTagElement("pokemon")!!)
166-
} else {
167-
null
168-
}
158+
return get(GenerationsItemComponents.EMBEDDED_POKEMON)
169159
}
170160

171161

@@ -176,12 +166,11 @@ fun Pokemon.removeIfBelongs(player: Player): Boolean {
176166
}
177167

178168
fun <T:Any> ItemStack.setLore(lore: List<T>?): ItemStack {
179-
val compoundtag = getOrCreateTagElement(ItemStack.TAG_DISPLAY)
169+
180170
if (lore != null) {
181-
lore.map { if (it is MutableComponent) it else it.toString().text() }.map { Component.Serializer.toJson(it) }.map { StringTag.valueOf(it) }
182-
.toCollection(ListTag()).let { compoundtag.put(ItemStack.TAG_LORE, it) }
171+
set(DataComponents.LORE, lore.map { if (it is MutableComponent) it else it.toString().text() }.toList().let { ItemLore(it) })
183172
} else {
184-
compoundtag.remove(ItemStack.TAG_LORE)
173+
remove(DataComponents.LORE)
185174
}
186175
return this
187176
}

common/src/main/java/generations/gg/generations/core/generationscore/common/util/extensions/ItemStackExtension.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package generations.gg.generations.core.generationscore.common.util.extensions
22

33
import dev.architectury.registry.registries.RegistrySupplier
4+
import generations.gg.generations.core.generationscore.common.util.removePokemon
45
import generations.gg.generations.core.generationscore.common.world.item.components.GenerationsItemComponents
56
import net.minecraft.core.component.DataComponentType
67
import net.minecraft.world.item.Item
78
import net.minecraft.world.item.ItemStack
89

910
fun <T : Any> ItemStack.get(registrySupplier: RegistrySupplier<DataComponentType<T>>): T? = this.get(registrySupplier.get())
11+
fun <T : Any> ItemStack.has(registrySupplier: RegistrySupplier<DataComponentType<T>>): Boolean = this.has(registrySupplier.get())
1012

1113
fun <T : Any> ItemStack.getOrDefault(registrySupplier: RegistrySupplier<DataComponentType<T>>, defaultValue: T): T = this.getOrDefault(registrySupplier.get(), defaultValue)
1214

1315
fun <T : Any> ItemStack.set(registrySupplier: RegistrySupplier<DataComponentType<T>>, value: T) = this.set(registrySupplier.get(), value)
16+
fun <T : Any> ItemStack.remove(registrySupplier: RegistrySupplier<DataComponentType<T>>) = this.remove(registrySupplier.get())
1417

1518
fun Item.Properties.distance(): Item.Properties = this.component(GenerationsItemComponents.DISTANCE.get(), 0.0)
1619

common/src/main/java/generations/gg/generations/core/generationscore/common/world/item/DarkCrystalItem.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@ class DarkCrystalItem(block: Block?, properties: Properties?) : BlockItemWithLan
1818

1919
if (entity.pokemon.aspects.contains("shadow")) {
2020
player.displayClientMessage(
21-
"generations_core.special.shadow.already".asTranslated(entity.displayName?.string),
21+
"generations_core.special.shadow.already".asTranslated(entity.name.string),
2222
false
2323
)
2424
} else {
2525
var properties = PokemonProperties.parse("shadow")
2626
if (entity.apply { properties.apply(this) }.pokemon.aspects.contains("shadow")) {
2727
player.displayClientMessage(
28-
"generations_core.special.shadow.success".asTranslated(entity.displayName.string),
28+
"generations_core.special.shadow.success".asTranslated(entity.name.string),
2929
false
3030
)
3131
consumeItem(player, stack)
3232
} else {
3333
player.displayClientMessage(
34-
"generations_core.special.shadow.failure".asTranslated(entity.displayName.string),
34+
"generations_core.special.shadow.failure".asTranslated(entity.name.string),
3535
false
3636
)
3737
}

common/src/main/java/generations/gg/generations/core/generationscore/common/world/item/DnaSplicer.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.cobblemon.mod.common.util.asTranslated
1010
import com.cobblemon.mod.common.util.party
1111
import generations.gg.generations.core.generationscore.common.util.*
1212
import net.minecraft.ChatFormatting
13+
import net.minecraft.core.component.DataComponents
1314
import net.minecraft.network.chat.Component
1415
import net.minecraft.server.level.ServerPlayer
1516
import net.minecraft.sounds.SoundEvent
@@ -33,7 +34,7 @@ class DnaSplicer(properties: Properties): PokemonStoringItem(properties) {
3334
val list = mutableListOf<Component>()
3435
list.add(pokemon)
3536
stack.setLore(list)
36-
stack.setHoverName(super.getName(stack).copy() + getPokemonText(stack))
37+
stack.set(DataComponents.ITEM_NAME, super.getName(stack).copy().append(getPokemonText(stack)))
3738

3839
player.level().playSound(null, entity, SoundEvents.ENDERMAN_TELEPORT, SoundSource.MASTER, 1.0f, 1.0f)
3940

common/src/main/java/generations/gg/generations/core/generationscore/common/world/item/NecroizerItemItem.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class NecroizerItemItem(private val properties: Properties, private val species:
2525

2626
val pokemon = player.party().firstOrNull { it.isSpecies(species) } ?: return false
2727
if(!entity.pokemon.embedPokemon(pokemon)) {
28-
player.sendSystemMessage("${entity.displayName.string} failed to absorb ${pokemon.getDisplayName().string}.".text(), true)
28+
player.sendSystemMessage("${entity.name.string} failed to absorb ${pokemon.getDisplayName().string}.".text(), true)
2929
return false
3030
}
3131

common/src/main/java/generations/gg/generations/core/generationscore/common/world/item/PokemonStoringItem.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import com.cobblemon.mod.common.Cobblemon.storage
44
import com.cobblemon.mod.common.api.text.plus
55
import com.cobblemon.mod.common.api.text.text
66
import generations.gg.generations.core.generationscore.common.util.add
7+
import generations.gg.generations.core.generationscore.common.util.extensions.remove
78
import generations.gg.generations.core.generationscore.common.util.getPokemon
89
import generations.gg.generations.core.generationscore.common.util.removePokemon
910
import generations.gg.generations.core.generationscore.common.util.setLore
1011
import generations.gg.generations.core.generationscore.common.world.item.GenerationsCobblemonInteractions.PokemonInteraction
12+
import net.minecraft.core.component.DataComponents
1113
import net.minecraft.network.chat.Component
1214
import net.minecraft.server.level.ServerPlayer
1315
import net.minecraft.sounds.SoundEvents
@@ -28,11 +30,11 @@ abstract class PokemonStoringItem(properties: Properties) : Item(properties), Po
2830

2931
override fun appendHoverText(
3032
stack: ItemStack,
31-
level: Level?,
33+
context: TooltipContext,
3234
tooltipComponents: MutableList<Component>,
33-
isAdvanced: TooltipFlag,
35+
tooltipFlag: TooltipFlag
3436
) {
35-
super.appendHoverText(stack, level, tooltipComponents, isAdvanced)
37+
super.appendHoverText(stack, context, tooltipComponents, tooltipFlag)
3638
}
3739

3840
override fun use(level: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder<ItemStack> {
@@ -44,7 +46,7 @@ abstract class PokemonStoringItem(properties: Properties) : Item(properties), Po
4446
item.shrink(1)
4547
item.removePokemon()
4648
item.setLore(mutableListOf<Component>())
47-
item.setHoverName(null)
49+
item.remove(DataComponents.ITEM_NAME)
4850
if(consumeOnRelease()) item.shrink(1)
4951
player.level().playSound(null, player, SoundEvents.ENDERMAN_TELEPORT, SoundSource.MASTER, 1.0f, 1.0f)
5052
return InteractionResultHolder.sidedSuccess(item, false)

common/src/main/java/generations/gg/generations/core/generationscore/common/world/item/ReinsOfUnityItem.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ import com.cobblemon.mod.common.pokemon.Pokemon
1111
import com.cobblemon.mod.common.util.asTranslated
1212
import com.cobblemon.mod.common.util.party
1313
import generations.gg.generations.core.generationscore.common.util.*
14+
import generations.gg.generations.core.generationscore.common.util.extensions.set
1415
import net.minecraft.ChatFormatting
16+
import net.minecraft.core.component.DataComponents
1517
import net.minecraft.network.chat.Component
1618
import net.minecraft.server.level.ServerPlayer
1719
import net.minecraft.sounds.SoundEvent
@@ -43,7 +45,7 @@ class ReinsOfUnityItem(properties: Properties): PokemonStoringItem(properties) {
4345
val list = mutableListOf<Component>()
4446
list.add(pokemon)
4547
stack.setLore(list)
46-
stack.setHoverName(super.getName(stack).copy() + getPokemonText(stack))
48+
stack.set(DataComponents.ITEM_NAME, super.getName(stack).copy().append(getPokemonText(stack)))
4749

4850
player.level().playSound(null, entity, SoundEvents.ENDERMAN_TELEPORT, SoundSource.MASTER, 1.0f, 1.0f)
4951

common/src/main/java/generations/gg/generations/core/generationscore/common/world/item/TimeCapsule.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import dev.architectury.registry.item.ItemPropertiesRegistry
88
import generations.gg.generations.core.generationscore.common.GenerationsCore
99
import generations.gg.generations.core.generationscore.common.util.*
1010
import net.minecraft.client.multiplayer.ClientLevel
11+
import net.minecraft.core.component.DataComponents
1112
import net.minecraft.network.chat.Component
1213
import net.minecraft.network.chat.MutableComponent
1314
import net.minecraft.server.level.ServerPlayer
@@ -29,7 +30,7 @@ class TimeCapsule(properties: Properties) : PokemonStoringItem(properties) {
2930
var list = mutableListOf<Component>()
3031
list.add(pokemon)
3132
stack.setLore(list)
32-
stack.setHoverName(super.getName(stack).copy() + getPokemonText(stack))
33+
stack.set(DataComponents.ITEM_NAME, super.getName(stack).copy().append(getPokemonText(stack)))
3334

3435
player.level().playSound(
3536
null,
Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package generations.gg.generations.core.generationscore.common.world.item.components
22

3+
import com.cobblemon.mod.common.pokemon.Pokemon
4+
import com.cobblemon.mod.common.pokemon.RenderablePokemon
5+
import com.cobblemon.mod.common.pokemon.Species
36
import com.mojang.serialization.Codec
7+
import com.mojang.serialization.codecs.RecordCodecBuilder
48
import dev.architectury.registry.registries.DeferredRegister
59
import dev.architectury.registry.registries.RegistrySupplier
610
import earth.terrarium.common_storage_lib.data.DataManager
@@ -22,49 +26,59 @@ import java.util.function.Supplier
2226

2327
object GenerationsItemComponents {
2428

25-
var REGISTER = DataManagerRegistry(GenerationsCore.MOD_ID)
29+
var REGISTER = DeferredRegister.create(GenerationsCore.MOD_ID, Registries.DATA_COMPONENT_TYPE)
2630

2731
var DISTANCE = register<Double>(
2832
DataKeys.DISTANCE,
29-
{ 0.0 },
3033
Codec.DOUBLE,
3134
StreamCodec.of(ByteBufCodecs.DOUBLE::encode, ByteBufCodecs.DOUBLE::decode)
3235
)
3336
var USES =
34-
register<Int>("uses", { 0 }, Codec.INT, StreamCodec.of(ByteBufCodecs.INT::encode, ByteBufCodecs.INT::decode))
37+
register<Int>("uses", Codec.INT, StreamCodec.of(ByteBufCodecs.INT::encode, ByteBufCodecs.INT::decode))
3538
var USED = register<Boolean>(
3639
"used",
37-
{ false },
3840
Codec.BOOL,
3941
StreamCodec.of(ByteBufCodecs.BOOL::encode, ByteBufCodecs.BOOL::decode)
4042
)
4143
var ENCHANTED = register<Boolean>(
4244
"enchanted",
43-
{ false },
4445
Codec.BOOL,
4546
StreamCodec.of(ByteBufCodecs.BOOL::encode, ByteBufCodecs.BOOL::decode)
4647
)
4748
var CARROT_HOLDER =
48-
register("carrot_holder", ItemStorageData.DEFAULT, ItemStorageData.CODEC.xmap(CalyrexSteedItem.CarrotHolder))
49+
register("carrot_holder", ItemStorageData.CODEC.xmap(CalyrexSteedItem.CarrotHolder))
4950
var DISC_HOLDER = register(DataKeys.DISC_HOLDER, WalkmonItem.DiscHolder.CODEC)
5051
val CURRY_DATA = register("curry_data", CurryData.CODEC, CurryData.STREAM_CODEC)
51-
val TM_DETAILS = register("tm_details", { TmDetails("", -1) }, TmDetails.CODEC, TmDetails.STREAM_CODEC)
52+
val TM_DETAILS = register("tm_details", TmDetails.CODEC, TmDetails.STREAM_CODEC)
53+
val EMBEDDED_POKEMON = register("pokemon", Pokemon.CODEC)
54+
val CLIENT_POKEMON_DATA: RegistrySupplier<DataComponentType<RenderablePokemon>> = register(DataKeys.CLIENT_POKEMON_DATA, RecordCodecBuilder.create {
55+
56+
it.group(
57+
Species.BY_IDENTIFIER_CODEC.fieldOf("species").forGetter(RenderablePokemon::species),
58+
Codec.STRING.listOf().xmap({ it.toSet() }, { it.toList()}).fieldOf("aspects").forGetter(RenderablePokemon::aspects)
59+
).apply(it, ::RenderablePokemon)
60+
}, object : StreamCodec<RegistryFriendlyByteBuf, RenderablePokemon> {
61+
override fun decode(`object`: RegistryFriendlyByteBuf): RenderablePokemon {
62+
return RenderablePokemon.loadFromBuffer(`object`)
63+
}
64+
65+
override fun encode(`object`: RegistryFriendlyByteBuf, object2: RenderablePokemon) {
66+
object2.saveToBuffer(`object`)
67+
}
68+
69+
})
5270

5371
@JvmStatic
54-
fun init() = REGISTER.init()
72+
fun init() = REGISTER.register()
5573

5674
private fun <T> register(
5775
name: String,
58-
factory: Supplier<T>,
5976
codec: Codec<T>,
6077
streamCodec: StreamCodec<RegistryFriendlyByteBuf, T>? = null,
61-
itemBased: Boolean = true
62-
): DataManager<T> {
63-
return REGISTER.builder(factory).serialize(codec)
64-
.also { if (streamCodec != null) it.networkSerializer(streamCodec) }
65-
.also {
66-
if (itemBased) it.withDataComponent()
67-
else it.copyOnDeath()
68-
}.buildAndRegister(name)
78+
): RegistrySupplier<DataComponentType<T>> {
79+
return REGISTER.register(name) {
80+
DataComponentType.builder<T>().persistent(codec).cacheEncoding()
81+
.networkSynchronized(streamCodec).build()
82+
}
6983
}
7084
}

common/src/main/java/generations/gg/generations/core/generationscore/common/world/item/curry/CurryData.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.cobblemon.mod.common.api.berry.Berry
44
import com.cobblemon.mod.common.api.berry.Flavor
55
import generations.gg.generations.core.generationscore.common.world.item.berry.BerryType
66
import generations.gg.generations.core.generationscore.common.world.level.block.entities.CookingPotBlockEntity
7+
import generations.gg.generations.core.generationscore.common.world.level.block.entities.CookingPotBlockEntity.Companion.getDominantFlavor
78
import generations.gg.generations.core.generationscore.common.world.level.block.entities.CookingPotBlockEntity.getDominantFlavor
89
import net.minecraft.nbt.CompoundTag
910
import net.minecraft.nbt.Tag

0 commit comments

Comments
 (0)