From a2a57d1656e393cc8521aa6c2e4ed2a7136f3831 Mon Sep 17 00:00:00 2001 From: Julia <78276563+Vlamonster@users.noreply.github.com> Date: Wed, 24 Sep 2025 23:25:39 +0200 Subject: [PATCH] Batch Actions and Defer Registration of Slots (#72) --- .../binnie/core/craftgui/WindowFieldKit.java | 12 +- .../craftgui/minecraft/ContainerCraftGUI.java | 166 ++++++++++-------- .../control/ControlPlayerInventory.java | 11 +- .../minecraft/control/ControlSlot.java | 35 +++- .../minecraft/control/ControlSlotArray.java | 15 +- .../machines/storage/WindowCompartment.java | 9 +- .../core/network/packet/MessageCraftGUI.java | 16 +- .../extrabees/gui/WindowAlvearyFrame.java | 3 +- .../extrabees/gui/WindowAlvearyMutator.java | 3 +- .../gui/WindowAlvearyStimulator.java | 3 +- .../extratrees/craftgui/WindowLumbermill.java | 15 +- .../extratrees/craftgui/WindowWoodworker.java | 13 +- .../genetics/craftgui/WindowAcclimatiser.java | 3 +- .../genetics/craftgui/WindowAnalyser.java | 12 +- .../genetics/craftgui/WindowGenepool.java | 12 +- .../genetics/craftgui/WindowIncubator.java | 3 +- .../genetics/craftgui/WindowInoculator.java | 12 +- .../genetics/craftgui/WindowIsolator.java | 16 +- .../genetics/craftgui/WindowPolymeriser.java | 12 +- .../genetics/craftgui/WindowSequencer.java | 14 +- .../genetics/craftgui/WindowSplicer.java | 12 +- .../binnie/genetics/gui/WindowAnalyst.java | 8 +- 22 files changed, 286 insertions(+), 119 deletions(-) diff --git a/src/main/java/binnie/core/craftgui/WindowFieldKit.java b/src/main/java/binnie/core/craftgui/WindowFieldKit.java index 9703861d..878232cd 100644 --- a/src/main/java/binnie/core/craftgui/WindowFieldKit.java +++ b/src/main/java/binnie/core/craftgui/WindowFieldKit.java @@ -12,6 +12,7 @@ import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import binnie.Binnie; import binnie.core.AbstractMod; @@ -33,6 +34,7 @@ import binnie.core.craftgui.resource.minecraft.CraftGUITexture; import binnie.core.craftgui.resource.minecraft.PaddedTexture; import binnie.core.craftgui.resource.minecraft.StandardTexture; import binnie.core.machines.inventory.SlotValidator; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.extrabees.core.ExtraBeeTexture; import binnie.extrabees.gui.ExtraBeeGUITexture; @@ -125,8 +127,14 @@ public class WindowFieldKit extends Window { handGlass.x(), handGlass.y(), new StandardTexture(0, 160, 96, 96, ExtraBeeTexture.GUIPunnett)); - new ControlSlot(this, handGlass.x() + 54.0f, handGlass.y() + 26.0f).assign(InventoryType.Window, 0); - new ControlSlot(this, 208.0f, 8.0f).assign(InventoryType.Window, 1); + + final NBTTagList actions = new NBTTagList(); + + new ControlSlot(this, handGlass.x() + 54.0f, handGlass.y() + 26.0f).assign(actions, InventoryType.Window, 0); + new ControlSlot(this, 208.0f, 8.0f).assign(actions, InventoryType.Window, 1); + + MessageCraftGUI.sendToServer(actions); + (text = new ControlText(this, new IPoint(232.0f, 13.0f), I18N.localise("binniecore.gui.tooltip.paper"))) .setColor(0x222222); (text = new ControlText(this, new IArea(0.0f, 120.0f, w(), 24.0f), "", TextJustification.MIDDLE_CENTER)) diff --git a/src/main/java/binnie/core/craftgui/minecraft/ContainerCraftGUI.java b/src/main/java/binnie/core/craftgui/minecraft/ContainerCraftGUI.java index 9093102a..0d6a4449 100644 --- a/src/main/java/binnie/core/craftgui/minecraft/ContainerCraftGUI.java +++ b/src/main/java/binnie/core/craftgui/minecraft/ContainerCraftGUI.java @@ -1,5 +1,7 @@ package binnie.core.craftgui.minecraft; +import static net.minecraftforge.common.util.Constants.NBT.TAG_COMPOUND; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -14,6 +16,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import com.mojang.authlib.GameProfile; @@ -38,31 +41,40 @@ import cpw.mods.fml.relauncher.Side; public class ContainerCraftGUI extends Container { // Action type is one of the action constants below - private final static String ACTION_TYPE = "type"; + public final static String ACTION_TYPE = "type"; // Action constants - private final static String TANK_CLICK = "tank-click"; - private final static String SLOT_REG = "slot-reg"; - private final static String TANK_UPDATE = "tank-update-"; - private final static String POWER_UPDATE = "power-update"; - private final static String PROCESS_UPDATE = "process-update"; - private final static String ERROR_UPDATE = "error-update"; - private final static String MOUSE_OVER_SLOT = "mouse-over-slot"; - private final static String SHIFT_CLICK_INFO = "shift-click-info"; + public final static String ACTION_BATCH = "batch"; + public final static String SLOT_REG = "slot-reg"; + public final static String TANK_CLICK = "tank-click"; + public final static String TANK_UPDATE = "tank-update-"; + public final static String POWER_UPDATE = "power-update"; + public final static String PROCESS_UPDATE = "process-update"; + public final static String ERROR_UPDATE = "error-update"; + public final static String MOUSE_OVER_SLOT = "mouse-over-slot"; + public final static String SHIFT_CLICK_INFO = "shift-click-info"; // Error type is one of the error constants below - private final static String ERROR_TYPE = "type"; + public final static String ERROR_TYPE = "type"; // Error constants - private static final byte CANNOT_WORK = (byte) 0; - private static final byte CANNOT_PROGRESS = (byte) 1; + public static final byte CANNOT_WORK = (byte) 0; + public static final byte CANNOT_PROGRESS = (byte) 1; // Slot constants - private static final String SLOT_TYPE = "t"; - private static final String SLOT_INDEX = "i"; - private static final String SLOT_NUMBER = "n"; + public static final String SLOT_TYPE = "t"; + public static final String SLOT_INDEX = "i"; + public static final String SLOT_NUMBER = "n"; + // Uncategorized constants + public static final String ACTIONS = "actions"; private static final String USERNAME = "username"; + private static final String SLOT_ID = "id"; + private static final String SLOT = "slot"; + private static final String SLOTS = "slots"; + private static final String TANK = "tank"; + private static final String ORIGIN = "origin"; + private static final String NAME = "name"; private final Window window; private final Map syncedNBT = new HashMap<>(); @@ -111,17 +123,15 @@ public class ContainerCraftGUI extends Container { @Override public void putStackInSlot(int index, ItemStack stack) { - if (getSlot(index) != null) { - getSlot(index).putStack(stack); - } + final Slot slot = getSlot(index); + if (slot != null) slot.putStack(stack); } @Override public void putStacksInSlots(ItemStack[] par1ArrayOfItemStack) { for (int i = 0; i < par1ArrayOfItemStack.length; ++i) { - if (getSlot(i) != null) { - getSlot(i).putStack(par1ArrayOfItemStack[i]); - } + final Slot slot = getSlot(i); + if (slot != null) slot.putStack(par1ArrayOfItemStack[i]); } } @@ -172,20 +182,17 @@ public class ContainerCraftGUI extends Container { @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotID) { - return shiftClick(player, slotID); + shiftClick(player, slotID); + return null; } - private ItemStack shiftClick(EntityPlayer player, int index) { + private void shiftClick(EntityPlayer player, int index) { TransferRequest request = getShiftClickRequest(player, index); - if (request == null) { - return null; - } - + if (request == null) return; ItemStack stack = request.transfer(true); Slot shiftClickedSlot = inventorySlots.get(index); shiftClickedSlot.putStack(stack); shiftClickedSlot.onSlotChanged(); - return null; } private TransferRequest getShiftClickRequest(EntityPlayer player, int index) { @@ -238,14 +245,24 @@ public class ContainerCraftGUI extends Container { return heldItem; } - public void handleNBT(Side side, EntityPlayer player, String name, NBTTagCompound action) { + public void handleNBT(Side side, EntityPlayer player, NBTTagCompound action) { + final String actionType = action.getString(ACTION_TYPE); + + if (actionType.equals(ACTION_BATCH)) { + NBTTagList actionsBatch = action.getTagList(ACTIONS, TAG_COMPOUND); + for (int i = 0; i < actionsBatch.tagCount(); i++) { + handleNBT(side, player, actionsBatch.getCompoundTagAt(i)); + } + } + if (side == Side.SERVER) { - switch (name) { - case TANK_CLICK -> tankClick(player, action.getByte("id")); + switch (actionType) { + case TANK_CLICK -> tankClick(player, action.getByte(SLOT_ID)); case SLOT_REG -> { - int slotType = action.getByte(SLOT_TYPE); - int slotIndex = action.getShort(SLOT_INDEX); - int slotNumber = action.getShort(SLOT_NUMBER); + final int slotType = action.getByte(SLOT_TYPE); + final int slotIndex = action.getShort(SLOT_INDEX); + final int slotNumber = action.getShort(SLOT_NUMBER); + createSlot(InventoryType.values()[slotType % 4], slotIndex, slotNumber); for (ICrafting crafterObject : crafters) { @@ -255,14 +272,14 @@ public class ContainerCraftGUI extends Container { } } - switch (name) { + switch (actionType) { case POWER_UPDATE -> onPowerUpdate(action); case PROCESS_UPDATE -> onProcessUpdate(action); case ERROR_UPDATE -> onErrorUpdate(action); case MOUSE_OVER_SLOT -> onMouseOverSlot(player, action); - case SHIFT_CLICK_INFO -> onReceiveShiftClickHighlights(player, action); + case SHIFT_CLICK_INFO -> onReceiveShiftClickHighlights(action); default -> { - if (name.contains(TANK_UPDATE)) onTankUpdate(action); + if (actionType.contains(TANK_UPDATE)) onTankUpdate(action); } } } @@ -298,23 +315,30 @@ public class ContainerCraftGUI extends Container { if (machineSync != null) machineSync.sendGuiNBT(syncedNBT); Map sentThisTime = new HashMap<>(); - for (Map.Entry nbt : syncedNBT.entrySet()) { - final NBTTagCompound nbtValue = nbt.getValue(); - final String nbtKey = nbt.getKey(); - final NBTTagCompound nbtValuePrev = sentNBT.get(nbtKey); + NBTTagList actions = new NBTTagList(); - nbtValue.setString(ACTION_TYPE, nbtKey); + for (Map.Entry entry : syncedNBT.entrySet()) { + final String actionType = entry.getKey(); + final NBTTagCompound action = entry.getValue(); + final NBTTagCompound actionPrev = sentNBT.get(actionType); - if (nbtValue.equals(nbtValuePrev)) continue; + action.setString(ACTION_TYPE, actionType); - for (ICrafting crafter : crafters) { - if (crafter instanceof EntityPlayerMP playerMP) { - final MessageContainerUpdate packet = new MessageContainerUpdate(nbtValue); - BinnieCore.proxy.sendToPlayer(packet, playerMP); - } + if (action.equals(actionPrev)) continue; + + actions.appendTag(action); + sentThisTime.put(actionType, action); + } + + NBTTagCompound actionsBatch = new NBTTagCompound(); + actionsBatch.setString(ACTION_TYPE, ACTION_BATCH); + actionsBatch.setTag(ACTIONS, actions); + + for (ICrafting crafter : crafters) { + if (crafter instanceof EntityPlayerMP playerMP) { + final MessageContainerUpdate packet = new MessageContainerUpdate(actionsBatch); + BinnieCore.proxy.sendToPlayer(packet, playerMP); } - - sentThisTime.put(nbtKey, nbtValue); } sentNBT.putAll(sentThisTime); @@ -353,12 +377,12 @@ public class ContainerCraftGUI extends Container { public NBTTagCompound createTankNBT(int tank, TankInfo tankInfo) { NBTTagCompound nbt = new NBTTagCompound(); tankInfo.writeToNBT(nbt); - nbt.setByte("tank", (byte) tank); + nbt.setByte(TANK, (byte) tank); return nbt; } public void onTankUpdate(NBTTagCompound nbt) { - int tankID = nbt.getByte("tank"); + int tankID = nbt.getByte(TANK); TankInfo tank = new TankInfo(); tank.readFromNBT(nbt); syncedTanks.put(tankID, tank); @@ -388,7 +412,7 @@ public class ContainerCraftGUI extends Container { public void onErrorUpdate(NBTTagCompound nbt) { errorType = nbt.getByte(ERROR_TYPE); - if (nbt.hasKey("name")) { + if (nbt.hasKey(NAME)) { error = new ErrorState("", ""); error.readFromNBT(nbt); } else { @@ -420,13 +444,13 @@ public class ContainerCraftGUI extends Container { mousedOverSlotNumber = slot.slotNumber; ControlSlot.highlighting.get(EnumHighlighting.SHIFT_CLICK).clear(); NBTTagCompound nbt = new NBTTagCompound(); - nbt.setShort("slot", (short) slot.slotNumber); + nbt.setShort(SLOT, (short) slot.slotNumber); window.sendClientAction(MOUSE_OVER_SLOT, nbt); } private void onMouseOverSlot(EntityPlayer player, NBTTagCompound data) { - int slotnumber = data.getShort("slot"); - TransferRequest request = getShiftClickRequest(player, slotnumber); + int slotNumber = data.getShort(SLOT); + TransferRequest request = getShiftClickRequest(player, slotNumber); if (request == null) { return; } @@ -434,8 +458,8 @@ public class ContainerCraftGUI extends Container { request.transfer(false); NBTTagCompound nbt = new NBTTagCompound(); List slots = new ArrayList<>(); - for (TransferRequest.TransferSlot tslot : request.getInsertedSlots()) { - Slot slot = getSlot(tslot.inventory, tslot.id); + for (TransferRequest.TransferSlot transferSlot : request.getInsertedSlots()) { + Slot slot = getSlot(transferSlot.inventory, transferSlot.id); if (slot != null) { slots.add(slot.slotNumber); } @@ -446,14 +470,14 @@ public class ContainerCraftGUI extends Container { array[i] = slots.get(i); } - nbt.setIntArray("slots", array); - nbt.setShort("origin", (short) slotnumber); + nbt.setIntArray(SLOTS, array); + nbt.setShort(ORIGIN, (short) slotNumber); syncedNBT.put(SHIFT_CLICK_INFO, nbt); } - private void onReceiveShiftClickHighlights(EntityPlayer player, NBTTagCompound data) { + private void onReceiveShiftClickHighlights(NBTTagCompound data) { ControlSlot.highlighting.get(EnumHighlighting.SHIFT_CLICK).clear(); - for (int slotIndex : data.getIntArray("slots")) { + for (int slotIndex : data.getIntArray(SLOTS)) { ControlSlot.highlighting.get(EnumHighlighting.SHIFT_CLICK).add(slotIndex); } } @@ -469,27 +493,23 @@ public class ContainerCraftGUI extends Container { } public void receiveNBT(Side side, EntityPlayer player, NBTTagCompound action) { - String name = action.getString(ACTION_TYPE); - handleNBT(side, player, name, action); - window.receiveGuiNBT(getSide(), player, name, action); + String actionType = action.getString(ACTION_TYPE); + handleNBT(side, player, action); + window.receiveGuiNBT(getSide(), player, actionType, action); INetwork.ReceiveGuiNBT machine = Machine.getInterface(INetwork.ReceiveGuiNBT.class, window.getInventory()); if (machine == null) return; - machine.receiveGuiNBT(getSide(), player, name, action); + machine.receiveGuiNBT(getSide(), player, actionType, action); } - public Slot getOrCreateSlot(InventoryType type, int slotIndex) { - IInventory inventory = getInventory(type); + public Slot getOrCreateSlot(InventoryType inventoryType, int slotIndex) { + final IInventory inventory = getInventory(inventoryType); Slot slot = getSlot(inventory, slotIndex); + if (slot == null) { slot = new CustomSlot(inventory, slotIndex); addSlotToContainer(slot); } - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setByte(SLOT_TYPE, (byte) type.ordinal()); - nbt.setShort(SLOT_INDEX, (short) slotIndex); - nbt.setShort(SLOT_NUMBER, (short) slot.slotNumber); - window.sendClientAction(SLOT_REG, nbt); return slot; } diff --git a/src/main/java/binnie/core/craftgui/minecraft/control/ControlPlayerInventory.java b/src/main/java/binnie/core/craftgui/minecraft/control/ControlPlayerInventory.java index 2753d51f..574b6ac5 100644 --- a/src/main/java/binnie/core/craftgui/minecraft/control/ControlPlayerInventory.java +++ b/src/main/java/binnie/core/craftgui/minecraft/control/ControlPlayerInventory.java @@ -3,9 +3,12 @@ package binnie.core.craftgui.minecraft.control; import java.util.ArrayList; import java.util.List; +import net.minecraft.nbt.NBTTagList; + import binnie.core.craftgui.IWidget; import binnie.core.craftgui.controls.core.Control; import binnie.core.craftgui.minecraft.InventoryType; +import binnie.core.network.packet.MessageCraftGUI; public class ControlPlayerInventory extends Control { @@ -57,17 +60,21 @@ public class ControlPlayerInventory extends Control { } public void create() { + final NBTTagList actions = new NBTTagList(); + for (int row = 0; row < 3; ++row) { for (int column = 0; column < 9; ++column) { ControlSlot slot = slots.get(column + row * 9); - slot.assign(InventoryType.Player, 9 + column + row * 9); + slot.assign(actions, InventoryType.Player, 9 + column + row * 9); } } for (int i1 = 0; i1 < 9; ++i1) { ControlSlot slot2 = slots.get(27 + i1); - slot2.assign(InventoryType.Player, i1); + slot2.assign(actions, InventoryType.Player, i1); } + + MessageCraftGUI.sendToServer(actions); } public ControlSlot getSlot(int i) { diff --git a/src/main/java/binnie/core/craftgui/minecraft/control/ControlSlot.java b/src/main/java/binnie/core/craftgui/minecraft/control/ControlSlot.java index 7880fef9..bd9de1c1 100644 --- a/src/main/java/binnie/core/craftgui/minecraft/control/ControlSlot.java +++ b/src/main/java/binnie/core/craftgui/minecraft/control/ControlSlot.java @@ -1,5 +1,11 @@ package binnie.core.craftgui.minecraft.control; +import static binnie.core.craftgui.minecraft.ContainerCraftGUI.ACTION_TYPE; +import static binnie.core.craftgui.minecraft.ContainerCraftGUI.SLOT_INDEX; +import static binnie.core.craftgui.minecraft.ContainerCraftGUI.SLOT_NUMBER; +import static binnie.core.craftgui.minecraft.ContainerCraftGUI.SLOT_REG; +import static binnie.core.craftgui.minecraft.ContainerCraftGUI.SLOT_TYPE; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -10,6 +16,8 @@ import net.minecraft.client.multiplayer.PlayerControllerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.util.IIcon; import binnie.core.craftgui.CraftGUI; @@ -26,6 +34,7 @@ import binnie.core.craftgui.resource.minecraft.CraftGUITexture; import binnie.core.machines.inventory.InventorySlot; import binnie.core.machines.inventory.MachineSide; import binnie.core.machines.inventory.SlotValidator; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; public class ControlSlot extends ControlSlotBase { @@ -179,14 +188,28 @@ public class ControlSlot extends ControlSlotBase { return null; } - public ControlSlot assign(int index) { - return assign(InventoryType.Machine, index); + /// Assign a slot and register it immediately. Should be used when no other actions need to be sent. + @SuppressWarnings("UnusedReturnValue") + public ControlSlot assignAndRegister(InventoryType inventoryType, int slotIndex) { + final NBTTagList actions = new NBTTagList(); + assign(actions, inventoryType, slotIndex); + MessageCraftGUI.sendToServer(actions); + return this; } - public ControlSlot assign(InventoryType inventory, int index) { - if (slot == null) { - slot = ((Window) getSuperParent()).getContainer().getOrCreateSlot(inventory, index); - } + /// Assign a slot and defer registration using an `NBTTagList`. + /// Use in combination with {@link MessageCraftGUI#sendToServer(NBTTagList)}. + public ControlSlot assign(NBTTagList actions, InventoryType inventoryType, int slotIndex) { + if (slot == null) slot = ((Window) getSuperParent()).getContainer().getOrCreateSlot(inventoryType, slotIndex); + + NBTTagCompound slotReg = new NBTTagCompound(); + slotReg.setString(ACTION_TYPE, SLOT_REG); + slotReg.setByte(SLOT_TYPE, (byte) inventoryType.ordinal()); + slotReg.setShort(SLOT_INDEX, (short) slotIndex); + slotReg.setShort(SLOT_NUMBER, (short) slot.slotNumber); + + actions.appendTag(slotReg); + return this; } diff --git a/src/main/java/binnie/core/craftgui/minecraft/control/ControlSlotArray.java b/src/main/java/binnie/core/craftgui/minecraft/control/ControlSlotArray.java index 60ee9801..e2ab5bc6 100644 --- a/src/main/java/binnie/core/craftgui/minecraft/control/ControlSlotArray.java +++ b/src/main/java/binnie/core/craftgui/minecraft/control/ControlSlotArray.java @@ -4,9 +4,12 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import net.minecraft.nbt.NBTTagList; + import binnie.core.craftgui.IWidget; import binnie.core.craftgui.controls.core.Control; import binnie.core.craftgui.minecraft.InventoryType; +import binnie.core.network.packet.MessageCraftGUI; public class ControlSlotArray extends Control implements Iterable { @@ -30,11 +33,17 @@ public class ControlSlotArray extends Control implements Iterable { return create(InventoryType.Machine, index); } - public ControlSlotArray create(InventoryType type, int[] index) { + public ControlSlotArray create(InventoryType inventoryType, int[] index) { + final NBTTagList actions = new NBTTagList(); + int i = 0; - for (ControlSlot slot : slots) { - slot.assign(type, index[i++]); + for (ControlSlot controlSlot : slots) { + final int slotIndex = index[i]; + controlSlot.assign(actions, inventoryType, slotIndex); + i++; } + + MessageCraftGUI.sendToServer(actions); return this; } diff --git a/src/main/java/binnie/core/machines/storage/WindowCompartment.java b/src/main/java/binnie/core/machines/storage/WindowCompartment.java index 028ef517..37ad0a99 100644 --- a/src/main/java/binnie/core/machines/storage/WindowCompartment.java +++ b/src/main/java/binnie/core/machines/storage/WindowCompartment.java @@ -15,6 +15,7 @@ import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import binnie.core.AbstractMod; import binnie.core.BinnieCore; @@ -42,6 +43,7 @@ import binnie.core.craftgui.geometry.Position; import binnie.core.craftgui.minecraft.Dialog; import binnie.core.craftgui.minecraft.EnumColor; import binnie.core.craftgui.minecraft.IWindowAffectsShiftClick; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.MinecraftGUI; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlItemDisplay; @@ -55,6 +57,7 @@ import binnie.core.craftgui.resource.minecraft.CraftGUITexture; import binnie.core.craftgui.window.Panel; import binnie.core.machines.Machine; import binnie.core.machines.transfer.TransferRequest; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.genetics.craftgui.WindowMachine; import cpw.mods.fml.relauncher.Side; @@ -459,8 +462,10 @@ public class WindowCompartment extends WindowMachine implements IWindowAffectsSh slotGrid.deleteAllChildren(); slotGrid.setSize(new IPoint(width, height)); + final NBTTagList actions = new NBTTagList(); + for (int k : slotIds.keySet()) { - new ControlSlot(slotGrid, x, y).assign(k); + new ControlSlot(slotGrid, x, y).assign(actions, InventoryType.Machine, k); x += 18; if (x >= 108) { x = 0; @@ -468,6 +473,8 @@ public class WindowCompartment extends WindowMachine implements IWindowAffectsSh } } + MessageCraftGUI.sendToServer(actions); + while (y < 108 || x != 0) { new ControlSlot(slotGrid, x, y); x += 18; diff --git a/src/main/java/binnie/core/network/packet/MessageCraftGUI.java b/src/main/java/binnie/core/network/packet/MessageCraftGUI.java index 704735b8..39b7fee6 100644 --- a/src/main/java/binnie/core/network/packet/MessageCraftGUI.java +++ b/src/main/java/binnie/core/network/packet/MessageCraftGUI.java @@ -1,7 +1,13 @@ package binnie.core.network.packet; -import net.minecraft.nbt.NBTTagCompound; +import static binnie.core.craftgui.minecraft.ContainerCraftGUI.ACTIONS; +import static binnie.core.craftgui.minecraft.ContainerCraftGUI.ACTION_BATCH; +import static binnie.core.craftgui.minecraft.ContainerCraftGUI.ACTION_TYPE; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import binnie.core.BinnieCore; import binnie.core.network.BinnieCorePacketID; public class MessageCraftGUI extends MessageNBT { @@ -13,4 +19,12 @@ public class MessageCraftGUI extends MessageNBT { public MessageCraftGUI(NBTTagCompound action) { super(BinnieCorePacketID.CraftGUIAction.ordinal(), action); } + + public static void sendToServer(NBTTagList actions) { + NBTTagCompound actionsBatch = new NBTTagCompound(); + actionsBatch.setString(ACTION_TYPE, ACTION_BATCH); + actionsBatch.setTag(ACTIONS, actions); + final MessageCraftGUI packet = new MessageCraftGUI(actionsBatch); + BinnieCore.proxy.sendToServer(packet); + } } diff --git a/src/main/java/binnie/extrabees/gui/WindowAlvearyFrame.java b/src/main/java/binnie/extrabees/gui/WindowAlvearyFrame.java index a5a38b07..77184cc6 100644 --- a/src/main/java/binnie/extrabees/gui/WindowAlvearyFrame.java +++ b/src/main/java/binnie/extrabees/gui/WindowAlvearyFrame.java @@ -4,6 +4,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import binnie.core.AbstractMod; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlPlayerInventory; import binnie.core.craftgui.minecraft.control.ControlSlot; @@ -35,7 +36,7 @@ public class WindowAlvearyFrame extends Window { setTitle(I18N.localise("extrabees.machine.alveay.frame")); playerInventory = new ControlPlayerInventory(this); ControlSlot slot = new ControlSlot(this, 79.0f, 30.0f); - slot.assign(0); + slot.assignAndRegister(InventoryType.Machine, 0); } @Override diff --git a/src/main/java/binnie/extrabees/gui/WindowAlvearyMutator.java b/src/main/java/binnie/extrabees/gui/WindowAlvearyMutator.java index 5a3014a1..b621af03 100644 --- a/src/main/java/binnie/extrabees/gui/WindowAlvearyMutator.java +++ b/src/main/java/binnie/extrabees/gui/WindowAlvearyMutator.java @@ -9,6 +9,7 @@ import binnie.core.craftgui.controls.ControlText; import binnie.core.craftgui.geometry.IArea; import binnie.core.craftgui.geometry.IPoint; import binnie.core.craftgui.geometry.TextJustification; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlItemDisplay; import binnie.core.craftgui.minecraft.control.ControlPlayerInventory; @@ -42,7 +43,7 @@ public class WindowAlvearyMutator extends Window { setTitle(I18N.localise("extrabees.machine.alveay.mutator")); playerInventory = new ControlPlayerInventory(this); ControlSlot slot = new ControlSlot(this, 79.0f, 30.0f); - slot.assign(AlvearyMutator.SLOT_MUTATOR); + slot.assignAndRegister(InventoryType.Machine, AlvearyMutator.SLOT_MUTATOR); new ControlText( this, new IArea(0.0f, 52.0f, w(), 16.0f), diff --git a/src/main/java/binnie/extrabees/gui/WindowAlvearyStimulator.java b/src/main/java/binnie/extrabees/gui/WindowAlvearyStimulator.java index dd5c8229..d263d3d0 100644 --- a/src/main/java/binnie/extrabees/gui/WindowAlvearyStimulator.java +++ b/src/main/java/binnie/extrabees/gui/WindowAlvearyStimulator.java @@ -5,6 +5,7 @@ import net.minecraft.inventory.IInventory; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.Position; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlPlayerInventory; @@ -38,7 +39,7 @@ public class WindowAlvearyStimulator extends Window { setTitle(I18N.localise("extrabees.machine.alveay.stimulator")); new ControlEnergyBar(this, 75, 29, 60, 16, Position.LEFT); ControlSlot slot = new ControlSlot(this, 41.0f, 28.0f); - slot.assign(AlvearyStimulator.SLOT_CIRCUIT); + slot.assignAndRegister(InventoryType.Machine, AlvearyStimulator.SLOT_CIRCUIT); playerInventory = new ControlPlayerInventory(this); } diff --git a/src/main/java/binnie/extratrees/craftgui/WindowLumbermill.java b/src/main/java/binnie/extratrees/craftgui/WindowLumbermill.java index 97dd4e92..19132494 100644 --- a/src/main/java/binnie/extratrees/craftgui/WindowLumbermill.java +++ b/src/main/java/binnie/extratrees/craftgui/WindowLumbermill.java @@ -2,9 +2,11 @@ package binnie.extratrees.craftgui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagList; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.Position; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -12,6 +14,7 @@ import binnie.core.craftgui.minecraft.control.ControlLiquidTank; import binnie.core.craftgui.minecraft.control.ControlPlayerInventory; import binnie.core.craftgui.minecraft.control.ControlSlot; import binnie.core.machines.Machine; +import binnie.core.network.packet.MessageCraftGUI; import binnie.extratrees.ExtraTrees; import binnie.extratrees.machines.lumbermill.Lumbermill; import cpw.mods.fml.relauncher.Side; @@ -38,15 +41,19 @@ public class WindowLumbermill extends Window { @Override public void initialiseClient() { + final NBTTagList actions = new NBTTagList(); + setTitle(Machine.getMachine(getInventory()).getPackage().getDisplayName()); - new ControlSlot(this, 42.0f, 43.0f).assign(Lumbermill.SLOT_WOOD); - new ControlSlot(this, 148.0f, 43.0f).assign(Lumbermill.SLOT_PLANKS); - new ControlSlot(this, 172.0f, 28.0f).assign(Lumbermill.SLOT_BARK); - new ControlSlot(this, 172.0f, 58.0f).assign(Lumbermill.SLOT_SAWDUST); + new ControlSlot(this, 42.0f, 43.0f).assign(actions, InventoryType.Machine, Lumbermill.SLOT_WOOD); + new ControlSlot(this, 148.0f, 43.0f).assign(actions, InventoryType.Machine, Lumbermill.SLOT_PLANKS); + new ControlSlot(this, 172.0f, 28.0f).assign(actions, InventoryType.Machine, Lumbermill.SLOT_BARK); + new ControlSlot(this, 172.0f, 58.0f).assign(actions, InventoryType.Machine, Lumbermill.SLOT_SAWDUST); new ControlLumbermillProgress(this, 70.0f, 43.0f); new ControlLiquidTank(this, 16, 32); new ControlEnergyBar(this, 8, 112, 16, 60, Position.BOTTOM); new ControlPlayerInventory(this); new ControlErrorState(this, 95.0f, 73.0f); + + MessageCraftGUI.sendToServer(actions); } } diff --git a/src/main/java/binnie/extratrees/craftgui/WindowWoodworker.java b/src/main/java/binnie/extratrees/craftgui/WindowWoodworker.java index 1a343a58..3db20d71 100644 --- a/src/main/java/binnie/extratrees/craftgui/WindowWoodworker.java +++ b/src/main/java/binnie/extratrees/craftgui/WindowWoodworker.java @@ -2,6 +2,7 @@ package binnie.extratrees.craftgui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagList; import binnie.core.AbstractMod; import binnie.core.craftgui.controls.ControlText; @@ -12,6 +13,7 @@ import binnie.core.craftgui.events.EventTextEdit; import binnie.core.craftgui.geometry.IArea; import binnie.core.craftgui.geometry.IPoint; import binnie.core.craftgui.geometry.TextJustification; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.MinecraftGUI; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -19,6 +21,7 @@ import binnie.core.craftgui.minecraft.control.ControlPlayerInventory; import binnie.core.craftgui.minecraft.control.ControlSlot; import binnie.core.craftgui.window.Panel; import binnie.core.machines.Machine; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.extratrees.ExtraTrees; import binnie.extratrees.machines.designer.Designer; @@ -62,13 +65,17 @@ public class WindowWoodworker extends Window { new ControlErrorState(this, 76.0f, 65.0f); if (getInventory() != null) { + final NBTTagList actions = new NBTTagList(); + ControlSlot slotWood1 = new ControlSlot(this, 22.0f, 34.0f); - slotWood1.assign(Designer.DESIGN_1_SLOT); + slotWood1.assign(actions, InventoryType.Machine, Designer.DESIGN_1_SLOT); ControlSlot slotWood2 = new ControlSlot(this, 62.0f, 34.0f); - slotWood2.assign(Designer.DESIGN_2_SLOT); + slotWood2.assign(actions, InventoryType.Machine, Designer.DESIGN_2_SLOT); ControlSlot slotBeeswax = new ControlSlot(this, 42.0f, 64.0f); - slotBeeswax.assign(Designer.GLUE_SLOT); + slotBeeswax.assign(actions, InventoryType.Machine, Designer.GLUE_SLOT); new ControlRecipeSlot(this, 112, 34); + + MessageCraftGUI.sendToServer(actions); } } diff --git a/src/main/java/binnie/genetics/craftgui/WindowAcclimatiser.java b/src/main/java/binnie/genetics/craftgui/WindowAcclimatiser.java index a66bdcd0..53809c70 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowAcclimatiser.java +++ b/src/main/java/binnie/genetics/craftgui/WindowAcclimatiser.java @@ -5,6 +5,7 @@ import net.minecraft.inventory.IInventory; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.Position; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -44,7 +45,7 @@ public class WindowAcclimatiser extends WindowMachine { int y = 32; new ControlSlotArray(this, x, y, 2, 2).create(Acclimatiser.SLOT_RESERVE); x += 54; - new ControlSlot(this, x + 18, y).assign(Acclimatiser.SLOT_TARGET); + new ControlSlot(this, x + 18, y).assignAndRegister(InventoryType.Machine, Acclimatiser.SLOT_TARGET); new ControlSlotArray(this, x, y + 18 + 18, 3, 1).create(Acclimatiser.SLOT_ACCLIMATISER); x += 72; new ControlSlotArray(this, x, y, 2, 2).create(Acclimatiser.SLOT_DONE); diff --git a/src/main/java/binnie/genetics/craftgui/WindowAnalyser.java b/src/main/java/binnie/genetics/craftgui/WindowAnalyser.java index 617a0f02..f2738e6b 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowAnalyser.java +++ b/src/main/java/binnie/genetics/craftgui/WindowAnalyser.java @@ -2,10 +2,12 @@ package binnie.genetics.craftgui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagList; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.Position; import binnie.core.craftgui.minecraft.GUIIcon; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.MinecraftGUI; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; @@ -19,6 +21,7 @@ import binnie.core.craftgui.minecraft.control.ControlSlotCharge; import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; import binnie.core.craftgui.window.Panel; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.extrabees.core.ExtraBeeTexture; import binnie.genetics.Genetics; @@ -47,13 +50,16 @@ public class WindowAnalyser extends WindowMachine { @Override public void initialiseClient() { super.initialiseClient(); + + final NBTTagList actions = new NBTTagList(); + WindowAnalyser.progressBase = new StandardTexture(0, 51, 66, 40, GeneticsTexture.GUIProcess.getTexture()); WindowAnalyser.progress = new StandardTexture(66, 51, 66, 40, GeneticsTexture.GUIProcess.getTexture()); int x = 16; int y = 32; new ControlSlotArray(this, x, y, 2, 3).create(Analyser.SLOT_RESERVE); x += 28; - new ControlSlot(this, x, y + 54 + 8).assign(13); + new ControlSlot(this, x, y + 54 + 8).assign(actions, InventoryType.Machine, 13); new ControlSlotCharge(this, x + 20, y + 54 + 8, 13).setColor(10040319); new ControlEnergyBar(this, x + 24 + 16, y + 54 + 8 + 1, 60, 16, Position.LEFT); new ControlErrorState(this, x + 24 + 16 + 60 + 16, y + 54 + 8 + 1); @@ -62,11 +68,13 @@ public class WindowAnalyser extends WindowMachine { x += 56; new Panel(this, x, y, 76.0f, 50.0f, MinecraftGUI.PanelType.Tinted); new ControlProgress(this, x + 5, y + 5, WindowAnalyser.progressBase, WindowAnalyser.progress, Position.LEFT); - new ControlSlot(this, x + 38 - 9, y + 25 - 9).assign(Analyser.SLOT_TARGET); + new ControlSlot(this, x + 38 - 9, y + 25 - 9).assign(actions, InventoryType.Machine, Analyser.SLOT_TARGET); new ControlIconDisplay(this, x + 76 + 2, y + 18, GUIIcon.ArrowRight.getIcon()); x += 96; new ControlSlotArray(this, x, y, 2, 3).create(Analyser.SLOT_FINISHED); new ControlPlayerInventory(this); + + MessageCraftGUI.sendToServer(actions); } @Override diff --git a/src/main/java/binnie/genetics/craftgui/WindowGenepool.java b/src/main/java/binnie/genetics/craftgui/WindowGenepool.java index 88bd9c72..74e97615 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowGenepool.java +++ b/src/main/java/binnie/genetics/craftgui/WindowGenepool.java @@ -2,10 +2,12 @@ package binnie.genetics.craftgui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagList; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.Position; import binnie.core.craftgui.minecraft.GUIIcon; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -18,6 +20,7 @@ import binnie.core.craftgui.minecraft.control.ControlSlotArray; import binnie.core.craftgui.minecraft.control.ControlSlotCharge; import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.extrabees.core.ExtraBeeTexture; import binnie.genetics.Genetics; @@ -40,6 +43,9 @@ public class WindowGenepool extends WindowMachine { @Override public void initialiseClient() { super.initialiseClient(); + + final NBTTagList actions = new NBTTagList(); + int x = 16; int y = 32; new ControlLiquidTank(this, x, y).setTankID(Genepool.TANK_ETHANOL); @@ -51,7 +57,7 @@ public class WindowGenepool extends WindowMachine { new ControlIconDisplay(this, x, y + 22, GUIIcon.ArrowRight.getIcon()); x += 18; - new ControlSlot(this, x, y + 21).assign(Genepool.SLOT_BEE); + new ControlSlot(this, x, y + 21).assign(actions, InventoryType.Machine, Genepool.SLOT_BEE); x += 18; new ControlMachineProgress(this, x, y + 19, progressBase, progress, Position.LEFT); @@ -59,10 +65,12 @@ public class WindowGenepool extends WindowMachine { x += 130; new ControlLiquidTank(this, x, y).setTankID(Genepool.TANK_DNA); new ControlEnergyBar(this, 21, 115, 16, 60, Position.BOTTOM); - new ControlSlot(this, 121.0f, 82.0f).assign(Genepool.SLOT_ENZYME); + new ControlSlot(this, 121.0f, 82.0f).assign(actions, InventoryType.Machine, Genepool.SLOT_ENZYME); new ControlSlotCharge(this, 143, 82, 7).setColor(0xefe8af); new ControlErrorState(this, 181.0f, 83.0f); new ControlPlayerInventory(this); + + MessageCraftGUI.sendToServer(actions); } @Override diff --git a/src/main/java/binnie/genetics/craftgui/WindowIncubator.java b/src/main/java/binnie/genetics/craftgui/WindowIncubator.java index 4f9a03f3..df775886 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowIncubator.java +++ b/src/main/java/binnie/genetics/craftgui/WindowIncubator.java @@ -6,6 +6,7 @@ import net.minecraft.inventory.IInventory; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.Position; import binnie.core.craftgui.minecraft.GUIIcon; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -54,7 +55,7 @@ public class WindowIncubator extends WindowMachine { WindowIncubator.progressBase, WindowIncubator.progress, Position.LEFT); - new ControlSlot(this, x + 10, y + 3 + 10).assign(Incubator.SLOT_INCUBATOR); + new ControlSlot(this, x + 10, y + 3 + 10).assignAndRegister(InventoryType.Machine, Incubator.SLOT_INCUBATOR); x += 40; new ControlIconDisplay(this, x, y + 3 + 10, GUIIcon.ArrowRight.getIcon()); x += 18; diff --git a/src/main/java/binnie/genetics/craftgui/WindowInoculator.java b/src/main/java/binnie/genetics/craftgui/WindowInoculator.java index accbf1f5..316e2fc3 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowInoculator.java +++ b/src/main/java/binnie/genetics/craftgui/WindowInoculator.java @@ -2,12 +2,14 @@ package binnie.genetics.craftgui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagList; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.CraftGUIUtil; import binnie.core.craftgui.geometry.Position; import binnie.core.craftgui.geometry.TextJustification; import binnie.core.craftgui.minecraft.GUIIcon; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -19,6 +21,7 @@ import binnie.core.craftgui.minecraft.control.ControlSlot; import binnie.core.craftgui.minecraft.control.ControlSlotArray; import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.genetics.Genetics; import binnie.genetics.core.GeneticsTexture; @@ -41,6 +44,9 @@ public class WindowInoculator extends WindowMachine { @Override public void initialiseClient() { super.initialiseClient(); + + final NBTTagList actions = new NBTTagList(); + int x = 16; int y = 32; new ControlLiquidTank(this, x, y + 18 + 16).setTankID(0); @@ -49,7 +55,7 @@ public class WindowInoculator extends WindowMachine { y, new ControlSlotArray(this, 0, 0, 2, 1).create(Inoculator.SLOT_SERUM_RESERVE), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), - new ControlSlot(this, 0.0f, 0.0f).assign(0), + new ControlSlot(this, 0.0f, 0.0f).assign(actions, InventoryType.Machine, 0), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), new ControlSlotArray(this, 0, 0, 2, 1).create(Inoculator.SLOT_SERUM_EXPENDED)); x += 18; @@ -69,11 +75,13 @@ public class WindowInoculator extends WindowMachine { TextJustification.MIDDLE_LEFT, 8.0f, new ControlSlotArray(this, x, y, 4, 1).create(Inoculator.SLOT_RESERVE), - new ControlSlot(this, x, y + 18 + 8).assign(9), + new ControlSlot(this, x, y + 18 + 8).assign(actions, InventoryType.Machine, 9), new ControlSlotArray(this, x, y + 18 + 8 + 18 + 8, 4, 1).create(Inoculator.SLOT_FINISHED)); new ControlIconDisplay(this, x + 18, y + 18 + 2, GUIIcon.ArrowUpLeft.getIcon()); new ControlIconDisplay(this, x + 18, y + 18 + 18, GUIIcon.ArrowLeftDown.getIcon()); new ControlPlayerInventory(this); + + MessageCraftGUI.sendToServer(actions); } @Override diff --git a/src/main/java/binnie/genetics/craftgui/WindowIsolator.java b/src/main/java/binnie/genetics/craftgui/WindowIsolator.java index 80eeb907..33ba7f21 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowIsolator.java +++ b/src/main/java/binnie/genetics/craftgui/WindowIsolator.java @@ -2,10 +2,12 @@ package binnie.genetics.craftgui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagList; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.Position; import binnie.core.craftgui.minecraft.GUIIcon; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -18,6 +20,7 @@ import binnie.core.craftgui.minecraft.control.ControlSlotArray; import binnie.core.craftgui.minecraft.control.ControlSlotCharge; import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.extrabees.core.ExtraBeeTexture; import binnie.genetics.Genetics; @@ -40,6 +43,9 @@ public class WindowIsolator extends WindowMachine { @Override public void initialiseClient() { super.initialiseClient(); + + final NBTTagList actions = new NBTTagList(); + int x = 16; int y = 32; new ControlLiquidTank(this, x, y).setTankID(Isolator.TANK_ETHANOL); @@ -48,14 +54,14 @@ public class WindowIsolator extends WindowMachine { x += 20; new ControlIconDisplay(this, x, y + 3 + 1, GUIIcon.ArrowRight.getIcon()); x += 18; - new ControlSlot(this, x, y + 3).assign(Isolator.SLOT_TARGET); - new ControlSlot(this, x, y + 36 + 3).assign(Isolator.SLOT_ENZYME); + new ControlSlot(this, x, y + 3).assign(actions, InventoryType.Machine, Isolator.SLOT_TARGET); + new ControlSlot(this, x, y + 36 + 3).assign(actions, InventoryType.Machine, Isolator.SLOT_ENZYME); new ControlSlotCharge(this, x + 18 + 2, y + 36 + 3, 0).setColor(0xefe8af); x += 18; new ControlProgress(this, x, y + 3, WindowIsolator.ProgressBase, WindowIsolator.Progress, Position.LEFT); x += 142; - new ControlSlot(this, x, y + 3).assign(Isolator.SLOT_RESULT); - new ControlSlot(this, x, y + 3 + 36).assign(Isolator.SLOT_SEQUENCER_VIAL); + new ControlSlot(this, x, y + 3).assign(actions, InventoryType.Machine, Isolator.SLOT_RESULT); + new ControlSlot(this, x, y + 3 + 36).assign(actions, InventoryType.Machine, Isolator.SLOT_SEQUENCER_VIAL); new ControlIconDisplay(this, x + 1, y + 3 + 19, GUIIcon.ArrowUp.getIcon()); x += 20; new ControlIconDisplay(this, x, y + 3 + 1, GUIIcon.ArrowRight.getIcon()); @@ -64,6 +70,8 @@ public class WindowIsolator extends WindowMachine { new ControlEnergyBar(this, 260, 130, 16, 60, Position.BOTTOM); new ControlErrorState(this, 153.0f, 81.0f); new ControlPlayerInventory(this); + + MessageCraftGUI.sendToServer(actions); } @Override diff --git a/src/main/java/binnie/genetics/craftgui/WindowPolymeriser.java b/src/main/java/binnie/genetics/craftgui/WindowPolymeriser.java index 746b0348..1e6626c2 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowPolymeriser.java +++ b/src/main/java/binnie/genetics/craftgui/WindowPolymeriser.java @@ -2,10 +2,12 @@ package binnie.genetics.craftgui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagList; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.Position; import binnie.core.craftgui.minecraft.GUIIcon; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -18,6 +20,7 @@ import binnie.core.craftgui.minecraft.control.ControlSlotArray; import binnie.core.craftgui.minecraft.control.ControlSlotCharge; import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.genetics.Genetics; import binnie.genetics.core.GeneticsTexture; @@ -45,23 +48,28 @@ public class WindowPolymeriser extends WindowMachine { @Override public void initialiseClient() { super.initialiseClient(); + + final NBTTagList actions = new NBTTagList(); + int x = 16; int y = 38; new ControlSlotArray(this, x, y, 1, 4).create(Polymeriser.SLOT_SERUM_RESERVE); new ControlIconDisplay(this, x + 18, y + 1, GUIIcon.ArrowRight.getIcon()); x += 34; new ControlMachineProgress(this, x + 18, y - 6, progressBase, progress, Position.LEFT); - new ControlSlot(this, x, y).assign(Polymeriser.SLOT_SERUM); + new ControlSlot(this, x, y).assign(actions, InventoryType.Machine, Polymeriser.SLOT_SERUM); new ControlLiquidTank(this, x, y + 18 + 16, true).setTankID(Polymeriser.TANK_BACTERIA); new ControlLiquidTank(this, x, y + 18 + 16 + 18 + 8, true).setTankID(Polymeriser.TANK_DNA); new ControlEnergyBar(this, x + 120, 96, 64, 16, Position.LEFT); x += 40; - new ControlSlot(this, x + 30, y + 18 + 8).assign(Polymeriser.SLOT_GOLD); + new ControlSlot(this, x + 30, y + 18 + 8).assign(actions, InventoryType.Machine, Polymeriser.SLOT_GOLD); new ControlSlotCharge(this, x + 30 + 20, y + 18 + 8, 1).setColor(0xffd800); x += 138; new ControlSlotArray(this, x, y + 9, 2, 2).create(Polymeriser.SLOT_SERUM_FINISHED); new ControlErrorState(this, 244.0f, 97.0f); new ControlPlayerInventory(this); + + MessageCraftGUI.sendToServer(actions); } @Override diff --git a/src/main/java/binnie/genetics/craftgui/WindowSequencer.java b/src/main/java/binnie/genetics/craftgui/WindowSequencer.java index 93f4b420..ebbb1e13 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowSequencer.java +++ b/src/main/java/binnie/genetics/craftgui/WindowSequencer.java @@ -3,6 +3,7 @@ package binnie.genetics.craftgui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumChatFormatting; import binnie.core.AbstractMod; @@ -12,6 +13,7 @@ import binnie.core.craftgui.geometry.IArea; import binnie.core.craftgui.geometry.Position; import binnie.core.craftgui.geometry.TextJustification; import binnie.core.craftgui.minecraft.GUIIcon; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -22,6 +24,7 @@ import binnie.core.craftgui.minecraft.control.ControlSlotArray; import binnie.core.craftgui.minecraft.control.ControlSlotCharge; import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.extrabees.core.ExtraBeeTexture; import binnie.genetics.Genetics; @@ -61,6 +64,9 @@ public class WindowSequencer extends WindowMachine { @Override public void initialiseClient() { super.initialiseClient(); + + final NBTTagList actions = new NBTTagList(); + int x = 16; int y = 32; CraftGUIUtil.horizontalGrid( @@ -72,9 +78,9 @@ public class WindowSequencer extends WindowMachine { new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), new ControlSequencerProgress(this, 0, 0), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), - new ControlSlot(this, 0.0f, 0.0f).assign(6)); + new ControlSlot(this, 0.0f, 0.0f).assign(actions, InventoryType.Machine, 6)); ControlSlot slotTarget = new ControlSlot(this, x + 96, y + 16); - slotTarget.assign(5); + slotTarget.assign(actions, InventoryType.Machine, 5); x = 34; y = 92; slotText = new ControlText( @@ -84,7 +90,7 @@ public class WindowSequencer extends WindowMachine { TextJustification.MIDDLE_CENTER); y += 20; ControlSlot slotDye = new ControlSlot(this, x, y); - slotDye.assign(0); + slotDye.assign(actions, InventoryType.Machine, 0); x += 20; new ControlSlotCharge(this, x, y, 0).setColor(16750848); x += 32; @@ -92,6 +98,8 @@ public class WindowSequencer extends WindowMachine { x += 92; new ControlErrorState(this, x, y + 1); new ControlPlayerInventory(this); + + MessageCraftGUI.sendToServer(actions); } @Override diff --git a/src/main/java/binnie/genetics/craftgui/WindowSplicer.java b/src/main/java/binnie/genetics/craftgui/WindowSplicer.java index 93e1de3e..c209bd7f 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowSplicer.java +++ b/src/main/java/binnie/genetics/craftgui/WindowSplicer.java @@ -2,12 +2,14 @@ package binnie.genetics.craftgui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagList; import binnie.core.AbstractMod; import binnie.core.craftgui.geometry.CraftGUIUtil; import binnie.core.craftgui.geometry.Position; import binnie.core.craftgui.geometry.TextJustification; import binnie.core.craftgui.minecraft.GUIIcon; +import binnie.core.craftgui.minecraft.InventoryType; import binnie.core.craftgui.minecraft.Window; import binnie.core.craftgui.minecraft.control.ControlEnergyBar; import binnie.core.craftgui.minecraft.control.ControlErrorState; @@ -17,6 +19,7 @@ import binnie.core.craftgui.minecraft.control.ControlSlot; import binnie.core.craftgui.minecraft.control.ControlSlotArray; import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.genetics.Genetics; import binnie.genetics.core.GeneticsTexture; @@ -45,6 +48,9 @@ public class WindowSplicer extends WindowMachine { @Override public void initialiseClient() { super.initialiseClient(); + + final NBTTagList actions = new NBTTagList(); + int x = 16; new ControlSplicerProgress(this, 84.0f, 32.0f, w() - 172.0f, 102.0f); CraftGUIUtil.horizontalGrid( @@ -52,7 +58,7 @@ public class WindowSplicer extends WindowMachine { 62.0f, new ControlSlotArray(this, 0, 0, 2, 1).create(Splicer.SLOT_SERUM_RESERVE), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), - new ControlSlot(this, 0.0f, 0.0f).assign(Splicer.SLOT_SERUM_VIAL)); + new ControlSlot(this, 0.0f, 0.0f).assign(actions, InventoryType.Machine, Splicer.SLOT_SERUM_VIAL)); new ControlSlotArray(this, x + 12, 84, 2, 1).create(Splicer.SLOT_SERUM_EXPENDED); new ControlIconDisplay(this, x + 12 + 36 + 4, 86.0f, GUIIcon.ArrowUpLeft.getIcon()); new ControlEnergyBar(this, 196, 64, 60, 16, Position.LEFT); @@ -64,10 +70,12 @@ public class WindowSplicer extends WindowMachine { 4.0f, new ControlSlotArray(this, 0, 0, 4, 1).create(Inoculator.SLOT_RESERVE), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowDown.getIcon()), - new ControlSlot(this, 0.0f, 0.0f).assign(Splicer.SLOT_TARGET), + new ControlSlot(this, 0.0f, 0.0f).assign(actions, InventoryType.Machine, Splicer.SLOT_TARGET), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowDown.getIcon()), new ControlSlotArray(this, 0, 0, 4, 1).create(Inoculator.SLOT_FINISHED)); new ControlPlayerInventory(this); + + MessageCraftGUI.sendToServer(actions); } @Override diff --git a/src/main/java/binnie/genetics/gui/WindowAnalyst.java b/src/main/java/binnie/genetics/gui/WindowAnalyst.java index a70c6897..613298cb 100644 --- a/src/main/java/binnie/genetics/gui/WindowAnalyst.java +++ b/src/main/java/binnie/genetics/gui/WindowAnalyst.java @@ -6,6 +6,7 @@ import java.util.List; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagList; import binnie.Binnie; import binnie.botany.api.IFlower; @@ -34,6 +35,7 @@ import binnie.core.craftgui.resource.minecraft.CraftGUITexture; import binnie.core.craftgui.window.Panel; import binnie.core.genetics.BreedingSystem; import binnie.core.machines.inventory.SlotValidator; +import binnie.core.network.packet.MessageCraftGUI; import binnie.core.util.I18N; import binnie.genetics.Genetics; import binnie.genetics.item.GeneticsItems; @@ -170,11 +172,13 @@ public class WindowAnalyst extends Window { x += 22; } } else { - new ControlSlot(this, x, y + 1).assign(InventoryType.Window, 0); + final NBTTagList actions = new NBTTagList(); + new ControlSlot(this, x, y + 1).assign(actions, InventoryType.Window, 0); x += 22; - new ControlSlot(this, x, y + 1).assign(InventoryType.Window, 1); + new ControlSlot(this, x, y + 1).assign(actions, InventoryType.Window, 1); x += 26; setupValidators(); + MessageCraftGUI.sendToServer(actions); } tabBar = new Control(this, x, 28.0f, w() - 16.0f - x, 20.0f); analystPanel = new Panel(this, 16.0f, 54.0f, 280.0f, 164.0f, MinecraftGUI.PanelType.Outline) {