Update essence capsule

This commit is contained in:
DBotThePony 2024-08-13 13:41:22 +07:00
parent 4a66015d78
commit e513bb8a8f
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 20 additions and 24 deletions

View File

@ -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<Component>, tooltipType: TooltipFlag) {
super.appendHoverText(itemStack, level, components, tooltipType)
override fun appendHoverText(
itemStack: ItemStack,
context: TooltipContext,
components: MutableList<Component>,
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<ItemStack> {
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
}
}
}

View File

@ -56,6 +56,8 @@ object MDataComponentTypes {
val PATTERNS: DataComponentType<List<PatternState>> by registry.register("patterns") { DataComponentType.builder<List<PatternState>>().persistent(Codec.list(PatternState.CODEC)).build() }
val ITEM_FILTER: DataComponentType<ItemFilter> by registry.register("item_filter") { DataComponentType.builder<ItemFilter>().persistent(ItemFilter.CODEC).build() }
val EXPERIENCE: DataComponentType<Long> by registry.register("experience") { DataComponentType.builder<Long>().persistent(Codec.LONG).networkSynchronized(StreamCodecs.LONG).build() }
val PRIMED by registry.register("primed") {
object : DataComponentType<Boolean> {
override fun codec(): Codec<Boolean> {