Use SlottedContainer in Essense Storage
This commit is contained in:
parent
847ec81928
commit
17e4856b10
@ -23,8 +23,12 @@ import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
|
||||
import ru.dbotthepony.mc.otm.block.tech.EssenceStorageBlock
|
||||
import ru.dbotthepony.mc.otm.capability.item.CombinedItemHandler
|
||||
import ru.dbotthepony.mc.otm.config.MachinesConfig
|
||||
import ru.dbotthepony.mc.otm.container.EnhancedContainer
|
||||
import ru.dbotthepony.mc.otm.container.HandlerFilter
|
||||
import ru.dbotthepony.mc.otm.container.MatteryContainer
|
||||
import ru.dbotthepony.mc.otm.container.slotted.ContainerSlot
|
||||
import ru.dbotthepony.mc.otm.container.slotted.FilteredContainerSlot
|
||||
import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
|
||||
import ru.dbotthepony.mc.otm.core.getEntitiesInEllipsoid
|
||||
import ru.dbotthepony.mc.otm.core.lookupOrThrow
|
||||
import ru.dbotthepony.mc.otm.core.math.Vector
|
||||
@ -45,9 +49,29 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma
|
||||
markDirtyFast()
|
||||
}
|
||||
|
||||
val capsuleContainer = MatteryContainer(::markDirtyFast, 1)
|
||||
val servoContainer = MatteryContainer(::markDirtyFast, 1)
|
||||
val mendingContainer = MatteryContainer(::markDirtyFast, 1).also(::addDroppableContainer)
|
||||
private class CapsuleSlot(container: SlottedContainer, slot: Int) : ContainerSlot(container, slot) {
|
||||
override fun canAutomationPlaceItem(itemStack: ItemStack): Boolean {
|
||||
return super.canAutomationPlaceItem(itemStack) && itemStack.item is EssenceCapsuleItem
|
||||
}
|
||||
|
||||
override fun canAutomationTakeItem(desired: Int): Boolean {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
private inner class MendingSlot(container: SlottedContainer, slot: Int) : FilteredContainerSlot(container, slot) {
|
||||
override fun canAutomationPlaceItem(itemStack: ItemStack): Boolean {
|
||||
return super.canAutomationPlaceItem(itemStack) && itemStack.isDamaged && itemStack.getEnchantmentLevel(mending!!) > 0
|
||||
}
|
||||
|
||||
override fun canAutomationTakeItem(desired: Int): Boolean {
|
||||
return super.canAutomationTakeItem(desired) && (!item.isDamaged || experienceStored <= 0)
|
||||
}
|
||||
}
|
||||
|
||||
val capsuleContainer = SlottedContainer.simple(1, ::CapsuleSlot, ::markDirtyFast)
|
||||
val servoContainer = EnhancedContainer.withListener(1, ::markDirtyFast)
|
||||
val mendingContainer = SlottedContainer.simple(1, ::MendingSlot, ::markDirtyFast).also(::addDroppableContainer)
|
||||
|
||||
private var mending: Holder<Enchantment>? = null
|
||||
|
||||
@ -63,22 +87,7 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma
|
||||
}
|
||||
|
||||
val itemConfig = ConfigurableItemHandler(
|
||||
inputOutput = CombinedItemHandler(
|
||||
capsuleContainer.handler(HandlerFilter.OnlyIn.and(object : HandlerFilter {
|
||||
override fun canInsert(slot: Int, stack: ItemStack): Boolean {
|
||||
return stack.item is EssenceCapsuleItem
|
||||
}
|
||||
})),
|
||||
mendingContainer.handler(object : HandlerFilter {
|
||||
override fun canInsert(slot: Int, stack: ItemStack): Boolean {
|
||||
return stack.isDamaged && stack.getEnchantmentLevel(mending!!) > 0
|
||||
}
|
||||
|
||||
override fun canExtract(slot: Int, amount: Int, stack: ItemStack): Boolean {
|
||||
return !stack.isDamaged || experienceStored <= 0
|
||||
}
|
||||
})
|
||||
)
|
||||
inputOutput = CombinedItemHandler(capsuleContainer, mendingContainer)
|
||||
)
|
||||
|
||||
override fun loadAdditional(nbt: CompoundTag, registry: HolderLookup.Provider) {
|
||||
|
@ -21,6 +21,7 @@ import ru.dbotthepony.mc.otm.client.screen.panels.button.ButtonPanel
|
||||
import ru.dbotthepony.mc.otm.client.screen.panels.button.makeDeviceControls
|
||||
import ru.dbotthepony.mc.otm.client.screen.panels.input.TextInputPanel
|
||||
import ru.dbotthepony.mc.otm.client.screen.panels.slot.SlotPanel
|
||||
import ru.dbotthepony.mc.otm.client.screen.panels.slot.UserFilteredSlotPanel
|
||||
import ru.dbotthepony.mc.otm.client.screen.panels.util.HorizontalStripPanel
|
||||
import ru.dbotthepony.mc.otm.core.ResourceLocation
|
||||
import ru.dbotthepony.mc.otm.core.TextComponent
|
||||
@ -279,7 +280,7 @@ class EssenceStorageScreen(menu: EssenceStorageMenu, inventory: Inventory, title
|
||||
get() = SET_EXACT
|
||||
|
||||
override fun onClick(mouseButton: Int) {
|
||||
val player = minecraft!!.player!! ?: return
|
||||
val player = minecraft!!.player!!
|
||||
|
||||
if (player.experienceLevel == customDispense) {
|
||||
if (player.experienceProgress > 0f) {
|
||||
@ -297,7 +298,7 @@ class EssenceStorageScreen(menu: EssenceStorageMenu, inventory: Inventory, title
|
||||
set(_) {}
|
||||
}
|
||||
|
||||
SlotPanel(this, inputs, menu.mendingSlot).also {
|
||||
UserFilteredSlotPanel(this, inputs, menu.mendingSlot).also {
|
||||
it.dock = Dock.LEFT
|
||||
it.tooltips.add(TranslatableComponent("enchantment.minecraft.mending").withStyle(ChatFormatting.GRAY))
|
||||
}
|
||||
|
@ -186,5 +186,14 @@ open class EnhancedContainer(private val size: Int) : IEnhancedContainer, INBTSe
|
||||
|
||||
companion object {
|
||||
private val LOGGER = LogManager.getLogger()
|
||||
|
||||
fun withListener(slots: Int, listener: Runnable): EnhancedContainer {
|
||||
return object : EnhancedContainer(slots) {
|
||||
override fun notifySlotChanged(slot: Int, old: ItemStack) {
|
||||
super.notifySlotChanged(slot, old)
|
||||
listener.run()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,11 +9,14 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper
|
||||
import ru.dbotthepony.kommons.util.getValue
|
||||
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
|
||||
import ru.dbotthepony.mc.otm.block.entity.tech.EssenceStorageBlockEntity
|
||||
import ru.dbotthepony.mc.otm.container.EnhancedContainer
|
||||
import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
|
||||
import ru.dbotthepony.mc.otm.core.util.getTotalXpRequiredForLevel
|
||||
import ru.dbotthepony.mc.otm.item.consumables.EssenceCapsuleItem
|
||||
import ru.dbotthepony.mc.otm.item.EssenceServoItem
|
||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu
|
||||
import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
|
||||
import ru.dbotthepony.mc.otm.menu.UserFilteredMenuSlot
|
||||
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
|
||||
import ru.dbotthepony.mc.otm.menu.input.FluidConfigPlayerInput
|
||||
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
|
||||
@ -31,19 +34,19 @@ class EssenceStorageMenu(
|
||||
val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig)
|
||||
val fluidConfig = FluidConfigPlayerInput(this, tile?.fluidConfig)
|
||||
|
||||
val capsuleSlot = object : MatteryMenuSlot(tile?.capsuleContainer ?: SimpleContainer(1), 0) {
|
||||
val capsuleSlot = object : MatteryMenuSlot(tile?.capsuleContainer ?: EnhancedContainer(1), 0) {
|
||||
override fun mayPlace(itemStack: ItemStack): Boolean {
|
||||
return itemStack.item is EssenceCapsuleItem && super.mayPlace(itemStack)
|
||||
}
|
||||
}
|
||||
|
||||
val servoSlot = object : MatteryMenuSlot(tile?.servoContainer ?: SimpleContainer(1), 0) {
|
||||
val servoSlot = object : MatteryMenuSlot(tile?.servoContainer ?: EnhancedContainer(1), 0) {
|
||||
override fun mayPlace(itemStack: ItemStack): Boolean {
|
||||
return itemStack.item == MItems.ESSENCE_SERVO && super.mayPlace(itemStack)
|
||||
}
|
||||
}
|
||||
|
||||
val mendingSlot = object : MatteryMenuSlot(tile?.mendingContainer ?: SimpleContainer(1), 0) {
|
||||
val mendingSlot = object : UserFilteredMenuSlot(tile?.mendingContainer ?: SlottedContainer.filtered(1), 0) {
|
||||
override fun mayPlace(itemStack: ItemStack): Boolean {
|
||||
return itemStack.isDamaged && EnchantmentHelper.has(itemStack, EnchantmentEffectComponents.REPAIR_WITH_XP)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user