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 --- .../mc/eris_alchemy/menu/AlchemicalChestMenu.java | 20 +--- .../mc/eris_alchemy/menu/ChestLikeBlockMenu.java | 67 -------------- .../enes/mc/eris_alchemy/menu/ChestLikeMenu.java | 101 +++++++++++++++++++++ .../mc/eris_alchemy/menu/EnergyCondenserMenu.java | 60 ++++++++++++ 4 files changed, 165 insertions(+), 83 deletions(-) delete mode 100644 src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeBlockMenu.java create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/menu/EnergyCondenserMenu.java (limited to 'src/main/java/lv/enes/mc/eris_alchemy/menu') diff --git a/src/main/java/lv/enes/mc/eris_alchemy/menu/AlchemicalChestMenu.java b/src/main/java/lv/enes/mc/eris_alchemy/menu/AlchemicalChestMenu.java index 1dc3364..35db476 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/menu/AlchemicalChestMenu.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/menu/AlchemicalChestMenu.java @@ -6,7 +6,7 @@ import net.minecraft.world.SimpleContainer; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.Slot; -public class AlchemicalChestMenu extends ChestLikeBlockMenu { +public class AlchemicalChestMenu extends ChestLikeMenu { private static final int WIDTH = 13; private static final int HEIGHT = 8; @@ -24,25 +24,13 @@ public class AlchemicalChestMenu extends ChestLikeBlockMenu { var y_off = 8; for (var y = 0; y < HEIGHT; y++) { - for (var x = 0; x < WIDTH; x++ ) { + for (var x = 0; x < WIDTH; x++) { addSlot(new Slot(container, y * WIDTH + x, x_off + x * 18, y_off + y * 18)); } } - x_off = 44; - y_off = 155; - - for (var y = 0; y < 3; y++) { - for (var x = 0; x < 9; x++) { - addSlot(new Slot(playerInventory, y * 9 + x + 9, x_off + x * 18, y_off + y * 18)); - } - } - - y_off = 213; - - for (var x = 0; x < 9; x++) { - addSlot(new Slot(playerInventory, x, x_off + x * 18, y_off)); - } + addPlayerInventorySlots(playerInventory, 44, 155); + addPlayerHotbarSlots(playerInventory, 44, 213); } @Override diff --git a/src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeBlockMenu.java b/src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeBlockMenu.java deleted file mode 100644 index 897abe9..0000000 --- a/src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeBlockMenu.java +++ /dev/null @@ -1,67 +0,0 @@ -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.item.ItemStack; - -public abstract class ChestLikeBlockMenu extends AbstractContainerMenu { - protected final Container container; - - public ChestLikeBlockMenu( - 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(); - - public Container getContainer() { - return container; - } - - @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()) { - if (!moveItemStackTo(originalStack, container.getContainerSize(), slots.size(), true)) { - return ItemStack.EMPTY; - } - } else if (!moveItemStackTo(originalStack, 0, container.getContainerSize(), 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); - } -} 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); + } +} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/menu/EnergyCondenserMenu.java b/src/main/java/lv/enes/mc/eris_alchemy/menu/EnergyCondenserMenu.java new file mode 100644 index 0000000..bdba77b --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/menu/EnergyCondenserMenu.java @@ -0,0 +1,60 @@ +package lv.enes.mc.eris_alchemy.menu; + +import lv.enes.mc.eris_alchemy.ErisAlchemyRegistry; +import lv.enes.mc.eris_alchemy.block.entity.EnergyCondenserEntity; +import lv.enes.mc.eris_alchemy.utils.SyncedValue.SyncedDouble; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.Container; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.Slot; + +public class EnergyCondenserMenu extends ChestLikeMenu { + private static final int WIDTH = 13; + private static final int HEIGHT = 7; + + private final SyncedDouble storedEmc; + + public EnergyCondenserMenu(int syncId, Inventory playerInventory, FriendlyByteBuf buf) { + this(syncId, playerInventory, new SimpleContainer(WIDTH * HEIGHT + 1), SyncedDouble.deserialize(buf)); + } + + public EnergyCondenserMenu(int syncId, Inventory playerInventory, EnergyCondenserEntity entity) { + this(syncId, playerInventory, entity, entity.getStoredEmcSyncer()); + } + + public EnergyCondenserMenu(int syncId, Inventory playerInventory, Container container, SyncedDouble storedEmc) { + super(ErisAlchemyRegistry.Menus.ENERGY_CONDENSER, syncId, playerInventory, container); + this.storedEmc = storedEmc; + } + + @Override + protected void addSlots(Inventory playerInventory) { + addSlot(new Slot(container, 0, 8, 7)); + + var xOff = 8; + var yOff = 28; + for (var y = 0; y < HEIGHT; y++) { + for (var x = 0; x < WIDTH; x++) { + addSlot(new Slot(container, y * WIDTH + x + 1, xOff + x * 18, yOff + y * 18)); + } + } + + addPlayerInventorySlots(playerInventory, 44, 157); + addPlayerHotbarSlots(playerInventory, 44, 213); + } + + @Override + protected int getQuickMoveStart() { + return 1; + } + + @Override + protected int getRequiredSize() { + return WIDTH * HEIGHT + 1; + } + + public double getStoredEmc() { + return storedEmc.getValue(); + } +} -- cgit v1.2.3