diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt index 377eca58f..b4fbebd3b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt @@ -10,7 +10,7 @@ import net.minecraft.world.entity.ExperienceOrb import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.player.Player import net.minecraft.world.item.* -import net.minecraft.world.item.alchemy.PotionUtils +import net.minecraft.world.item.alchemy.PotionContents import net.minecraft.world.item.alchemy.Potions import net.minecraft.world.level.Level import ru.dbotthepony.mc.otm.capability.matteryPlayer @@ -18,13 +18,18 @@ import ru.dbotthepony.mc.otm.client.isShiftDown import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.nbt.set -import ru.dbotthepony.mc.otm.core.tagNotNull import ru.dbotthepony.mc.otm.core.util.getLevelFromXp +import ru.dbotthepony.mc.otm.registry.MDataComponentTypes import ru.dbotthepony.mc.otm.runIfClient class EssenceCapsuleItem(private val digital: Boolean) : MatteryItem(Properties().stacksTo(1).rarity(Rarity.UNCOMMON)) { - override fun appendHoverText(itemStack: ItemStack, level: Level?, components: MutableList, tooltipType: TooltipFlag) { - super.appendHoverText(itemStack, level, components, tooltipType) + override fun appendHoverText( + itemStack: ItemStack, + context: TooltipContext, + components: MutableList, + tooltipType: TooltipFlag + ) { + super.appendHoverText(itemStack, context, components, tooltipType) components.add(TranslatableComponent("otm.gui.essence_capsule").withStyle(ChatFormatting.DARK_GRAY)) components.add(TranslatableComponent("otm.gui.essence_capsule2").withStyle(ChatFormatting.DARK_GRAY)) @@ -35,9 +40,9 @@ class EssenceCapsuleItem(private val digital: Boolean) : MatteryItem(Properties( } if (runIfClient(false) { minecraft.window.isShiftDown }) { - components.add(TranslatableComponent("otm.gui.experience", experienceStored(itemStack)).withStyle(ChatFormatting.GRAY)) + components.add(TranslatableComponent("otm.gui.experience", itemStack.getOrDefault(MDataComponentTypes.EXPERIENCE, 0L)).withStyle(ChatFormatting.GRAY)) } else { - components.add(TranslatableComponent("otm.gui.experience_levels", getLevelFromXp(experienceStored(itemStack))).withStyle(ChatFormatting.GRAY)) + components.add(TranslatableComponent("otm.gui.experience_levels", getLevelFromXp(itemStack.getOrDefault(MDataComponentTypes.EXPERIENCE, 0L))).withStyle(ChatFormatting.GRAY)) } } @@ -45,12 +50,12 @@ class EssenceCapsuleItem(private val digital: Boolean) : MatteryItem(Properties( return if (digital) UseAnim.BOW else UseAnim.BRUSH } - override fun getUseDuration(itemStack: ItemStack): Int { + override fun getUseDuration(itemStack: ItemStack, p_344979_: LivingEntity): Int { return if (digital) 20 else 30 } override fun use(level: Level, player: Player, hand: InteractionHand): InteractionResultHolder { - if (!digital || player.matteryPlayer?.isAndroid == true) { + if (!digital || player.matteryPlayer.isAndroid) { player.startUsingItem(hand) return InteractionResultHolder.consume(player.getItemInHand(hand)) @@ -62,9 +67,10 @@ class EssenceCapsuleItem(private val digital: Boolean) : MatteryItem(Properties( override fun finishUsingItem(itemStack: ItemStack, level: Level, player: LivingEntity): ItemStack { if (player !is Player) return super.finishUsingItem(itemStack, level, player) - val exp = experienceStored(itemStack) / itemStack.count + val exp = itemStack.getOrDefault(MDataComponentTypes.EXPERIENCE, 0L) / itemStack.count + if (digital) { - val mattery = player.matteryPlayer ?: return super.finishUsingItem(itemStack, level, player) + val mattery = player.matteryPlayer if (!mattery.isAndroid) return super.finishUsingItem(itemStack, level, player) if (player is ServerPlayer) { @@ -72,7 +78,7 @@ class EssenceCapsuleItem(private val digital: Boolean) : MatteryItem(Properties( } } else { if (level is ServerLevel) { - level.levelEvent(2002, player.blockPosition(), PotionUtils.getColor(Potions.WATER)) + level.levelEvent(2002, player.blockPosition(), PotionContents.getColor(Potions.WATER)) ExperienceOrb.award(level, player.position(), (exp * (.5 + level.random.nextFloat() * .25)).toInt()) } } @@ -86,19 +92,7 @@ class EssenceCapsuleItem(private val digital: Boolean) : MatteryItem(Properties( fun make(experience: Long): ItemStack { return ItemStack(this, 1).also { - setExperience(it, experience) - } - } - - companion object { - @JvmStatic - fun setExperience(itemStack: ItemStack, experience: Long) { - itemStack.tagNotNull["experience"] = experience - } - - @JvmStatic - fun experienceStored(itemStack: ItemStack): Long { - return (itemStack.tag?.getLong("experience") ?: 0L) * itemStack.count + it[MDataComponentTypes.EXPERIENCE] = experience } } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDataComponentTypes.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDataComponentTypes.kt index fe7fd3a45..358bc7a4f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDataComponentTypes.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDataComponentTypes.kt @@ -56,6 +56,8 @@ object MDataComponentTypes { val PATTERNS: DataComponentType> by registry.register("patterns") { DataComponentType.builder>().persistent(Codec.list(PatternState.CODEC)).build() } val ITEM_FILTER: DataComponentType by registry.register("item_filter") { DataComponentType.builder().persistent(ItemFilter.CODEC).build() } + val EXPERIENCE: DataComponentType by registry.register("experience") { DataComponentType.builder().persistent(Codec.LONG).networkSynchronized(StreamCodecs.LONG).build() } + val PRIMED by registry.register("primed") { object : DataComponentType { override fun codec(): Codec {