aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java
new file mode 100644
index 00000000..1d66c661
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java
@@ -0,0 +1,68 @@
+package de.hysky.skyblocker.skyblock.item;
+
+import net.minecraft.entity.player.PlayerInventory;
+import net.minecraft.inventory.Inventory;
+import net.minecraft.screen.GenericContainerScreenHandler;
+import net.minecraft.screen.ScreenHandlerType;
+import net.minecraft.screen.slot.Slot;
+
+import java.util.Arrays;
+
+public class SkyblockCraftingTableScreenHandler extends GenericContainerScreenHandler {
+
+ private static final int[] normalSlots = new int[]{
+ 10, 11, 12, 16,
+ 19, 20, 21, 23, 25,
+ 28, 29, 30, 34
+ };
+ public SkyblockCraftingTableScreenHandler(ScreenHandlerType<?> type, int syncId, PlayerInventory playerInventory, Inventory inventory, int rows) {
+ super(type, syncId, playerInventory, inventory, rows);
+ for (int i = 0; i < rows*9; i++) {
+ Slot originalSlot = slots.get(i);
+ if (Arrays.binarySearch(normalSlots, i) >= 0) {
+ int[] coords = getCoords(i);
+ Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), coords[0], coords[1]);
+ slot.id = i;
+ slots.set(i, slot);
+ } else {
+ DisabledSlot slot = new DisabledSlot(originalSlot.inventory, originalSlot.getIndex(), originalSlot.x, originalSlot.y);
+ slot.id = i;
+ slots.set(i, slot);
+ }
+ }
+ int yOffset = (rows - 4) * 18 + 19;
+ for (int i = rows*9; i < slots.size(); i++) {
+ Slot originalSlot = slots.get(i);
+ Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), originalSlot.x, originalSlot.y - yOffset);
+ slot.id = i;
+ slots.set(i, slot);
+ }
+ }
+
+ public SkyblockCraftingTableScreenHandler(GenericContainerScreenHandler handler, PlayerInventory playerInventory) {
+ this(handler.getType(), handler.syncId, playerInventory, handler.getInventory(), handler.getRows());
+ }
+
+ private int[] getCoords(int slot) {
+ if (slot == 23) return new int[]{124, 35};
+ if (slot == 16 || slot == 25 || slot == 34) {
+ int y = (slot/9 - 1) * 18 + 8;
+ return new int[]{174, y};
+ }
+ int gridX = slot%9 - 1;
+ int gridY = slot/9 - 1;
+ return new int[]{30 + gridX*18, 17+gridY*18};
+ }
+
+ public static class DisabledSlot extends Slot {
+
+ public DisabledSlot(Inventory inventory, int index, int x, int y) {
+ super(inventory, index, x, y);
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return false;
+ }
+ }
+}