diff options
author | Martin Robertz <dream-master@gmx.net> | 2021-10-09 13:04:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-09 13:04:42 +0200 |
commit | ac4785eee06293f62361377cb2178ca8779984dd (patch) | |
tree | 4468721cdc611782e26c47e196d8898ead17ba54 /src/main/java/gregtech/common/gui | |
parent | f2c37fed6b6962b2eb44bfcaf378fcbf5c6c600b (diff) | |
parent | e2ad60c325be21de9b6f4c8e906603d8caf7381f (diff) | |
download | GT5-Unofficial-ac4785eee06293f62361377cb2178ca8779984dd.tar.gz GT5-Unofficial-ac4785eee06293f62361377cb2178ca8779984dd.tar.bz2 GT5-Unofficial-ac4785eee06293f62361377cb2178ca8779984dd.zip |
Merge pull request #678 from GTNewHorizons/fluid-lock-gui
add GUI for output hatch to lock fluid
Diffstat (limited to 'src/main/java/gregtech/common/gui')
-rw-r--r-- | src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java | 123 | ||||
-rw-r--r-- | src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java | 39 |
2 files changed, 162 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 diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java new file mode 100644 index 0000000000..1adf66c1b7 --- /dev/null +++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java @@ -0,0 +1,39 @@ +package gregtech.common.gui; + +import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GT_Utility; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.StatCollector; + +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; + +public class GT_GUIContainer_OutputHatch extends GT_GUIContainerMetaTile_Machine { + + private final String mName; + + public GT_GUIContainer_OutputHatch(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) { + super(new GT_Container_OutputHatch(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "OutputHatch.png"); + mName = aName; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); + fontRendererObj.drawString(mName, 8, 6, 4210752); + if (mContainer != null) { + fontRendererObj.drawString("Liquid Amount", 10, 20, 16448255); + fontRendererObj.drawString(GT_Utility.parseNumberToString(((GT_Container_OutputHatch) mContainer).mContent), 10, 30, 16448255); + fontRendererObj.drawString("Locked Fluid", 101, 20, 16448255); + fontRendererObj.drawString(((GT_Container_OutputHatch) mContainer).getFluidName(), 101, 30, 16448255); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +}
\ No newline at end of file |