summaryrefslogtreecommitdiff
path: root/src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java
diff options
context:
space:
mode:
authorGravatar Uko Kokņevičs2024-01-10 17:41:07 +0100
committerGravatar Uko Kokņevičs2024-01-10 17:41:07 +0100
commit000b84e87eaedb94fb87ccb11e376c51f99a1d07 (patch)
treedd9519e7dadf613a71e01b04cac7be9c121a9f18 /src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java
parentMove out common chest logic to separate files also in client code (diff)
downloadmc-eris-alchemy-000b84e87eaedb94fb87ccb11e376c51f99a1d07.tar.gz
mc-eris-alchemy-000b84e87eaedb94fb87ccb11e376c51f99a1d07.tar.xz
mc-eris-alchemy-000b84e87eaedb94fb87ccb11e376c51f99a1d07.zip
Added Energy Condenser
Diffstat (limited to 'src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java')
-rw-r--r--src/main/java/lv/enes/mc/eris_alchemy/menu/ChestLikeMenu.java101
1 files changed, 101 insertions, 0 deletions
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 @@
1package lv.enes.mc.eris_alchemy.menu;
2
3import jakarta.annotation.Nonnull;
4import net.minecraft.world.Container;
5import net.minecraft.world.entity.player.Inventory;
6import net.minecraft.world.entity.player.Player;
7import net.minecraft.world.inventory.AbstractContainerMenu;
8import net.minecraft.world.inventory.MenuType;
9import net.minecraft.world.inventory.Slot;
10import net.minecraft.world.item.ItemStack;
11
12public abstract class ChestLikeMenu extends AbstractContainerMenu {
13 protected final Container container;
14
15 public ChestLikeMenu(
16 MenuType<? extends ChestLikeMenu> type,
17 int syncId,
18 Inventory playerInventory,
19 Container container
20 ) {
21 super(type, syncId);
22 checkContainerSize(container, getRequiredSize());
23 this.container = container;
24 container.startOpen(playerInventory.player);
25 addSlots(playerInventory);
26 }
27
28 protected abstract void addSlots(Inventory playerInventory);
29 protected abstract int getRequiredSize();
30
31 protected void addPlayerInventorySlots(Inventory playerInventory, int xOff, int yOff) {
32 for (var y = 0; y < 3; y++) {
33 for (var x = 0; x < 9; x++) {
34 addSlot(new Slot(playerInventory, y * 9 + x + 9, xOff + x * 18, yOff + y * 18));
35 }
36 }
37 }
38
39 protected void addPlayerHotbarSlots(Inventory playerInventory, int xOff, int yOff) {
40 for (var x = 0; x < 9; x++) {
41 addSlot(new Slot(playerInventory, x, xOff + x * 18, yOff));
42 }
43 }
44
45 public Container getContainer() {
46 return container;
47 }
48
49 protected int getQuickMoveStart() {
50 return 0;
51 }
52
53 protected int getQuickMoveEnd() {
54 return container.getContainerSize();
55 }
56
57 @Override
58 public void broadcastChanges() {
59 super.broadcastChanges();
60 }
61
62 @Override
63 public void broadcastFullState() {
64 super.broadcastFullState();
65 }
66
67 @Nonnull
68 @Override
69 public ItemStack quickMoveStack(Player player, int fromIndex) {
70 var newStack = ItemStack.EMPTY;
71 var slot = slots.get(fromIndex);
72 if (!slot.hasItem()) {
73 return newStack;
74 }
75
76 var originalStack = slot.getItem();
77 newStack = originalStack.copy();
78
79 if (fromIndex < container.getContainerSize()) {
80 // In container, else player inv
81 if (!moveItemStackTo(originalStack, container.getContainerSize(), slots.size(), true)) {
82 return ItemStack.EMPTY;
83 }
84 } else if (!moveItemStackTo(originalStack, getQuickMoveStart(), getQuickMoveEnd(), false)) {
85 return ItemStack.EMPTY;
86 }
87
88 if (originalStack.isEmpty()) {
89 slot.setByPlayer(ItemStack.EMPTY);
90 } else {
91 slot.setChanged();
92 }
93
94 return newStack;
95 }
96
97 @Override
98 public boolean stillValid(Player player) {
99 return container.stillValid(player);
100 }
101}