From 8db9c734d763bf67f6b822cf5bcfc3c1f466c7a9 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Fri, 1 Nov 2013 22:36:06 -0400 Subject: [PATCH] Sorter no longer requires energy, gave sorter new fancy model, improved the way items retreat from dead ends --- common/mekanism/client/ClientProxy.java | 3 + .../client/gui/GuiLogisticalSorter.java | 3 - .../mekanism/client/model/ModelChargepad.java | 12 - .../client/model/ModelElectricPump.java | 24 -- .../client/model/ModelLogisticalSorter.java | 227 ++++++++++++++++++ .../client/model/ModelMetallurgicInfuser.java | 22 -- common/mekanism/client/model/ModelRobit.java | 31 --- .../client/model/ModelTransmitter.java | 12 - .../render/block/MachineRenderingHandler.java | 10 + .../tileentity/RenderLogisticalSorter.java | 53 ++++ common/mekanism/common/CommonProxy.java | 2 + common/mekanism/common/Mekanism.java | 1 - .../mekanism/common/block/BlockMachine.java | 49 +--- .../TileEntityLogisticalSorter.java | 84 +------ .../TileEntityLogisticalTransporter.java | 33 ++- .../model/ModelElectrolyticSeparator.java | 29 --- .../client/model/ModelHeatGenerator.java | 22 -- .../client/model/ModelHydrogenGenerator.java | 26 -- .../client/model/ModelWindTurbine.java | 21 -- .../mekanism/render/LogisticalSorter.png | Bin 0 -> 4092 bytes 20 files changed, 339 insertions(+), 325 deletions(-) create mode 100644 common/mekanism/client/model/ModelLogisticalSorter.java create mode 100644 common/mekanism/client/render/tileentity/RenderLogisticalSorter.java create mode 100644 resources/assets/mekanism/render/LogisticalSorter.png diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index 6364d8cda..444de123d 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -43,6 +43,7 @@ import mekanism.client.render.tileentity.RenderConfigurableMachine; import mekanism.client.render.tileentity.RenderDynamicTank; import mekanism.client.render.tileentity.RenderElectricChest; import mekanism.client.render.tileentity.RenderElectricPump; +import mekanism.client.render.tileentity.RenderLogisticalSorter; import mekanism.client.render.tileentity.RenderLogisticalTransporter; import mekanism.client.render.tileentity.RenderMechanicalPipe; import mekanism.client.render.tileentity.RenderMetallurgicInfuser; @@ -73,6 +74,7 @@ import mekanism.common.tileentity.TileEntityEnergyCube; import mekanism.common.tileentity.TileEntityEnrichmentChamber; import mekanism.common.tileentity.TileEntityFactory; import mekanism.common.tileentity.TileEntityGasTank; +import mekanism.common.tileentity.TileEntityLogisticalSorter; import mekanism.common.tileentity.TileEntityLogisticalTransporter; import mekanism.common.tileentity.TileEntityMechanicalPipe; import mekanism.common.tileentity.TileEntityMetallurgicInfuser; @@ -232,6 +234,7 @@ public class ClientProxy extends CommonProxy ClientRegistry.registerTileEntity(TileEntityDynamicValve.class, "DynamicValve", new RenderDynamicTank()); ClientRegistry.registerTileEntity(TileEntityChargepad.class, "Chargepad", new RenderChargepad()); ClientRegistry.registerTileEntity(TileEntityLogisticalTransporter.class, "LogisticalTransporter", new RenderLogisticalTransporter()); + ClientRegistry.registerTileEntity(TileEntityLogisticalSorter.class, "LogisticalSorter", new RenderLogisticalSorter()); } @Override diff --git a/common/mekanism/client/gui/GuiLogisticalSorter.java b/common/mekanism/client/gui/GuiLogisticalSorter.java index 6dbef5f11..ff7982a7d 100644 --- a/common/mekanism/client/gui/GuiLogisticalSorter.java +++ b/common/mekanism/client/gui/GuiLogisticalSorter.java @@ -249,9 +249,6 @@ public class GuiLogisticalSorter extends GuiMekanism fontRenderer.drawString("IS: " + getItemStackFilters().size(), 11, 37, 0x00CD00); fontRenderer.drawString("OD: " + getOreDictFilters().size(), 11, 46, 0x00CD00); - fontRenderer.drawString("Energy:", 11, 58, 0x00CD00); - fontRenderer.drawString((int)(((float)tileEntity.getEnergy()/tileEntity.getMaxEnergy())*100) + "%", 11, 67, 0x00CD00); - fontRenderer.drawString("Default:", 12, 126, 0x00CD00); for(int i = 0; i < 4; i++) diff --git a/common/mekanism/client/model/ModelChargepad.java b/common/mekanism/client/model/ModelChargepad.java index 35915496f..418284224 100644 --- a/common/mekanism/client/model/ModelChargepad.java +++ b/common/mekanism/client/model/ModelChargepad.java @@ -52,18 +52,6 @@ public class ModelChargepad extends ModelBase setRotation(Shape5, 0F, 0F, 0F); } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - } - public void render(float size) { Shape1.render(size); diff --git a/common/mekanism/client/model/ModelElectricPump.java b/common/mekanism/client/model/ModelElectricPump.java index b58e7dc23..4f19bcea9 100644 --- a/common/mekanism/client/model/ModelElectricPump.java +++ b/common/mekanism/client/model/ModelElectricPump.java @@ -157,30 +157,6 @@ public class ModelElectricPump extends ModelBase DISPLAY1.render(size); } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - COREBOX.render(f5); - INPUTSLOT2.render(f5); - INPUTSLOT3.render(f5); - INPUTSLOT4.render(f5); - INPUTSLOT5.render(f5); - INPUTSLOT1.render(f5); - PIPE3.render(f5); - PIPE2.render(f5); - TOPPIPE3.render(f5); - PIPE1.render(f5); - CORESLOT.render(f5); - PIPE4.render(f5); - TOPPIPE2.render(f5); - DISPLAY2.render(f5); - TOPPIPE1.render(f5); - TOPPIPE4.render(f5); - DISPLAY1.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; diff --git a/common/mekanism/client/model/ModelLogisticalSorter.java b/common/mekanism/client/model/ModelLogisticalSorter.java new file mode 100644 index 000000000..835d52455 --- /dev/null +++ b/common/mekanism/client/model/ModelLogisticalSorter.java @@ -0,0 +1,227 @@ +package mekanism.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelLogisticalSorter extends ModelBase +{ + ModelRenderer LeftThing; + ModelRenderer RightThing; + ModelRenderer BottomPlate; + ModelRenderer TopPlate; + ModelRenderer LeftPlate; + ModelRenderer RightPlate; + ModelRenderer BR1Block1; + ModelRenderer BL1Block1; + ModelRenderer TL1Block1; + ModelRenderer TR1Block1; + ModelRenderer BR1Block2; + ModelRenderer BL1Block2; + ModelRenderer TL1Block2; + ModelRenderer TR1Block2; + ModelRenderer PoleBR; + ModelRenderer PoleTL; + ModelRenderer PoleTR; + ModelRenderer PoleBL; + ModelRenderer InjectorTL; + ModelRenderer InjectorBR; + ModelRenderer InjectorTR; + ModelRenderer InjectorBL; + ModelRenderer Base; + ModelRenderer PipeBase; + ModelRenderer DecorPlate; + + public ModelLogisticalSorter() + { + textureWidth = 128; + textureHeight = 64; + + LeftThing = new ModelRenderer(this, 0, 29); + LeftThing.addBox(0F, 0F, 0F, 1, 12, 1); + LeftThing.setRotationPoint(5.5F, 10F, 5F); + LeftThing.setTextureSize(128, 64); + LeftThing.mirror = true; + setRotation(LeftThing, 0F, 0F, 0F); + RightThing = new ModelRenderer(this, 0, 29); + RightThing.addBox(0F, 0F, 0F, 1, 12, 1); + RightThing.setRotationPoint(5.5F, 10F, -6F); + RightThing.setTextureSize(128, 64); + RightThing.mirror = true; + setRotation(RightThing, 0F, 0F, 0F); + BottomPlate = new ModelRenderer(this, 60, 7); + BottomPlate.addBox(0F, 0F, 0F, 12, 1, 4); + BottomPlate.setRotationPoint(-6F, 18F, -2F); + BottomPlate.setTextureSize(128, 64); + BottomPlate.mirror = true; + setRotation(BottomPlate, 0F, 0F, 0F); + TopPlate = new ModelRenderer(this, 60, 7); + TopPlate.addBox(0F, 0F, 0F, 12, 1, 4); + TopPlate.setRotationPoint(-6F, 13F, -2F); + TopPlate.setTextureSize(128, 64); + TopPlate.mirror = true; + setRotation(TopPlate, 0F, 0F, 0F); + LeftPlate = new ModelRenderer(this, 33, 5); + LeftPlate.addBox(0F, 0F, 0F, 12, 6, 1); + LeftPlate.setRotationPoint(-6F, 13F, 2F); + LeftPlate.setTextureSize(128, 64); + LeftPlate.mirror = true; + setRotation(LeftPlate, 0F, 0F, 0F); + RightPlate = new ModelRenderer(this, 33, 5); + RightPlate.addBox(0F, 0F, 0F, 12, 6, 1); + RightPlate.setRotationPoint(-6F, 13F, -3F); + RightPlate.setTextureSize(128, 64); + RightPlate.mirror = true; + setRotation(RightPlate, 0F, 0F, 0F); + BR1Block1 = new ModelRenderer(this, 33, 0); + BR1Block1.addBox(0F, 0F, 0F, 1, 2, 2); + BR1Block1.setRotationPoint(4F, 17.5F, -3.5F); + BR1Block1.setTextureSize(128, 64); + BR1Block1.mirror = true; + setRotation(BR1Block1, 0F, 0.0174533F, 0F); + BL1Block1 = new ModelRenderer(this, 33, 0); + BL1Block1.addBox(0F, 0F, 0F, 1, 2, 2); + BL1Block1.setRotationPoint(4F, 17.5F, 1.473333F); + BL1Block1.setTextureSize(128, 64); + BL1Block1.mirror = true; + setRotation(BL1Block1, 0F, 0F, 0F); + TL1Block1 = new ModelRenderer(this, 33, 0); + TL1Block1.addBox(0F, 0F, 0F, 1, 2, 2); + TL1Block1.setRotationPoint(4F, 12.5F, 1.473333F); + TL1Block1.setTextureSize(128, 64); + TL1Block1.mirror = true; + setRotation(TL1Block1, 0F, 0F, 0F); + TR1Block1 = new ModelRenderer(this, 33, 0); + TR1Block1.addBox(0F, 0F, 0F, 1, 2, 2); + TR1Block1.setRotationPoint(4F, 12.5F, -3.5F); + TR1Block1.setTextureSize(128, 64); + TR1Block1.mirror = true; + setRotation(TR1Block1, 0F, 0F, 0F); + BR1Block2 = new ModelRenderer(this, 33, 0); + BR1Block2.addBox(0F, 0F, 0F, 1, 2, 2); + BR1Block2.setRotationPoint(-5F, 17.5F, -3.5F); + BR1Block2.setTextureSize(128, 64); + BR1Block2.mirror = true; + setRotation(BR1Block2, 0F, 0F, 0F); + BL1Block2 = new ModelRenderer(this, 33, 0); + BL1Block2.addBox(0F, 0F, 0F, 1, 2, 2); + BL1Block2.setRotationPoint(-5F, 17.5F, 1.473333F); + BL1Block2.setTextureSize(128, 64); + BL1Block2.mirror = true; + setRotation(BL1Block2, 0F, 0F, 0F); + TL1Block2 = new ModelRenderer(this, 33, 0); + TL1Block2.addBox(0F, 0F, 0F, 1, 2, 2); + TL1Block2.setRotationPoint(-5F, 12.5F, 1.473333F); + TL1Block2.setTextureSize(128, 64); + TL1Block2.mirror = true; + setRotation(TL1Block2, 0F, 0F, 0F); + TR1Block2 = new ModelRenderer(this, 33, 0); + TR1Block2.addBox(0F, 0F, 0F, 1, 2, 2); + TR1Block2.setRotationPoint(-5F, 12.5F, -3.5F); + TR1Block2.setTextureSize(128, 64); + TR1Block2.mirror = true; + setRotation(TR1Block2, 0F, 0F, 0F); + PoleBR = new ModelRenderer(this, 40, 0); + PoleBR.addBox(0F, 0F, 0F, 8, 1, 1); + PoleBR.setRotationPoint(-4F, 18.2F, 2.2F); + PoleBR.setTextureSize(128, 64); + PoleBR.mirror = true; + setRotation(PoleBR, 0F, 0F, 0F); + PoleTL = new ModelRenderer(this, 40, 0); + PoleTL.addBox(0F, 0F, 0F, 8, 1, 1); + PoleTL.setRotationPoint(-4F, 12.8F, -3.2F); + PoleTL.setTextureSize(128, 64); + PoleTL.mirror = true; + setRotation(PoleTL, 0F, 0F, 0F); + PoleTR = new ModelRenderer(this, 40, 0); + PoleTR.addBox(0F, 0F, 0F, 8, 1, 1); + PoleTR.setRotationPoint(-4F, 12.8F, 2.2F); + PoleTR.setTextureSize(128, 64); + PoleTR.mirror = true; + setRotation(PoleTR, 0F, 0F, 0F); + PoleBL = new ModelRenderer(this, 40, 0); + PoleBL.addBox(0F, 0F, 0F, 8, 1, 1); + PoleBL.setRotationPoint(-4F, 18.2F, -3.2F); + PoleBL.setTextureSize(128, 64); + PoleBL.mirror = true; + setRotation(PoleBL, 0F, 0F, 0F); + InjectorTL = new ModelRenderer(this, 0, 46); + InjectorTL.addBox(0F, 0F, 0F, 4, 1, 1); + InjectorTL.setRotationPoint(-7F, 12F, -3F); + InjectorTL.setTextureSize(128, 64); + InjectorTL.mirror = true; + setRotation(InjectorTL, 0F, 0F, -0.7853982F); + InjectorBR = new ModelRenderer(this, 0, 46); + InjectorBR.addBox(0F, 0F, 0F, 4, 1, 1); + InjectorBR.setRotationPoint(-6.3F, 19.3F, 2F); + InjectorBR.setTextureSize(128, 64); + InjectorBR.mirror = true; + setRotation(InjectorBR, 0F, 0F, 0.7853982F); + InjectorTR = new ModelRenderer(this, 0, 46); + InjectorTR.addBox(0F, 0F, 0F, 4, 1, 1); + InjectorTR.setRotationPoint(-7F, 12F, 2F); + InjectorTR.setTextureSize(128, 64); + InjectorTR.mirror = true; + setRotation(InjectorTR, 0F, 0F, -0.7853982F); + InjectorBL = new ModelRenderer(this, 0, 46); + InjectorBL.addBox(0F, 0F, 0F, 4, 1, 1); + InjectorBL.setRotationPoint(-6.5F, 19F, -3F); + InjectorBL.setTextureSize(128, 64); + InjectorBL.mirror = true; + setRotation(InjectorBL, 0F, 0F, 0.7853982F); + Base = new ModelRenderer(this, 0, 0); + Base.addBox(0F, 0F, 0F, 2, 14, 14); + Base.setRotationPoint(6F, 9F, -7F); + Base.setTextureSize(128, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + PipeBase = new ModelRenderer(this, 33, 13); + PipeBase.addBox(0F, 0F, 0F, 3, 8, 8); + PipeBase.setRotationPoint(-8F, 12F, -4F); + PipeBase.setTextureSize(128, 64); + PipeBase.mirror = true; + setRotation(PipeBase, 0F, 0F, 0F); + DecorPlate = new ModelRenderer(this, 5, 29); + DecorPlate.addBox(0F, 0F, 0F, 1, 8, 8); + DecorPlate.setRotationPoint(5F, 12F, -4F); + DecorPlate.setTextureSize(128, 64); + DecorPlate.mirror = true; + setRotation(DecorPlate, 0F, 0F, 0F); + } + + public void render(float size) + { + LeftThing.render(size); + RightThing.render(size); + BottomPlate.render(size); + TopPlate.render(size); + LeftPlate.render(size); + RightPlate.render(size); + BR1Block1.render(size); + BL1Block1.render(size); + TL1Block1.render(size); + TR1Block1.render(size); + BR1Block2.render(size); + BL1Block2.render(size); + TL1Block2.render(size); + TR1Block2.render(size); + PoleBR.render(size); + PoleTL.render(size); + PoleTR.render(size); + PoleBL.render(size); + InjectorTL.render(size); + InjectorBR.render(size); + InjectorTR.render(size); + InjectorBL.render(size); + Base.render(size); + PipeBase.render(size); + DecorPlate.render(size); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/common/mekanism/client/model/ModelMetallurgicInfuser.java b/common/mekanism/client/model/ModelMetallurgicInfuser.java index 83bfb1b58..6ec147546 100644 --- a/common/mekanism/client/model/ModelMetallurgicInfuser.java +++ b/common/mekanism/client/model/ModelMetallurgicInfuser.java @@ -165,28 +165,6 @@ public class ModelMetallurgicInfuser extends ModelBase TUBE.render(size); } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - PANEL.render(f5); - MACHINE.render(f5); - CENTER_CIRCUIT.render(f5); - PIPE_1.render(f5); - PIPE_2.render(f5); - GUI_STAND.render(f5); - GUI_SCREEN.render(f5); - PIPE_2_TOP.render(f5); - PIPE_1_TOP.render(f5); - FRONT_PANEL.render(f5); - WIRE_1.render(f5); - WIRE_2.render(f5); - SIDE_WIRE_1.render(f5); - SIDE_WIRE_2.render(f5); - VERTICAL_WIRE.render(f5); - TUBE.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; diff --git a/common/mekanism/client/model/ModelRobit.java b/common/mekanism/client/model/ModelRobit.java index 70c93d12b..ea5b566f8 100644 --- a/common/mekanism/client/model/ModelRobit.java +++ b/common/mekanism/client/model/ModelRobit.java @@ -124,37 +124,6 @@ public class ModelRobit extends ModelBase eyeLeft.mirror = true; setRotation(eyeLeft, 0F, 0F, 0F); } - - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - GL11.glPushMatrix(); - GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); - - Body.render(f5); - Bottom.render(f5); - RightTrack.render(f5); - LeftTrack.render(f5); - Neck.render(f5); - Head.render(f5); - Backpack.render(f5); - headback.render(f5); - rightarn.render(f5); - leftarm.render(f5); - righthand.render(f5); - lefthand.render(f5); - - MekanismRenderer.glowOn(); - backLight.render(f5); - eyeRight.render(f5); - eyeLeft.render(f5); - MekanismRenderer.glowOff(); - - GL11.glPopMatrix(); - } public void render(float size) { diff --git a/common/mekanism/client/model/ModelTransmitter.java b/common/mekanism/client/model/ModelTransmitter.java index ea59e5a85..302fe5dbb 100644 --- a/common/mekanism/client/model/ModelTransmitter.java +++ b/common/mekanism/client/model/ModelTransmitter.java @@ -125,18 +125,6 @@ public class ModelTransmitter extends ModelBase } } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) - { - renderSide(orientation, true); - } - } - public void renderSide(ForgeDirection orientation, boolean on) { if(on) diff --git a/common/mekanism/client/render/block/MachineRenderingHandler.java b/common/mekanism/client/render/block/MachineRenderingHandler.java index c79e1b0c6..8d7aad739 100644 --- a/common/mekanism/client/render/block/MachineRenderingHandler.java +++ b/common/mekanism/client/render/block/MachineRenderingHandler.java @@ -3,6 +3,7 @@ package mekanism.client.render.block; import mekanism.client.ClientProxy; import mekanism.client.model.ModelChargepad; import mekanism.client.model.ModelElectricPump; +import mekanism.client.model.ModelLogisticalSorter; import mekanism.client.model.ModelMetallurgicInfuser; import mekanism.client.render.MekanismRenderer; import mekanism.common.Mekanism; @@ -26,6 +27,7 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler public ModelElectricPump electricPump = new ModelElectricPump(); public ModelMetallurgicInfuser metallurgicInfuser = new ModelMetallurgicInfuser(); public ModelChargepad chargepad = new ModelChargepad(); + public ModelLogisticalSorter logisticalSorter = new ModelLogisticalSorter(); @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) @@ -63,6 +65,14 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "Chargepad.png")); chargepad.render(0.0625F); } + else if(metadata == MachineType.LOGISTICAL_SORTER.meta) + { + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F); + GL11.glTranslatef(0.0F, -0.85F, -0.15F); + Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "LogisticalSorter.png")); + logisticalSorter.render(0.0625F); + } else { MekanismRenderer.renderItem(renderer, metadata, block); } diff --git a/common/mekanism/client/render/tileentity/RenderLogisticalSorter.java b/common/mekanism/client/render/tileentity/RenderLogisticalSorter.java new file mode 100644 index 000000000..11bedfa49 --- /dev/null +++ b/common/mekanism/client/render/tileentity/RenderLogisticalSorter.java @@ -0,0 +1,53 @@ +package mekanism.client.render.tileentity; + +import mekanism.client.model.ModelLogisticalSorter; +import mekanism.common.tileentity.TileEntityLogisticalSorter; +import mekanism.common.util.MekanismUtils; +import mekanism.common.util.MekanismUtils.ResourceType; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +import org.lwjgl.opengl.GL11; + +public class RenderLogisticalSorter extends TileEntitySpecialRenderer +{ + private ModelLogisticalSorter model = new ModelLogisticalSorter(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) + { + renderAModelAt((TileEntityLogisticalSorter)tileEntity, x, y, z, 1F); + } + + private void renderAModelAt(TileEntityLogisticalSorter tileEntity, double x, double y, double z, float partialTick) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); + + bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "LogisticalSorter.png")); + + switch(tileEntity.facing) + { + case 0: + { + GL11.glRotatef(90F, 0.0F, 0.0F, -1.0F); + GL11.glTranslatef(1.0F, 1.0F, 0.0F); + break; + } + case 1: + { + GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-1.0F, 1.0F, 0.0F); + break; + } + case 2: GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break; + case 3: GL11.glRotatef(270, 0.0F, 1.0F, 0.0F); break; + case 4: GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break; + case 5: GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break; + } + + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + model.render(0.0625F); + GL11.glPopMatrix(); + } +} diff --git a/common/mekanism/common/CommonProxy.java b/common/mekanism/common/CommonProxy.java index e7c98e047..e33bee1e0 100644 --- a/common/mekanism/common/CommonProxy.java +++ b/common/mekanism/common/CommonProxy.java @@ -35,6 +35,7 @@ import mekanism.common.tileentity.TileEntityEnergyCube; import mekanism.common.tileentity.TileEntityEnrichmentChamber; import mekanism.common.tileentity.TileEntityFactory; import mekanism.common.tileentity.TileEntityGasTank; +import mekanism.common.tileentity.TileEntityLogisticalSorter; import mekanism.common.tileentity.TileEntityLogisticalTransporter; import mekanism.common.tileentity.TileEntityMechanicalPipe; import mekanism.common.tileentity.TileEntityMetallurgicInfuser; @@ -83,6 +84,7 @@ public class CommonProxy GameRegistry.registerTileEntity(TileEntityDynamicValve.class, "DynamicValve"); GameRegistry.registerTileEntity(TileEntityChargepad.class, "Chargepad"); GameRegistry.registerTileEntity(TileEntityLogisticalTransporter.class, "LogisticalTransporter"); + GameRegistry.registerTileEntity(TileEntityLogisticalSorter.class, "LogisticalSorter"); } /** diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 1dc63da28..66dc13e1b 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -1009,7 +1009,6 @@ public class Mekanism GameRegistry.registerTileEntity(TileEntityBoundingBlock.class, "BoundingBlock"); GameRegistry.registerTileEntity(TileEntityGasTank.class, "GasTank"); GameRegistry.registerTileEntity(TileEntityTeleporter.class, "MekanismTeleporter"); - GameRegistry.registerTileEntity(TileEntityLogisticalSorter.class, "LogisticalSorter"); //Load tile entities that have special renderers. proxy.registerSpecialTileEntities(); diff --git a/common/mekanism/common/block/BlockMachine.java b/common/mekanism/common/block/BlockMachine.java index 7be0074ef..72f7bbb91 100644 --- a/common/mekanism/common/block/BlockMachine.java +++ b/common/mekanism/common/block/BlockMachine.java @@ -141,12 +141,6 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds icons[10][1] = register.registerIcon("mekanism:EnergizedSmelterFrontOn"); icons[10][2] = register.registerIcon("mekanism:SteelCasing"); icons[11][0] = register.registerIcon("mekanism:Teleporter"); - icons[15][0] = register.registerIcon("mekanism:LogisticalSorterSideOn"); - icons[15][1] = register.registerIcon("mekanism:LogisticalSorterSideOff"); - icons[15][2] = register.registerIcon("mekanism:LogisticalSorterFrontOn"); - icons[15][3] = register.registerIcon("mekanism:LogisticalSorterFrontOff"); - icons[15][4] = register.registerIcon("mekanism:LogisticalSorterBackOn"); - icons[15][5] = register.registerIcon("mekanism:LogisticalSorterBackOff"); } @Override @@ -169,12 +163,15 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds } } - switch(side) + if(change != 0 && change != 1) { - case 0: change = 2; break; - case 1: change = 5; break; - case 2: change = 3; break; - case 3: change = 4; break; + switch(side) + { + case 0: change = 2; break; + case 1: change = 5; break; + case 2: change = 3; break; + case 3: change = 4; break; + } } tileEntity.setFacing((short)change); @@ -365,20 +362,6 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds { return icons[11][0]; } - else if(meta == 15) - { - if(side == 1) - { - return icons[15][3]; - } - else if(side == 0) - { - return icons[15][5]; - } - else { - return icons[15][1]; - } - } return null; } @@ -516,20 +499,6 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds { return icons[11][0]; } - else if(metadata == 15) - { - if(side == tileEntity.facing) - { - return MekanismUtils.isActive(world, x, y, z) ? icons[15][2] : icons[15][3]; - } - else if(side == ForgeDirection.getOrientation(tileEntity.facing).getOpposite().ordinal()) - { - return MekanismUtils.isActive(world, x, y, z) ? icons[15][4] : icons[15][5]; - } - else { - return MekanismUtils.isActive(world, x, y, z) ? icons[15][0] : icons[15][1]; - } - } return null; } @@ -894,7 +863,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds ELECTRIC_PUMP(12, "ElectricPump", 17, 10000, TileEntityElectricPump.class, true), ELECTRIC_CHEST(13, "ElectricChest", -1, 12000, TileEntityElectricChest.class, true), CHARGEPAD(14, "Chargepad", -1, 9000, TileEntityChargepad.class, true), - LOGISTICAL_SORTER(15, "LogisticalSorter", -1, 12000, TileEntityLogisticalSorter.class, false); + LOGISTICAL_SORTER(15, "LogisticalSorter", -1, 0, TileEntityLogisticalSorter.class, true); public int meta; public String name; diff --git a/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java b/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java index a56a2ac40..87fdac450 100644 --- a/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java +++ b/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java @@ -1,12 +1,10 @@ package mekanism.common.tileentity; -import ic2.api.energy.tile.IEnergySink; - import java.util.ArrayList; +import java.util.EnumSet; import mekanism.api.EnumColor; import mekanism.api.Object3D; -import mekanism.api.energy.IStrictEnergyAcceptor; import mekanism.common.HashList; import mekanism.common.IActiveState; import mekanism.common.IRedstoneControl; @@ -29,7 +27,7 @@ import net.minecraftforge.common.ForgeDirection; import com.google.common.io.ByteArrayDataInput; -public class TileEntityLogisticalSorter extends TileEntityElectricBlock implements IRedstoneControl, IActiveState, IEnergySink, IStrictEnergyAcceptor +public class TileEntityLogisticalSorter extends TileEntityElectricBlock implements IRedstoneControl, IActiveState { public HashList filters = new HashList(); @@ -93,13 +91,9 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen } } - double needed = getEnergyNeeded(inInventory.itemStack); - - if(getEnergy() >= needed && TransporterUtils.insert(this, transporter, inInventory.itemStack, filterColor)) + if(TransporterUtils.insert(this, transporter, inInventory.itemStack, filterColor)) { - setEnergy(getEnergy()-getEnergyNeeded(inInventory.itemStack)); inventory.setInventorySlotContents(inInventory.slotID, null); - setActive(true); } else { inventory.setInventorySlotContents(inInventory.slotID, inInventory.itemStack); @@ -243,16 +237,6 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen } } - private double getEnergyNeeded(ItemStack itemStack) - { - if(itemStack == null) - { - return 0; - } - - return itemStack.stackSize*ENERGY_PER_ITEM; - } - @Override public ArrayList getNetworkedData(ArrayList data) { @@ -392,66 +376,16 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen { return true; } - + @Override - public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction) + protected EnumSet getConsumingSides() { - return true; + return EnumSet.noneOf(ForgeDirection.class); } - + @Override - public double transferEnergyToAcceptor(double amount) + public float getRequest(ForgeDirection direction) { - double rejects = 0; - double neededElectricity = getMaxEnergy()-getEnergy(); - - if(amount <= neededElectricity) - { - electricityStored += amount; - } - else { - electricityStored += neededElectricity; - rejects = amount-neededElectricity; - } - - return rejects; - } - - @Override - public boolean canReceiveEnergy(ForgeDirection side) - { - return true; - } - - @Override - public double demandedEnergyUnits() - { - return (getMaxEnergy() - getEnergy())*Mekanism.TO_IC2; - } - - @Override - public double injectEnergyUnits(ForgeDirection direction, double i) - { - double givenEnergy = i*Mekanism.FROM_IC2; - double rejects = 0; - double neededEnergy = getMaxEnergy()-getEnergy(); - - if(givenEnergy < neededEnergy) - { - electricityStored += givenEnergy; - } - else if(givenEnergy > neededEnergy) - { - electricityStored += neededEnergy; - rejects = givenEnergy-neededEnergy; - } - - return rejects*Mekanism.TO_IC2; - } - - @Override - public int getMaxSafeInput() - { - return 2048; + return 0; } } diff --git a/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java b/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java index 53f349478..620f46316 100644 --- a/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java +++ b/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java @@ -53,7 +53,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile { if(!stack.initiatedPath) { - if(!recalculate(stack)) + if(!recalculate(stack, null)) { remove.add(stack); continue; @@ -64,6 +64,8 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile if(stack.progress > 100) { + Object3D prevSet = null; + if(stack.hasPath()) { int currentIndex = stack.pathToTarget.indexOf(Object3D.get(this)); @@ -79,6 +81,10 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile continue; } + else if(next != null) + { + prevSet = next; + } } else { if(!stack.noTarget) @@ -100,6 +106,8 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile else { needsSync.add(stack); stack.itemStack = rejected; + + prevSet = next; } } } @@ -107,13 +115,19 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile } } - if(!recalculate(stack)) + if(!recalculate(stack, prevSet)) { remove.add(stack); continue; } else { - stack.progress = 50; + if(prevSet != null) + { + stack.progress = 0; + } + else { + stack.progress = 50; + } } } else if(stack.progress == 50) @@ -122,7 +136,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile { if(!TransporterUtils.canInsert(stack.getDest().getTileEntity(worldObj), stack.itemStack, stack.getSide(this)) && !stack.noTarget) { - if(!recalculate(stack)) + if(!recalculate(stack, null)) { remove.add(stack); continue; @@ -130,7 +144,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile } else if(stack.noTarget) { - if(!recalculate(stack)) + if(!recalculate(stack, null)) { remove.add(stack); continue; @@ -140,7 +154,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile else { if(!stack.canInsertToTransporter(stack.getNext(this).getTileEntity(worldObj))) { - if(!recalculate(stack)) + if(!recalculate(stack, null)) { remove.add(stack); continue; @@ -168,7 +182,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile } } - private boolean recalculate(TransporterStack stack) + private boolean recalculate(TransporterStack stack, Object3D from) { needsSync.add(stack); @@ -181,6 +195,11 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile } } + if(from != null) + { + stack.originalLocation = from; + } + return true; } diff --git a/common/mekanism/generators/client/model/ModelElectrolyticSeparator.java b/common/mekanism/generators/client/model/ModelElectrolyticSeparator.java index cb0eac234..65ba00973 100644 --- a/common/mekanism/generators/client/model/ModelElectrolyticSeparator.java +++ b/common/mekanism/generators/client/model/ModelElectrolyticSeparator.java @@ -197,35 +197,6 @@ public class ModelElectrolyticSeparator extends ModelBase V.render(size); } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - A.renderWithRotation(f5); - B.renderWithRotation(f5); - C.renderWithRotation(f5); - D.renderWithRotation(f5); - E.renderWithRotation(f5); - F.renderWithRotation(f5); - G.renderWithRotation(f5); - H.renderWithRotation(f5); - I.renderWithRotation(f5); - J.renderWithRotation(f5); - K.renderWithRotation(f5); - L.renderWithRotation(f5); - M.renderWithRotation(f5); - N.renderWithRotation(f5); - OUTPUT.renderWithRotation(f5); - P.renderWithRotation(f5); - Q.renderWithRotation(f5); - R.renderWithRotation(f5); - S.renderWithRotation(f5); - T.renderWithRotation(f5); - U.renderWithRotation(f5); - V.renderWithRotation(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; diff --git a/common/mekanism/generators/client/model/ModelHeatGenerator.java b/common/mekanism/generators/client/model/ModelHeatGenerator.java index 69502d0c2..546004509 100644 --- a/common/mekanism/generators/client/model/ModelHeatGenerator.java +++ b/common/mekanism/generators/client/model/ModelHeatGenerator.java @@ -141,28 +141,6 @@ public class ModelHeatGenerator extends ModelBase O.render(size); } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - A.renderWithRotation(f5); - B.renderWithRotation(f5); - C.renderWithRotation(f5); - D.renderWithRotation(f5); - E.renderWithRotation(f5); - F.renderWithRotation(f5); - G.renderWithRotation(f5); - H.renderWithRotation(f5); - I.renderWithRotation(f5); - J.renderWithRotation(f5); - K.renderWithRotation(f5); - L.renderWithRotation(f5); - M.renderWithRotation(f5); - N.renderWithRotation(f5); - O.renderWithRotation(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; diff --git a/common/mekanism/generators/client/model/ModelHydrogenGenerator.java b/common/mekanism/generators/client/model/ModelHydrogenGenerator.java index 9e469f5f6..49082aa73 100644 --- a/common/mekanism/generators/client/model/ModelHydrogenGenerator.java +++ b/common/mekanism/generators/client/model/ModelHydrogenGenerator.java @@ -173,32 +173,6 @@ public class ModelHydrogenGenerator extends ModelBase S.render(size); } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - A.renderWithRotation(f5); - B.renderWithRotation(f5); - C.renderWithRotation(f5); - D.renderWithRotation(f5); - E.renderWithRotation(f5); - F.renderWithRotation(f5); - G.renderWithRotation(f5); - H.renderWithRotation(f5); - I.renderWithRotation(f5); - J.renderWithRotation(f5); - K.renderWithRotation(f5); - L.renderWithRotation(f5); - M.renderWithRotation(f5); - N.renderWithRotation(f5); - O.renderWithRotation(f5); - P.renderWithRotation(f5); - Q.renderWithRotation(f5); - R.renderWithRotation(f5); - S.renderWithRotation(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; diff --git a/common/mekanism/generators/client/model/ModelWindTurbine.java b/common/mekanism/generators/client/model/ModelWindTurbine.java index 8357b7909..a79c82948 100644 --- a/common/mekanism/generators/client/model/ModelWindTurbine.java +++ b/common/mekanism/generators/client/model/ModelWindTurbine.java @@ -143,27 +143,6 @@ public class ModelWindTurbine extends ModelBase return angle % 360; } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Base.render(f5); - TowerFront.render(f5); - TowerLeft.render(f5); - TowerBack.render(f5); - TowerRight.render(f5); - TowerMoterFront.render(f5); - TowerBaseMotor.render(f5); - TowerBaseMotorBack.render(f5); - TowerMotor.render(f5); - Rotor.render(f5); - RotorCover.render(f5); - BladeBaseC.render(f5); - BladeBaseB.render(f5); - BladeBaseA.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; diff --git a/resources/assets/mekanism/render/LogisticalSorter.png b/resources/assets/mekanism/render/LogisticalSorter.png new file mode 100644 index 0000000000000000000000000000000000000000..566db279ac6821dbfd9b9f63b9fa7142d6c32063 GIT binary patch literal 4092 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 P|EXcpS!TCQyt)4Y#z3@% literal 0 HcmV?d00001