From c642792cb682ae7cc7bd38dca7595ba73e15df8f Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Thu, 1 Aug 2013 23:03:43 +0100 Subject: [PATCH 1/4] Use DisplayInteger to abstract away some GL11 calls --- common/mekanism/client/MekanismRenderer.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/common/mekanism/client/MekanismRenderer.java b/common/mekanism/client/MekanismRenderer.java index c6768bc7a..466df2302 100644 --- a/common/mekanism/client/MekanismRenderer.java +++ b/common/mekanism/client/MekanismRenderer.java @@ -7,6 +7,7 @@ import mekanism.common.ISpecialBounds; import mekanism.common.MekanismUtils; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.RenderHelper; @@ -265,6 +266,24 @@ public class MekanismRenderer { return obj instanceof DisplayInteger && ((DisplayInteger)obj).display == display; } + + public static DisplayInteger createAndStart() + { + DisplayInteger newInteger = new DisplayInteger(); + newInteger.display = GLAllocation.generateDisplayLists(1); + GL11.glNewList(newInteger.display, GL11.GL_COMPILE); + return newInteger; + } + + public static void endList() + { + GL11.glEndList(); + } + + public void render() + { + GL11.glCallList(display); + } } public static TextureMap getTextureMap(int type) From 04e7fdcf23f240415c42f08cdb2501862835ec9d Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Thu, 1 Aug 2013 23:14:26 +0100 Subject: [PATCH 2/4] Make the transmitters' internal renders look a bit nicer (hopefully also a bit faster). Framework is in place to change transparency of energy in cables but the client-side ones don't know what they're doing yet. --- common/mekanism/client/MekanismRenderer.java | 35 ++- .../client/ModelRendererSelectiveFace.java | 54 +--- .../mekanism/client/RenderMechanicalPipe.java | 29 +- .../client/RenderPressurizedTube.java | 87 ++++-- .../mekanism/client/RenderUniversalCable.java | 289 +++++++++++------- .../common/TileEntityUniversalCable.java | 6 + 6 files changed, 309 insertions(+), 191 deletions(-) diff --git a/common/mekanism/client/MekanismRenderer.java b/common/mekanism/client/MekanismRenderer.java index 466df2302..8a4b3c4f4 100644 --- a/common/mekanism/client/MekanismRenderer.java +++ b/common/mekanism/client/MekanismRenderer.java @@ -45,7 +45,7 @@ public class MekanismRenderer public Icon[] textures = new Icon[6]; - public boolean[] renderSides = new boolean[] {true, true, true, true, true, true}; + public boolean[] renderSides = new boolean[] {true, true, true, true, true, true, false}; public Block baseBlock = Block.sand; @@ -306,6 +306,39 @@ public class MekanismRenderer return null; } + public static class BooleanArray + { + private final boolean[] boolArray; + + public BooleanArray(boolean[] array) + { + boolArray = array.clone(); + } + + @Override + public boolean equals(Object o) + { + if(o instanceof BooleanArray) + { + return Arrays.equals(boolArray, ((BooleanArray)o).boolArray); + } + else if(o instanceof boolean[]) + { + return Arrays.equals(boolArray, (boolean[])o); + } + else + { + return false; + } + } + + @Override + public int hashCode() + { + return Arrays.hashCode(boolArray); + } + } + public static float getPartialTicks() { try { diff --git a/common/mekanism/client/ModelRendererSelectiveFace.java b/common/mekanism/client/ModelRendererSelectiveFace.java index 02a88e401..eec88af87 100644 --- a/common/mekanism/client/ModelRendererSelectiveFace.java +++ b/common/mekanism/client/ModelRendererSelectiveFace.java @@ -8,6 +8,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import mekanism.client.MekanismRenderer.BooleanArray; +import mekanism.client.MekanismRenderer.DisplayInteger; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.TextureOffset; import net.minecraft.client.renderer.GLAllocation; @@ -35,7 +37,7 @@ public class ModelRendererSelectiveFace private int textureOffsetX; private int textureOffsetY; private ModelBase baseModel; - private Map displayLists = new HashMap(); + private Map displayLists = new HashMap(); public ModelRendererSelectiveFace(ModelBase modelBase) @@ -80,7 +82,7 @@ public class ModelRendererSelectiveFace { if (showModel) { - Integer currentDisplayList = displayLists.get(new BooleanArray(dontRender)); + DisplayInteger currentDisplayList = displayLists.get(new BooleanArray(dontRender)); if (currentDisplayList == null) { currentDisplayList = compileDisplayList(dontRender, scaleFactor); @@ -93,12 +95,12 @@ public class ModelRendererSelectiveFace { if (rotationPointX == 0.0F && rotationPointY == 0.0F && rotationPointZ == 0.0F) { - GL11.glCallList(currentDisplayList); + currentDisplayList.render(); } else { GL11.glTranslatef(rotationPointX * scaleFactor, rotationPointY * scaleFactor, rotationPointZ * scaleFactor); - GL11.glCallList(currentDisplayList); + currentDisplayList.render(); GL11.glTranslatef(-rotationPointX * scaleFactor, -rotationPointY * scaleFactor, -rotationPointZ * scaleFactor); } } @@ -122,7 +124,7 @@ public class ModelRendererSelectiveFace GL11.glRotatef(rotateAngleX * (180F / (float)Math.PI), 1.0F, 0.0F, 0.0F); } - GL11.glCallList(currentDisplayList); + currentDisplayList.render(); GL11.glPopMatrix(); } @@ -132,10 +134,9 @@ public class ModelRendererSelectiveFace } @SideOnly(Side.CLIENT) - private int compileDisplayList(boolean[] dontRender, float scaleFactor) + private DisplayInteger compileDisplayList(boolean[] dontRender, float scaleFactor) { - int displayList = GLAllocation.generateDisplayLists(1); - GL11.glNewList(displayList, GL11.GL_COMPILE); + DisplayInteger displayList = DisplayInteger.createAndStart(); Tessellator tessellator = Tessellator.instance; for (int i = 0; i < cubeList.size(); ++i) @@ -143,7 +144,7 @@ public class ModelRendererSelectiveFace cubeList.get(i).render(tessellator, dontRender, scaleFactor); } - GL11.glEndList(); + displayList.endList(); displayLists.put(new BooleanArray(dontRender), displayList); return displayList; } @@ -154,39 +155,4 @@ public class ModelRendererSelectiveFace textureHeight = (float)sizeY; return this; } - - private class BooleanArray - { - private final boolean[] boolArray; - - public BooleanArray(boolean[] array) - { - boolArray = array.clone(); - } - - @Override - public boolean equals(Object o) - { - if(o instanceof BooleanArray) - { - return Arrays.equals(boolArray, ((BooleanArray)o).boolArray); - } - else if(o instanceof boolean[]) - { - return Arrays.equals(boolArray, (boolean[])o); - } - else - { - return false; - } - } - - @Override - public int hashCode() - { - return Arrays.hashCode(boolArray); - } - - - } } diff --git a/common/mekanism/client/RenderMechanicalPipe.java b/common/mekanism/client/RenderMechanicalPipe.java index 0b43261d3..27815654c 100644 --- a/common/mekanism/client/RenderMechanicalPipe.java +++ b/common/mekanism/client/RenderMechanicalPipe.java @@ -2,6 +2,7 @@ package mekanism.client; import java.util.HashMap; +import mekanism.client.MekanismRenderer.DisplayInteger; import mekanism.client.MekanismRenderer.Model3D; import mekanism.common.MekanismUtils; import mekanism.common.MekanismUtils.ResourceType; @@ -26,7 +27,7 @@ public class RenderMechanicalPipe extends TileEntitySpecialRenderer { private ModelTransmitter model = new ModelTransmitter(); - private HashMap> cachedLiquids = new HashMap>(); + private HashMap> cachedLiquids = new HashMap>(); private static final int stages = 40; @@ -73,20 +74,20 @@ public class RenderMechanicalPipe extends TileEntitySpecialRenderer { if(connectable[i]) { - int[] displayList = getListAndRender(ForgeDirection.getOrientation(i), tileEntity.refFluid.getFluid()); + DisplayInteger[] displayLists = getListAndRender(ForgeDirection.getOrientation(i), tileEntity.refFluid.getFluid()); - if(displayList != null) + if(displayLists != null) { - GL11.glCallList(displayList[Math.max(3, (int)((float)tileEntity.fluidScale*(stages-1)))]); + displayLists[Math.max(3, (int)((float)tileEntity.fluidScale*(stages-1)))].render(); } } } - int[] displayList = getListAndRender(ForgeDirection.UNKNOWN, tileEntity.refFluid.getFluid()); + DisplayInteger[] displayLists = getListAndRender(ForgeDirection.UNKNOWN, tileEntity.refFluid.getFluid()); - if(displayList != null) + if(displayLists != null) { - GL11.glCallList(displayList[Math.max(3, (int)((float)tileEntity.fluidScale*(stages-1)))]); + displayLists[Math.max(3, (int)((float)tileEntity.fluidScale*(stages-1)))].render(); } if(tileEntity.refFluid.getFluid() == FluidRegistry.LAVA) @@ -114,7 +115,7 @@ public class RenderMechanicalPipe extends TileEntitySpecialRenderer GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); } - private int[] getListAndRender(ForgeDirection side, Fluid fluid) + private DisplayInteger[] getListAndRender(ForgeDirection side, Fluid fluid) { if(side == null || fluid == null || fluid.getIcon() == null) { @@ -130,14 +131,17 @@ public class RenderMechanicalPipe extends TileEntitySpecialRenderer toReturn.baseBlock = Block.waterStill; toReturn.setTexture(fluid.getIcon()); - int[] displays = new int[stages]; + toReturn.setSideRender(side, false); + toReturn.setSideRender(side.getOpposite(), false); + + DisplayInteger[] displays = new DisplayInteger[stages]; if(cachedLiquids.containsKey(side)) { cachedLiquids.get(side).put(fluid, displays); } else { - HashMap map = new HashMap(); + HashMap map = new HashMap(); map.put(fluid, displays); cachedLiquids.put(side, map); } @@ -146,8 +150,7 @@ public class RenderMechanicalPipe extends TileEntitySpecialRenderer for(int i = 0; i < stages; i++) { - displays[i] = GLAllocation.generateDisplayLists(1); - GL11.glNewList(displays[i], 4864); + displays[i] = DisplayInteger.createAndStart(); switch(side) { @@ -231,7 +234,7 @@ public class RenderMechanicalPipe extends TileEntitySpecialRenderer } MekanismRenderer.renderObject(toReturn); - GL11.glEndList(); + DisplayInteger.endList(); } GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/common/mekanism/client/RenderPressurizedTube.java b/common/mekanism/client/RenderPressurizedTube.java index fa637c4c5..faa0d8e51 100644 --- a/common/mekanism/client/RenderPressurizedTube.java +++ b/common/mekanism/client/RenderPressurizedTube.java @@ -7,6 +7,7 @@ import mekanism.api.EnumGas; import mekanism.api.GasTransmission; import mekanism.api.ITubeConnection; import mekanism.api.Object3D; +import mekanism.client.MekanismRenderer.BooleanArray; import mekanism.client.MekanismRenderer.DisplayInteger; import mekanism.client.MekanismRenderer.Model3D; import mekanism.common.MekanismUtils; @@ -29,7 +30,10 @@ public class RenderPressurizedTube extends TileEntitySpecialRenderer { private ModelTransmitter model = new ModelTransmitter(); - private HashMap> cachedGasses = new HashMap>(); + private boolean[] connectable; + + private HashMap> cachedSideGasses = new HashMap>(); + private HashMap> cachedCenterGasses = new HashMap>(); private static final double offset = 0.015; @@ -48,7 +52,7 @@ public class RenderPressurizedTube extends TileEntitySpecialRenderer GL11.glScalef(1.0F, -1F, -1F); GL11.glDisable(GL11.GL_CULL_FACE); - boolean[] connectable = new boolean[] {false, false, false, false, false, false}; + connectable = new boolean[] {false, false, false, false, false, false}; ITubeConnection[] connections = GasTransmission.getConnections(tileEntity); @@ -124,14 +128,12 @@ public class RenderPressurizedTube extends TileEntitySpecialRenderer { if(connectable[i]) { - int displayList = getListAndRender(ForgeDirection.getOrientation(i), tileEntity.refGas).display; - GL11.glCallList(displayList); + getListAndRender(ForgeDirection.getOrientation(i), tileEntity.refGas).render(); } } } - int displayList = getListAndRender(ForgeDirection.UNKNOWN, tileEntity.refGas).display; - GL11.glCallList(displayList); + getListAndRender(ForgeDirection.UNKNOWN, tileEntity.refGas).render(); pop(); } @@ -155,43 +157,70 @@ public class RenderPressurizedTube extends TileEntitySpecialRenderer private DisplayInteger getListAndRender(ForgeDirection side, EnumGas type) { - if(cachedGasses.containsKey(side) && cachedGasses.get(side).containsKey(type)) + if(side == ForgeDirection.UNKNOWN) { - return cachedGasses.get(side).get(type); + if(cachedCenterGasses.containsKey(side) && cachedCenterGasses.get(side).containsKey(type)) + { + return cachedCenterGasses.get(new BooleanArray(connectable)).get(type); + } + + Model3D toReturn = new Model3D(); + toReturn.baseBlock = Block.waterStill; + toReturn.setTexture(type.gasIcon); + toReturn.minX = 0.3 + offset; + toReturn.minY = 0.3 + offset; + toReturn.minZ = 0.3 + offset; + + toReturn.maxX = 0.7 - offset; + toReturn.maxY = 0.7 - offset; + toReturn.maxZ = 0.7 - offset; + + for(ForgeDirection face : ForgeDirection.VALID_DIRECTIONS) + { + toReturn.setSideRender(face, !connectable[face.ordinal()]); + } + + DisplayInteger display = DisplayInteger.createAndStart(); + MekanismRenderer.renderObject(toReturn); + DisplayInteger.endList(); + + if(cachedCenterGasses.containsKey(side)) + { + cachedCenterGasses.get(side).put(type, display); + } + else { + HashMap map = new HashMap(); + map.put(type, display); + cachedCenterGasses.put(new BooleanArray(connectable), map); + } + return display; + } + if(cachedSideGasses.containsKey(side) && cachedSideGasses.get(side).containsKey(type)) + { + return cachedSideGasses.get(side).get(type); } Model3D toReturn = new Model3D(); toReturn.baseBlock = Block.waterStill; toReturn.setTexture(type.gasIcon); - DisplayInteger display = new DisplayInteger(); + toReturn.setSideRender(side, false); + toReturn.setSideRender(side.getOpposite(), false); - if(cachedGasses.containsKey(side)) + DisplayInteger display = DisplayInteger.createAndStart(); + + if(cachedSideGasses.containsKey(side)) { - cachedGasses.get(side).put(type, display); + cachedSideGasses.get(side).put(type, display); } else { HashMap map = new HashMap(); map.put(type, display); - cachedGasses.put(side, map); + cachedSideGasses.put(side, map); } - - display.display = GLAllocation.generateDisplayLists(1); - GL11.glNewList(display.display, 4864); - + switch(side) { - case UNKNOWN: - { - toReturn.minX = 0.3 + offset; - toReturn.minY = 0.3 + offset; - toReturn.minZ = 0.3 + offset; - - toReturn.maxX = 0.7 - offset; - toReturn.maxY = 0.7 - offset; - toReturn.maxZ = 0.7 - offset; - break; - } case DOWN: { toReturn.minX = 0.3 + offset; @@ -206,7 +235,7 @@ public class RenderPressurizedTube extends TileEntitySpecialRenderer case UP: { toReturn.minX = 0.3 + offset; - toReturn.minY = 0.3 - offset; + toReturn.minY = 0.7 - offset; toReturn.minZ = 0.3 + offset; toReturn.maxX = 0.7 - offset; @@ -261,7 +290,7 @@ public class RenderPressurizedTube extends TileEntitySpecialRenderer } MekanismRenderer.renderObject(toReturn); - GL11.glEndList(); + DisplayInteger.endList(); return display; } diff --git a/common/mekanism/client/RenderUniversalCable.java b/common/mekanism/client/RenderUniversalCable.java index b94cb18c8..eba1fabc4 100644 --- a/common/mekanism/client/RenderUniversalCable.java +++ b/common/mekanism/client/RenderUniversalCable.java @@ -1,5 +1,10 @@ package mekanism.client; +import java.util.HashMap; +import java.util.Map; + +import mekanism.client.MekanismRenderer.BooleanArray; +import mekanism.client.MekanismRenderer.DisplayInteger; import mekanism.client.MekanismRenderer.Model3D; import mekanism.common.CableUtils; import mekanism.common.Mekanism; @@ -7,6 +12,7 @@ import mekanism.common.MekanismUtils; import mekanism.common.TileEntityUniversalCable; import mekanism.common.MekanismUtils.ResourceType; import net.minecraft.block.Block; +import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Icon; @@ -21,12 +27,19 @@ import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class RenderUniversalCable extends TileEntitySpecialRenderer { - private ModelTransmitter model = new ModelTransmitter(); + private static ModelTransmitter model = new ModelTransmitter(); - private Icon renderIcon = MekanismRenderer.getTextureMap(1).registerIcon("mekanism:LiquidEnergy"); + private static Icon renderIcon = MekanismRenderer.getTextureMap(1).registerIcon("mekanism:LiquidEnergy"); + + private static Model3D[] energy = null; + + private static Map sideDisplayLists = new HashMap(); + private static Map centerDisplayLists = new HashMap(); private static final double offset = 0.015; + private boolean[] connectable; + @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) { @@ -41,7 +54,7 @@ public class RenderUniversalCable extends TileEntitySpecialRenderer GL11.glScalef(1.0F, -1F, -1F); GL11.glDisable(GL11.GL_CULL_FACE); - boolean[] connectable = CableUtils.getConnections(tileEntity); + connectable = CableUtils.getConnections(tileEntity); model.renderCenter(connectable); for(int i = 0; i < 6; i++) @@ -51,30 +64,44 @@ public class RenderUniversalCable extends TileEntitySpecialRenderer GL11.glEnable(GL11.GL_CULL_FACE); GL11.glPopMatrix(); - - if(Mekanism.fancyUniversalCableRender) + + if(tileEntity.getEnergyScale() <= 0 || !Mekanism.fancyUniversalCableRender) { - push(); - MekanismRenderer.glowOn(); - - func_110628_a(MekanismUtils.getResource(ResourceType.TEXTURE_ITEMS, "LiquidEnergy.png")); - GL11.glTranslatef((float)x, (float)y, (float)z); - - for(int i = 0; i < 6; i++) - { - if(connectable[i]) - { - renderEnergy(ForgeDirection.getOrientation(i)); - } - } - - renderEnergy(ForgeDirection.UNKNOWN); - - MekanismRenderer.glowOff(); - pop(); + return; } + + push(); + + MekanismRenderer.glowOn(); + GL11.glColor4f(1.F, 1.F, 1.F, tileEntity.getEnergyScale()); + func_110628_a(MekanismUtils.getResource(ResourceType.TEXTURE_ITEMS, "LiquidEnergy.png")); + GL11.glTranslatef((float)x, (float)y, (float)z); + + if(energy == null) + { + energy = assignEnergy(); + } + + for(int i = 0; i < 6; i++) + { + if(connectable[i]) + { + renderEnergy(ForgeDirection.getOrientation(i)); + } + } + + renderEnergy(ForgeDirection.UNKNOWN); + + MekanismRenderer.glowOff(); + pop(); } + private void renderEnergy(ForgeDirection side) + { + DisplayInteger list = getDisplayList(side); + list.render(); + } + private void pop() { GL11.glPopAttrib(); @@ -91,93 +118,147 @@ public class RenderUniversalCable extends TileEntitySpecialRenderer GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); } - private void renderEnergy(ForgeDirection side) + private static Model3D[] assignEnergy() { - Model3D toReturn = new Model3D(); - toReturn.baseBlock = Block.waterStill; - toReturn.setTexture(renderIcon); + Model3D[] energyArray = new Model3D[7]; + Model3D centerModel = new Model3D(); + centerModel.baseBlock = Block.waterStill; + centerModel.setTexture(renderIcon); - switch(side) + centerModel.minX = 0.3 + offset; + centerModel.minY = 0.3 + offset; + centerModel.minZ = 0.3 + offset; + + centerModel.maxX = 0.7 - offset; + centerModel.maxY = 0.7 - offset; + centerModel.maxZ = 0.7 - offset; + + energyArray[ForgeDirection.UNKNOWN.ordinal()] = centerModel; + + for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - case UNKNOWN: + Model3D toReturn = new Model3D(); + toReturn.baseBlock = Block.waterStill; + toReturn.setTexture(renderIcon); + + toReturn.setSideRender(side, false); + toReturn.setSideRender(side.getOpposite(), false); + + switch(side) { - toReturn.minX = 0.3 + offset; - toReturn.minY = 0.3 + offset; - toReturn.minZ = 0.3 + offset; - - toReturn.maxX = 0.7 - offset; - toReturn.maxY = 0.7 - offset; - toReturn.maxZ = 0.7 - offset; - break; - } - case DOWN: - { - toReturn.minX = 0.3 + offset; - toReturn.minY = 0.0; - toReturn.minZ = 0.3 + offset; - - toReturn.maxX = 0.7 - offset; - toReturn.maxY = 0.3 + offset; - toReturn.maxZ = 0.7 - offset; - break; - } - case UP: - { - toReturn.minX = 0.3 + offset; - toReturn.minY = 0.7 - offset; - toReturn.minZ = 0.3 + offset; - - toReturn.maxX = 0.7 - offset; - toReturn.maxY = 1.0; - toReturn.maxZ = 0.7 - offset; - break; - } - case NORTH: - { - toReturn.minX = 0.3 + offset; - toReturn.minY = 0.3 + offset; - toReturn.minZ = 0.0; - - toReturn.maxX = 0.7 - offset; - toReturn.maxY = 0.7 - offset; - toReturn.maxZ = 0.3 + offset; - break; - } - case SOUTH: - { - toReturn.minX = 0.3 + offset; - toReturn.minY = 0.3 + offset; - toReturn.minZ = 0.7 - offset; - - toReturn.maxX = 0.7 - offset; - toReturn.maxY = 0.7 - offset; - toReturn.maxZ = 1.0; - break; - } - case WEST: - { - toReturn.minX = 0.0; - toReturn.minY = 0.3 + offset; - toReturn.minZ = 0.3 + offset; - - toReturn.maxX = 0.3 + offset; - toReturn.maxY = 0.7 - offset; - toReturn.maxZ = 0.7 - offset; - break; - } - case EAST: - { - toReturn.minX = 0.7 - offset; - toReturn.minY = 0.3 + offset; - toReturn.minZ = 0.3 + offset; - - toReturn.maxX = 1.0; - toReturn.maxY = 0.7 - offset; - toReturn.maxZ = 0.7 - offset; - break; + case DOWN: + { + toReturn.minX = 0.3 + offset; + toReturn.minY = 0.0; + toReturn.minZ = 0.3 + offset; + + toReturn.maxX = 0.7 - offset; + toReturn.maxY = 0.3 + offset; + toReturn.maxZ = 0.7 - offset; + break; + } + case UP: + { + toReturn.minX = 0.3 + offset; + toReturn.minY = 0.7 - offset; + toReturn.minZ = 0.3 + offset; + + toReturn.maxX = 0.7 - offset; + toReturn.maxY = 1.0; + toReturn.maxZ = 0.7 - offset; + break; + } + case NORTH: + { + toReturn.minX = 0.3 + offset; + toReturn.minY = 0.3 + offset; + toReturn.minZ = 0.0; + + toReturn.maxX = 0.7 - offset; + toReturn.maxY = 0.7 - offset; + toReturn.maxZ = 0.3 + offset; + break; + } + case SOUTH: + { + toReturn.minX = 0.3 + offset; + toReturn.minY = 0.3 + offset; + toReturn.minZ = 0.7 - offset; + + toReturn.maxX = 0.7 - offset; + toReturn.maxY = 0.7 - offset; + toReturn.maxZ = 1.0; + break; + } + case WEST: + { + toReturn.minX = 0.0; + toReturn.minY = 0.3 + offset; + toReturn.minZ = 0.3 + offset; + + toReturn.maxX = 0.3 + offset; + toReturn.maxY = 0.7 - offset; + toReturn.maxZ = 0.7 - offset; + break; + } + case EAST: + { + toReturn.minX = 0.7 - offset; + toReturn.minY = 0.3 + offset; + toReturn.minZ = 0.3 + offset; + + toReturn.maxX = 1.0; + toReturn.maxY = 0.7 - offset; + toReturn.maxZ = 0.7 - offset; + break; + } } + + energyArray[side.ordinal()] = toReturn; } + return energyArray; + } + + private DisplayInteger getDisplayList(ForgeDirection side) + { - MekanismRenderer.renderObject(toReturn); + DisplayInteger newDisplayList; + + Model3D toRender = energy[side.ordinal()]; + if(side == ForgeDirection.UNKNOWN) + { + newDisplayList = centerDisplayLists.get(new BooleanArray(connectable)); + if(newDisplayList != null) + { + return newDisplayList; + } + + for(ForgeDirection face : ForgeDirection.VALID_DIRECTIONS) + { + toRender.setSideRender(face, !connectable[face.ordinal()]); + } + + newDisplayList = DisplayInteger.createAndStart(); + + MekanismRenderer.renderObject(toRender); + + newDisplayList.endList(); + centerDisplayLists.put(new BooleanArray(connectable), newDisplayList); + } + else { + newDisplayList = sideDisplayLists.get(side); + if(newDisplayList != null) + { + return newDisplayList; + } + + newDisplayList = DisplayInteger.createAndStart(); + + MekanismRenderer.renderObject(toRender); + + newDisplayList.endList(); + sideDisplayLists.put(side, newDisplayList); + } + return newDisplayList; } } diff --git a/common/mekanism/common/TileEntityUniversalCable.java b/common/mekanism/common/TileEntityUniversalCable.java index a19166092..8d06122c1 100644 --- a/common/mekanism/common/TileEntityUniversalCable.java +++ b/common/mekanism/common/TileEntityUniversalCable.java @@ -40,6 +40,12 @@ public class TileEntityUniversalCable extends TileEntity implements IUniversalCa return getNetwork(true); } + public float getEnergyScale() + { + //TODO: Let the client know how much power's being transferred + return 1.F; + } + @Override public EnergyNetwork getNetwork(boolean createIfNull) { From 0d99b9092241cf46a1b9449826cba42c6b5b6acf Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Thu, 1 Aug 2013 23:15:02 +0100 Subject: [PATCH 3/4] Add a nullcheck that was crashing someone. --- common/mekanism/common/TileEntityUniversalCable.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/mekanism/common/TileEntityUniversalCable.java b/common/mekanism/common/TileEntityUniversalCable.java index 8d06122c1..1bc109120 100644 --- a/common/mekanism/common/TileEntityUniversalCable.java +++ b/common/mekanism/common/TileEntityUniversalCable.java @@ -108,7 +108,10 @@ public class TileEntityUniversalCable extends TileEntity implements IUniversalCa @Override public void removeFromNetwork() { - energyNetwork.removeCable(this); + if(energyNetwork != null) + { + energyNetwork.removeCable(this); + } } @Override From 534234abb2f299d4f8fab24c65cf2b4297d51c05 Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Thu, 1 Aug 2013 23:49:38 +0100 Subject: [PATCH 4/4] Should fix robit crash when placed on non-chargepad tileEntities --- common/mekanism/common/ItemRobit.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/common/mekanism/common/ItemRobit.java b/common/mekanism/common/ItemRobit.java index 3fc0fdbfa..2a13ac533 100644 --- a/common/mekanism/common/ItemRobit.java +++ b/common/mekanism/common/ItemRobit.java @@ -9,6 +9,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import universalelectricity.core.electricity.ElectricityPack; import cpw.mods.fml.relauncher.Side; @@ -38,17 +39,18 @@ public class ItemRobit extends ItemEnergized implements ISustainedInventory @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, int x, int y, int z, int side, float posX, float posY, float posZ) { - TileEntityChargepad tileEntity = (TileEntityChargepad)world.getBlockTileEntity(x, y, z); + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - if(tileEntity != null) + if(tileEntity instanceof TileEntityChargepad) { - if(!tileEntity.isActive) + TileEntityChargepad chargepad = (TileEntityChargepad)tileEntity; + if(!chargepad.isActive) { if(!world.isRemote) { EntityRobit robit = new EntityRobit(world, x+0.5, y+0.1, z+0.5); - robit.setHome(Object3D.get(tileEntity)); + robit.setHome(Object3D.get(chargepad)); robit.setEnergy(getEnergy(itemstack)); robit.setOwner(entityplayer.username); robit.setInventory(getInventory(itemstack));