Rename "MatteryMenu" to "MatteryMenuSlot", along with all other slot classes to include "menu" in their name

This commit is contained in:
DBotThePony 2025-02-28 22:11:11 +07:00
parent f79b49d422
commit 1702f95370
Signed by: DBot
GPG Key ID: DCC23B5715498507
39 changed files with 156 additions and 171 deletions

View File

@ -10,13 +10,10 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.inventory.Slot import net.minecraft.world.inventory.Slot
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.neoforged.neoforge.client.event.ContainerScreenEvent import net.neoforged.neoforge.client.event.ContainerScreenEvent
import net.neoforged.neoforge.common.NeoForge import net.neoforged.neoforge.common.NeoForge
import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL11
import ru.dbotthepony.kommons.util.getValue
import ru.dbotthepony.kommons.util.setValue
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.render.MGUIGraphics
import ru.dbotthepony.mc.otm.client.moveMousePosScaled import ru.dbotthepony.mc.otm.client.moveMousePosScaled
@ -49,7 +46,7 @@ import ru.dbotthepony.mc.otm.core.math.component1
import ru.dbotthepony.mc.otm.core.math.component2 import ru.dbotthepony.mc.otm.core.math.component2
import ru.dbotthepony.mc.otm.core.math.integerDivisionDown import ru.dbotthepony.mc.otm.core.math.integerDivisionDown
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget
import java.util.* import java.util.*
@ -407,7 +404,7 @@ abstract class MatteryScreen<T : MatteryMenu>(menu: T, inventory: Inventory, tit
matter: LevelGaugeWidget? = null, matter: LevelGaugeWidget? = null,
profiledMatter: ProfiledLevelGaugeWidget<*>? = null, profiledMatter: ProfiledLevelGaugeWidget<*>? = null,
patterns: LevelGaugeWidget? = null, patterns: LevelGaugeWidget? = null,
batterySlot: MatterySlot? = null, batterySlot: MatteryMenuSlot? = null,
) { ) {
var bars = 0 var bars = 0
if (energy != null) bars++ if (energy != null) bars++

View File

@ -60,7 +60,7 @@ open class PlayerEquipmentPanel<S : MatteryScreen<*>>(
parent: EditablePanel<*>?, parent: EditablePanel<*>?,
x: Float = 0f, x: Float = 0f,
y: Float = 0f, y: Float = 0f,
val armorSlots: List<PlayerSlot<MatteryMenu.EquipmentSlot, Slot>> val armorSlots: List<PlayerSlot<MatteryMenu.EquipmentMenuSlot, Slot>>
) : EditablePanel<S>(screen, parent, x, y, height = HEIGHT, width = WIDTH) { ) : EditablePanel<S>(screen, parent, x, y, height = HEIGHT, width = WIDTH) {
val armorSlotsStrip = EditablePanel(screen, this, width = AbstractSlotPanel.SIZE) val armorSlotsStrip = EditablePanel(screen, this, width = AbstractSlotPanel.SIZE)
val entityPanel = EntityRendererPanel(screen, this, minecraft.player!!) val entityPanel = EntityRendererPanel(screen, this, minecraft.player!!)

View File

@ -2,11 +2,9 @@ package ru.dbotthepony.mc.otm.client.screen.panels.button
import com.mojang.blaze3d.platform.InputConstants import com.mojang.blaze3d.platform.InputConstants
import net.minecraft.ChatFormatting import net.minecraft.ChatFormatting
import net.minecraft.client.gui.screens.Screen
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import ru.dbotthepony.kommons.math.RGBAColor
import ru.dbotthepony.kommons.util.Delegate import ru.dbotthepony.kommons.util.Delegate
import ru.dbotthepony.kommons.util.value import ru.dbotthepony.kommons.util.value
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
@ -21,7 +19,6 @@ import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.client.render.IGUIRenderable import ru.dbotthepony.mc.otm.client.render.IGUIRenderable
import ru.dbotthepony.mc.otm.client.render.sprites.AbstractMatterySprite import ru.dbotthepony.mc.otm.client.render.sprites.AbstractMatterySprite
import ru.dbotthepony.mc.otm.client.render.ItemStackIcon import ru.dbotthepony.mc.otm.client.render.ItemStackIcon
import ru.dbotthepony.mc.otm.client.render.UVWindingOrder
import ru.dbotthepony.mc.otm.client.render.Widgets18 import ru.dbotthepony.mc.otm.client.render.Widgets18
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
import ru.dbotthepony.mc.otm.client.screen.panels.Dock import ru.dbotthepony.mc.otm.client.screen.panels.Dock
@ -39,7 +36,7 @@ import ru.dbotthepony.mc.otm.core.math.RelativeSide
import ru.dbotthepony.mc.otm.core.util.ItemStackSorter import ru.dbotthepony.mc.otm.core.util.ItemStackSorter
import ru.dbotthepony.mc.otm.core.util.getLevelFromXp import ru.dbotthepony.mc.otm.core.util.getLevelFromXp
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.UpgradeSlots import ru.dbotthepony.mc.otm.menu.UpgradeSlots
import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
@ -570,7 +567,7 @@ class DeviceControls<out S : MatteryScreen<*>>(
val grid = GridPanel(screen, frame, columns = columns, rows = rows) val grid = GridPanel(screen, frame, columns = columns, rows = rows)
for (slot in upgrades.slots) { for (slot in upgrades.slots) {
object : SlotPanel<S, MatterySlot>(screen, grid, slot) { object : SlotPanel<S, MatteryMenuSlot>(screen, grid, slot) {
override val cursorType: CursorType override val cursorType: CursorType
get() = if (upgrades.areLocked.get()) CursorType.NOT_ALLOWED else super.cursorType get() = if (upgrades.areLocked.get()) CursorType.NOT_ALLOWED else super.cursorType
} }

View File

@ -8,9 +8,9 @@ import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel
import ru.dbotthepony.mc.otm.container.IFilteredContainerSlot import ru.dbotthepony.mc.otm.container.IFilteredContainerSlot
import ru.dbotthepony.mc.otm.container.util.containerSlot import ru.dbotthepony.mc.otm.container.util.containerSlot
import ru.dbotthepony.mc.otm.menu.UserFilteredSlot import ru.dbotthepony.mc.otm.menu.UserFilteredMenuSlot
open class UserFilteredSlotPanel<out S : MatteryScreen<*>, out T : UserFilteredSlot>( open class UserFilteredSlotPanel<out S : MatteryScreen<*>, out T : UserFilteredMenuSlot>(
screen: S, screen: S,
parent: EditablePanel<*>?, parent: EditablePanel<*>?,
slot: T, slot: T,

View File

@ -6,7 +6,6 @@ import lain.mods.cos.impl.client.PlayerRenderHandler
import lain.mods.cos.impl.client.gui.GuiCosArmorInventory import lain.mods.cos.impl.client.gui.GuiCosArmorInventory
import lain.mods.cos.impl.network.payload.PayloadSetSkinArmor import lain.mods.cos.impl.network.payload.PayloadSetSkinArmor
import net.minecraft.client.gui.screens.Screen import net.minecraft.client.gui.screens.Screen
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.Container import net.minecraft.world.Container
@ -20,9 +19,6 @@ import net.neoforged.neoforge.network.PacketDistributor
import ru.dbotthepony.kommons.math.RGBAColor import ru.dbotthepony.kommons.math.RGBAColor
import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.render.MGUIGraphics
import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.client.render.IGUIRenderable
import ru.dbotthepony.mc.otm.client.render.UVWindingOrder
import ru.dbotthepony.mc.otm.client.render.sprites.MatterySprite
import ru.dbotthepony.mc.otm.client.render.sprites.sprite import ru.dbotthepony.mc.otm.client.render.sprites.sprite
import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel
import ru.dbotthepony.mc.otm.client.screen.panels.button.ButtonPanel import ru.dbotthepony.mc.otm.client.screen.panels.button.ButtonPanel
@ -32,7 +28,7 @@ import ru.dbotthepony.mc.otm.container.util.awareStream
import ru.dbotthepony.mc.otm.container.util.iterator import ru.dbotthepony.mc.otm.container.util.iterator
import ru.dbotthepony.mc.otm.core.collect.AwareItemStack import ru.dbotthepony.mc.otm.core.collect.AwareItemStack
import ru.dbotthepony.mc.otm.core.collect.emptyIterator import ru.dbotthepony.mc.otm.core.collect.emptyIterator
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import java.util.stream.Stream import java.util.stream.Stream
val isCosmeticArmorLoaded by lazy { val isCosmeticArmorLoaded by lazy {
@ -47,7 +43,7 @@ val Player.cosmeticArmorSlots: Map<EquipmentSlot, Slot>? get() {
return cosmeticArmorSlotsImpl return cosmeticArmorSlotsImpl
} }
private class CosmeticSlot(container: Container, private val slot: EquipmentSlot, private val player: Player) : MatterySlot(container, when (slot) { private class CosmeticMenuSlot(container: Container, private val slot: EquipmentSlot, private val player: Player) : MatteryMenuSlot(container, when (slot) {
EquipmentSlot.FEET -> 0 EquipmentSlot.FEET -> 0
EquipmentSlot.LEGS -> 1 EquipmentSlot.LEGS -> 1
EquipmentSlot.CHEST -> 2 EquipmentSlot.CHEST -> 2
@ -127,10 +123,10 @@ private val Player.cosmeticArmorSlotsImpl: Map<EquipmentSlot, Slot>? get() {
} }
return mapOf( return mapOf(
EquipmentSlot.HEAD to CosmeticSlot(container, EquipmentSlot.HEAD, this), EquipmentSlot.HEAD to CosmeticMenuSlot(container, EquipmentSlot.HEAD, this),
EquipmentSlot.CHEST to CosmeticSlot(container, EquipmentSlot.CHEST, this), EquipmentSlot.CHEST to CosmeticMenuSlot(container, EquipmentSlot.CHEST, this),
EquipmentSlot.LEGS to CosmeticSlot(container, EquipmentSlot.LEGS, this), EquipmentSlot.LEGS to CosmeticMenuSlot(container, EquipmentSlot.LEGS, this),
EquipmentSlot.FEET to CosmeticSlot(container, EquipmentSlot.FEET, this), EquipmentSlot.FEET to CosmeticMenuSlot(container, EquipmentSlot.FEET, this),
) )
} }

View File

@ -22,7 +22,7 @@ import ru.dbotthepony.mc.otm.capability.MatteryPlayer
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.core.ResourceLocation import ru.dbotthepony.mc.otm.core.ResourceLocation
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import java.util.* import java.util.*
private val menuConfigurations = WeakHashMap<AbstractContainerMenu, MenuConfiguration>() private val menuConfigurations = WeakHashMap<AbstractContainerMenu, MenuConfiguration>()
@ -47,9 +47,9 @@ private class MenuConfiguration(
for (i in 0 .. 8) { for (i in 0 .. 8) {
if (matteryPlayer.exopackContainer.containerSize > i + offset) { if (matteryPlayer.exopackContainer.containerSize > i + offset) {
row.add(MatterySlot(matteryPlayer.exopackContainer, i + offset)) row.add(MatteryMenuSlot(matteryPlayer.exopackContainer, i + offset))
} else { } else {
row.add(FakeSlot()) row.add(FakeMenuSlot())
} }
} }
@ -150,7 +150,7 @@ private class MenuConfiguration(
} }
} }
private class FakeSlot : MatterySlot(SimpleContainer(1), 0, 0, 0) { private class FakeMenuSlot : MatteryMenuSlot(SimpleContainer(1), 0, 0, 0) {
override fun mayPickup(player: Player): Boolean { override fun mayPickup(player: Player): Boolean {
return false return false
} }

View File

@ -11,7 +11,7 @@ import net.neoforged.bus.api.IEventBus
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.makeSlots import ru.dbotthepony.mc.otm.menu.makeSlots
import ru.dbotthepony.mc.otm.registry.MDeferredRegister import ru.dbotthepony.mc.otm.registry.MDeferredRegister
@ -20,7 +20,7 @@ class MatteryChestMenu(
inventory: Inventory, val rows: Int, val columns: Int, inventory: Inventory, val rows: Int, val columns: Int,
val container: Container = SimpleContainer(rows * columns) val container: Container = SimpleContainer(rows * columns)
) : MatteryMenu(type, containerId, inventory) { ) : MatteryMenu(type, containerId, inventory) {
val chestSlots = makeSlots(container, ::MatterySlot) val chestSlots = makeSlots(container, ::MatteryMenuSlot)
val sort = SortInput(container, playerSortSettings) val sort = SortInput(container, playerSortSettings)
init { init {

View File

@ -21,7 +21,7 @@ import ru.dbotthepony.mc.otm.network.ExopackSlotPacket
class ExopackInventoryMenu(val capability: MatteryPlayer) : MatteryMenu(null, CONTAINER_ID, capability.ply.inventory) { class ExopackInventoryMenu(val capability: MatteryPlayer) : MatteryMenu(null, CONTAINER_ID, capability.ply.inventory) {
val craftingGrid: CraftingContainer val craftingGrid: CraftingContainer
val craftingSlots: List<MatterySlot> val craftingSlots: List<MatteryMenuSlot>
init { init {
if (capability.isExopackCraftingUpgraded) { if (capability.isExopackCraftingUpgraded) {
@ -30,10 +30,10 @@ class ExopackInventoryMenu(val capability: MatteryPlayer) : MatteryMenu(null, CO
craftingGrid = TransientCraftingContainer(this, 2, 2) craftingGrid = TransientCraftingContainer(this, 2, 2)
} }
val builder = ImmutableList.builder<MatterySlot>() val builder = ImmutableList.builder<MatteryMenuSlot>()
for (i in 0 until craftingGrid.containerSize) { for (i in 0 until craftingGrid.containerSize) {
builder.add(MatterySlot(craftingGrid, i)) builder.add(MatteryMenuSlot(craftingGrid, i))
} }
craftingSlots = builder.build() craftingSlots = builder.build()
@ -91,16 +91,16 @@ class ExopackInventoryMenu(val capability: MatteryPlayer) : MatteryMenu(null, CO
} }
} }
val furnaceInputs: List<MatterySlot> = capability.smelters.map { val furnaceInputs: List<MatteryMenuSlot> = capability.smelters.map {
object : MatterySlot(it.input, 0) { object : MatteryMenuSlot(it.input, 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && capability.isExopackSmeltingInstalled return super.mayPlace(itemStack) && capability.isExopackSmeltingInstalled
} }
} }
} }
val furnaceOutputs: List<OutputSlot> = capability.smelters.map { val furnaceOutputs: List<OutputMenuSlot> = capability.smelters.map {
object : OutputSlot(it.output, 0, onTake = { popFurnaceExp() }) { object : OutputMenuSlot(it.output, 0, onTake = { popFurnaceExp() }) {
override fun mayPickup(player: Player): Boolean { override fun mayPickup(player: Player): Boolean {
return super.mayPickup(player) && capability.isExopackSmeltingInstalled return super.mayPickup(player) && capability.isExopackSmeltingInstalled
} }
@ -115,7 +115,7 @@ class ExopackInventoryMenu(val capability: MatteryPlayer) : MatteryMenu(null, CO
addStorageSlot(furnaceOutputs, condition = furnaceMenuOpenState) addStorageSlot(furnaceOutputs, condition = furnaceMenuOpenState)
} }
val enderChestSlots: List<MatterySlot> val enderChestSlots: List<MatteryMenuSlot>
val enderChestOpenState = InstantBooleanInput(this) val enderChestOpenState = InstantBooleanInput(this)
val playerEnderSortSettings = IItemStackSortingSettings.inputs(this, capability.enderSortingSettings) val playerEnderSortSettings = IItemStackSortingSettings.inputs(this, capability.enderSortingSettings)
val sortEnderChest: SortInput? val sortEnderChest: SortInput?
@ -123,7 +123,7 @@ class ExopackInventoryMenu(val capability: MatteryPlayer) : MatteryMenu(null, CO
init { init {
if (capability.isExopackEnderAccessInstalled) { if (capability.isExopackEnderAccessInstalled) {
enderChestSlots = makeSlots(player.enderChestInventory) { a, b -> enderChestSlots = makeSlots(player.enderChestInventory) { a, b ->
MatterySlot(a, b).also { MatteryMenuSlot(a, b).also {
addStorageSlot(it, condition = enderChestOpenState) addStorageSlot(it, condition = enderChestOpenState)
} }
} }

View File

@ -39,7 +39,6 @@ import ru.dbotthepony.mc.otm.compat.cos.cosmeticArmorSlots
import ru.dbotthepony.mc.otm.compat.curios.curiosSlots import ru.dbotthepony.mc.otm.compat.curios.curiosSlots
import ru.dbotthepony.mc.otm.compat.curios.isCurioSlot import ru.dbotthepony.mc.otm.compat.curios.isCurioSlot
import ru.dbotthepony.mc.otm.container.IFilteredContainerSlot import ru.dbotthepony.mc.otm.container.IFilteredContainerSlot
import ru.dbotthepony.mc.otm.container.IMatteryContainer
import ru.dbotthepony.mc.otm.container.computeSortedIndices import ru.dbotthepony.mc.otm.container.computeSortedIndices
import ru.dbotthepony.mc.otm.container.sortWithIndices import ru.dbotthepony.mc.otm.container.sortWithIndices
import ru.dbotthepony.mc.otm.container.util.containerSlotOrNull import ru.dbotthepony.mc.otm.container.util.containerSlotOrNull
@ -66,7 +65,7 @@ import java.util.function.Predicate
data class PlayerSlot<A : Slot, B : Slot>(val functional: A, val cosmetic: B? = null) data class PlayerSlot<A : Slot, B : Slot>(val functional: A, val cosmetic: B? = null)
data class EquipmentSlots( data class EquipmentSlots(
val armorSlots: List<PlayerSlot<MatteryMenu.EquipmentSlot, Slot>>, val armorSlots: List<PlayerSlot<MatteryMenu.EquipmentMenuSlot, Slot>>,
val curiosSlots: List<PlayerSlot<Slot, Slot>> val curiosSlots: List<PlayerSlot<Slot, Slot>>
) )
@ -87,7 +86,7 @@ abstract class MatteryMenu(
private val _playerInventorySlots = ArrayList<InventorySlot>() private val _playerInventorySlots = ArrayList<InventorySlot>()
private val _playerHotbarSlots = ArrayList<InventorySlot>() private val _playerHotbarSlots = ArrayList<InventorySlot>()
private val _playerCombinedInventorySlots = ArrayList<InventorySlot>() private val _playerCombinedInventorySlots = ArrayList<InventorySlot>()
private val _exopackChargeSlots = ArrayList<MatterySlot>() private val _exopackChargeSlots = ArrayList<MatteryMenuSlot>()
private val playerInputs = ArrayList<PlayerInput<*>>() private val playerInputs = ArrayList<PlayerInput<*>>()
@ -202,7 +201,7 @@ abstract class MatteryMenu(
*/ */
val playerCombinedInventorySlots: List<InventorySlot> = Collections.unmodifiableList(_playerCombinedInventorySlots) val playerCombinedInventorySlots: List<InventorySlot> = Collections.unmodifiableList(_playerCombinedInventorySlots)
val exopackChargeSlots: List<MatterySlot> = Collections.unmodifiableList(_exopackChargeSlots) val exopackChargeSlots: List<MatteryMenuSlot> = Collections.unmodifiableList(_exopackChargeSlots)
val exopackPowerLevel = ProfiledLevelGaugeWidget<ProfiledEnergyStorage<*>>(mSynchronizer, player.matteryPlayer.exopackEnergy) val exopackPowerLevel = ProfiledLevelGaugeWidget<ProfiledEnergyStorage<*>>(mSynchronizer, player.matteryPlayer.exopackEnergy)
@ -223,7 +222,7 @@ abstract class MatteryMenu(
protected var inventorySlotIndexStart = 0 protected var inventorySlotIndexStart = 0
protected var inventorySlotIndexEnd = 0 protected var inventorySlotIndexEnd = 0
open inner class InventorySlot(container: Container, index: Int) : UserFilteredSlot(container, index, 0, 0) { open inner class InventorySlot(container: Container, index: Int) : UserFilteredMenuSlot(container, index, 0, 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return !isInventorySlotLocked(index) && super.mayPlace(itemStack) return !isInventorySlotLocked(index) && super.mayPlace(itemStack)
} }
@ -247,7 +246,7 @@ abstract class MatteryMenu(
} }
} }
open inner class EquipmentSlot(container: Container, index: Int, val type: net.minecraft.world.entity.EquipmentSlot) : InventorySlot(container, index) { open inner class EquipmentMenuSlot(container: Container, index: Int, val type: net.minecraft.world.entity.EquipmentSlot) : InventorySlot(container, index) {
constructor(type: net.minecraft.world.entity.EquipmentSlot) : this(inventory, 34 + type.ordinal, type) constructor(type: net.minecraft.world.entity.EquipmentSlot) : this(inventory, 34 + type.ordinal, type)
override fun setByPlayer(newItem: ItemStack, oldItem: ItemStack) { override fun setByPlayer(newItem: ItemStack, oldItem: ItemStack) {
@ -310,10 +309,10 @@ abstract class MatteryMenu(
} }
if (mattery.hasExopack) { if (mattery.hasExopack) {
_exopackChargeSlots.add(BatterySlot(mattery.exopackEnergy.parent, 0).also { mapQuickMoveToExternal(it); mapQuickMoveToInventory(it); addSlot(it) }) _exopackChargeSlots.add(BatteryMenuSlot(mattery.exopackEnergy.parent, 0).also { mapQuickMoveToExternal(it); mapQuickMoveToInventory(it); addSlot(it) })
for (i in 0 until mattery.exopackChargeSlots.containerSize) for (i in 0 until mattery.exopackChargeSlots.containerSize)
_exopackChargeSlots.add(ChargeSlot(mattery.exopackChargeSlots, i).also { mapQuickMoveToExternal(it); mapQuickMoveToInventory(it); addSlot(it) }) _exopackChargeSlots.add(ChargeMenuSlot(mattery.exopackChargeSlots, i).also { mapQuickMoveToExternal(it); mapQuickMoveToInventory(it); addSlot(it) })
} }
sortInventoryInput = SortInput(mattery.inventoryAndExopackNoHotbar, playerSortSettings) sortInventoryInput = SortInput(mattery.inventoryAndExopackNoHotbar, playerSortSettings)
@ -385,7 +384,7 @@ abstract class MatteryMenu(
if (!seenSlots.add(pSlot)) if (!seenSlots.add(pSlot))
return pSlot return pSlot
if (pSlot is MatterySlot) { if (pSlot is MatteryMenuSlot) {
pSlot.setupNetworkControls(this) pSlot.setupNetworkControls(this)
} }
@ -505,10 +504,10 @@ abstract class MatteryMenu(
} }
override fun canTakeItemForPickAll(itemStack: ItemStack, slot: Slot): Boolean { override fun canTakeItemForPickAll(itemStack: ItemStack, slot: Slot): Boolean {
if (slot is EquipmentSlot) if (slot is EquipmentMenuSlot)
return false return false
return super.canTakeItemForPickAll(itemStack, slot) && (slot !is MatterySlot || slot.canTakeItemForPickAll()) && !slot.isCurioSlot return super.canTakeItemForPickAll(itemStack, slot) && (slot !is MatteryMenuSlot || slot.canTakeItemForPickAll()) && !slot.isCurioSlot
} }
override fun moveItemStackTo( override fun moveItemStackTo(
@ -643,11 +642,11 @@ abstract class MatteryMenu(
return moveItemStackToSlots(item, slots, simulate) return moveItemStackToSlots(item, slots, simulate)
} }
private var armorSlots: ImmutableList<PlayerSlot<EquipmentSlot, Slot>>? = null private var armorSlots: ImmutableList<PlayerSlot<EquipmentMenuSlot, Slot>>? = null
private var curiosSlots: ImmutableList<PlayerSlot<Slot, Slot>>? = null private var curiosSlots: ImmutableList<PlayerSlot<Slot, Slot>>? = null
private val equipmentSlots = ArrayList<Slot>() private val equipmentSlots = ArrayList<Slot>()
fun makeArmorSlots(mapMoveToExternal: Boolean = false): List<PlayerSlot<EquipmentSlot, Slot>> { fun makeArmorSlots(mapMoveToExternal: Boolean = false): List<PlayerSlot<EquipmentMenuSlot, Slot>> {
if (armorSlots != null) { if (armorSlots != null) {
return armorSlots!! return armorSlots!!
} }
@ -655,10 +654,10 @@ abstract class MatteryMenu(
val cosmetic = player.cosmeticArmorSlots val cosmetic = player.cosmeticArmorSlots
return ImmutableList.of( return ImmutableList.of(
PlayerSlot(EquipmentSlot(net.minecraft.world.entity.EquipmentSlot.HEAD), cosmetic?.get(net.minecraft.world.entity.EquipmentSlot.HEAD)), PlayerSlot(EquipmentMenuSlot(net.minecraft.world.entity.EquipmentSlot.HEAD), cosmetic?.get(net.minecraft.world.entity.EquipmentSlot.HEAD)),
PlayerSlot(EquipmentSlot(net.minecraft.world.entity.EquipmentSlot.CHEST), cosmetic?.get(net.minecraft.world.entity.EquipmentSlot.CHEST)), PlayerSlot(EquipmentMenuSlot(net.minecraft.world.entity.EquipmentSlot.CHEST), cosmetic?.get(net.minecraft.world.entity.EquipmentSlot.CHEST)),
PlayerSlot(EquipmentSlot(net.minecraft.world.entity.EquipmentSlot.LEGS), cosmetic?.get(net.minecraft.world.entity.EquipmentSlot.LEGS)), PlayerSlot(EquipmentMenuSlot(net.minecraft.world.entity.EquipmentSlot.LEGS), cosmetic?.get(net.minecraft.world.entity.EquipmentSlot.LEGS)),
PlayerSlot(EquipmentSlot(net.minecraft.world.entity.EquipmentSlot.FEET), cosmetic?.get(net.minecraft.world.entity.EquipmentSlot.FEET)), PlayerSlot(EquipmentMenuSlot(net.minecraft.world.entity.EquipmentSlot.FEET), cosmetic?.get(net.minecraft.world.entity.EquipmentSlot.FEET)),
).also { ).also {
armorSlots = it armorSlots = it

View File

@ -15,7 +15,7 @@ abstract class MatteryPoweredMenu protected constructor(
tile: MatteryPoweredBlockEntity? = null tile: MatteryPoweredBlockEntity? = null
) : MatteryMenu(menuType, containerID, inventory, tile) { ) : MatteryMenu(menuType, containerID, inventory, tile) {
val energyWidget = LevelGaugeWidget(this, tile?.energy) val energyWidget = LevelGaugeWidget(this, tile?.energy)
val batterySlot = BatterySlot(tile?.batteryContainer ?: SimpleContainer(1), 0) val batterySlot = BatteryMenuSlot(tile?.batteryContainer ?: SimpleContainer(1), 0)
val redstoneConfig = EnumInputWithFeedback<RedstoneSetting>(this) val redstoneConfig = EnumInputWithFeedback<RedstoneSetting>(this)
init { init {

View File

@ -50,7 +50,7 @@ inline fun <S : Slot> makeSlots(containers: List<Container>?, size: Int, initial
return immutableList(size) { initializer(containers?.get(it) ?: SimpleContainer(1), 0) } return immutableList(size) { initializer(containers?.get(it) ?: SimpleContainer(1), 0) }
} }
open class MatterySlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : Slot(container, index, x, y) { open class MatteryMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : Slot(container, index, x, y) {
var ignoreSpectators = true var ignoreSpectators = true
open fun setupNetworkControls(menu: MatteryMenu) { open fun setupNetworkControls(menu: MatteryMenu) {
@ -112,7 +112,7 @@ open class MatterySlot(container: Container, index: Int, x: Int = 0, y: Int = 0)
} }
} }
open class UserFilteredSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatterySlot(container, index, x, y) { open class UserFilteredMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatteryMenuSlot(container, index, x, y) {
var filterInput: MatteryMenu.PlayerInput<Item?>? = null var filterInput: MatteryMenu.PlayerInput<Item?>? = null
private set private set
@ -126,7 +126,7 @@ open class UserFilteredSlot(container: Container, index: Int, x: Int = 0, y: Int
} }
} }
open class OutputSlot(container: Container, index: Int, x: Int = 0, y: Int = 0, val onTake: (ItemStack) -> Unit = {}) : MatterySlot(container, index, x, y) { open class OutputMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0, val onTake: (ItemStack) -> Unit = {}) : MatteryMenuSlot(container, index, x, y) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return false return false
} }
@ -142,50 +142,50 @@ open class OutputSlot(container: Container, index: Int, x: Int = 0, y: Int = 0,
} }
} }
open class BatterySlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatterySlot(container, index, x, y) { open class BatteryMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatteryMenuSlot(container, index, x, y) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && (itemStack.energy?.canExtract() ?: false) return super.mayPlace(itemStack) && (itemStack.energy?.canExtract() ?: false)
} }
} }
open class ChemicalFuelSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatterySlot(container, index, x, y) { open class ChemicalFuelMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatteryMenuSlot(container, index, x, y) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && itemStack.getBurnTime(null) > 0 return super.mayPlace(itemStack) && itemStack.getBurnTime(null) > 0
} }
} }
open class ChargeSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatterySlot(container, index, x, y) { open class ChargeMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatteryMenuSlot(container, index, x, y) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && (itemStack.energy?.canReceive() ?: false) return super.mayPlace(itemStack) && (itemStack.energy?.canReceive() ?: false)
} }
} }
open class EnergyContainerInputSlot(container: Container, index: Int, x: Int = 0, y: Int = 0, val direction: FlowDirection = FlowDirection.BI_DIRECTIONAL) : MatterySlot(container, index, x, y) { open class EnergyContainerInputMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0, val direction: FlowDirection = FlowDirection.BI_DIRECTIONAL) : MatteryMenuSlot(container, index, x, y) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && (itemStack.getCapability(Capabilities.EnergyStorage.ITEM)?.let { direction.test(FlowDirection.of(it.canReceive(), it.canExtract())) } ?: false) return super.mayPlace(itemStack) && (itemStack.getCapability(Capabilities.EnergyStorage.ITEM)?.let { direction.test(FlowDirection.of(it.canReceive(), it.canExtract())) } ?: false)
} }
} }
open class MatterContainerInputSlot( open class MatterContainerInputMenuSlot(
container: Container, container: Container,
index: Int, index: Int,
x: Int = 0, x: Int = 0,
y: Int = 0, y: Int = 0,
val direction: FlowDirection = FlowDirection.BI_DIRECTIONAL val direction: FlowDirection = FlowDirection.BI_DIRECTIONAL
) : MatterySlot(container, index, x, y) { ) : MatteryMenuSlot(container, index, x, y) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
val handler = itemStack.getCapability(MatteryCapability.MATTER_ITEM) val handler = itemStack.getCapability(MatteryCapability.MATTER_ITEM)
return handler != null && super.mayPlace(itemStack) && this.direction.test(handler.matterFlow) return handler != null && super.mayPlace(itemStack) && this.direction.test(handler.matterFlow)
} }
} }
open class PatternSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatterySlot(container, index, x, y) { open class PatternMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatteryMenuSlot(container, index, x, y) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && itemStack.getCapability(MatteryCapability.PATTERN_ITEM) != null return super.mayPlace(itemStack) && itemStack.getCapability(MatteryCapability.PATTERN_ITEM) != null
} }
} }
open class DriveSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatterySlot(container, index, x, y) { open class DriveMenuSlot(container: Container, index: Int, x: Int = 0, y: Int = 0) : MatteryMenuSlot(container, index, x, y) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && itemStack.getCapability(MatteryCapability.CONDENSATION_DRIVE) != null return super.mayPlace(itemStack) && itemStack.getCapability(MatteryCapability.CONDENSATION_DRIVE) != null
} }
@ -255,7 +255,7 @@ fun MatteryMenu.addFilterControls(slots: KMutableProperty0<ItemFilter>?, amount:
* in classloading exceptions. * in classloading exceptions.
*/ */
data class UpgradeSlots( data class UpgradeSlots(
val slots: List<MatterySlot>, val slots: List<MatteryMenuSlot>,
val allowedTypes: Set<UpgradeType>, val allowedTypes: Set<UpgradeType>,
val openState: Delegate<Boolean>, val openState: Delegate<Boolean>,
val currentStats: IMatteryUpgrade, val currentStats: IMatteryUpgrade,
@ -291,7 +291,7 @@ fun MatteryMenu.makeUpgradeSlots(count: Int, container: UpgradeContainer?): Upgr
return UpgradeSlots( return UpgradeSlots(
slots = immutableList(count) { slots = immutableList(count) {
object : MatterySlot(syncContainer, it) { object : MatteryMenuSlot(syncContainer, it) {
init { init {
mapQuickMoveToInventory(this) mapQuickMoveToInventory(this)
} }

View File

@ -1,13 +1,11 @@
package ru.dbotthepony.mc.otm.menu.decorative package ru.dbotthepony.mc.otm.menu.decorative
import net.minecraft.world.Container
import net.minecraft.world.SimpleContainer
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.entity.player.Player import net.minecraft.world.entity.player.Player
import ru.dbotthepony.mc.otm.block.entity.decorative.CargoCrateBlockEntity import ru.dbotthepony.mc.otm.block.entity.decorative.CargoCrateBlockEntity
import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.UserFilteredSlot import ru.dbotthepony.mc.otm.menu.UserFilteredMenuSlot
import ru.dbotthepony.mc.otm.menu.makeSlots import ru.dbotthepony.mc.otm.menu.makeSlots
import ru.dbotthepony.mc.otm.registry.game.MMenus import ru.dbotthepony.mc.otm.registry.game.MMenus
@ -17,7 +15,7 @@ class CargoCrateMenu(
tile: CargoCrateBlockEntity? = null tile: CargoCrateBlockEntity? = null
) : MatteryMenu(MMenus.CARGO_CRATE, containerId, inventory, tile) { ) : MatteryMenu(MMenus.CARGO_CRATE, containerId, inventory, tile) {
val actualContainer = tile?.container ?: SlottedContainer.filtered(CargoCrateBlockEntity.CAPACITY) val actualContainer = tile?.container ?: SlottedContainer.filtered(CargoCrateBlockEntity.CAPACITY)
val storageSlots = makeSlots(actualContainer, ::UserFilteredSlot) val storageSlots = makeSlots(actualContainer, ::UserFilteredMenuSlot)
private val trackedPlayerOpen = !inventory.player.isSpectator private val trackedPlayerOpen = !inventory.player.isSpectator
val sort = SortInput(actualContainer, playerSortSettings) val sort = SortInput(actualContainer, playerSortSettings)

View File

@ -8,9 +8,9 @@ import net.neoforged.neoforge.fluids.capability.IFluidHandler
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
import ru.dbotthepony.mc.otm.block.entity.decorative.FluidTankBlockEntity import ru.dbotthepony.mc.otm.block.entity.decorative.FluidTankBlockEntity
import ru.dbotthepony.mc.otm.capability.isNotEmpty import ru.dbotthepony.mc.otm.capability.isNotEmpty
import ru.dbotthepony.mc.otm.menu.OutputSlot import ru.dbotthepony.mc.otm.menu.OutputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.FluidConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.FluidConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
@ -24,14 +24,14 @@ class FluidTankMenu(containerId: Int, inventory: Inventory, tile: FluidTankBlock
val redstoneConfig = EnumInputWithFeedback<RedstoneSetting>(this) val redstoneConfig = EnumInputWithFeedback<RedstoneSetting>(this)
val fluidConfig = FluidConfigPlayerInput(this, tile?.fluidConfig) val fluidConfig = FluidConfigPlayerInput(this, tile?.fluidConfig)
val drainInput = object : MatterySlot(tile?.drainInput ?: SimpleContainer(1), 0) { val drainInput = object : MatteryMenuSlot(tile?.drainInput ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && return super.mayPlace(itemStack) &&
(itemStack.getCapability(Capabilities.FluidHandler.ITEM)?.isNotEmpty ?: false) (itemStack.getCapability(Capabilities.FluidHandler.ITEM)?.isNotEmpty ?: false)
} }
} }
val fillInput = object : MatterySlot(tile?.fillInput ?: SimpleContainer(1), 0) { val fillInput = object : MatteryMenuSlot(tile?.fillInput ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && return super.mayPlace(itemStack) &&
(if (itemStack.count <= 1) itemStack (if (itemStack.count <= 1) itemStack
@ -46,7 +46,7 @@ class FluidTankMenu(containerId: Int, inventory: Inventory, tile: FluidTankBlock
} }
} }
val output = OutputSlot(tile?.output ?: SimpleContainer(1), 0) val output = OutputMenuSlot(tile?.output ?: SimpleContainer(1), 0)
init { init {
// сначала слот на заполнение из бака // сначала слот на заполнение из бака

View File

@ -12,9 +12,9 @@ import ru.dbotthepony.kommons.util.getValue
import ru.dbotthepony.mc.otm.block.entity.decorative.GrillBlockEntity import ru.dbotthepony.mc.otm.block.entity.decorative.GrillBlockEntity
import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.MatteryContainer
import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.menu.ChemicalFuelSlot import ru.dbotthepony.mc.otm.menu.ChemicalFuelMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.makeSlots import ru.dbotthepony.mc.otm.menu.makeSlots
import ru.dbotthepony.mc.otm.menu.widget.IProgressGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.IProgressGaugeWidget
import ru.dbotthepony.mc.otm.menu.widget.TakeExperienceWidget import ru.dbotthepony.mc.otm.menu.widget.TakeExperienceWidget
@ -30,14 +30,14 @@ class GrillMenu(
override fun getMaxStackSize(): Int { override fun getMaxStackSize(): Int {
return 4 return 4
} }
}, ::ChemicalFuelSlot) }, ::ChemicalFuelMenuSlot)
val inputSlots = makeSlots<Container, MatterySlot>(tile?.inputSlots ?: object : MatteryContainer(GrillBlockEntity.SLOTS) { val inputSlots = makeSlots<Container, MatteryMenuSlot>(tile?.inputSlots ?: object : MatteryContainer(GrillBlockEntity.SLOTS) {
override fun getMaxStackSize(): Int { override fun getMaxStackSize(): Int {
return 1 return 1
} }
}) { c, i -> }) { c, i ->
object : MatterySlot(c, i) { object : MatteryMenuSlot(c, i) {
override fun onTake(p_150645_: Player, p_150646_: ItemStack) { override fun onTake(p_150645_: Player, p_150646_: ItemStack) {
super.onTake(p_150645_, p_150646_) super.onTake(p_150645_, p_150646_)

View File

@ -7,7 +7,7 @@ import net.minecraft.world.entity.player.Player
import ru.dbotthepony.mc.otm.block.entity.decorative.CargoCrateBlockEntity import ru.dbotthepony.mc.otm.block.entity.decorative.CargoCrateBlockEntity
import ru.dbotthepony.mc.otm.entity.MinecartCargoCrate import ru.dbotthepony.mc.otm.entity.MinecartCargoCrate
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.makeSlots import ru.dbotthepony.mc.otm.menu.makeSlots
import ru.dbotthepony.mc.otm.registry.game.MMenus import ru.dbotthepony.mc.otm.registry.game.MMenus
@ -17,7 +17,7 @@ class MinecartCargoCrateMenu(
val cart: MinecartCargoCrate? = null val cart: MinecartCargoCrate? = null
) : MatteryMenu(MMenus.CARGO_CRATE, containerId, inventory) { ) : MatteryMenu(MMenus.CARGO_CRATE, containerId, inventory) {
val actualContainer: Container = cart ?: SimpleContainer(CargoCrateBlockEntity.CAPACITY) val actualContainer: Container = cart ?: SimpleContainer(CargoCrateBlockEntity.CAPACITY)
val storageSlots = makeSlots(actualContainer, ::MatterySlot) val storageSlots = makeSlots(actualContainer, ::MatteryMenuSlot)
private val trackedPlayerOpen = !inventory.player.isSpectator private val trackedPlayerOpen = !inventory.player.isSpectator

View File

@ -23,7 +23,7 @@ import ru.dbotthepony.mc.otm.core.collect.filter
import ru.dbotthepony.mc.otm.core.collect.maybe import ru.dbotthepony.mc.otm.core.collect.maybe
import ru.dbotthepony.mc.otm.core.isNotEmpty import ru.dbotthepony.mc.otm.core.isNotEmpty
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
import ru.dbotthepony.mc.otm.network.StreamCodecs import ru.dbotthepony.mc.otm.network.StreamCodecs
@ -56,7 +56,7 @@ class PainterMenu(
selectedRecipe = it selectedRecipe = it
} }
val inputSlot = object : MatterySlot(inputContainer, 0) { val inputSlot = object : MatteryMenuSlot(inputContainer, 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
if (!itemStack.isEmpty && itemStack.`is`(ItemTags.DYEABLE)) { if (!itemStack.isEmpty && itemStack.`is`(ItemTags.DYEABLE)) {
return super.mayPlace(itemStack) return super.mayPlace(itemStack)
@ -66,7 +66,7 @@ class PainterMenu(
} }
} }
val outputSlot = object : MatterySlot(outputContainer, 0) { val outputSlot = object : MatteryMenuSlot(outputContainer, 0) {
override fun tryRemove(p_150642_: Int, p_150643_: Int, p_150644_: Player): Optional<ItemStack> { override fun tryRemove(p_150642_: Int, p_150643_: Int, p_150644_: Player): Optional<ItemStack> {
rescan() rescan()
return super.tryRemove(p_150642_, p_150643_, p_150644_) return super.tryRemove(p_150642_, p_150643_, p_150644_)
@ -102,7 +102,7 @@ class PainterMenu(
} }
} }
val dyeSlot = object : MatterySlot(tile?.dyeInput ?: SimpleContainer(1), 0) { val dyeSlot = object : MatteryMenuSlot(tile?.dyeInput ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && (( return super.mayPlace(itemStack) && ((
itemStack.getCapability(Capabilities.FluidHandler.ITEM)?.let { itemStack.getCapability(Capabilities.FluidHandler.ITEM)?.let {

View File

@ -1,7 +1,6 @@
package ru.dbotthepony.mc.otm.menu.matter package ru.dbotthepony.mc.otm.menu.matter
import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableList
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 ru.dbotthepony.mc.otm.block.entity.matter.MatterBottlerBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterBottlerBlockEntity
@ -14,7 +13,7 @@ import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.makeSlots import ru.dbotthepony.mc.otm.menu.makeSlots
import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots
import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget
@ -29,8 +28,8 @@ class MatterBottlerMenu(
val progressWidget = ProgressGaugeWidget(this) val progressWidget = ProgressGaugeWidget(this)
val matterWidget = ProfiledLevelGaugeWidget(this, tile?.matter, LevelGaugeWidget(this, tile?.matter)) val matterWidget = ProfiledLevelGaugeWidget(this, tile?.matter, LevelGaugeWidget(this, tile?.matter))
val storageSlots: ImmutableList<MatterySlot> = makeSlots(CombinedContainer(tile?.bottling ?: SlottedContainer.simple(3), tile?.unbottling ?: SlottedContainer.simple(3))) { it, index -> val storageSlots: ImmutableList<MatteryMenuSlot> = makeSlots(CombinedContainer(tile?.bottling ?: SlottedContainer.simple(3), tile?.unbottling ?: SlottedContainer.simple(3))) { it, index ->
object : MatterySlot(it, index) { object : MatteryMenuSlot(it, index) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
val cap = itemStack.getCapability(MatteryCapability.MATTER_ITEM) ?: return false val cap = itemStack.getCapability(MatteryCapability.MATTER_ITEM) ?: return false

View File

@ -4,7 +4,7 @@ import net.minecraft.world.SimpleContainer
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.block.entity.matter.MatterCapacitorBankBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterCapacitorBankBlockEntity
import ru.dbotthepony.mc.otm.menu.MatterContainerInputSlot import ru.dbotthepony.mc.otm.menu.MatterContainerInputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
@ -20,7 +20,7 @@ class MatterCapacitorBankMenu @JvmOverloads constructor(
val totalMatterGauge = LevelGaugeWidget(this) val totalMatterGauge = LevelGaugeWidget(this)
val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig) val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig)
val storageSlots: List<MatterContainerInputSlot> val storageSlots: List<MatterContainerInputMenuSlot>
init { init {
if (tile != null) { if (tile != null) {
@ -34,7 +34,7 @@ class MatterCapacitorBankMenu @JvmOverloads constructor(
val container = tile?.container ?: SimpleContainer(2 * 6) val container = tile?.container ?: SimpleContainer(2 * 6)
storageSlots = immutableList(2 * 6) { storageSlots = immutableList(2 * 6) {
addStorageSlot(MatterContainerInputSlot(container, it)) addStorageSlot(MatterContainerInputMenuSlot(container, it))
} }
addInventorySlots() addInventorySlots()

View File

@ -8,9 +8,9 @@ import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import net.minecraft.world.SimpleContainer import net.minecraft.world.SimpleContainer
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.matter.MatterManager import ru.dbotthepony.mc.otm.matter.MatterManager
import ru.dbotthepony.mc.otm.menu.OutputSlot import ru.dbotthepony.mc.otm.menu.OutputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots
@ -22,12 +22,12 @@ class MatterDecomposerMenu @JvmOverloads constructor(
inventory: Inventory, inventory: Inventory,
tile: MatterDecomposerBlockEntity? = null tile: MatterDecomposerBlockEntity? = null
) : MatteryPoweredMenu(MMenus.MATTER_DECOMPOSER, containerID, inventory, tile) { ) : MatteryPoweredMenu(MMenus.MATTER_DECOMPOSER, containerID, inventory, tile) {
val input = object : MatterySlot(tile?.inputContainer ?: SimpleContainer(1), 0) { val input = object : MatteryMenuSlot(tile?.inputContainer ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack) = MatterManager.canDecompose(itemStack) override fun mayPlace(itemStack: ItemStack) = MatterManager.canDecompose(itemStack)
} }
val outputMain: OutputSlot val outputMain: OutputMenuSlot
val outputStacking: OutputSlot val outputStacking: OutputMenuSlot
val progressWidget = ProgressGaugeWidget(this, tile) val progressWidget = ProgressGaugeWidget(this, tile)
val matterWidget = ProfiledLevelGaugeWidget(this, tile?.matter, LevelGaugeWidget(this, tile?.matter)) val matterWidget = ProfiledLevelGaugeWidget(this, tile?.matter, LevelGaugeWidget(this, tile?.matter))
val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig) val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig)
@ -39,8 +39,8 @@ class MatterDecomposerMenu @JvmOverloads constructor(
val container = tile?.outputContainer ?: SimpleContainer(2) val container = tile?.outputContainer ?: SimpleContainer(2)
// Выход // Выход
outputMain = OutputSlot(container, 0) outputMain = OutputMenuSlot(container, 0)
outputStacking = OutputSlot(container, 1) outputStacking = OutputMenuSlot(container, 1)
addStorageSlot(outputMain) addStorageSlot(outputMain)
addStorageSlot(outputStacking) addStorageSlot(outputStacking)

View File

@ -14,9 +14,9 @@ import ru.dbotthepony.mc.otm.container.get
import ru.dbotthepony.mc.otm.container.set import ru.dbotthepony.mc.otm.container.set
import ru.dbotthepony.mc.otm.core.isNotEmpty import ru.dbotthepony.mc.otm.core.isNotEmpty
import ru.dbotthepony.mc.otm.item.IQuantumLinked import ru.dbotthepony.mc.otm.item.IQuantumLinked
import ru.dbotthepony.mc.otm.menu.OutputSlot import ru.dbotthepony.mc.otm.menu.OutputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.makeSlots import ru.dbotthepony.mc.otm.menu.makeSlots
@ -39,12 +39,12 @@ class MatterEntanglerMenu(
val progress = ProgressGaugeWidget(this, tile?.jobEventLoops?.get(0)) val progress = ProgressGaugeWidget(this, tile?.jobEventLoops?.get(0))
val inputs: List<MatterySlot> = makeSlots(tile?.inputs ?: object : MatteryCraftingContainer(3, 3) { val inputs: List<MatteryMenuSlot> = makeSlots(tile?.inputs ?: object : MatteryCraftingContainer(3, 3) {
override fun getMaxStackSize(): Int { override fun getMaxStackSize(): Int {
return 1 return 1
} }
}) { it, i -> }) { it, i ->
object : MatterySlot(it, i) { object : MatteryMenuSlot(it, i) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
val list = it.toList() val list = it.toList()
list[i] = itemStack list[i] = itemStack
@ -59,7 +59,7 @@ class MatterEntanglerMenu(
} }
} }
val outputs = makeSlots(tile?.output ?: SimpleContainer(1)) { a, b -> OutputSlot(a, b) { tile?.experience?.popExperience(player as ServerPlayer) } } val outputs = makeSlots(tile?.output ?: SimpleContainer(1)) { a, b -> OutputMenuSlot(a, b) { tile?.experience?.popExperience(player as ServerPlayer) } }
val upgrades = makeUpgradeSlots(3, tile?.upgrades) val upgrades = makeUpgradeSlots(3, tile?.upgrades)
val experience = TakeExperienceWidget(this, tile?.experience) val experience = TakeExperienceWidget(this, tile?.experience)
@ -82,15 +82,15 @@ class MatterEntanglerMenu(
} }
} }
private inner class EntanglingInputSlot(index: Int) : MatterySlot(entangling, index) { private inner class EntanglingInputMenuSlot(index: Int) : MatteryMenuSlot(entangling, index) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && itemStack.item is IQuantumLinked return super.mayPlace(itemStack) && itemStack.item is IQuantumLinked
} }
} }
val entanglingA: MatterySlot = EntanglingInputSlot(0) val entanglingA: MatteryMenuSlot = EntanglingInputMenuSlot(0)
val entanglingB: MatterySlot = EntanglingInputSlot(1) val entanglingB: MatteryMenuSlot = EntanglingInputMenuSlot(1)
val entanglingC: MatterySlot = object : MatterySlot(MatteryContainer(1), 0) { val entanglingC: MatteryMenuSlot = object : MatteryMenuSlot(MatteryContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return false return false
} }

View File

@ -5,7 +5,7 @@ import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.block.entity.matter.MatterReconstructorBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterReconstructorBlockEntity
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots
@ -20,7 +20,7 @@ class MatterReconstructorMenu(
tile: MatterReconstructorBlockEntity? = null tile: MatterReconstructorBlockEntity? = null
) : MatteryPoweredMenu(MMenus.ITEM_REPAIER, containerId, inventory, tile) { ) : MatteryPoweredMenu(MMenus.ITEM_REPAIER, containerId, inventory, tile) {
val matterWidget = ProfiledLevelGaugeWidget(this, tile?.matter, LevelGaugeWidget(this, tile?.matter)) val matterWidget = ProfiledLevelGaugeWidget(this, tile?.matter, LevelGaugeWidget(this, tile?.matter))
val slot = object : MatterySlot(tile?.repairContainer ?: SimpleContainer(1), 0) { val slot = object : MatteryMenuSlot(tile?.repairContainer ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return itemStack.isRepairable && itemStack.isDamaged && super.mayPlace(itemStack) return itemStack.isRepairable && itemStack.isDamaged && super.mayPlace(itemStack)
} }

View File

@ -6,7 +6,7 @@ import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.block.entity.matter.MatterRecyclerBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterRecyclerBlockEntity
import ru.dbotthepony.mc.otm.item.matter.MatterDustItem import ru.dbotthepony.mc.otm.item.matter.MatterDustItem
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots
@ -20,7 +20,7 @@ class MatterRecyclerMenu @JvmOverloads constructor(
inventory: Inventory, inventory: Inventory,
tile: MatterRecyclerBlockEntity? = null tile: MatterRecyclerBlockEntity? = null
) : MatteryPoweredMenu(MMenus.MATTER_RECYCLER, containerID, inventory, tile) { ) : MatteryPoweredMenu(MMenus.MATTER_RECYCLER, containerID, inventory, tile) {
val input = object : MatterySlot(tile?.container ?: SimpleContainer(1), 0) { val input = object : MatteryMenuSlot(tile?.container ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return itemStack.item is MatterDustItem && (itemStack.item as MatterDustItem).getMatterValue(itemStack) != null return itemStack.item is MatterDustItem && (itemStack.item as MatterDustItem).getMatterValue(itemStack) != null
} }

View File

@ -6,12 +6,11 @@ import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.block.entity.matter.MatterReplicatorBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterReplicatorBlockEntity
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget
import net.minecraft.world.SimpleContainer
import ru.dbotthepony.mc.otm.container.CombinedContainer import ru.dbotthepony.mc.otm.container.CombinedContainer
import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.core.isNotEmpty import ru.dbotthepony.mc.otm.core.isNotEmpty
import ru.dbotthepony.mc.otm.menu.OutputSlot import ru.dbotthepony.mc.otm.menu.OutputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
@ -27,7 +26,7 @@ class MatterReplicatorMenu @JvmOverloads constructor(
) : MatteryPoweredMenu(MMenus.MATTER_REPLICATOR, p_38852_, inventory, tile) { ) : MatteryPoweredMenu(MMenus.MATTER_REPLICATOR, p_38852_, inventory, tile) {
val matter = ProfiledLevelGaugeWidget(this, tile?.matter, LevelGaugeWidget(this, tile?.matter)) val matter = ProfiledLevelGaugeWidget(this, tile?.matter, LevelGaugeWidget(this, tile?.matter))
val progress = ProgressGaugeWidget(this, tile) val progress = ProgressGaugeWidget(this, tile)
val storageSlots: List<OutputSlot> val storageSlots: List<OutputMenuSlot>
val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig) val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig)
val energyConfig = EnergyConfigPlayerInput(this, tile?.energyConfig) val energyConfig = EnergyConfigPlayerInput(this, tile?.energyConfig)
val profiledEnergy = ProfiledLevelGaugeWidget(this, tile?.energy, energyWidget) val profiledEnergy = ProfiledLevelGaugeWidget(this, tile?.energy, energyWidget)
@ -38,7 +37,7 @@ class MatterReplicatorMenu @JvmOverloads constructor(
val container = CombinedContainer(tile?.outputContainer ?: SlottedContainer.simple(3), tile?.dustContainer ?: SlottedContainer.simple(2)) val container = CombinedContainer(tile?.outputContainer ?: SlottedContainer.simple(3), tile?.dustContainer ?: SlottedContainer.simple(2))
storageSlots = immutableList(5) { storageSlots = immutableList(5) {
addStorageSlot(OutputSlot(container, it, onTake = { addStorageSlot(OutputMenuSlot(container, it, onTake = {
if (inventory.player is ServerPlayer && it.isNotEmpty) if (inventory.player is ServerPlayer && it.isNotEmpty)
TakeItemOutOfReplicatorTrigger.trigger(inventory.player as ServerPlayer, it) })) TakeItemOutOfReplicatorTrigger.trigger(inventory.player as ServerPlayer, it) }))
} }

View File

@ -10,7 +10,7 @@ import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.matter.MatterManager import ru.dbotthepony.mc.otm.matter.MatterManager
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots import ru.dbotthepony.mc.otm.menu.makeUpgradeSlots
@ -22,7 +22,7 @@ class MatterScannerMenu @JvmOverloads constructor(
inventory: Inventory, inventory: Inventory,
tile: MatterScannerBlockEntity? = null tile: MatterScannerBlockEntity? = null
) : MatteryPoweredMenu(MMenus.MATTER_SCANNER, p_38852_, inventory, tile) { ) : MatteryPoweredMenu(MMenus.MATTER_SCANNER, p_38852_, inventory, tile) {
val input: MatterySlot val input: MatteryMenuSlot
val progress = ProgressGaugeWidget(this, tile) val progress = ProgressGaugeWidget(this, tile)
val patterns = LevelGaugeWidget(this) val patterns = LevelGaugeWidget(this)
val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig) val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig)
@ -33,7 +33,7 @@ class MatterScannerMenu @JvmOverloads constructor(
init { init {
val container = tile?.container ?: SimpleContainer(1) val container = tile?.container ?: SimpleContainer(1)
input = object : MatterySlot(container, 0, 64, 38) { input = object : MatteryMenuSlot(container, 0, 64, 38) {
override fun mayPlace(itemStack: ItemStack) = MatterManager.canDecompose(itemStack) override fun mayPlace(itemStack: ItemStack) = MatterManager.canDecompose(itemStack)
} }

View File

@ -6,7 +6,7 @@ import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.block.entity.matter.PatternStorageBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.PatternStorageBlockEntity
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.PatternSlot import ru.dbotthepony.mc.otm.menu.PatternMenuSlot
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import ru.dbotthepony.mc.otm.registry.game.MMenus import ru.dbotthepony.mc.otm.registry.game.MMenus
@ -20,7 +20,7 @@ class PatternStorageMenu @JvmOverloads constructor(
val storedGrid = LevelGaugeWidget(this) val storedGrid = LevelGaugeWidget(this)
val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig) val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig)
val storageSlots: List<PatternSlot> val storageSlots: List<PatternMenuSlot>
init { init {
if (tile != null) { if (tile != null) {
@ -34,7 +34,7 @@ class PatternStorageMenu @JvmOverloads constructor(
val patterns = tile?.container ?: SimpleContainer(2 * 4) val patterns = tile?.container ?: SimpleContainer(2 * 4)
storageSlots = immutableList(2 * 4) { storageSlots = immutableList(2 * 4) {
addStorageSlot(PatternSlot(patterns, it)) addStorageSlot(PatternMenuSlot(patterns, it))
} }
addInventorySlots() addInventorySlots()

View File

@ -4,7 +4,7 @@ import net.minecraft.world.SimpleContainer
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.block.entity.storage.DriveRackBlockEntity import ru.dbotthepony.mc.otm.block.entity.storage.DriveRackBlockEntity
import ru.dbotthepony.mc.otm.capability.FlowDirection import ru.dbotthepony.mc.otm.capability.FlowDirection
import ru.dbotthepony.mc.otm.menu.DriveSlot import ru.dbotthepony.mc.otm.menu.DriveMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
@ -18,7 +18,7 @@ class DriveRackMenu @JvmOverloads constructor(
inventory: Inventory, inventory: Inventory,
tile: DriveRackBlockEntity? = null tile: DriveRackBlockEntity? = null
) : MatteryPoweredMenu(MMenus.DRIVE_RACK, containerId, inventory, tile) { ) : MatteryPoweredMenu(MMenus.DRIVE_RACK, containerId, inventory, tile) {
val storageSlots = makeSlots(tile?.container ?: SimpleContainer(4), ::DriveSlot) val storageSlots = makeSlots(tile?.container ?: SimpleContainer(4), ::DriveMenuSlot)
val energyConfig = EnergyConfigPlayerInput(this, tile?.energyConfig) val energyConfig = EnergyConfigPlayerInput(this, tile?.energyConfig)
val profiledEnergy = ProfiledLevelGaugeWidget(this, tile?.energy, energyWidget) val profiledEnergy = ProfiledLevelGaugeWidget(this, tile?.energy, energyWidget)
val insertPriority = IntInputWithFeedback(this, tile?.let { it::insertPriority }) val insertPriority = IntInputWithFeedback(this, tile?.let { it::insertPriority })

View File

@ -17,7 +17,7 @@ import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.core.util.ItemStorageStackSorter import ru.dbotthepony.mc.otm.core.util.ItemStorageStackSorter
import ru.dbotthepony.mc.otm.item.PortableCondensationDriveItem import ru.dbotthepony.mc.otm.item.PortableCondensationDriveItem
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.data.INetworkedItemViewProvider import ru.dbotthepony.mc.otm.menu.data.INetworkedItemViewProvider
import ru.dbotthepony.mc.otm.menu.data.NetworkedItemView import ru.dbotthepony.mc.otm.menu.data.NetworkedItemView
import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
@ -36,7 +36,7 @@ class DriveViewerMenu(
) : MatteryPoweredMenu(MMenus.DRIVE_VIEWER, containerID, inventory, tile), INetworkedItemViewProvider { ) : MatteryPoweredMenu(MMenus.DRIVE_VIEWER, containerID, inventory, tile), INetworkedItemViewProvider {
override val networkedItemView = NetworkedItemView(inventory.player, this, tile == null) override val networkedItemView = NetworkedItemView(inventory.player, this, tile == null)
val driveSlot = object : MatterySlot(tile?.container ?: SimpleContainer(1), 0) { val driveSlot = object : MatteryMenuSlot(tile?.container ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return itemStack.getCapability(MatteryCapability.CONDENSATION_DRIVE) != null return itemStack.getCapability(MatteryCapability.CONDENSATION_DRIVE) != null
} }

View File

@ -16,7 +16,7 @@ import ru.dbotthepony.mc.otm.core.collect.map
import ru.dbotthepony.mc.otm.core.collect.reduce import ru.dbotthepony.mc.otm.core.collect.reduce
import ru.dbotthepony.mc.otm.core.isNotEmpty import ru.dbotthepony.mc.otm.core.isNotEmpty
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.data.INetworkedItemViewProvider import ru.dbotthepony.mc.otm.menu.data.INetworkedItemViewProvider
import ru.dbotthepony.mc.otm.menu.data.NetworkedItemView import ru.dbotthepony.mc.otm.menu.data.NetworkedItemView
import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
@ -27,7 +27,7 @@ import ru.dbotthepony.mc.otm.registry.game.MMenus
import ru.dbotthepony.mc.otm.storage.* import ru.dbotthepony.mc.otm.storage.*
import java.util.* import java.util.*
private class ResultSlot(container: Container) : MatterySlot(container, 0) { private class ResultMenuSlot(container: Container) : MatteryMenuSlot(container, 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return false return false
} }
@ -105,16 +105,16 @@ class ItemMonitorMenu(
} }
} }
val craftingResult: MatterySlot val craftingResult: MatteryMenuSlot
val craftingSlots: List<MatterySlot> val craftingSlots: List<MatteryMenuSlot>
init { init {
if (tile != null) { if (tile != null) {
networkedItemView.component = tile.poweredView networkedItemView.component = tile.poweredView
} }
craftingResult = ResultSlot(tile?.craftingResultContainer ?: SimpleContainer(1)) craftingResult = ResultMenuSlot(tile?.craftingResultContainer ?: SimpleContainer(1))
craftingSlots = makeSlots(tile?.craftingGrid ?: SimpleContainer(9), ::MatterySlot) craftingSlots = makeSlots(tile?.craftingGrid ?: SimpleContainer(9), ::MatteryMenuSlot)
craftingSlots.forEach(this::addSlot) craftingSlots.forEach(this::addSlot)
addSlot(craftingResult) addSlot(craftingResult)

View File

@ -12,7 +12,7 @@ import ru.dbotthepony.mc.otm.capability.MatteryPlayer
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.config.MachinesConfig import ru.dbotthepony.mc.otm.config.MachinesConfig
import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget
import ru.dbotthepony.mc.otm.registry.game.MMenus import ru.dbotthepony.mc.otm.registry.game.MMenus
@ -90,7 +90,7 @@ class AndroidStationMenu @JvmOverloads constructor(
} }
} }
private inner class AndroidSlot(container: Container, private val condition: (ItemStack) -> Boolean) : MatterySlot(container, 0) { private inner class AndroidMenuSlot(container: Container, private val condition: (ItemStack) -> Boolean) : MatteryMenuSlot(container, 0) {
override fun mayPickup(player: Player): Boolean { override fun mayPickup(player: Player): Boolean {
if (tile is AndroidStationBlockEntity) { if (tile is AndroidStationBlockEntity) {
return super.mayPickup(player) && tile.energy.batteryLevel >= MachinesConfig.AndroidStation.ENERGY_PER_OPERATION return super.mayPickup(player) && tile.energy.batteryLevel >= MachinesConfig.AndroidStation.ENERGY_PER_OPERATION
@ -108,7 +108,7 @@ class AndroidStationMenu @JvmOverloads constructor(
} }
} }
val androidBattery: MatterySlot = AndroidSlot(container { it.androidEnergy::item }) { val androidBattery: MatteryMenuSlot = AndroidMenuSlot(container { it.androidEnergy::item }) {
it.getCapability(Capabilities.EnergyStorage.ITEM) != null it.getCapability(Capabilities.EnergyStorage.ITEM) != null
} }

View File

@ -6,9 +6,9 @@ import ru.dbotthepony.mc.otm.block.entity.tech.BatteryBankBlockEntity
import net.minecraft.world.SimpleContainer import net.minecraft.world.SimpleContainer
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.menu.BatterySlot import ru.dbotthepony.mc.otm.menu.BatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
@ -21,7 +21,7 @@ class BatteryBankMenu(
tile: BatteryBankBlockEntity? = null, tile: BatteryBankBlockEntity? = null,
) : MatteryMenu(MMenus.BATTERY_BANK, p_38852_, inventory, tile) { ) : MatteryMenu(MMenus.BATTERY_BANK, p_38852_, inventory, tile) {
val powerLevel = ProfiledLevelGaugeWidget(this, tile?.energyConfig?.energy) val powerLevel = ProfiledLevelGaugeWidget(this, tile?.energyConfig?.energy)
val storageSlots: List<MatterySlot> val storageSlots: List<MatteryMenuSlot>
val redstone = EnumInputWithFeedback(this, RedstoneSetting::class.java) val redstone = EnumInputWithFeedback(this, RedstoneSetting::class.java)
val energyConfig = EnergyConfigPlayerInput(this, allowPull = false, allowPush = true) val energyConfig = EnergyConfigPlayerInput(this, allowPull = false, allowPush = true)
val itemConfig = ItemConfigPlayerInput(this, allowPull = false, allowPush = false) val itemConfig = ItemConfigPlayerInput(this, allowPull = false, allowPush = false)
@ -36,7 +36,7 @@ class BatteryBankMenu(
val container: Container = tile?.container ?: SimpleContainer(BatteryBankBlockEntity.CAPACITY) val container: Container = tile?.container ?: SimpleContainer(BatteryBankBlockEntity.CAPACITY)
storageSlots = immutableList(BatteryBankBlockEntity.CAPACITY) { storageSlots = immutableList(BatteryBankBlockEntity.CAPACITY) {
addStorageSlot(BatterySlot(container, it)) addStorageSlot(BatteryMenuSlot(container, it))
} }
addInventorySlots() addInventorySlots()

View File

@ -9,7 +9,7 @@ import ru.dbotthepony.kommons.util.setValue
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
import ru.dbotthepony.mc.otm.block.entity.tech.ChemicalGeneratorBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.ChemicalGeneratorBlockEntity
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
@ -30,19 +30,19 @@ class ChemicalGeneratorMenu @JvmOverloads constructor(id: Int, inv: Inventory, t
} }
} }
val fuelSlot = object : MatterySlot(tile?.fuelContainer ?: SimpleContainer(1), 0) { val fuelSlot = object : MatteryMenuSlot(tile?.fuelContainer ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return itemStack.getBurnTime(null) > 0 return itemStack.getBurnTime(null) > 0
} }
} }
val residueSlot = object : MatterySlot(tile?.residueContainer ?: SimpleContainer(1), 0) { val residueSlot = object : MatteryMenuSlot(tile?.residueContainer ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return false return false
} }
} }
val batterySlot = object : MatterySlot(tile?.batteryContainer ?: SimpleContainer(1), 0) { val batterySlot = object : MatteryMenuSlot(tile?.batteryContainer ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return itemStack.getCapability(Capabilities.EnergyStorage.ITEM)?.canReceive() ?: false return itemStack.getCapability(Capabilities.EnergyStorage.ITEM)?.canReceive() ?: false
} }

View File

@ -5,7 +5,7 @@ import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
import ru.dbotthepony.mc.otm.block.entity.tech.CobblerBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.CobblerBlockEntity
import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.menu.OutputSlot import ru.dbotthepony.mc.otm.menu.OutputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
@ -17,7 +17,7 @@ class CobblerMenu @JvmOverloads constructor(
inventory: Inventory, inventory: Inventory,
tile: CobblerBlockEntity? = null tile: CobblerBlockEntity? = null
) : MatteryMenu(MMenus.COBBLESTONE_GENERATOR, p_38852_, inventory, tile) { ) : MatteryMenu(MMenus.COBBLESTONE_GENERATOR, p_38852_, inventory, tile) {
val storageSlots = (tile?.container ?: SimpleContainer(CobblerBlockEntity.CONTAINER_SIZE)).let { c -> immutableList(c.containerSize) { addStorageSlot(OutputSlot(c, it)) } } val storageSlots = (tile?.container ?: SimpleContainer(CobblerBlockEntity.CONTAINER_SIZE)).let { c -> immutableList(c.containerSize) { addStorageSlot(OutputMenuSlot(c, it)) } }
val redstone = EnumInputWithFeedback<RedstoneSetting>(this) val redstone = EnumInputWithFeedback<RedstoneSetting>(this)
val itemConfig = ItemConfigPlayerInput(this) val itemConfig = ItemConfigPlayerInput(this)

View File

@ -6,7 +6,7 @@ import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
import ru.dbotthepony.mc.otm.block.entity.tech.EnergyHatchBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.EnergyHatchBlockEntity
import ru.dbotthepony.mc.otm.capability.FlowDirection import ru.dbotthepony.mc.otm.capability.FlowDirection
import ru.dbotthepony.mc.otm.menu.EnergyContainerInputSlot import ru.dbotthepony.mc.otm.menu.EnergyContainerInputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
import ru.dbotthepony.mc.otm.menu.makeSlots import ru.dbotthepony.mc.otm.menu.makeSlots
@ -22,7 +22,7 @@ class EnergyHatchMenu(
val container: Container = tile?.container ?: SimpleContainer(EnergyHatchBlockEntity.CAPACITY) val container: Container = tile?.container ?: SimpleContainer(EnergyHatchBlockEntity.CAPACITY)
val inputSlots = makeSlots(container) { a, b -> val inputSlots = makeSlots(container) { a, b ->
EnergyContainerInputSlot(a, b, direction = FlowDirection.input(isInput)) EnergyContainerInputMenuSlot(a, b, direction = FlowDirection.input(isInput))
} }
val gauge = ProfiledLevelGaugeWidget(this, tile?.energy) val gauge = ProfiledLevelGaugeWidget(this, tile?.energy)

View File

@ -7,7 +7,7 @@ import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
import ru.dbotthepony.mc.otm.block.entity.tech.EnergyServoBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.EnergyServoBlockEntity
import ru.dbotthepony.mc.otm.capability.energy import ru.dbotthepony.mc.otm.capability.energy
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
@ -19,13 +19,13 @@ class EnergyServoMenu @JvmOverloads constructor(
inventory: Inventory, inventory: Inventory,
tile: EnergyServoBlockEntity? = null tile: EnergyServoBlockEntity? = null
) : MatteryMenu(MMenus.ENERGY_SERVO, p_38852_, inventory, tile) { ) : MatteryMenu(MMenus.ENERGY_SERVO, p_38852_, inventory, tile) {
val dischargeSlot = object : MatterySlot(tile?.discharge ?: SimpleContainer(1), 0) { val dischargeSlot = object : MatteryMenuSlot(tile?.discharge ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && (itemStack.energy?.canExtract() ?: false) return super.mayPlace(itemStack) && (itemStack.energy?.canExtract() ?: false)
} }
} }
val chargeSlot = object : MatterySlot(tile?.charge ?: SimpleContainer(1), 0) { val chargeSlot = object : MatteryMenuSlot(tile?.charge ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && (itemStack.energy?.canReceive() ?: false) return super.mayPlace(itemStack) && (itemStack.energy?.canReceive() ?: false)
} }

View File

@ -13,7 +13,7 @@ import ru.dbotthepony.mc.otm.core.util.getTotalXpRequiredForLevel
import ru.dbotthepony.mc.otm.item.consumables.EssenceCapsuleItem import ru.dbotthepony.mc.otm.item.consumables.EssenceCapsuleItem
import ru.dbotthepony.mc.otm.item.EssenceServoItem import ru.dbotthepony.mc.otm.item.EssenceServoItem
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.FluidConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.FluidConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
@ -31,19 +31,19 @@ class EssenceStorageMenu(
val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig) val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig)
val fluidConfig = FluidConfigPlayerInput(this, tile?.fluidConfig) val fluidConfig = FluidConfigPlayerInput(this, tile?.fluidConfig)
val capsuleSlot = object : MatterySlot(tile?.capsuleContainer ?: SimpleContainer(1), 0) { val capsuleSlot = object : MatteryMenuSlot(tile?.capsuleContainer ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return itemStack.item is EssenceCapsuleItem && super.mayPlace(itemStack) return itemStack.item is EssenceCapsuleItem && super.mayPlace(itemStack)
} }
} }
val servoSlot = object : MatterySlot(tile?.servoContainer ?: SimpleContainer(1), 0) { val servoSlot = object : MatteryMenuSlot(tile?.servoContainer ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return itemStack.item == MItems.ESSENCE_SERVO && super.mayPlace(itemStack) return itemStack.item == MItems.ESSENCE_SERVO && super.mayPlace(itemStack)
} }
} }
val mendingSlot = object : MatterySlot(tile?.mendingContainer ?: SimpleContainer(1), 0) { val mendingSlot = object : MatteryMenuSlot(tile?.mendingContainer ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return itemStack.isDamaged && EnchantmentHelper.has(itemStack, EnchantmentEffectComponents.REPAIR_WITH_XP) return itemStack.isDamaged && EnchantmentHelper.has(itemStack, EnchantmentEffectComponents.REPAIR_WITH_XP)
} }

View File

@ -8,7 +8,7 @@ import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
import ru.dbotthepony.mc.otm.block.entity.tech.ItemHatchBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.ItemHatchBlockEntity
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.UserFilteredSlot import ru.dbotthepony.mc.otm.menu.UserFilteredMenuSlot
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
import ru.dbotthepony.mc.otm.menu.makeSlots import ru.dbotthepony.mc.otm.menu.makeSlots
import ru.dbotthepony.mc.otm.registry.game.MMenus import ru.dbotthepony.mc.otm.registry.game.MMenus
@ -20,8 +20,8 @@ class ItemHatchMenu(
tile: ItemHatchBlockEntity? = null tile: ItemHatchBlockEntity? = null
) : MatteryMenu(if (isInput) MMenus.ITEM_INPUT_HATCH else MMenus.ITEM_OUTPUT_HATCH, containerId, inventory, tile) { ) : MatteryMenu(if (isInput) MMenus.ITEM_INPUT_HATCH else MMenus.ITEM_OUTPUT_HATCH, containerId, inventory, tile) {
val actualContainer: Container = tile?.container ?: SimpleContainer(ItemHatchBlockEntity.CAPACITY) val actualContainer: Container = tile?.container ?: SimpleContainer(ItemHatchBlockEntity.CAPACITY)
val storageSlots: ImmutableList<UserFilteredSlot> = makeSlots(actualContainer) { a, b -> val storageSlots: ImmutableList<UserFilteredMenuSlot> = makeSlots(actualContainer) { a, b ->
object : UserFilteredSlot(a, b) { object : UserFilteredMenuSlot(a, b) {
override fun mayPlace(itemStack: ItemStack): Boolean { override fun mayPlace(itemStack: ItemStack): Boolean {
return isInput && super.mayPlace(itemStack) return isInput && super.mayPlace(itemStack)
} }

View File

@ -6,7 +6,7 @@ import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting
import ru.dbotthepony.mc.otm.block.entity.tech.MatterHatchBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.MatterHatchBlockEntity
import ru.dbotthepony.mc.otm.capability.FlowDirection import ru.dbotthepony.mc.otm.capability.FlowDirection
import ru.dbotthepony.mc.otm.menu.MatterContainerInputSlot import ru.dbotthepony.mc.otm.menu.MatterContainerInputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback
import ru.dbotthepony.mc.otm.menu.makeSlots import ru.dbotthepony.mc.otm.menu.makeSlots
@ -22,7 +22,7 @@ class MatterHatchMenu(
val container: Container = tile?.container ?: SimpleContainer(MatterHatchBlockEntity.CAPACITY) val container: Container = tile?.container ?: SimpleContainer(MatterHatchBlockEntity.CAPACITY)
val inputSlots = makeSlots(container) { a, b -> val inputSlots = makeSlots(container) { a, b ->
MatterContainerInputSlot(a, b, direction = FlowDirection.input(isInput)) MatterContainerInputMenuSlot(a, b, direction = FlowDirection.input(isInput))
} }
val gauge = ProfiledLevelGaugeWidget(this, tile?.matter) val gauge = ProfiledLevelGaugeWidget(this, tile?.matter)

View File

@ -8,8 +8,8 @@ import net.minecraft.world.inventory.MenuType
import ru.dbotthepony.mc.otm.block.entity.tech.PlatePressBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.PlatePressBlockEntity
import ru.dbotthepony.mc.otm.compat.jei.PlatePressRecipeCategory import ru.dbotthepony.mc.otm.compat.jei.PlatePressRecipeCategory
import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.menu.OutputSlot import ru.dbotthepony.mc.otm.menu.OutputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
@ -28,8 +28,8 @@ class PlatePressMenu(
tile: PlatePressBlockEntity? = null, tile: PlatePressBlockEntity? = null,
isTwin: Boolean isTwin: Boolean
) : AbstractProcessingMachineMenu(type, containerID, inventory, tile) { ) : AbstractProcessingMachineMenu(type, containerID, inventory, tile) {
val inputSlots = makeSlots(tile?.inputContainer ?: SimpleContainer(if (isTwin) 2 else 1), ::MatterySlot) val inputSlots = makeSlots(tile?.inputContainer ?: SimpleContainer(if (isTwin) 2 else 1), ::MatteryMenuSlot)
val outputSlots = makeSlots(tile?.outputContainer ?: SimpleContainer(if (isTwin) 2 else 1)) { a, b -> OutputSlot(a, b) { tile?.experience?.popExperience(player as ServerPlayer) } } val outputSlots = makeSlots(tile?.outputContainer ?: SimpleContainer(if (isTwin) 2 else 1)) { a, b -> OutputMenuSlot(a, b) { tile?.experience?.popExperience(player as ServerPlayer) } }
val gauges = immutableList(if (isTwin) 2 else 1) { ProgressGaugeWidget(this, tile?.jobEventLoops?.get(it)) } val gauges = immutableList(if (isTwin) 2 else 1) { ProgressGaugeWidget(this, tile?.jobEventLoops?.get(it)) }
override val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig, allowPush = true) override val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig, allowPush = true)

View File

@ -12,8 +12,8 @@ import ru.dbotthepony.mc.otm.block.entity.tech.PoweredFurnaceBlockEntity
import ru.dbotthepony.mc.otm.block.entity.tech.PoweredSmokerBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.PoweredSmokerBlockEntity
import ru.dbotthepony.mc.otm.compat.jei.MicrowaveRecipeCategory import ru.dbotthepony.mc.otm.compat.jei.MicrowaveRecipeCategory
import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.core.immutableList
import ru.dbotthepony.mc.otm.menu.OutputSlot import ru.dbotthepony.mc.otm.menu.OutputMenuSlot
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput
import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput
@ -31,8 +31,8 @@ class PoweredFurnaceMenu(
inventory: Inventory, inventory: Inventory,
tile: AbstractPoweredFurnaceBlockEntity<*, *>? = null tile: AbstractPoweredFurnaceBlockEntity<*, *>? = null
) : AbstractProcessingMachineMenu(type, containerID, inventory, tile) { ) : AbstractProcessingMachineMenu(type, containerID, inventory, tile) {
val inputSlots = makeSlots(tile?.inputs ?: SimpleContainer(2), ::MatterySlot) val inputSlots = makeSlots(tile?.inputs ?: SimpleContainer(2), ::MatteryMenuSlot)
val outputSlots = makeSlots(tile?.outputs ?: SimpleContainer(2)) { c, s -> OutputSlot(c, s) { tile?.experience?.popExperience(player as ServerPlayer) } } val outputSlots = makeSlots(tile?.outputs ?: SimpleContainer(2)) { c, s -> OutputMenuSlot(c, s) { tile?.experience?.popExperience(player as ServerPlayer) } }
val progressGauge = immutableList(2) { ProgressGaugeWidget(this, tile?.jobEventLoops?.get(it)) } val progressGauge = immutableList(2) { ProgressGaugeWidget(this, tile?.jobEventLoops?.get(it)) }
override val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig, allowPush = true) override val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig, allowPush = true)