essence storage mending repair (with automation)
This commit is contained in:
parent
8dcf484362
commit
6d21760621
@ -5,8 +5,10 @@ import net.minecraft.world.entity.player.Inventory
|
|||||||
import net.minecraft.world.entity.player.Player
|
import net.minecraft.world.entity.player.Player
|
||||||
import net.minecraft.world.inventory.AbstractContainerMenu
|
import net.minecraft.world.inventory.AbstractContainerMenu
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
|
import net.minecraft.world.item.enchantment.Enchantments
|
||||||
import net.minecraft.world.level.block.state.BlockState
|
import net.minecraft.world.level.block.state.BlockState
|
||||||
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
|
||||||
|
import ru.dbotthepony.mc.otm.capability.CombinedItemHandler
|
||||||
import ru.dbotthepony.mc.otm.container.HandlerFilter
|
import ru.dbotthepony.mc.otm.container.HandlerFilter
|
||||||
import ru.dbotthepony.mc.otm.container.MatteryContainer
|
import ru.dbotthepony.mc.otm.container.MatteryContainer
|
||||||
import ru.dbotthepony.mc.otm.item.EssenceCapsuleItem
|
import ru.dbotthepony.mc.otm.item.EssenceCapsuleItem
|
||||||
@ -23,11 +25,13 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma
|
|||||||
|
|
||||||
val capsuleContainer = MatteryContainer(::markDirtyFast, 1)
|
val capsuleContainer = MatteryContainer(::markDirtyFast, 1)
|
||||||
val servoContainer = MatteryContainer(::markDirtyFast, 1)
|
val servoContainer = MatteryContainer(::markDirtyFast, 1)
|
||||||
|
val mendingContainer = MatteryContainer(::markDirtyFast, 1).also(::addDroppableContainer)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
savetables.long(::experienceStored)
|
savetables.long(::experienceStored)
|
||||||
savetables.stateful(::capsuleContainer)
|
savetables.stateful(::capsuleContainer)
|
||||||
savetables.stateful(::servoContainer)
|
savetables.stateful(::servoContainer)
|
||||||
|
savetables.stateful(::mendingContainer)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu {
|
override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu {
|
||||||
@ -35,11 +39,22 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma
|
|||||||
}
|
}
|
||||||
|
|
||||||
val itemConfig = ConfigurableItemHandler(
|
val itemConfig = ConfigurableItemHandler(
|
||||||
input = capsuleContainer.handler(HandlerFilter.OnlyIn.and(object : HandlerFilter {
|
inputOutput = CombinedItemHandler(
|
||||||
|
capsuleContainer.handler(HandlerFilter.OnlyIn.and(object : HandlerFilter {
|
||||||
override fun canInsert(slot: Int, stack: ItemStack): Boolean {
|
override fun canInsert(slot: Int, stack: ItemStack): Boolean {
|
||||||
return stack.item is EssenceCapsuleItem
|
return stack.item is EssenceCapsuleItem
|
||||||
}
|
}
|
||||||
}))
|
})),
|
||||||
|
mendingContainer.handler(object : HandlerFilter {
|
||||||
|
override fun canInsert(slot: Int, stack: ItemStack): Boolean {
|
||||||
|
return stack.isDamaged && stack.getEnchantmentLevel(Enchantments.MENDING) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun canExtract(slot: Int, amount: Int, stack: ItemStack): Boolean {
|
||||||
|
return !stack.isDamaged || experienceStored <= 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun tick() {
|
override fun tick() {
|
||||||
@ -52,6 +67,23 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma
|
|||||||
experienceStored += EssenceCapsuleItem.experienceStored(capsule)
|
experienceStored += EssenceCapsuleItem.experienceStored(capsule)
|
||||||
capsuleContainer.clearContent()
|
capsuleContainer.clearContent()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val repairStack = mendingContainer[0]
|
||||||
|
|
||||||
|
if (!repairStack.isEmpty && repairStack.isDamaged) {
|
||||||
|
if (experienceStored > 0) {
|
||||||
|
val dmgPerExp = repairStack.xpRepairRatio
|
||||||
|
var repairPoints = dmgPerExp.toInt()
|
||||||
|
|
||||||
|
val diff = dmgPerExp - repairPoints.toFloat()
|
||||||
|
if (diff > 0f) {
|
||||||
|
repairPoints += if ((level?.random?.nextFloat() ?: 1f) <= diff) 1 else 0
|
||||||
|
}
|
||||||
|
|
||||||
|
experienceStored -= 1
|
||||||
|
repairStack.damageValue -= repairPoints
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import net.minecraft.client.gui.GuiGraphics
|
|||||||
import net.minecraft.network.chat.Component
|
import net.minecraft.network.chat.Component
|
||||||
import net.minecraft.resources.ResourceLocation
|
import net.minecraft.resources.ResourceLocation
|
||||||
import net.minecraft.world.entity.player.Inventory
|
import net.minecraft.world.entity.player.Inventory
|
||||||
|
import net.minecraft.world.item.enchantment.Enchantments
|
||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||||
import ru.dbotthepony.mc.otm.client.isShiftDown
|
import ru.dbotthepony.mc.otm.client.isShiftDown
|
||||||
import ru.dbotthepony.mc.otm.client.playGuiClickSound
|
import ru.dbotthepony.mc.otm.client.playGuiClickSound
|
||||||
@ -267,6 +268,11 @@ class EssenceStorageScreen(menu: EssenceStorageMenu, inventory: Inventory, title
|
|||||||
set(value) {}
|
set(value) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SlotPanel(this, inputs, menu.mendingSlot).also {
|
||||||
|
it.dock = Dock.LEFT
|
||||||
|
it.tooltips.add(Enchantments.MENDING.getFullname(1).copy().withStyle(ChatFormatting.GRAY))
|
||||||
|
}
|
||||||
|
|
||||||
makeDeviceControls(this, frame, redstoneConfig = menu.redstoneConfig, itemConfig = menu.itemConfig)
|
makeDeviceControls(this, frame, redstoneConfig = menu.redstoneConfig, itemConfig = menu.itemConfig)
|
||||||
|
|
||||||
return frame
|
return frame
|
||||||
|
@ -4,6 +4,7 @@ import net.minecraft.server.level.ServerPlayer
|
|||||||
import net.minecraft.world.SimpleContainer
|
import net.minecraft.world.SimpleContainer
|
||||||
import net.minecraft.world.entity.player.Inventory
|
import net.minecraft.world.entity.player.Inventory
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
|
import net.minecraft.world.item.enchantment.Enchantments
|
||||||
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
|
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
|
||||||
import ru.dbotthepony.mc.otm.block.entity.tech.EssenceStorageBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.tech.EssenceStorageBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.capability.matteryPlayer
|
import ru.dbotthepony.mc.otm.capability.matteryPlayer
|
||||||
@ -38,6 +39,12 @@ class EssenceStorageMenu @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val mendingSlot = object : MatterySlot(tile?.mendingContainer ?: SimpleContainer(1), 0) {
|
||||||
|
override fun mayPlace(itemStack: ItemStack): Boolean {
|
||||||
|
return itemStack.isDamaged && itemStack.getEnchantmentLevel(Enchantments.MENDING) > 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val storeLevels = intInput {
|
val storeLevels = intInput {
|
||||||
if (it > 0) {
|
if (it > 0) {
|
||||||
val ply = player as ServerPlayer
|
val ply = player as ServerPlayer
|
||||||
@ -99,6 +106,7 @@ class EssenceStorageMenu @JvmOverloads constructor(
|
|||||||
|
|
||||||
addStorageSlot(capsuleSlot)
|
addStorageSlot(capsuleSlot)
|
||||||
addStorageSlot(servoSlot)
|
addStorageSlot(servoSlot)
|
||||||
|
addStorageSlot(mendingSlot)
|
||||||
addInventorySlots()
|
addInventorySlots()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user