aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java')
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java b/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java
new file mode 100644
index 0000000000..1006acebf1
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java
@@ -0,0 +1,123 @@
+package gregtech.common.gui;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.gui.GT_Container_BasicTank;
+import gregtech.api.gui.GT_Slot_Output;
+import gregtech.api.gui.GT_Slot_Render;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import java.nio.ByteBuffer;
+
+public class GT_Container_OutputHatch extends GT_Container_BasicTank {
+
+ private ByteBuffer buffer;
+ private String fluidName = "";
+ private byte mMode;
+
+ public GT_Container_OutputHatch(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new Slot(mTileEntity, 0, 80, 17));
+ addSlotToContainer(new GT_Slot_Output(mTileEntity, 1, 80, 53));
+ addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 59, 42));
+ addSlotToContainer(new GT_Slot_Render(mTileEntity, 3, 150, 42));
+ }
+
+ @Override
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
+ if (aSlotIndex == 3 && aMouseclick < 2) {
+ GT_MetaTileEntity_Hatch_Output tHatch = (GT_MetaTileEntity_Hatch_Output) mTileEntity.getMetaTileEntity();
+ FluidStack tReadyLockFluid = GT_Utility.getFluidForFilledItem(aPlayer.inventory.getItemStack(), true);
+ byte tMode = tHatch.getMode();
+ // If player click the locker slot with empty or the same fluid cell, clear the lock fluid
+ if (tReadyLockFluid == null || (tMode >= 8 && tReadyLockFluid.getUnlocalizedName().equals(tHatch.getLockedFluidName()))) {
+ tHatch.setLockedFluidName(null);
+ GT_Utility.sendChatToPlayer(aPlayer, trans("300", "Fluid Lock Cleared."));
+ tHatch.mMode = 0;
+ fluidName = "";
+ }
+ else {
+ tHatch.setLockedFluidName(tReadyLockFluid.getUnlocalizedName());
+ GT_Utility.sendChatToPlayer(aPlayer, String.format(trans("151.4", "Sucessfully locked Fluid to %s"), tReadyLockFluid.getLocalizedName()));
+ tHatch.mMode = 9;
+ fluidName = tReadyLockFluid.getUnlocalizedName();
+ }
+ }
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ @Override
+ public void addCraftingToCrafters(ICrafting clientHandle) {
+ buffer.putInt(0, fluidName.length());
+ buffer.put(Integer.BYTES, mMode);
+ for (int i = 0; i < fluidName.length(); i++) {
+ buffer.putChar(Integer.BYTES + Character.BYTES * i + 1, fluidName.charAt(i));
+ }
+ sendStateUpdate(clientHandle);
+ super.addCraftingToCrafters(clientHandle);
+ }
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+ if (buffer == null) {
+ buffer = ByteBuffer.allocate(256);
+ }
+ if(mTileEntity.isServerSide()) {
+ GT_MetaTileEntity_Hatch_Output tile = (GT_MetaTileEntity_Hatch_Output) mTileEntity.getMetaTileEntity();
+ if (tile == null) return;
+ fluidName = tile.getLockedFluidName() == null ? "" : tile.getLockedFluidName();
+ mMode = tile.getMode();
+ buffer.putInt(0, fluidName.length());
+ buffer.put(Integer.BYTES, mMode);
+ for (int i = 0; i < fluidName.length(); i++) {
+ buffer.putChar(Integer.BYTES + Character.BYTES * i + 1, fluidName.charAt(i));
+ }
+ for (Object clientHandle : this.crafters) {
+ sendStateUpdate((ICrafting) clientHandle);
+ }
+ }
+ }
+
+ private void sendStateUpdate(ICrafting clientHandle) {
+ final int bytes = Character.BYTES * fluidName.length() + Integer.BYTES + 1;
+ for (int i = 0; i < bytes; i++) {
+ clientHandle.sendProgressBarUpdate(this, i + 110, buffer.get(i));
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(int index, int value) {
+ super.updateProgressBar(index, value);
+ index = index - 110;
+ if(index >= 0 && index < buffer.capacity()) {
+ buffer.put(index, (byte) value);
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public String getFluidName() {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < buffer.getInt(0); ++i) {
+ sb.append(buffer.getChar(i * Character.BYTES + Integer.BYTES + 1));
+ }
+ byte mode = buffer.get(Integer.BYTES);
+ FluidStack tFluid = FluidRegistry.getFluidStack(sb.toString().replace("fluid.", "")
+ .replace(".name", "").replace("ic2.fluid", "ic2").toLowerCase(), 1);
+ if (tFluid == null || mode < 8) return "Empty";
+ else return tFluid.getLocalizedName().replace("fluid.", "");
+ }
+} \ No newline at end of file