diff --git a/src/main/java/mekanism/common/multiblock/UpdateProtocol.java b/src/main/java/mekanism/common/multiblock/UpdateProtocol.java index e7b699317..de352ea7f 100644 --- a/src/main/java/mekanism/common/multiblock/UpdateProtocol.java +++ b/src/main/java/mekanism/common/multiblock/UpdateProtocol.java @@ -473,11 +473,11 @@ public abstract class UpdateProtocol> //TODO perhaps drop from pointer? cache.apply((T)structureFound); - - onFormed(); structureFound.inventoryID = idToUse; + onFormed(); + List structures = new ArrayList(); Coord4D toUse = null; diff --git a/src/main/java/mekanism/generators/client/render/RenderIndustrialTurbine.java b/src/main/java/mekanism/generators/client/render/RenderIndustrialTurbine.java index d18e93929..63c7df4c5 100644 --- a/src/main/java/mekanism/generators/client/render/RenderIndustrialTurbine.java +++ b/src/main/java/mekanism/generators/client/render/RenderIndustrialTurbine.java @@ -3,17 +3,20 @@ package mekanism.generators.client.render; import java.util.HashMap; import java.util.Map; +import mekanism.api.Coord4D; import mekanism.client.render.MekanismRenderer; import mekanism.client.render.MekanismRenderer.DisplayInteger; import mekanism.client.render.MekanismRenderer.Model3D; import mekanism.client.render.tileentity.RenderDynamicTank.RenderData; import mekanism.common.content.tank.TankUpdateProtocol; import mekanism.generators.common.tile.turbine.TileEntityTurbineCasing; +import mekanism.generators.common.tile.turbine.TileEntityTurbineRotor; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; @@ -33,58 +36,79 @@ public class RenderIndustrialTurbine extends TileEntitySpecialRenderer public void renderAModelAt(TileEntityTurbineCasing tileEntity, double x, double y, double z, float partialTick) { - if(tileEntity.clientHasStructure && tileEntity.isRendering && tileEntity.structure != null && tileEntity.structure.fluidStored != null && tileEntity.structure.fluidStored.amount != 0) + if(tileEntity.clientHasStructure && tileEntity.isRendering && tileEntity.structure != null) { - RenderData data = new RenderData(); - - data.location = tileEntity.structure.renderLocation; - data.height = tileEntity.structure.lowerVolume/(tileEntity.structure.volLength*tileEntity.structure.volWidth); - data.length = tileEntity.structure.volLength; - data.width = tileEntity.structure.volWidth; + RenderTurbineRotor.internalRender = true; + Coord4D coord = tileEntity.structure.complex; - bindTexture(MekanismRenderer.getBlocksTexture()); - - if(data.location != null && data.height >= 3 && tileEntity.structure.fluidStored.getFluid() != null) + while(true) { - push(); - - GL11.glTranslated(getX(data.location.xCoord), getY(data.location.yCoord), getZ(data.location.zCoord)); - - MekanismRenderer.glowOn(tileEntity.structure.fluidStored.getFluid().getLuminosity()); - MekanismRenderer.colorFluid(tileEntity.structure.fluidStored.getFluid()); - - DisplayInteger[] displayList = getListAndRender(data, tileEntity.getWorldObj()); - - GL11.glColor4f(1F, 1F, 1F, Math.min(1, ((float)tileEntity.structure.fluidStored.amount / (float)tileEntity.structure.getFluidCapacity())+0.3F)); - displayList[getStages(data.height)-1].render(); - - MekanismRenderer.glowOff(); - MekanismRenderer.resetColor(); - - pop(); + coord = coord.getFromSide(ForgeDirection.DOWN); + TileEntity tile = coord.getTileEntity(tileEntity.getWorldObj()); + + if(!(tile instanceof TileEntityTurbineRotor)) + { + break; + } + + TileEntityRendererDispatcher.instance.renderTileEntity(tile, partialTick); + } + + RenderTurbineRotor.internalRender = false; + + if(tileEntity.structure.fluidStored != null && tileEntity.structure.fluidStored.amount != 0) + { + RenderData data = new RenderData(); + + data.location = tileEntity.structure.renderLocation; + data.height = tileEntity.structure.lowerVolume/(tileEntity.structure.volLength*tileEntity.structure.volWidth); + data.length = tileEntity.structure.volLength; + data.width = tileEntity.structure.volWidth; + + bindTexture(MekanismRenderer.getBlocksTexture()); + + if(data.location != null && data.height >= 1 && tileEntity.structure.fluidStored.getFluid() != null) + { + push(); + + GL11.glTranslated(getX(data.location.xCoord), getY(data.location.yCoord), getZ(data.location.zCoord)); + + MekanismRenderer.glowOn(tileEntity.structure.fluidStored.getFluid().getLuminosity()); + MekanismRenderer.colorFluid(tileEntity.structure.fluidStored.getFluid()); + + DisplayInteger[] displayList = getListAndRender(data, tileEntity.getWorldObj()); + + GL11.glColor4f(1F, 1F, 1F, Math.min(1, ((float)tileEntity.structure.fluidStored.amount / (float)tileEntity.structure.getFluidCapacity())+0.3F)); + displayList[getStages(data.height+1)-1].render(); + + MekanismRenderer.glowOff(); + MekanismRenderer.resetColor(); + + pop(); + } } } } private void pop() { - GL11.glPopAttrib(); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); GL11.glPopMatrix(); } private void push() { GL11.glPushMatrix(); - GL11.glPushAttrib(GL11.GL_ENABLE_BIT); + GL11.glEnable(GL11.GL_CULL_FACE); GL11.glEnable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); } private int getStages(int height) { - return (height-2)*(TankUpdateProtocol.FLUID_PER_TANK/10); + return TankUpdateProtocol.FLUID_PER_TANK/10; } private double getX(int x) @@ -129,7 +153,7 @@ public class RenderIndustrialTurbine extends TileEntitySpecialRenderer toReturn.minZ = 0 + .01; toReturn.maxX = data.length - .01; - toReturn.maxY = ((float)i/(float)stages)*(data.height-2) - .01; + toReturn.maxY = ((float)i/(float)stages)*(data.height+1) - .01; toReturn.maxZ = data.width - .01; MekanismRenderer.renderObject(toReturn); diff --git a/src/main/java/mekanism/generators/client/render/RenderTurbineRotor.java b/src/main/java/mekanism/generators/client/render/RenderTurbineRotor.java index 5313848f6..285223439 100644 --- a/src/main/java/mekanism/generators/client/render/RenderTurbineRotor.java +++ b/src/main/java/mekanism/generators/client/render/RenderTurbineRotor.java @@ -17,6 +17,8 @@ import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class RenderTurbineRotor extends TileEntitySpecialRenderer { + public static boolean internalRender = false; + private ModelTurbine model = new ModelTurbine(); private static final float BASE_SPEED = 512F; @@ -29,6 +31,11 @@ public class RenderTurbineRotor extends TileEntitySpecialRenderer private void renderAModelAt(TileEntityTurbineRotor tileEntity, double x, double y, double z, float partialTick) { + if(tileEntity.multiblockUUID != null && !internalRender) + { + return; + } + GL11.glPushMatrix(); bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "Turbine.png")); diff --git a/src/main/java/mekanism/generators/common/content/turbine/SynchronizedTurbineData.java b/src/main/java/mekanism/generators/common/content/turbine/SynchronizedTurbineData.java index a8fb5f144..edb7c7478 100644 --- a/src/main/java/mekanism/generators/common/content/turbine/SynchronizedTurbineData.java +++ b/src/main/java/mekanism/generators/common/content/turbine/SynchronizedTurbineData.java @@ -21,6 +21,7 @@ public class SynchronizedTurbineData extends SynchronizedData clientRotationMap = new HashMap(); - public static final float ROTATION_THRESHOLD = 0.01F; + public static final float ROTATION_THRESHOLD = 0.001F; public String multiblockUUID; public float rotation; @@ -33,18 +33,6 @@ public class TileEntityRotationalComplex extends TileEntityBasicBlock return false; } - @Override - public void onAdded() - { - super.onAdded(); - - if(!worldObj.isRemote) - { - setMultiblock("asdf"); - setRotation(1F); - } - } - @Override public void handlePacketData(ByteBuf dataStream) { diff --git a/src/main/java/mekanism/generators/common/tile/turbine/TileEntityTurbineCasing.java b/src/main/java/mekanism/generators/common/tile/turbine/TileEntityTurbineCasing.java index d1d9c245f..0ec8c955f 100644 --- a/src/main/java/mekanism/generators/common/tile/turbine/TileEntityTurbineCasing.java +++ b/src/main/java/mekanism/generators/common/tile/turbine/TileEntityTurbineCasing.java @@ -65,8 +65,6 @@ public class TileEntityTurbineCasing extends TileEntityMultiblock 0 && structure.electricityStored < structure.getEnergyCapacity()) + if(stored > 0 && getEnergy() < structure.getEnergyCapacity()) { double energyMultiplier = ENERGY_PER_STEAM*Math.min(structure.blades, structure.coils*BLADE_TO_COIL_RATIO); - double rate = structure.lowerVolume*(structure.getDispersers()*DISPERSER_GAS_FLOW)*proportion; + double rate = structure.lowerVolume*(structure.getDispersers()*DISPERSER_GAS_FLOW); + rate = Math.min(rate, structure.vents*VENT_GAS_FLOW); + double origRate = rate; - rate = Math.min(Math.min(stored, rate), structure.vents*VENT_GAS_FLOW); - rate = Math.min(rate, (getMaxEnergy()-getEnergy())/energyMultiplier); + rate = Math.min(Math.min(stored, rate), (getMaxEnergy()-getEnergy())/energyMultiplier)*proportion; - flowRate = proportion*(rate/origRate); + flowRate = rate/origRate; setEnergy(getEnergy()+((int)rate)*energyMultiplier); structure.fluidStored.amount -= rate; @@ -199,6 +201,11 @@ public class TileEntityTurbineCasing extends TileEntityMultiblock