From 000b84e87eaedb94fb87ccb11e376c51f99a1d07 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Wed, 10 Jan 2024 17:41:07 +0100 Subject: Added Energy Condenser --- .../enes/mc/eris_alchemy/menu/ChestLikeMenu.java | 101 +++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java (limited to 'src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java') diff --git a/src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java b/src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java new file mode 100644 index 0000000..e561f0d --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java @@ -0,0 +1,101 @@ +package lv.enes.mc.eris_alchemy.menu; + +import jakarta.annotation.Nonnull; +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; + +public abstract class ChestLikeMenu extends AbstractContainerMenu { + protected final Container container; + + public ChestLikeMenu( + MenuType type, + int syncId, + Inventory playerInventory, + Container container + ) { + super(type, syncId); + checkContainerSize(container, getRequiredSize()); + this.container = container; + container.startOpen(playerInventory.player); + addSlots(playerInventory); + } + + protected abstract void addSlots(Inventory playerInventory); + protected abstract int getRequiredSize(); + + protected void addPlayerInventorySlots(Inventory playerInventory, int xOff, int yOff) { + for (var y = 0; y < 3; y++) { + for (var x = 0; x < 9; x++) { + addSlot(new Slot(playerInventory, y * 9 + x + 9, xOff + x * 18, yOff + y * 18)); + } + } + } + + protected void addPlayerHotbarSlots(Inventory playerInventory, int xOff, int yOff) { + for (var x = 0; x < 9; x++) { + addSlot(new Slot(playerInventory, x, xOff + x * 18, yOff)); + } + } + + public Container getContainer() { + return container; + } + + protected int getQuickMoveStart() { + return 0; + } + + protected int getQuickMoveEnd() { + return container.getContainerSize(); + } + + @Override + public void broadcastChanges() { + super.broadcastChanges(); + } + + @Override + public void broadcastFullState() { + super.broadcastFullState(); + } + + @Nonnull + @Override + public ItemStack quickMoveStack(Player player, int fromIndex) { + var newStack = ItemStack.EMPTY; + var slot = slots.get(fromIndex); + if (!slot.hasItem()) { + return newStack; + } + + var originalStack = slot.getItem(); + newStack = originalStack.copy(); + + if (fromIndex < container.getContainerSize()) { + // In container, else player inv + if (!moveItemStackTo(originalStack, container.getContainerSize(), slots.size(), true)) { + return ItemStack.EMPTY; + } + } else if (!moveItemStackTo(originalStack, getQuickMoveStart(), getQuickMoveEnd(), false)) { + return ItemStack.EMPTY; + } + + if (originalStack.isEmpty()) { + slot.setByPlayer(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + + return newStack; + } + + @Override + public boolean stillValid(Player player) { + return container.stillValid(player); + } +} -- cgit v1.2.3