Replace shulker box gui
This commit is contained in:
parent
b4977ea6ae
commit
ebc49b03c4
@ -0,0 +1,16 @@
|
|||||||
|
package ru.dbotthepony.mc.otm.mixin;
|
||||||
|
|
||||||
|
import net.minecraft.world.entity.player.Inventory;
|
||||||
|
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||||
|
import net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
|
import ru.dbotthepony.mc.otm.compat.vanilla.MatteryShulkerBoxMenu;
|
||||||
|
|
||||||
|
@Mixin(ShulkerBoxBlockEntity.class)
|
||||||
|
public abstract class ShulkerBoxBlockEntityMixin {
|
||||||
|
@Overwrite(remap = false)
|
||||||
|
public AbstractContainerMenu createMenu(int p_59312_, Inventory p_59313_) {
|
||||||
|
return new MatteryShulkerBoxMenu(p_59312_, p_59313_, (ShulkerBoxBlockEntity) (Object) this);
|
||||||
|
}
|
||||||
|
}
|
@ -44,6 +44,7 @@ import ru.dbotthepony.mc.otm.client.render.blockentity.MatterBatteryBankRenderer
|
|||||||
import ru.dbotthepony.mc.otm.compat.curios.isCuriosLoaded
|
import ru.dbotthepony.mc.otm.compat.curios.isCuriosLoaded
|
||||||
import ru.dbotthepony.mc.otm.compat.curios.onCuriosSlotModifiersUpdated
|
import ru.dbotthepony.mc.otm.compat.curios.onCuriosSlotModifiersUpdated
|
||||||
import ru.dbotthepony.mc.otm.compat.vanilla.MatteryChestMenu
|
import ru.dbotthepony.mc.otm.compat.vanilla.MatteryChestMenu
|
||||||
|
import ru.dbotthepony.mc.otm.compat.vanilla.VanillaMenuTypes
|
||||||
import ru.dbotthepony.mc.otm.config.AndroidConfig
|
import ru.dbotthepony.mc.otm.config.AndroidConfig
|
||||||
import ru.dbotthepony.mc.otm.config.CablesConfig
|
import ru.dbotthepony.mc.otm.config.CablesConfig
|
||||||
import ru.dbotthepony.mc.otm.config.ClientConfig
|
import ru.dbotthepony.mc.otm.config.ClientConfig
|
||||||
@ -127,7 +128,7 @@ object OverdriveThatMatters {
|
|||||||
MLootNumberProviders.register(MOD_BUS)
|
MLootNumberProviders.register(MOD_BUS)
|
||||||
|
|
||||||
StorageStack.register(MOD_BUS)
|
StorageStack.register(MOD_BUS)
|
||||||
MatteryChestMenu.register(MOD_BUS)
|
VanillaMenuTypes.register(MOD_BUS)
|
||||||
|
|
||||||
MCreativeTabs.initialize(MOD_BUS)
|
MCreativeTabs.initialize(MOD_BUS)
|
||||||
|
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
package ru.dbotthepony.mc.otm.compat.vanilla
|
||||||
|
|
||||||
|
import net.minecraft.world.Container
|
||||||
|
import net.minecraft.world.entity.player.Inventory
|
||||||
|
import net.minecraft.world.entity.player.Player
|
||||||
|
import net.minecraft.world.inventory.MenuType
|
||||||
|
import ru.dbotthepony.mc.otm.menu.MatteryMenu
|
||||||
|
import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
|
||||||
|
|
||||||
|
abstract class AbstractVanillaChestMenu(
|
||||||
|
type: MenuType<*>,
|
||||||
|
containerId: Int,
|
||||||
|
inventory: Inventory,
|
||||||
|
val container: Container
|
||||||
|
) : MatteryMenu(type, containerId, inventory) {
|
||||||
|
abstract val rows: Int
|
||||||
|
abstract val columns: Int
|
||||||
|
|
||||||
|
abstract val containerSlots: List<MatteryMenuSlot>
|
||||||
|
val sort = SortInput(container, playerSortSettings)
|
||||||
|
|
||||||
|
override fun stillValid(player: Player): Boolean {
|
||||||
|
return container.stillValid(player)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun removed(player: Player) {
|
||||||
|
super.removed(player)
|
||||||
|
container.stopOpen(player)
|
||||||
|
}
|
||||||
|
}
|
@ -1,118 +1,74 @@
|
|||||||
package ru.dbotthepony.mc.otm.compat.vanilla
|
package ru.dbotthepony.mc.otm.compat.vanilla
|
||||||
|
|
||||||
import net.minecraft.core.registries.Registries
|
|
||||||
import net.minecraft.world.Container
|
import net.minecraft.world.Container
|
||||||
import net.minecraft.world.SimpleContainer
|
import net.minecraft.world.SimpleContainer
|
||||||
import net.minecraft.world.entity.player.Inventory
|
import net.minecraft.world.entity.player.Inventory
|
||||||
import net.minecraft.world.entity.player.Player
|
|
||||||
import net.minecraft.world.flag.FeatureFlags
|
|
||||||
import net.minecraft.world.inventory.MenuType
|
import net.minecraft.world.inventory.MenuType
|
||||||
import net.neoforged.bus.api.IEventBus
|
import ru.dbotthepony.mc.otm.container.EnhancedContainer
|
||||||
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent
|
|
||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
|
||||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu
|
|
||||||
import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
|
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
|
|
||||||
|
|
||||||
class MatteryChestMenu(
|
class MatteryChestMenu(
|
||||||
type: MenuType<*>, containerId: Int,
|
type: MenuType<*>, containerId: Int,
|
||||||
inventory: Inventory, val rows: Int, val columns: Int,
|
inventory: Inventory, override val rows: Int, override val columns: Int,
|
||||||
val container: Container = SimpleContainer(rows * columns)
|
container: Container = EnhancedContainer(rows * columns)
|
||||||
) : MatteryMenu(type, containerId, inventory) {
|
) : AbstractVanillaChestMenu(type, containerId, inventory, container) {
|
||||||
val chestSlots = makeSlots(container, ::MatteryMenuSlot)
|
override val containerSlots = makeSlots(container, ::MatteryMenuSlot)
|
||||||
val sort = SortInput(container, playerSortSettings)
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
require(rows * columns == container.containerSize) { "Provided container $container has different dimensions than specified rows x columns: ${container.containerSize} vs $rows x $columns (${rows * columns})" }
|
require(rows * columns == container.containerSize) { "Provided container $container has different dimensions than specified rows x columns: ${container.containerSize} vs $rows x $columns (${rows * columns})" }
|
||||||
container.startOpen(player)
|
container.startOpen(player)
|
||||||
addStorageSlot(chestSlots)
|
addStorageSlot(containerSlots)
|
||||||
addInventorySlots()
|
addInventorySlots()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun stillValid(player: Player): Boolean {
|
|
||||||
return container.stillValid(player)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun removed(player: Player) {
|
|
||||||
super.removed(player)
|
|
||||||
container.stopOpen(player)
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val registrar = MDeferredRegister(Registries.MENU, OverdriveThatMatters.MOD_ID)
|
|
||||||
|
|
||||||
private val GENERIC_9x1 by registrar.register("generic_9x1") { MenuType(::c9x1, FeatureFlags.VANILLA_SET) }
|
|
||||||
private val GENERIC_9x2 by registrar.register("generic_9x2") { MenuType(::c9x2, FeatureFlags.VANILLA_SET) }
|
|
||||||
private val GENERIC_9x3 by registrar.register("generic_9x3") { MenuType(::c9x3, FeatureFlags.VANILLA_SET) }
|
|
||||||
private val GENERIC_9x4 by registrar.register("generic_9x4") { MenuType(::c9x4, FeatureFlags.VANILLA_SET) }
|
|
||||||
private val GENERIC_9x5 by registrar.register("generic_9x5") { MenuType(::c9x5, FeatureFlags.VANILLA_SET) }
|
|
||||||
private val GENERIC_9x6 by registrar.register("generic_9x6") { MenuType(::c9x6, FeatureFlags.VANILLA_SET) }
|
|
||||||
private val GENERIC_3x3 by registrar.register("generic_3x3") { MenuType(::c3x3, FeatureFlags.VANILLA_SET) }
|
|
||||||
private val HOPPER by registrar.register("hopper") { MenuType(::hopper, FeatureFlags.VANILLA_SET) }
|
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun c9x1(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9)): MatteryChestMenu {
|
fun c9x1(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9)): MatteryChestMenu {
|
||||||
return MatteryChestMenu(GENERIC_9x1, containerId, inventory, 1, 9, container)
|
return MatteryChestMenu(VanillaMenuTypes.GENERIC_9x1, containerId, inventory, 1, 9, container)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun c9x2(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 2)): MatteryChestMenu {
|
fun c9x2(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 2)): MatteryChestMenu {
|
||||||
return MatteryChestMenu(GENERIC_9x2, containerId, inventory, 2, 9, container)
|
return MatteryChestMenu(VanillaMenuTypes.GENERIC_9x2, containerId, inventory, 2, 9, container)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun c9x3(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 3)): MatteryChestMenu {
|
fun c9x3(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 3)): MatteryChestMenu {
|
||||||
return MatteryChestMenu(GENERIC_9x3, containerId, inventory, 3, 9, container)
|
return MatteryChestMenu(VanillaMenuTypes.GENERIC_9x3, containerId, inventory, 3, 9, container)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun c9x4(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 4)): MatteryChestMenu {
|
fun c9x4(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 4)): MatteryChestMenu {
|
||||||
return MatteryChestMenu(GENERIC_9x4, containerId, inventory, 4, 9, container)
|
return MatteryChestMenu(VanillaMenuTypes.GENERIC_9x4, containerId, inventory, 4, 9, container)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun c9x5(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 5)): MatteryChestMenu {
|
fun c9x5(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 5)): MatteryChestMenu {
|
||||||
return MatteryChestMenu(GENERIC_9x5, containerId, inventory, 5, 9, container)
|
return MatteryChestMenu(VanillaMenuTypes.GENERIC_9x5, containerId, inventory, 5, 9, container)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun c9x6(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 6)): MatteryChestMenu {
|
fun c9x6(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(9 * 6)): MatteryChestMenu {
|
||||||
return MatteryChestMenu(GENERIC_9x6, containerId, inventory, 6, 9, container)
|
return MatteryChestMenu(VanillaMenuTypes.GENERIC_9x6, containerId, inventory, 6, 9, container)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun c3x3(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(3 * 3)): MatteryChestMenu {
|
fun c3x3(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(3 * 3)): MatteryChestMenu {
|
||||||
return MatteryChestMenu(GENERIC_3x3, containerId, inventory, 3, 3, container)
|
return MatteryChestMenu(VanillaMenuTypes.GENERIC_3x3, containerId, inventory, 3, 3, container)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun hopper(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(5)): MatteryChestMenu {
|
fun hopper(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(5)): MatteryChestMenu {
|
||||||
return MatteryChestMenu(HOPPER, containerId, inventory, 1, 5, container)
|
return MatteryChestMenu(VanillaMenuTypes.HOPPER, containerId, inventory, 1, 5, container)
|
||||||
}
|
|
||||||
|
|
||||||
fun register(bus: IEventBus) {
|
|
||||||
registrar.register(bus)
|
|
||||||
bus.addListener(this::registerScreens)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun registerScreens(event: RegisterMenuScreensEvent) {
|
|
||||||
event.register(GENERIC_9x1, ::MatteryChestScreen)
|
|
||||||
event.register(GENERIC_9x2, ::MatteryChestScreen)
|
|
||||||
event.register(GENERIC_9x3, ::MatteryChestScreen)
|
|
||||||
event.register(GENERIC_9x4, ::MatteryChestScreen)
|
|
||||||
event.register(GENERIC_9x5, ::MatteryChestScreen)
|
|
||||||
event.register(GENERIC_9x6, ::MatteryChestScreen)
|
|
||||||
event.register(GENERIC_3x3, ::MatteryChestScreen)
|
|
||||||
event.register(HOPPER, ::MatteryChestScreen)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
package ru.dbotthepony.mc.otm.compat.vanilla
|
||||||
|
|
||||||
|
import net.minecraft.world.Container
|
||||||
|
import net.minecraft.world.entity.player.Inventory
|
||||||
|
import net.minecraft.world.item.ItemStack
|
||||||
|
import ru.dbotthepony.mc.otm.container.EnhancedContainer
|
||||||
|
import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
|
||||||
|
import ru.dbotthepony.mc.otm.menu.makeSlots
|
||||||
|
|
||||||
|
class MatteryShulkerBoxMenu(
|
||||||
|
containerId: Int,
|
||||||
|
inventory: Inventory,
|
||||||
|
container: Container = EnhancedContainer(27)
|
||||||
|
) : AbstractVanillaChestMenu(VanillaMenuTypes.SHULKER_BOX, containerId, inventory, container) {
|
||||||
|
override val containerSlots = makeSlots(container, ::Slot)
|
||||||
|
override val rows: Int
|
||||||
|
get() = 3
|
||||||
|
override val columns: Int
|
||||||
|
get() = 9
|
||||||
|
|
||||||
|
init {
|
||||||
|
container.startOpen(player)
|
||||||
|
addStorageSlot(containerSlots)
|
||||||
|
addInventorySlots()
|
||||||
|
}
|
||||||
|
|
||||||
|
class Slot(container: Container, slot: Int) : MatteryMenuSlot(container, slot) {
|
||||||
|
override fun mayPlace(stack: ItemStack): Boolean {
|
||||||
|
return super.mayPlace(stack) && stack.item.canFitInsideContainerItems()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,7 +11,7 @@ import ru.dbotthepony.mc.otm.client.screen.panels.slot.AbstractSlotPanel
|
|||||||
import ru.dbotthepony.mc.otm.client.screen.panels.slot.SlotPanel
|
import ru.dbotthepony.mc.otm.client.screen.panels.slot.SlotPanel
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.util.GridPanel
|
import ru.dbotthepony.mc.otm.client.screen.panels.util.GridPanel
|
||||||
|
|
||||||
class MatteryChestScreen(menu: MatteryChestMenu, inventory: Inventory, title: Component) : MatteryScreen<MatteryChestMenu>(menu, inventory, title) {
|
class VanillaChestScreen(menu: AbstractVanillaChestMenu, inventory: Inventory, title: Component) : MatteryScreen<AbstractVanillaChestMenu>(menu, inventory, title) {
|
||||||
override fun makeMainFrame(): FramePanel<MatteryScreen<*>> {
|
override fun makeMainFrame(): FramePanel<MatteryScreen<*>> {
|
||||||
val frame = FramePanel.padded(this, AbstractSlotPanel.SIZE * menu.columns.coerceAtLeast(9), AbstractSlotPanel.SIZE * menu.rows + 4f, title)
|
val frame = FramePanel.padded(this, AbstractSlotPanel.SIZE * menu.columns.coerceAtLeast(9), AbstractSlotPanel.SIZE * menu.rows + 4f, title)
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ class MatteryChestScreen(menu: MatteryChestMenu, inventory: Inventory, title: Co
|
|||||||
grid.dock = Dock.FILL
|
grid.dock = Dock.FILL
|
||||||
grid.gravity = RenderGravity.BOTTOM_CENTER
|
grid.gravity = RenderGravity.BOTTOM_CENTER
|
||||||
|
|
||||||
for (slot in menu.chestSlots)
|
for (slot in menu.containerSlots)
|
||||||
SlotPanel(this, grid, slot)
|
SlotPanel(this, grid, slot)
|
||||||
|
|
||||||
val controls = DeviceControls(this, frame)
|
val controls = DeviceControls(this, frame)
|
@ -0,0 +1,41 @@
|
|||||||
|
package ru.dbotthepony.mc.otm.compat.vanilla
|
||||||
|
|
||||||
|
import net.minecraft.core.registries.Registries
|
||||||
|
import net.minecraft.world.flag.FeatureFlags
|
||||||
|
import net.minecraft.world.inventory.MenuType
|
||||||
|
import net.neoforged.bus.api.IEventBus
|
||||||
|
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent
|
||||||
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||||
|
import ru.dbotthepony.mc.otm.registry.MDeferredRegister
|
||||||
|
|
||||||
|
object VanillaMenuTypes {
|
||||||
|
private val registrar = MDeferredRegister(Registries.MENU, OverdriveThatMatters.MOD_ID)
|
||||||
|
|
||||||
|
val GENERIC_9x1 by registrar.register("generic_9x1") { MenuType(MatteryChestMenu::c9x1, FeatureFlags.VANILLA_SET) }
|
||||||
|
val GENERIC_9x2 by registrar.register("generic_9x2") { MenuType(MatteryChestMenu::c9x2, FeatureFlags.VANILLA_SET) }
|
||||||
|
val GENERIC_9x3 by registrar.register("generic_9x3") { MenuType(MatteryChestMenu::c9x3, FeatureFlags.VANILLA_SET) }
|
||||||
|
val GENERIC_9x4 by registrar.register("generic_9x4") { MenuType(MatteryChestMenu::c9x4, FeatureFlags.VANILLA_SET) }
|
||||||
|
val GENERIC_9x5 by registrar.register("generic_9x5") { MenuType(MatteryChestMenu::c9x5, FeatureFlags.VANILLA_SET) }
|
||||||
|
val GENERIC_9x6 by registrar.register("generic_9x6") { MenuType(MatteryChestMenu::c9x6, FeatureFlags.VANILLA_SET) }
|
||||||
|
val GENERIC_3x3 by registrar.register("generic_3x3") { MenuType(MatteryChestMenu::c3x3, FeatureFlags.VANILLA_SET) }
|
||||||
|
val HOPPER by registrar.register("hopper") { MenuType(MatteryChestMenu::hopper, FeatureFlags.VANILLA_SET) }
|
||||||
|
|
||||||
|
val SHULKER_BOX by registrar.register("shulker_box") { MenuType(::MatteryShulkerBoxMenu, FeatureFlags.VANILLA_SET) }
|
||||||
|
|
||||||
|
fun register(bus: IEventBus) {
|
||||||
|
registrar.register(bus)
|
||||||
|
bus.addListener(this::registerScreens)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun registerScreens(event: RegisterMenuScreensEvent) {
|
||||||
|
event.register(GENERIC_9x1, ::VanillaChestScreen)
|
||||||
|
event.register(GENERIC_9x2, ::VanillaChestScreen)
|
||||||
|
event.register(GENERIC_9x3, ::VanillaChestScreen)
|
||||||
|
event.register(GENERIC_9x4, ::VanillaChestScreen)
|
||||||
|
event.register(GENERIC_9x5, ::VanillaChestScreen)
|
||||||
|
event.register(GENERIC_9x6, ::VanillaChestScreen)
|
||||||
|
event.register(GENERIC_3x3, ::VanillaChestScreen)
|
||||||
|
event.register(HOPPER, ::VanillaChestScreen)
|
||||||
|
event.register(SHULKER_BOX, ::VanillaChestScreen)
|
||||||
|
}
|
||||||
|
}
|
@ -19,7 +19,8 @@
|
|||||||
"DispenserBlockEntityMixin",
|
"DispenserBlockEntityMixin",
|
||||||
"GuiGraphicsMixin",
|
"GuiGraphicsMixin",
|
||||||
"BlockStateBaseMixin",
|
"BlockStateBaseMixin",
|
||||||
"LevelMixin"
|
"LevelMixin",
|
||||||
|
"ShulkerBoxBlockEntityMixin"
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"MixinGameRenderer",
|
"MixinGameRenderer",
|
||||||
|
Loading…
Reference in New Issue
Block a user