DBot — 30.05.2023 9:49

Да
Но всё равно
Нравится ли тебе капсула опыта
Как концепт
YuRaNnNzZZ — 30.05.2023 9:50
да
только one small issue
DBot — 30.05.2023 9:50
Я не про версию игры
YuRaNnNzZZ — 30.05.2023 9:50
она гейтит возврат опыта за танком опыта
This commit is contained in:
YuRaNnNzZZ 2023-10-23 05:51:07 +03:00
parent 294a402447
commit 74f8e316b7
Signed by: YuRaNnNzZZ
GPG Key ID: 5F71738C85A6006D
4 changed files with 67 additions and 7 deletions

View File

@ -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")

View File

@ -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", "Данный слот запрещён для взаимодействия средствами автоматизации")

View File

@ -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<Component>, 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<ItemStack> {
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)

View File

@ -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) }