From 55937cd7d4f3c62a6a9564620469b1aa323c4ac0 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Thu, 19 Jun 2014 02:34:49 +0200 Subject: [PATCH] Portable Tanks are polished as far as I can see! Also added a few missing localizations. --- .../mekanism/client/ClientTickHandler.java | 7 +- .../render/item/ItemRenderingHandler.java | 2 +- .../render/tileentity/RenderPortableTank.java | 64 ++++++++++++++++++- .../common/tile/TileEntityPortableTank.java | 51 ++++++++++++++- .../resources/assets/mekanism/lang/en_US.lang | 1 + 5 files changed, 116 insertions(+), 9 deletions(-) diff --git a/src/main/java/mekanism/client/ClientTickHandler.java b/src/main/java/mekanism/client/ClientTickHandler.java index 871a6e738..5646e09c1 100644 --- a/src/main/java/mekanism/client/ClientTickHandler.java +++ b/src/main/java/mekanism/client/ClientTickHandler.java @@ -33,6 +33,7 @@ import mekanism.common.network.PacketPortableTankState.PortableTankStateMessage; import mekanism.common.network.PacketScubaTankData.ScubaTankDataMessage; import mekanism.common.network.PacketScubaTankData.ScubaTankPacket; import mekanism.common.network.PacketWalkieTalkieState.WalkieTalkieStateMessage; +import mekanism.common.util.LangUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.StackUtils; import net.minecraft.client.Minecraft; @@ -235,7 +236,7 @@ public class ClientTickHandler { item.setState(stack, (byte)(item.getState(stack) < 3 ? item.getState(stack)+1 : 0)); Mekanism.packetHandler.sendToServer(new ConfiguratorStateMessage(item.getState(stack))); - mc.thePlayer.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + "Configure State: " + item.getColor(item.getState(stack)) + item.getStateDisplay(item.getState(stack)))); + mc.thePlayer.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + MekanismUtils.localize("tooltip.configureState") + ": " + item.getColor(item.getState(stack)) + item.getStateDisplay(item.getState(stack)))); lastTickUpdate = true; } } @@ -253,7 +254,7 @@ public class ClientTickHandler { item.setFireState(stack, !item.getFireState(stack)); Mekanism.packetHandler.sendToServer(new ElectricBowStateMessage(item.getFireState(stack))); - mc.thePlayer.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + "Fire Mode: " + (item.getFireState(stack) ? (EnumColor.DARK_GREEN + "ON") : (EnumColor.DARK_RED + "OFF")))); + mc.thePlayer.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + MekanismUtils.localize("tooltip.fireMode") + ": " + (item.getFireState(stack) ? EnumColor.DARK_GREEN : EnumColor.DARK_RED) + LangUtils.transYesNo(item.getFireState(stack)))); lastTickUpdate = true; } } @@ -273,7 +274,7 @@ public class ClientTickHandler { item.setBucketMode(stack, !item.getBucketMode(stack)); Mekanism.packetHandler.sendToServer(new PortableTankStateMessage(item.getBucketMode(stack))); - mc.thePlayer.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + "Bucket Mode: " + (item.getBucketMode(stack) ? (EnumColor.DARK_GREEN + "ON") : (EnumColor.DARK_RED + "OFF")))); + mc.thePlayer.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + MekanismUtils.localize("tooltip.portableTank.bucketMode") + ": " + (item.getBucketMode(stack) ? (EnumColor.DARK_GREEN + "ON") : (EnumColor.DARK_RED + "OFF")))); lastTickUpdate = true; } } diff --git a/src/main/java/mekanism/client/render/item/ItemRenderingHandler.java b/src/main/java/mekanism/client/render/item/ItemRenderingHandler.java index 857fd677f..0eb054eaa 100644 --- a/src/main/java/mekanism/client/render/item/ItemRenderingHandler.java +++ b/src/main/java/mekanism/client/render/item/ItemRenderingHandler.java @@ -442,7 +442,7 @@ public class ItemRenderingHandler implements IItemRenderer ItemBlockMachine itemMachine = (ItemBlockMachine)item.getItem(); Fluid fluid = itemMachine.getFluidStack(item) != null ? itemMachine.getFluidStack(item).getFluid() : null; - portableTankRenderer.render(fluid, itemMachine.getPrevScale(item), false, -0.5, -0.5, -0.5); + portableTankRenderer.render(fluid, itemMachine.getPrevScale(item), false, null, -0.5, -0.5, -0.5); } else { if(item.getItem() instanceof ItemBlockMachine) diff --git a/src/main/java/mekanism/client/render/tileentity/RenderPortableTank.java b/src/main/java/mekanism/client/render/tileentity/RenderPortableTank.java index 92a7684f1..0ef112533 100644 --- a/src/main/java/mekanism/client/render/tileentity/RenderPortableTank.java +++ b/src/main/java/mekanism/client/render/tileentity/RenderPortableTank.java @@ -24,6 +24,7 @@ import cpw.mods.fml.relauncher.SideOnly; public class RenderPortableTank extends TileEntitySpecialRenderer { private static Map cachedCenterFluids = new HashMap(); + private static Map cachedValveFluids = new HashMap(); private static int stages = 1400; @@ -38,10 +39,10 @@ public class RenderPortableTank extends TileEntitySpecialRenderer private void renderAModelAt(TileEntityPortableTank tileEntity, double x, double y, double z, float partialTick) { Fluid fluid = tileEntity.fluidTank.getFluid() != null ? tileEntity.fluidTank.getFluid().getFluid() : null; - render(fluid, tileEntity.prevScale, tileEntity.isActive, x, y, z); + render(fluid, tileEntity.prevScale, tileEntity.isActive, tileEntity.valve > 0 ? tileEntity.valveFluid : null, x, y, z); } - public void render(Fluid fluid, float fluidScale, boolean active, double x, double y, double z) + public void render(Fluid fluid, float fluidScale, boolean active, Fluid valveFluid, double x, double y, double z) { if(fluid != null && fluidScale > 0) { @@ -68,6 +69,24 @@ public class RenderPortableTank extends TileEntitySpecialRenderer pop(); } + if(valveFluid != null && !valveFluid.isGaseous()) + { + push(); + + bindTexture(MekanismRenderer.getBlocksTexture()); + GL11.glTranslated(x, y, z); + + MekanismRenderer.glowOn(valveFluid.getLuminosity()); + + DisplayInteger[] valveList = getValveRender(valveFluid); + + valveList[Math.min(stages-1, (int)(fluidScale*((float)stages-1)))].render(); + + MekanismRenderer.glowOff(); + + pop(); + } + GL11.glPushMatrix(); GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "PortableTank" + (active ? "On" : "") + ".png")); @@ -93,6 +112,47 @@ public class RenderPortableTank extends TileEntitySpecialRenderer MekanismRenderer.blendOn(); } + private DisplayInteger[] getValveRender(Fluid fluid) + { + if(cachedValveFluids.containsKey(fluid)) + { + return cachedValveFluids.get(fluid); + } + + Model3D toReturn = new Model3D(); + toReturn.baseBlock = Blocks.water; + toReturn.setTexture(fluid.getFlowingIcon()); + + DisplayInteger[] displays = new DisplayInteger[stages]; + cachedValveFluids.put(fluid, displays); + + MekanismRenderer.colorFluid(fluid); + + for(int i = 0; i < stages; i++) + { + displays[i] = DisplayInteger.createAndStart(); + + if(fluid.getIcon() != null) + { + toReturn.minX = 0.3125 + .01; + toReturn.minY = 0.0625 + ((float)i/(float)stages)*0.875 + .01; + toReturn.minZ = 0.3125 + .01; + + toReturn.maxX = 0.6875 - .01; + toReturn.maxY = 0.9375 - .01; + toReturn.maxZ = 0.6875 - .01; + + MekanismRenderer.renderObject(toReturn); + } + + GL11.glEndList(); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + return displays; + } + private DisplayInteger[] getListAndRender(Fluid fluid) { if(cachedCenterFluids.containsKey(fluid)) diff --git a/src/main/java/mekanism/common/tile/TileEntityPortableTank.java b/src/main/java/mekanism/common/tile/TileEntityPortableTank.java index ff947ab93..f132ea40b 100644 --- a/src/main/java/mekanism/common/tile/TileEntityPortableTank.java +++ b/src/main/java/mekanism/common/tile/TileEntityPortableTank.java @@ -21,6 +21,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTankInfo; @@ -40,6 +41,9 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements public int prevAmount; + public int valve; + public Fluid valveFluid; + public float prevScale; public TileEntityPortableTank() @@ -79,19 +83,32 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements } } else { + boolean needsPacket = false; + if(updateDelay > 0) { updateDelay--; if(updateDelay == 0 && clientActive != isActive) { - Mekanism.packetHandler.sendToAllAround(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), Coord4D.get(this).getTargetPoint(50)); + needsPacket = true; + } + } + + if(valve > 0) + { + valve--; + + if(valve == 0) + { + valveFluid = null; + needsPacket = true; } } if(fluidTank.getFluidAmount() != prevAmount) { - Mekanism.packetHandler.sendToAllAround(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), Coord4D.get(this).getTargetPoint(50)); + needsPacket = true; } prevAmount = fluidTank.getFluidAmount(); @@ -105,6 +122,11 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements { activeEmit(); } + + if(needsPacket) + { + Mekanism.packetHandler.sendToAllAround(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), Coord4D.get(this).getTargetPoint(50)); + } } } @@ -282,6 +304,15 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements super.handlePacketData(dataStream); clientActive = dataStream.readBoolean(); + valve = dataStream.readInt(); + + if(valve > 0) + { + valveFluid = FluidRegistry.getFluid(dataStream.readInt()); + } + else { + valveFluid = null; + } if(dataStream.readInt() == 1) { @@ -305,6 +336,12 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements super.getNetworkedData(data); data.add(isActive); + data.add(valve); + + if(valve > 0) + { + data.add(valveFluid.getID()); + } if(fluidTank.getFluid() != null) { @@ -370,7 +407,15 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements { if(resource != null && canFill(from, resource.getFluid())) { - return fluidTank.fill(resource, doFill); + int filled = fluidTank.fill(resource, doFill); + + if(filled > 0) + { + valve = 20; + valveFluid = resource.getFluid(); + } + + return filled; } return 0; diff --git a/src/main/resources/assets/mekanism/lang/en_US.lang b/src/main/resources/assets/mekanism/lang/en_US.lang index 11ea8c315..9990af9d8 100644 --- a/src/main/resources/assets/mekanism/lang/en_US.lang +++ b/src/main/resources/assets/mekanism/lang/en_US.lang @@ -470,6 +470,7 @@ tooltip.tile=Tile tooltip.keysFound=Key(s) found tooltip.noKey=No key tooltip.hp=HP +tooltip.configureState=Configure State tooltip.portableTank.bucketMode=Bucket Mode