From 2cc1b96c3883fa7e9d5b8852454ddb5727a25424 Mon Sep 17 00:00:00 2001 From: Porter Westling Date: Tue, 23 Sep 2014 14:20:36 -0700 Subject: [PATCH] add "dump excess" option to gas tank --- .../java/mekanism/client/gui/GuiGasTank.java | 32 +++++++--- .../common/tile/TileEntityGasTank.java | 56 ++++++++++++++---- .../assets/mekanism/gui/GuiGasTank.png | Bin 3809 -> 2368 bytes .../resources/assets/mekanism/lang/de_DE.lang | 1 + .../resources/assets/mekanism/lang/en_US.lang | 1 + 5 files changed, 69 insertions(+), 21 deletions(-) diff --git a/src/main/java/mekanism/client/gui/GuiGasTank.java b/src/main/java/mekanism/client/gui/GuiGasTank.java index 30f368837..c4a12e9e0 100644 --- a/src/main/java/mekanism/client/gui/GuiGasTank.java +++ b/src/main/java/mekanism/client/gui/GuiGasTank.java @@ -2,6 +2,8 @@ package mekanism.client.gui; import java.util.ArrayList; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import mekanism.api.Coord4D; import mekanism.client.sound.SoundHandler; import mekanism.common.Mekanism; @@ -11,12 +13,8 @@ import mekanism.common.tile.TileEntityGasTank; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.entity.player.InventoryPlayer; - import org.lwjgl.opengl.GL11; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - @SideOnly(Side.CLIENT) public class GuiGasTank extends GuiMekanism { @@ -37,17 +35,18 @@ public class GuiGasTank extends GuiMekanism String capacityInfo = tileEntity.gasTank.getStored() + "/" + tileEntity.MAX_GAS; - fontRendererObj.drawString(tileEntity.getInventoryName(), (xSize/2)-(fontRendererObj.getStringWidth(tileEntity.getInventoryName())/2), 6, 0x404040); + fontRendererObj.drawString(tileEntity.getInventoryName(), (xSize / 2) - (fontRendererObj.getStringWidth(tileEntity.getInventoryName()) / 2), 6, 0x404040); fontRendererObj.drawString(capacityInfo, 45, 40, 0x404040); fontRendererObj.drawString(MekanismUtils.localize("gui.gas") + ": " + (tileEntity.gasTank.getGas() != null ? tileEntity.gasTank.getGas().getGas().getLocalizedName() : MekanismUtils.localize("gui.none")), 45, 49, 0x404040); fontRendererObj.drawString(MekanismUtils.localize("container.inventory"), 8, ySize - 96 + 2, 0x404040); - String name = tileEntity.dumping ? MekanismUtils.localize("gui.dumping") + "..." : MekanismUtils.localize("gui.idle"); - fontRendererObj.drawString(name, 156-fontRendererObj.getStringWidth(name), 73, 0x404040); + String name = chooseByMode(tileEntity.dumping, MekanismUtils.localize("gui.idle"), MekanismUtils.localize("gui.dumping"), MekanismUtils.localize("gui.dumping_excess")); + fontRendererObj.drawString(name, 156 - fontRendererObj.getStringWidth(name), 73, 0x404040); super.drawGuiContainerForegroundLayer(mouseX, mouseY); } + @Override protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY) { @@ -59,7 +58,7 @@ public class GuiGasTank extends GuiMekanism int guiHeight = (height - ySize) / 2; drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize); - int displayInt = tileEntity.dumping ? 18 : 10; + int displayInt = chooseByMode(tileEntity.dumping, 10, 18, 26); drawTexturedModalRect(guiWidth + 160, guiHeight + 73, 176, displayInt, 8, 8); if(tileEntity.gasTank.getGas() != null) @@ -86,4 +85,21 @@ public class GuiGasTank extends GuiMekanism SoundHandler.playSound("gui.button.press"); } } + + private T chooseByMode(TileEntityGasTank.Mode dumping, T idleOption, T dumpingOption, T dumpingExcessOption) + { + if(dumping.equals(TileEntityGasTank.Mode.IDLE)) + { + return idleOption; + } + if(dumping.equals(TileEntityGasTank.Mode.DUMPING)) + { + return dumpingOption; + } + if(dumping.equals(TileEntityGasTank.Mode.DUMPING_EXCESS)) + { + return dumpingExcessOption; + } + return idleOption; //should not happen; + } } diff --git a/src/main/java/mekanism/common/tile/TileEntityGasTank.java b/src/main/java/mekanism/common/tile/TileEntityGasTank.java index 9a074d45c..6944c9eae 100644 --- a/src/main/java/mekanism/common/tile/TileEntityGasTank.java +++ b/src/main/java/mekanism/common/tile/TileEntityGasTank.java @@ -1,9 +1,8 @@ package mekanism.common.tile; -import io.netty.buffer.ByteBuf; - import java.util.ArrayList; +import io.netty.buffer.ByteBuf; import mekanism.api.Coord4D; import mekanism.api.gas.Gas; import mekanism.api.gas.GasRegistry; @@ -26,6 +25,13 @@ import net.minecraftforge.common.util.ForgeDirection; public class TileEntityGasTank extends TileEntityContainerBlock implements IGasHandler, ITubeConnection, IRedstoneControl { + public enum Mode + { + IDLE, + DUMPING, + DUMPING_EXCESS + } + /** The type of gas stored in this tank. */ public GasTank gasTank = new GasTank(MAX_GAS); @@ -34,7 +40,7 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH /** How fast this tank can output gas. */ public int output = 256; - public boolean dumping; + public Mode dumping; /** This machine's current RedstoneControl type. */ public RedstoneControl controlType; @@ -43,6 +49,7 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH { super("GasTank"); inventory = new ItemStack[2]; + dumping = Mode.IDLE; controlType = RedstoneControl.DISABLED; } @@ -74,10 +81,15 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH } } - if(!worldObj.isRemote && dumping) + if(!worldObj.isRemote && dumping.equals(Mode.DUMPING)) { gasTank.draw(8, true); } + + if(!worldObj.isRemote && dumping.equals(Mode.DUMPING_EXCESS) && gasTank.getNeeded() < output) + { + gasTank.draw(output, true); + } } @Override @@ -90,7 +102,7 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH else if(slotID == 0) { return (itemstack.getItem() instanceof IGasItem && ((IGasItem)itemstack.getItem()).getGas(itemstack) != null && - ((IGasItem)itemstack.getItem()).getGas(itemstack).amount == ((IGasItem)itemstack.getItem()).getMaxGas(itemstack)); + ((IGasItem)itemstack.getItem()).getGas(itemstack).amount == ((IGasItem)itemstack.getItem()).getMaxGas(itemstack)); } return false; @@ -114,7 +126,7 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH @Override public int[] getAccessibleSlotsFromSide(int side) { - return side == 1 ? new int[] {0} : new int[] {1}; + return side == 1 ? new int[]{0} : new int[]{1}; } @Override @@ -155,7 +167,8 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH if(type == 0) { - dumping = !dumping; + int index = (dumping.ordinal() + 1)%dumping.values().length; + dumping = Mode.values()[index]; } for(EntityPlayer player : playersUsing) @@ -172,11 +185,12 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH { gasTank.setGas(new GasStack(GasRegistry.getGas(dataStream.readInt()), dataStream.readInt())); } - else { + else + { gasTank.setGas(null); } - dumping = dataStream.readBoolean(); + dumping = Mode.values()[dataStream.readInt()]; controlType = RedstoneControl.values()[dataStream.readInt()]; MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord); @@ -188,7 +202,22 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH super.readFromNBT(nbtTags); gasTank.read(nbtTags.getCompoundTag("gasTank")); - dumping = nbtTags.getBoolean("dumping"); + if(nbtTags.hasKey("dumpingMode")) + { + dumping = Mode.valueOf(nbtTags.getString("dumpingMode")); + } + else //For backwards compatibility + { + boolean dumpingBool = nbtTags.getBoolean("dumping"); + if(dumpingBool) + { + dumping = Mode.DUMPING; + } + else + { + dumping = Mode.IDLE; + } + } controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")]; } @@ -198,7 +227,7 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH super.writeToNBT(nbtTags); nbtTags.setTag("gasTank", gasTank.write(new NBTTagCompound())); - nbtTags.setBoolean("dumping", dumping); + nbtTags.setString("dumpingMode", dumping.name()); nbtTags.setInteger("controlType", controlType.ordinal()); } @@ -213,11 +242,12 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH data.add(gasTank.getGas().getGas().getID()); data.add(gasTank.getStored()); } - else { + else + { data.add(false); } - data.add(dumping); + data.add(dumping.ordinal()); data.add(controlType.ordinal()); return data; diff --git a/src/main/resources/assets/mekanism/gui/GuiGasTank.png b/src/main/resources/assets/mekanism/gui/GuiGasTank.png index 5308566c1dd77d93181ca0aa44d845364e2563a8..8ea40c5432e1c8f0b2ae5f02fe59babb3c0464a1 100644 GIT binary patch literal 2368 zcmcIlc{CLI9{mJ2HCLM3PzpnhC0Vjw z8hHw3%Mxlx*~V^Udy{)^ulLS*f4<*2zw`T^-*@|bzMpe`za(30a}G9PHUIzz(!%r% z01$==0j$i7!#Swf8vxjnuZf8*(!>OA8x-j6d*vbk+Fhyk9|A|u@);%tIu{-_%&)l3 z$)8NNM>*9U6MjNrMrJ+wYAjs$=Dl2D=hXmV)R5-$K7V`S1~ibJ4#QWn98V877G`hX zs9b$y2XFk~GD&9J-#WFItAAHrJqzEQ;-}uTo{cFdU zeeu~Px=*>_<7Qh+zfBm8E$e*}Rgy_WyNBmc724E9#JIFkv$7sJ$%RAJa-XEzchyw3 zuCT9)T(6e2QJfX7e;sKTx{&Ao4qb0!yWgV`sCj-la{24ZXPLB5FVY5F!aDl7aZml~ zknJZVn?BQpWN`e;jTC3;)bJCCmAiRSg@0~!Y8{zk01(`Zol4CP;n888ecIJKn)%u8C1|sTIA=%8QCtpU=k}oqH&~XpWiaqjV)k zapS&>%rf;jq91#^Oz*|X-*)8;<{nh6Iy+^MWZIZdK`agxQEC-WPEy5#oK!EU-R3ji z%k*TfO03IR4KR6flW;8WURSW;ltHyzK~MivQqILjQPXI_+tTX!Zf)#~I_PqUYH@l3 zdy^=}4h4f*W!v_j$rem1a_79b5HXE!!?x#glnve0F!SyC$g_A;faF&)f&S$x>-}ttr6tvg8Q=7)i&MAKkP-i?>=Wj$h4XB=e;et|r zl=93e68X=6oUkBUynIFMSL8r?zB}GOKdx63-VmBp77U2QR#5ca8x2yxcV*BXmk>b8-J zfh=9#-dx6A5Nfy=pmC3DscDwZuM(%dgQ=El&CHn29RWvx4X>_R?`J##hcFh7 z!2lfQ{k|a}k08jnWC=l@KE*PANPzbwbfjNi001T`($wf|_{hSCf&i)oz<=x{eX+nA zO%!msP332Pg_+7Jp!tp{eu1Iw(5Y#}%e_PxT2@k*ZT~Vg-+_+dVukVdC!EmXGmoURMvO3#KCwa{t+DS?vK0(m91lPt@vF!`{^YgFe-IHr- zY6|zSk;!DuOi55rnxF;lTyxBkF$X@nn~?d%Vj`5C878p%KKW(MTM7}&gkbTab~fwA zXokAi@R$QUXmPQIR4z{?NJ1{(hqeov*ztKMnGv8@zTFjuyjmUeI4;$54Y05Q_1JB| zl%La23-M%BW^L)t!=&jpZ*006-rvOS2E2%gw}JSik|)eVqalC*?cM4FOn6SwJxLIf z&d9{yuCK4JT*PrGL9YW~4LNcN(i4j1%>g@u-MEMd-{k67UaCB?*)U}hPCrAV6qTun zfX4+%=0JsV-o}QV`R{@F_Knk?fs47K@{ti;I;6`Kjh${9`K* zLpH`dq2RlIEd~C&g31)ZTMv{idtU-ZO%*N-+kxvKM%~`CNzhAOc*{FKXZaBvI{6FC z8gfwmN1OLVUQ|oP*u(^G7OSPDC1VME9(HteJi!?n8fqc`JDRSy3Bjn-Xf%Tv0Z>1? zu`wuBD1!fpL2n=ONO9M^C)A;>o0c_Gr@xN=o7$<|H{KML?rthQvc3)b9~6Ip_{o4f zIt{@RRpKAWUN%g^rkLbKir*xWNZiKsi9ZiJFsWLzQKOxCeDsbda2v~Z1+5Ez<~9eV z9JUGkfhnjk5qW4G^S}9jpV5zD9T-qIHUz+PR!XE}GsP0xDh|$$TL^O=b}9O@ydJqlWbdtTQ3>CwcxiJVy2bJUQi5PkXnb0}_ZC&i&!EEN)}+(4771 z*4UJBN0}?4 F{a;6w;yeHV literal 3809 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 diff --git a/src/main/resources/assets/mekanism/lang/de_DE.lang b/src/main/resources/assets/mekanism/lang/de_DE.lang index fea0d843d..481effd6e 100644 --- a/src/main/resources/assets/mekanism/lang/de_DE.lang +++ b/src/main/resources/assets/mekanism/lang/de_DE.lang @@ -338,6 +338,7 @@ gui.newFilter=Neuer Filter gui.energy=Energie gui.gas=Gas gui.dumping=Ausleeren +gui.dumping_excess=Ausleeren Über gui.modID=Mod-ID gui.key=Key gui.id=ID diff --git a/src/main/resources/assets/mekanism/lang/en_US.lang b/src/main/resources/assets/mekanism/lang/en_US.lang index 40571741e..a53c846a4 100644 --- a/src/main/resources/assets/mekanism/lang/en_US.lang +++ b/src/main/resources/assets/mekanism/lang/en_US.lang @@ -338,6 +338,7 @@ gui.newFilter=New Filter gui.energy=Energy gui.gas=Gas gui.dumping=Dumping +gui.dumping_excess=Dumping Excess gui.modID=Mod ID gui.key=Key gui.id=ID