From 74f8e316b770810378dd2a364d2fdc7c66a1fc63 Mon Sep 17 00:00:00 2001 From: YuRaNnNzZZ Date: Mon, 23 Oct 2023 05:51:07 +0300 Subject: [PATCH] =?UTF-8?q?DBot=20=E2=80=94=2030.05.2023=209:49=20=D0=94?= =?UTF-8?q?=D0=B0=20=D0=9D=D0=BE=20=D0=B2=D1=81=D1=91=20=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=9D=D1=80=D0=B0=D0=B2=D0=B8=D1=82=D1=81=D1=8F?= =?UTF-8?q?=20=D0=BB=D0=B8=20=D1=82=D0=B5=D0=B1=D0=B5=20=D0=BA=D0=B0=D0=BF?= =?UTF-8?q?=D1=81=D1=83=D0=BB=D0=B0=20=D0=BE=D0=BF=D1=8B=D1=82=D0=B0=20?= =?UTF-8?q?=D0=9A=D0=B0=D0=BA=20=D0=BA=D0=BE=D0=BD=D1=86=D0=B5=D0=BF=D1=82?= =?UTF-8?q?=20YuRaNnNzZZ=20=E2=80=94=2030.05.2023=209:50=20=D0=B4=D0=B0=20?= =?UTF-8?q?=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20one=20small=20issue=20DB?= =?UTF-8?q?ot=20=E2=80=94=2030.05.2023=209:50=20=D0=AF=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8E=20?= =?UTF-8?q?=D0=B8=D0=B3=D1=80=D1=8B=20YuRaNnNzZZ=20=E2=80=94=2030.05.2023?= =?UTF-8?q?=209:50=20=D0=BE=D0=BD=D0=B0=20=D0=B3=D0=B5=D0=B9=D1=82=D0=B8?= =?UTF-8?q?=D1=82=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=82=20=D0=BE?= =?UTF-8?q?=D0=BF=D1=8B=D1=82=D0=B0=20=D0=B7=D0=B0=20=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=20=D0=BE=D0=BF=D1=8B=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mc/otm/datagen/lang/English.kt | 2 + .../mc/otm/datagen/lang/Russian.kt | 2 + .../mc/otm/item/EssenceCapsuleItem.kt | 66 +++++++++++++++++-- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 4 +- 4 files changed, 67 insertions(+), 7 deletions(-) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index c7cdbd1d1..224dae1f0 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -857,6 +857,8 @@ private fun gui(provider: MatteryLanguageProvider) { gui("essence_capsule", "(Almost) Everything you ever knew is within") gui("essence_capsule2", "This item can be recycled at Essence Servo") + gui("essence_capsule3", "Use to break free most of stored knowledge") + gui("essence_capsule.digital", "Use to scan memories stored within") gui("slot_filter.filtered", "This slot is filtered for automation") gui("slot_filter.forbidden", "This slot is forbidden for automation mechanisms") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 228ad6d08..4eb78a3d1 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -856,6 +856,8 @@ private fun gui(provider: MatteryLanguageProvider) { gui("essence_capsule", "(Почти) Всё, что вы знали, хранится внутри") gui("essence_capsule2", "Данный предмет может быть переработан внутри хранилища эссенции") + gui("essence_capsule3", "Используйте, чтобы высвободить большую часть хранящихся внутри знаний") + gui("essence_capsule.digital", "Используйте, чтобы вернуть ваши воспоминания") gui("slot_filter.filtered", "Данный слот отфильтрован для автоматизации") gui("slot_filter.forbidden", "Данный слот запрещён для взаимодействия средствами автоматизации") 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 8ba7a3c00..d7b6076db 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt @@ -2,11 +2,18 @@ package ru.dbotthepony.mc.otm.item import net.minecraft.ChatFormatting import net.minecraft.network.chat.Component -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.Rarity -import net.minecraft.world.item.TooltipFlag +import net.minecraft.server.level.ServerLevel +import net.minecraft.server.level.ServerPlayer +import net.minecraft.world.InteractionHand +import net.minecraft.world.InteractionResultHolder +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.Potions import net.minecraft.world.level.Level +import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.client.isShiftDown import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.core.TranslatableComponent @@ -15,12 +22,18 @@ import ru.dbotthepony.mc.otm.core.tagNotNull import ru.dbotthepony.mc.otm.core.util.getLevelFromXp import ru.dbotthepony.mc.otm.runIfClient -class EssenceCapsuleItem : Item(Properties().stacksTo(1).rarity(Rarity.UNCOMMON)) { +class EssenceCapsuleItem(private val digital: Boolean) : Item(Properties().stacksTo(1).rarity(Rarity.UNCOMMON)) { override fun appendHoverText(pStack: ItemStack, pLevel: Level?, pTooltipComponents: MutableList, pIsAdvanced: TooltipFlag) { super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced) pTooltipComponents.add(TranslatableComponent("otm.gui.essence_capsule").withStyle(ChatFormatting.DARK_GRAY)) pTooltipComponents.add(TranslatableComponent("otm.gui.essence_capsule2").withStyle(ChatFormatting.DARK_GRAY)) + if (!digital) { + pTooltipComponents.add(TranslatableComponent("otm.gui.essence_capsule3").withStyle(ChatFormatting.DARK_GRAY)) + } else if (runIfClient(false) { minecraft.player?.matteryPlayer?.isAndroid ?: false }) { + pTooltipComponents.add(TranslatableComponent("otm.gui.essence_capsule.digital").withStyle(ChatFormatting.DARK_GRAY)) + } + if (runIfClient(false) { minecraft.window.isShiftDown }) { pTooltipComponents.add(TranslatableComponent("otm.gui.experience", experienceStored(pStack)).withStyle(ChatFormatting.GRAY)) } else { @@ -28,6 +41,49 @@ class EssenceCapsuleItem : Item(Properties().stacksTo(1).rarity(Rarity.UNCOMMON) } } + override fun getUseAnimation(itemStack: ItemStack): UseAnim { + return if (digital) UseAnim.BOW else UseAnim.BRUSH + } + + override fun getUseDuration(itemStack: ItemStack): Int { + return if (digital) 20 else 30 + } + + override fun use(level: Level, player: Player, hand: InteractionHand): InteractionResultHolder { + if (!digital || player.matteryPlayer?.isAndroid == true) { + player.startUsingItem(hand) + + return InteractionResultHolder.consume(player.getItemInHand(hand)) + } + + return super.use(level, player, hand) + } + + 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 + if (digital) { + val mattery = player.matteryPlayer ?: return super.finishUsingItem(itemStack, level, player) + if (!mattery.isAndroid) return super.finishUsingItem(itemStack, level, player) + + if (player is ServerPlayer) { + player.giveExperiencePoints(exp.toInt()) + } + } else { + if (level is ServerLevel) { + level.levelEvent(2002, player.blockPosition(), PotionUtils.getColor(Potions.WATER)) + ExperienceOrb.award(level, player.position(), (exp * (.5 + level.random.nextFloat() * .25)).toInt()) + } + } + + if (!level.isClientSide && !player.abilities.instabuild) { + itemStack.shrink(1) + } + + return itemStack + } + fun make(experience: Long): ItemStack { return ItemStack(this, 1).also { setExperience(it, experience) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index 29da8121d..39e6f0dd3 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -230,8 +230,8 @@ object MItems { val TRITANIUM_BARS: BlockItem by registry.register(MNames.TRITANIUM_BARS) { BlockItem(MBlocks.TRITANIUM_BARS, DEFAULT_PROPERTIES) } val ESSENCE_SERVO: EssenceServoItem by registry.register("essence_servo") { EssenceServoItem() } - val ESSENCE_CAPSULE: EssenceCapsuleItem by registry.register("essence_capsule") { EssenceCapsuleItem() } - val ESSENCE_DRIVE: EssenceCapsuleItem by registry.register("essence_drive") { EssenceCapsuleItem() } + val ESSENCE_CAPSULE: EssenceCapsuleItem by registry.register("essence_capsule") { EssenceCapsuleItem(false) } + val ESSENCE_DRIVE: EssenceCapsuleItem by registry.register("essence_drive") { EssenceCapsuleItem(true) } val FLUID_CAPSULE: FluidCapsuleItem by registry.register("fluid_capsule") { FluidCapsuleItem(ItemsConfig::FLUID_CAPSULE_CAPACITY) } val FLUID_TANK: FluidTankItem by registry.register(MNames.FLUID_TANK) { FluidTankItem(MBlocks.FLUID_TANK, Item.Properties().stacksTo(1), ItemsConfig::FLUID_TANK_CAPACITY) }