From 6d734c26e3788799661f9361a879ec49884676fb Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Sun, 3 Nov 2013 11:38:36 -0500 Subject: [PATCH] New models and fixes! --- common/mekanism/client/ClientProxy.java | 14 +- .../client/gui/GuiLogisticalSorter.java | 19 ++ .../mekanism/client/model/ModelCrusher.java | 118 +++++++++++ .../client/model/ModelEnergyCube.java | 12 +- .../mekanism/client/model/ModelGasTank.java | 83 ++++++++ .../client/model/ModelObsidianTNT.java | 187 ++++++++++++++++++ .../render/block/MachineRenderingHandler.java | 10 + ...nTNT.java => RenderObsidianTNTPrimed.java} | 17 +- .../render/item/ItemRenderingHandler.java | 20 ++ .../render/tileentity/RenderCrusher.java | 40 ++++ .../render/tileentity/RenderEnergyCube.java | 8 + .../render/tileentity/RenderGasTank.java | 40 ++++ .../render/tileentity/RenderObsidianTNT.java | 33 ++++ common/mekanism/common/CommonProxy.java | 1 + common/mekanism/common/Mekanism.java | 1 - .../mekanism/common/block/BlockGasTank.java | 50 +---- .../mekanism/common/block/BlockMachine.java | 4 +- .../common/block/BlockObsidianTNT.java | 33 +++- .../tileentity/TileEntityBasicMachine.java | 5 + .../common/tileentity/TileEntityCrusher.java | 32 +++ .../tileentity/TileEntityEnergyCube.java | 22 +-- .../common/tileentity/TileEntityFactory.java | 7 +- .../TileEntityLogisticalSorter.java | 26 ++- .../TileEntityMetallurgicInfuser.java | 5 + .../tileentity/TileEntityObsidianTNT.java | 6 + .../tileentity/TileEntityTeleporter.java | 7 +- .../TileEntityElectrolyticSeparator.java | 8 +- .../tileentity/TileEntityGenerator.java | 3 +- .../mekanism/gui/GuiLogisticalSorter.png | Bin 3888 -> 4724 bytes resources/assets/mekanism/render/Crusher.png | Bin 0 -> 4425 bytes .../mekanism/render/EnergyCubeAdvanced.png | Bin 1641 -> 2277 bytes .../mekanism/render/EnergyCubeBasic.png | Bin 1697 -> 2262 bytes .../mekanism/render/EnergyCubeElite.png | Bin 1709 -> 2199 bytes .../mekanism/render/EnergyCubeUltimate.png | Bin 1743 -> 2315 bytes resources/assets/mekanism/render/GasTank.png | Bin 0 -> 3253 bytes .../assets/mekanism/render/ObsidianTNT.png | Bin 0 -> 2989 bytes 36 files changed, 735 insertions(+), 76 deletions(-) create mode 100644 common/mekanism/client/model/ModelCrusher.java create mode 100644 common/mekanism/client/model/ModelGasTank.java create mode 100644 common/mekanism/client/model/ModelObsidianTNT.java rename common/mekanism/client/render/entity/{RenderObsidianTNT.java => RenderObsidianTNTPrimed.java} (80%) create mode 100644 common/mekanism/client/render/tileentity/RenderCrusher.java create mode 100644 common/mekanism/client/render/tileentity/RenderGasTank.java create mode 100644 common/mekanism/client/render/tileentity/RenderObsidianTNT.java create mode 100644 common/mekanism/common/tileentity/TileEntityObsidianTNT.java create mode 100644 resources/assets/mekanism/render/Crusher.png create mode 100644 resources/assets/mekanism/render/GasTank.png create mode 100644 resources/assets/mekanism/render/ObsidianTNT.png diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index 07221ee23..9d42f12d8 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -35,19 +35,22 @@ import mekanism.client.render.RenderTickHandler; import mekanism.client.render.block.BasicRenderingHandler; import mekanism.client.render.block.MachineRenderingHandler; import mekanism.client.render.block.TransmitterRenderingHandler; -import mekanism.client.render.entity.RenderObsidianTNT; +import mekanism.client.render.entity.RenderObsidianTNTPrimed; import mekanism.client.render.entity.RenderRobit; import mekanism.client.render.item.ItemRenderingHandler; import mekanism.client.render.tileentity.RenderChargepad; import mekanism.client.render.tileentity.RenderConfigurableMachine; +import mekanism.client.render.tileentity.RenderCrusher; import mekanism.client.render.tileentity.RenderDynamicTank; import mekanism.client.render.tileentity.RenderElectricChest; import mekanism.client.render.tileentity.RenderElectricPump; import mekanism.client.render.tileentity.RenderEnergyCube; +import mekanism.client.render.tileentity.RenderGasTank; import mekanism.client.render.tileentity.RenderLogisticalSorter; import mekanism.client.render.tileentity.RenderLogisticalTransporter; import mekanism.client.render.tileentity.RenderMechanicalPipe; import mekanism.client.render.tileentity.RenderMetallurgicInfuser; +import mekanism.client.render.tileentity.RenderObsidianTNT; import mekanism.client.render.tileentity.RenderPressurizedTube; import mekanism.client.render.tileentity.RenderUniversalCable; import mekanism.client.sound.Sound; @@ -79,6 +82,7 @@ import mekanism.common.tileentity.TileEntityLogisticalSorter; import mekanism.common.tileentity.TileEntityLogisticalTransporter; import mekanism.common.tileentity.TileEntityMechanicalPipe; import mekanism.common.tileentity.TileEntityMetallurgicInfuser; +import mekanism.common.tileentity.TileEntityObsidianTNT; import mekanism.common.tileentity.TileEntityOsmiumCompressor; import mekanism.common.tileentity.TileEntityPressurizedTube; import mekanism.common.tileentity.TileEntityPurificationChamber; @@ -219,13 +223,15 @@ public class ClientProxy extends CommonProxy ClientRegistry.registerTileEntity(TileEntityEnrichmentChamber.class, "EnrichmentChamber", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityOsmiumCompressor.class, "OsmiumCompressor", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityCombiner.class, "Combiner", new RenderConfigurableMachine()); - ClientRegistry.registerTileEntity(TileEntityCrusher.class, "Crusher", new RenderConfigurableMachine()); + ClientRegistry.registerTileEntity(TileEntityCrusher.class, "Crusher", new RenderCrusher()); ClientRegistry.registerTileEntity(TileEntityFactory.class, "SmeltingFactory", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityAdvancedFactory.class, "AdvancedSmeltingFactory", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityEliteFactory.class, "UltimateSmeltingFactory", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityPurificationChamber.class, "PurificationChamber", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityEnergizedSmelter.class, "EnergizedSmelter", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityMetallurgicInfuser.class, "MetallurgicInfuser", new RenderMetallurgicInfuser()); + ClientRegistry.registerTileEntity(TileEntityObsidianTNT.class, "ObsidianTNT", new RenderObsidianTNT()); + ClientRegistry.registerTileEntity(TileEntityGasTank.class, "GasTank", new RenderGasTank()); ClientRegistry.registerTileEntity(TileEntityEnergyCube.class, "EnergyCube", new RenderEnergyCube()); ClientRegistry.registerTileEntity(TileEntityPressurizedTube.class, "PressurizedTube", new RenderPressurizedTube()); ClientRegistry.registerTileEntity(TileEntityUniversalCable.class, "UniversalCable", new RenderUniversalCable()); @@ -243,7 +249,7 @@ public class ClientProxy extends CommonProxy public void registerRenderInformation() { //Register entity rendering handlers - RenderingRegistry.registerEntityRenderingHandler(EntityObsidianTNT.class, new RenderObsidianTNT()); + RenderingRegistry.registerEntityRenderingHandler(EntityObsidianTNT.class, new RenderObsidianTNTPrimed()); RenderingRegistry.registerEntityRenderingHandler(EntityRobit.class, new RenderRobit()); //Register item handler @@ -251,6 +257,8 @@ public class ClientProxy extends CommonProxy MinecraftForgeClient.registerItemRenderer(Mekanism.machineBlockID, new ItemRenderingHandler()); MinecraftForgeClient.registerItemRenderer(Mekanism.Robit.itemID, new ItemRenderingHandler()); MinecraftForgeClient.registerItemRenderer(Mekanism.WalkieTalkie.itemID, new ItemRenderingHandler()); + MinecraftForgeClient.registerItemRenderer(Mekanism.gasTankID, new ItemRenderingHandler()); + MinecraftForgeClient.registerItemRenderer(Mekanism.obsidianTNTID, new ItemRenderingHandler()); //Register block handlers RenderingRegistry.registerBlockHandler(new MachineRenderingHandler()); diff --git a/common/mekanism/client/gui/GuiLogisticalSorter.java b/common/mekanism/client/gui/GuiLogisticalSorter.java index ff7982a7d..e9bb106f6 100644 --- a/common/mekanism/client/gui/GuiLogisticalSorter.java +++ b/common/mekanism/client/gui/GuiLogisticalSorter.java @@ -179,6 +179,14 @@ public class GuiLogisticalSorter extends GuiMekanism PacketHandler.sendPacket(Transmission.SERVER, new PacketTileEntity().setParams(Object3D.get(tileEntity), data)); } + + if(xAxis >= 12 && xAxis <= 26 && yAxis >= 110 && yAxis <= 124) + { + ArrayList data = new ArrayList(); + data.add(1); + + PacketHandler.sendPacket(Transmission.SERVER, new PacketTileEntity().setParams(Object3D.get(tileEntity), data)); + } } } @@ -249,6 +257,9 @@ public class GuiLogisticalSorter extends GuiMekanism fontRenderer.drawString("IS: " + getItemStackFilters().size(), 11, 37, 0x00CD00); fontRenderer.drawString("OD: " + getOreDictFilters().size(), 11, 46, 0x00CD00); + fontRenderer.drawString("Auto:", 12, 100, 0x00CD00); + fontRenderer.drawString(tileEntity.autoEject ? "On" : "Off", 27, 112, 0x00CD00); + fontRenderer.drawString("Default:", 12, 126, 0x00CD00); for(int i = 0; i < 4; i++) @@ -361,6 +372,14 @@ public class GuiLogisticalSorter extends GuiMekanism } } } + + if(xAxis >= 12 && xAxis <= 26 && yAxis >= 110 && yAxis <= 124) + { + drawTexturedModalRect(guiWidth + 12, guiHeight + 110, 176, 0, 14, 14); + } + else { + drawTexturedModalRect(guiWidth + 12, guiHeight + 110, 176, 14, 14, 14); + } } public ArrayList getItemStackFilters() diff --git a/common/mekanism/client/model/ModelCrusher.java b/common/mekanism/client/model/ModelCrusher.java new file mode 100644 index 000000000..720f40741 --- /dev/null +++ b/common/mekanism/client/model/ModelCrusher.java @@ -0,0 +1,118 @@ +package mekanism.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelCrusher extends ModelBase +{ + ModelRenderer Top; + ModelRenderer Base; + ModelRenderer RightWall; + ModelRenderer RightWall2; + ModelRenderer PistonDecor; + ModelRenderer PistonRod; + ModelRenderer Pad; + ModelRenderer PistonHead; + ModelRenderer BackWall; + ModelRenderer BackWall2; + ModelRenderer TopTop; + + public ModelCrusher() + { + textureWidth = 128; + textureHeight = 64; + + Top = new ModelRenderer(this, 0, 18); + Top.addBox(0F, 0F, 0F, 14, 1, 8); + Top.setRotationPoint(-7F, 14F, -4F); + Top.setTextureSize(128, 64); + Top.mirror = true; + setRotation(Top, 0F, 0F, 0F); + Base = new ModelRenderer(this, 0, 0); + Base.addBox(0F, 0F, 0F, 16, 1, 16); + Base.setRotationPoint(-8F, 23F, -8F); + Base.setTextureSize(128, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + RightWall = new ModelRenderer(this, 0, 28); + RightWall.addBox(0F, 0F, 0F, 4, 6, 14); + RightWall.setRotationPoint(-8F, 17F, -7F); + RightWall.setTextureSize(128, 64); + RightWall.mirror = true; + setRotation(RightWall, 0F, 0F, 0F); + RightWall2 = new ModelRenderer(this, 0, 49); + RightWall2.addBox(0F, 0F, 0F, 4, 2, 12); + RightWall2.setRotationPoint(-8F, 15F, -6F); + RightWall2.setTextureSize(128, 64); + RightWall2.mirror = true; + setRotation(RightWall2, 0F, 0F, 0F); + PistonDecor = new ModelRenderer(this, 65, 0); + PistonDecor.addBox(0F, 0F, 0F, 7, 1, 7); + PistonDecor.setRotationPoint(-0.5F, 14.5F, -3.5F); + PistonDecor.setTextureSize(128, 64); + PistonDecor.mirror = true; + setRotation(PistonDecor, 0F, 0F, 0F); + PistonRod = new ModelRenderer(this, 45, 18); + PistonRod.addBox(0F, 0F, 0F, 1, 6, 1); + PistonRod.setRotationPoint(2.5F, 13F, -0.5F); + PistonRod.setTextureSize(128, 64); + PistonRod.mirror = true; + setRotation(PistonRod, 0F, 0F, 0F); + Pad = new ModelRenderer(this, 50, 18); + Pad.addBox(0F, 0F, 0F, 4, 1, 4); + Pad.setRotationPoint(1F, 22.7F, -2F); + Pad.setTextureSize(128, 64); + Pad.mirror = true; + setRotation(Pad, 0F, 0F, 0F); + PistonHead = new ModelRenderer(this, 67, 18); + PistonHead.addBox(0F, 0F, 0F, 4, 1, 4); + PistonHead.setRotationPoint(1F, 19F, -2F); + PistonHead.setTextureSize(128, 64); + PistonHead.mirror = true; + setRotation(PistonHead, 0F, 0F, 0F); + BackWall = new ModelRenderer(this, 94, 0); + BackWall.addBox(0F, 0F, 0F, 11, 6, 2); + BackWall.setRotationPoint(-4F, 17F, 5F); + BackWall.setTextureSize(128, 64); + BackWall.mirror = true; + setRotation(BackWall, 0F, 0F, 0F); + BackWall2 = new ModelRenderer(this, 90, 9); + BackWall2.addBox(0F, 0F, 0F, 11, 2, 3); + BackWall2.setRotationPoint(-4F, 15F, 3F); + BackWall2.setTextureSize(128, 64); + BackWall2.mirror = true; + setRotation(BackWall2, 0F, 0F, 0F); + TopTop = new ModelRenderer(this, 90, 15); + TopTop.addBox(0F, 0F, 0F, 6, 5, 6); + TopTop.setRotationPoint(0F, 12F, -3F); + TopTop.setTextureSize(128, 64); + TopTop.mirror = true; + setRotation(TopTop, 0F, 0F, 0F); + } + + public void render(float size, float depth) + { + PistonRod.setRotationPoint(2.5F, 13F+depth, -0.5F); + PistonHead.setRotationPoint(1F, 19F+depth, -2F); + + Top.render(size); + Base.render(size); + RightWall.render(size); + RightWall2.render(size); + PistonDecor.render(size); + PistonRod.render(size); + Pad.render(size); + PistonHead.render(size); + BackWall.render(size); + BackWall2.render(size); + TopTop.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/ModelEnergyCube.java b/common/mekanism/client/model/ModelEnergyCube.java index 78cba89cd..40f68c959 100644 --- a/common/mekanism/client/model/ModelEnergyCube.java +++ b/common/mekanism/client/model/ModelEnergyCube.java @@ -18,6 +18,7 @@ public class ModelEnergyCube extends ModelBase ModelRenderer Frame3; ModelRenderer Frame2; ModelRenderer Frame1; + ModelRenderer Connection; ModelRenderer HoriPole1; ModelRenderer HoriPole2; ModelRenderer HoriPole3; @@ -27,7 +28,7 @@ public class ModelEnergyCube extends ModelBase ModelRenderer HoriPole7; ModelRenderer HoriPole8; - public ModelEnergyCube() + public ModelEnergyCube() { textureWidth = 64; textureHeight = 64; @@ -104,6 +105,12 @@ public class ModelEnergyCube extends ModelBase Frame1.setTextureSize(64, 64); Frame1.mirror = true; setRotation(Frame1, 0F, 0F, 0F); + Connection = new ModelRenderer(this, 0, 7); + Connection.addBox(0F, 0F, 0F, 10, 6, 1); + Connection.setRotationPoint(-5F, 13F, -8F); + Connection.setTextureSize(64, 64); + Connection.mirror = true; + setRotation(Connection, 0F, 0F, 0F); HoriPole1 = new ModelRenderer(this, 27, 0); HoriPole1.addBox(0F, 0F, 0F, 3, 3, 10); HoriPole1.setRotationPoint(5F, 21F, -5F); @@ -171,6 +178,7 @@ public class ModelEnergyCube extends ModelBase Frame3.render(size); Frame2.render(size); Frame1.render(size); + Connection.render(size); HoriPole1.render(size); HoriPole2.render(size); HoriPole3.render(size); @@ -181,7 +189,7 @@ public class ModelEnergyCube extends ModelBase HoriPole8.render(size); } - private void setRotation(ModelRenderer model, float x, float y, float z) + private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; model.rotateAngleY = y; diff --git a/common/mekanism/client/model/ModelGasTank.java b/common/mekanism/client/model/ModelGasTank.java new file mode 100644 index 000000000..a482517cc --- /dev/null +++ b/common/mekanism/client/model/ModelGasTank.java @@ -0,0 +1,83 @@ +package mekanism.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelGasTank extends ModelBase +{ + ModelRenderer Panel1; + ModelRenderer Panel2; + ModelRenderer Panel3; + ModelRenderer Tank; + ModelRenderer Panel4; + ModelRenderer Top; + ModelRenderer Exit; + + public ModelGasTank() + { + textureWidth = 32; + textureHeight = 64; + + Panel1 = new ModelRenderer(this, 0, 22); + Panel1.addBox(0F, 0F, 0F, 5, 13, 1); + Panel1.setRotationPoint(-2.5F, 11F, 3.5F); + Panel1.setTextureSize(32, 64); + Panel1.mirror = true; + setRotation(Panel1, 0F, 0F, 0F); + Panel2 = new ModelRenderer(this, 0, 37); + Panel2.addBox(0F, 0F, 0F, 1, 13, 5); + Panel2.setRotationPoint(3.5F, 11F, -2.5F); + Panel2.setTextureSize(32, 64); + Panel2.mirror = true; + setRotation(Panel2, 0F, 0F, 0F); + Panel3 = new ModelRenderer(this, 0, 22); + Panel3.addBox(0F, 0F, 0F, 5, 13, 1); + Panel3.setRotationPoint(-2.5F, 11F, -4.5F); + Panel3.setTextureSize(32, 64); + Panel3.mirror = true; + setRotation(Panel3, 0F, 0F, 0F); + Tank = new ModelRenderer(this, 0, 0); + Tank.addBox(0F, 0F, 0F, 7, 14, 7); + Tank.setRotationPoint(-3.5F, 10F, -3.5F); + Tank.setTextureSize(32, 64); + Tank.mirror = true; + setRotation(Tank, 0F, 0F, 0F); + Panel4 = new ModelRenderer(this, 0, 37); + Panel4.addBox(0F, 0F, 0F, 1, 13, 5); + Panel4.setRotationPoint(-4.5F, 11F, -2.5F); + Panel4.setTextureSize(32, 64); + Panel4.mirror = true; + setRotation(Panel4, 0F, 0F, 0F); + Top = new ModelRenderer(this, 13, 22); + Top.addBox(0F, 0F, 0F, 2, 2, 2); + Top.setRotationPoint(-1F, 8F, -1F); + Top.setTextureSize(32, 64); + Top.mirror = true; + setRotation(Top, 0F, 0F, 0F); + Exit = new ModelRenderer(this, 22, 22); + Exit.addBox(0F, 0F, 0F, 1, 1, 1); + Exit.setRotationPoint(1F, 8.2F, -0.5F); + Exit.setTextureSize(32, 64); + Exit.mirror = true; + setRotation(Exit, 0F, 0F, 0F); + } + + public void render(float size) + { + Panel1.render(size); + Panel2.render(size); + Panel3.render(size); + Tank.render(size); + Panel4.render(size); + Top.render(size); + Exit.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/ModelObsidianTNT.java b/common/mekanism/client/model/ModelObsidianTNT.java new file mode 100644 index 000000000..e639edc21 --- /dev/null +++ b/common/mekanism/client/model/ModelObsidianTNT.java @@ -0,0 +1,187 @@ +package mekanism.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelObsidianTNT extends ModelBase +{ + ModelRenderer Wick9; + ModelRenderer Wick8; + ModelRenderer Wick7; + ModelRenderer Wick6; + ModelRenderer Wick5; + ModelRenderer Wick4; + ModelRenderer Wick3; + ModelRenderer Wick2; + ModelRenderer Wick1; + ModelRenderer Wooden2; + ModelRenderer Wooden1; + ModelRenderer Rod1; + ModelRenderer Rod2; + ModelRenderer Rod3; + ModelRenderer Rod4; + ModelRenderer Rod5; + ModelRenderer Rod6; + ModelRenderer Rod7; + ModelRenderer Rod8; + ModelRenderer Rod9; + + public ModelObsidianTNT() + { + textureWidth = 64; + textureHeight = 64; + + Wick9 = new ModelRenderer(this, 0, 0); + Wick9.addBox(0F, 0F, 0F, 1, 2, 1); + Wick9.setRotationPoint(-0.5F, 9.2F, -0.5F); + Wick9.setTextureSize(64, 64); + Wick9.mirror = true; + setRotation(Wick9, 0F, 0F, 0.2268928F); + Wick8 = new ModelRenderer(this, 0, 0); + Wick8.addBox(0F, 0F, 0F, 1, 2, 1); + Wick8.setRotationPoint(-0.5F, 9.5F, -5.5F); + Wick8.setTextureSize(64, 64); + Wick8.mirror = true; + setRotation(Wick8, 0F, 0F, -0.2379431F); + Wick7 = new ModelRenderer(this, 0, 0); + Wick7.addBox(0F, 0F, 0F, 1, 2, 1); + Wick7.setRotationPoint(-0.5F, 9.5F, 4.5F); + Wick7.setTextureSize(64, 64); + Wick7.mirror = true; + setRotation(Wick7, 0F, 0F, -0.2379431F); + Wick6 = new ModelRenderer(this, 0, 0); + Wick6.addBox(0F, 0F, 0F, 1, 2, 1); + Wick6.setRotationPoint(-5.5F, 9.2F, -5.5F); + Wick6.setTextureSize(64, 64); + Wick6.mirror = true; + setRotation(Wick6, 0F, 0F, 0.2268928F); + Wick5 = new ModelRenderer(this, 0, 0); + Wick5.addBox(0F, 0F, 0F, 1, 2, 1); + Wick5.setRotationPoint(-5.5F, 9.5F, -0.5F); + Wick5.setTextureSize(64, 64); + Wick5.mirror = true; + setRotation(Wick5, 0F, 0F, -0.2379431F); + Wick4 = new ModelRenderer(this, 0, 0); + Wick4.addBox(0F, 0F, 0F, 1, 2, 1); + Wick4.setRotationPoint(-5.5F, 9.2F, 4.5F); + Wick4.setTextureSize(64, 64); + Wick4.mirror = true; + setRotation(Wick4, 0F, 0F, 0.2268928F); + Wick3 = new ModelRenderer(this, 0, 0); + Wick3.addBox(0F, 0F, 0F, 1, 2, 1); + Wick3.setRotationPoint(4.5F, 9.2F, -5.5F); + Wick3.setTextureSize(64, 64); + Wick3.mirror = true; + setRotation(Wick3, 0F, 0F, 0.2268928F); + Wick2 = new ModelRenderer(this, 0, 0); + Wick2.addBox(0F, 0F, 0F, 1, 2, 1); + Wick2.setRotationPoint(4.5F, 9.5F, -0.5F); + Wick2.setTextureSize(64, 64); + Wick2.mirror = true; + setRotation(Wick2, 0F, 0F, -0.2379431F); + Wick1 = new ModelRenderer(this, 0, 0); + Wick1.addBox(0F, 0F, 0F, 1, 2, 1); + Wick1.setRotationPoint(4.5F, 9.2F, 4.5F); + Wick1.setTextureSize(64, 64); + Wick1.mirror = true; + setRotation(Wick1, 0F, 0F, 0.2268928F); + Wooden2 = new ModelRenderer(this, 0, 0); + Wooden2.addBox(0F, 0F, 0F, 16, 3, 16); + Wooden2.setRotationPoint(-8F, 12F, -8F); + Wooden2.setTextureSize(64, 64); + Wooden2.mirror = true; + setRotation(Wooden2, 0F, 0F, 0F); + Wooden1 = new ModelRenderer(this, 0, 0); + Wooden1.addBox(0F, 0F, 0F, 16, 3, 16); + Wooden1.setRotationPoint(-8F, 20F, -8F); + Wooden1.setTextureSize(64, 64); + Wooden1.mirror = true; + setRotation(Wooden1, 0F, 0F, 0F); + Rod1 = new ModelRenderer(this, 0, 20); + Rod1.addBox(0F, 0F, 0F, 4, 13, 4); + Rod1.setRotationPoint(3F, 11F, 3F); + Rod1.setTextureSize(64, 64); + Rod1.mirror = true; + setRotation(Rod1, 0F, 0F, 0F); + Rod2 = new ModelRenderer(this, 0, 20); + Rod2.addBox(0F, 0F, 0F, 4, 13, 4); + Rod2.setRotationPoint(3F, 11F, -2F); + Rod2.setTextureSize(64, 64); + Rod2.mirror = true; + setRotation(Rod2, 0F, 0F, 0F); + Rod3 = new ModelRenderer(this, 0, 20); + Rod3.addBox(0F, 0F, 0F, 4, 13, 4); + Rod3.setRotationPoint(3F, 11F, -7F); + Rod3.setTextureSize(64, 64); + Rod3.mirror = true; + setRotation(Rod3, 0F, 0F, 0F); + Rod4 = new ModelRenderer(this, 0, 20); + Rod4.addBox(0F, 0F, 0F, 4, 13, 4); + Rod4.setRotationPoint(-2F, 11F, -7F); + Rod4.setTextureSize(64, 64); + Rod4.mirror = true; + setRotation(Rod4, 0F, 0F, 0F); + Rod5 = new ModelRenderer(this, 0, 20); + Rod5.addBox(0F, 0F, 0F, 4, 13, 4); + Rod5.setRotationPoint(-2F, 11F, -2F); + Rod5.setTextureSize(64, 64); + Rod5.mirror = true; + setRotation(Rod5, 0F, 0F, 0F); + Rod6 = new ModelRenderer(this, 0, 20); + Rod6.addBox(0F, 0F, 0F, 4, 13, 4); + Rod6.setRotationPoint(-2F, 11F, 3F); + Rod6.setTextureSize(64, 64); + Rod6.mirror = true; + setRotation(Rod6, 0F, 0F, 0F); + Rod7 = new ModelRenderer(this, 0, 20); + Rod7.addBox(0F, 0F, 0F, 4, 13, 4); + Rod7.setRotationPoint(-7F, 11F, -2F); + Rod7.setTextureSize(64, 64); + Rod7.mirror = true; + setRotation(Rod7, 0F, 0F, 0F); + Rod8 = new ModelRenderer(this, 0, 20); + Rod8.addBox(0F, 0F, 0F, 4, 13, 4); + Rod8.setRotationPoint(-7F, 11F, 3F); + Rod8.setTextureSize(64, 64); + Rod8.mirror = true; + setRotation(Rod8, 0F, 0F, 0F); + Rod9 = new ModelRenderer(this, 0, 20); + Rod9.addBox(0F, 0F, 0F, 4, 13, 4); + Rod9.setRotationPoint(-7F, 11F, -7F); + Rod9.setTextureSize(64, 64); + Rod9.mirror = true; + setRotation(Rod9, 0F, 0F, 0F); + } + + public void render(float size) + { + Wick9.render(size); + Wick8.render(size); + Wick7.render(size); + Wick6.render(size); + Wick5.render(size); + Wick4.render(size); + Wick3.render(size); + Wick2.render(size); + Wick1.render(size); + Wooden2.render(size); + Wooden1.render(size); + Rod1.render(size); + Rod2.render(size); + Rod3.render(size); + Rod4.render(size); + Rod5.render(size); + Rod6.render(size); + Rod7.render(size); + Rod8.render(size); + Rod9.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/render/block/MachineRenderingHandler.java b/common/mekanism/client/render/block/MachineRenderingHandler.java index b7e19293b..c9af56b54 100644 --- a/common/mekanism/client/render/block/MachineRenderingHandler.java +++ b/common/mekanism/client/render/block/MachineRenderingHandler.java @@ -2,6 +2,7 @@ package mekanism.client.render.block; import mekanism.client.ClientProxy; import mekanism.client.model.ModelChargepad; +import mekanism.client.model.ModelCrusher; import mekanism.client.model.ModelElectricPump; import mekanism.client.model.ModelLogisticalSorter; import mekanism.client.model.ModelMetallurgicInfuser; @@ -28,6 +29,7 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler public ModelMetallurgicInfuser metallurgicInfuser = new ModelMetallurgicInfuser(); public ModelChargepad chargepad = new ModelChargepad(); public ModelLogisticalSorter logisticalSorter = new ModelLogisticalSorter(); + public ModelCrusher crusher = new ModelCrusher(); @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) @@ -73,6 +75,14 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "LogisticalSorter.png")); logisticalSorter.render(0.0625F, false); } + else if(metadata == MachineType.CRUSHER.meta) + { + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.0F, 0.0F); + Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "Crusher.png")); + crusher.render(0.0625F, 0.0F); + } else { MekanismRenderer.renderItem(renderer, metadata, block); } diff --git a/common/mekanism/client/render/entity/RenderObsidianTNT.java b/common/mekanism/client/render/entity/RenderObsidianTNTPrimed.java similarity index 80% rename from common/mekanism/client/render/entity/RenderObsidianTNT.java rename to common/mekanism/client/render/entity/RenderObsidianTNTPrimed.java index 20ea00551..1901424dc 100644 --- a/common/mekanism/client/render/entity/RenderObsidianTNT.java +++ b/common/mekanism/client/render/entity/RenderObsidianTNTPrimed.java @@ -1,11 +1,15 @@ package mekanism.client.render.entity; +import mekanism.client.model.ModelObsidianTNT; import mekanism.common.EntityObsidianTNT; import mekanism.common.Mekanism; +import mekanism.common.util.MekanismUtils; +import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.Entity; +import net.minecraft.src.FMLRenderAccessLibrary; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; @@ -14,11 +18,12 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -public class RenderObsidianTNT extends Render +public class RenderObsidianTNTPrimed extends Render { private RenderBlocks blockRenderer = new RenderBlocks(); + private ModelObsidianTNT model = new ModelObsidianTNT(); - public RenderObsidianTNT() + public RenderObsidianTNTPrimed() { shadowSize = 0.5F; } @@ -32,7 +37,7 @@ public class RenderObsidianTNT extends Render public void renderObsidianTNT(EntityObsidianTNT entityobsidiantnt, double x, double y, double z, float f, float f1) { GL11.glPushMatrix(); - GL11.glTranslatef((float)x, (float)y, (float)z); + GL11.glTranslatef((float)x, (float)y-1.2f, (float)z); GL11.glScalef(0.8F, 0.8F, 0.8F); if((entityobsidiantnt.fuse - f1) + 1.0F < 10F) @@ -56,8 +61,8 @@ public class RenderObsidianTNT extends Render } float f3 = (1.0F - ((entityobsidiantnt.fuse - f1) + 1.0F) / 100F) * 0.8F; - bindEntityTexture(entityobsidiantnt); - blockRenderer.renderBlockAsItem(Mekanism.ObsidianTNT, 0, entityobsidiantnt.getBrightness(f1)); + bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ObsidianTNT.png")); + model.render(0.0625F); if(entityobsidiantnt.fuse / 5 % 2 == 0) { @@ -66,7 +71,7 @@ public class RenderObsidianTNT extends Render GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_DST_ALPHA); GL11.glColor4f(1.0F, 1.0F, 1.0F, f3); - blockRenderer.renderBlockAsItem(Mekanism.ObsidianTNT, 0, 1.0F); + model.render(0.0625F); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_LIGHTING); diff --git a/common/mekanism/client/render/item/ItemRenderingHandler.java b/common/mekanism/client/render/item/ItemRenderingHandler.java index cd248aba0..6394d1320 100644 --- a/common/mekanism/client/render/item/ItemRenderingHandler.java +++ b/common/mekanism/client/render/item/ItemRenderingHandler.java @@ -6,6 +6,8 @@ import mekanism.client.ClientProxy; import mekanism.client.MekanismClient; import mekanism.client.model.ModelEnergyCube; import mekanism.client.model.ModelEnergyCube.ModelEnergyCore; +import mekanism.client.model.ModelGasTank; +import mekanism.client.model.ModelObsidianTNT; import mekanism.client.model.ModelRobit; import mekanism.client.render.MekanismRenderer; import mekanism.common.IElectricChest; @@ -38,6 +40,8 @@ public class ItemRenderingHandler implements IItemRenderer public ModelChest electricChest = new ModelChest(); public ModelEnergyCube energyCube = new ModelEnergyCube(); public ModelEnergyCore energyCore = new ModelEnergyCore(); + public ModelGasTank gasTank = new ModelGasTank(); + public ModelObsidianTNT obsidianTNT = new ModelObsidianTNT(); @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) @@ -106,6 +110,22 @@ public class ItemRenderingHandler implements IItemRenderer GL11.glPopMatrix(); } + else if(item.itemID == Mekanism.gasTankID) + { + Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "GasTank.png")); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.0F, 0.0F); + gasTank.render(0.0625F); + } + else if(item.itemID == Mekanism.obsidianTNTID) + { + Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ObsidianTNT.png")); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(180F, 0.0F, -1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.0F, 0.0F); + obsidianTNT.render(0.0625F); + } else if(item.getItem() instanceof ItemWalkieTalkie) { if(((ItemWalkieTalkie)item.getItem()).getOn(item)) diff --git a/common/mekanism/client/render/tileentity/RenderCrusher.java b/common/mekanism/client/render/tileentity/RenderCrusher.java new file mode 100644 index 000000000..a74095528 --- /dev/null +++ b/common/mekanism/client/render/tileentity/RenderCrusher.java @@ -0,0 +1,40 @@ +package mekanism.client.render.tileentity; + +import mekanism.client.model.ModelCrusher; +import mekanism.common.tileentity.TileEntityCrusher; +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 RenderCrusher extends TileEntitySpecialRenderer +{ + private ModelCrusher model = new ModelCrusher(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) + { + renderAModelAt((TileEntityCrusher)tileEntity, x, y, z, 1F); + } + + private void renderAModelAt(TileEntityCrusher 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, "Crusher.png")); + + switch(tileEntity.facing) + { + case 2: GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break; + case 3: GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break; + case 4: GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break; + case 5: GL11.glRotatef(270, 0.0F, 1.0F, 0.0F); break; + } + + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + model.render(0.0625F, tileEntity.isActive ? tileEntity.getMatrix() : 0.0F); + GL11.glPopMatrix(); + } +} diff --git a/common/mekanism/client/render/tileentity/RenderEnergyCube.java b/common/mekanism/client/render/tileentity/RenderEnergyCube.java index 22b8e816e..e21e34ef2 100644 --- a/common/mekanism/client/render/tileentity/RenderEnergyCube.java +++ b/common/mekanism/client/render/tileentity/RenderEnergyCube.java @@ -36,6 +36,14 @@ public class RenderEnergyCube extends TileEntitySpecialRenderer bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "EnergyCube" + tileEntity.tier.name + ".png")); + switch(tileEntity.facing) + { + case 2: GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break; + case 3: GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break; + case 4: GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break; + case 5: GL11.glRotatef(270, 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/client/render/tileentity/RenderGasTank.java b/common/mekanism/client/render/tileentity/RenderGasTank.java new file mode 100644 index 000000000..90d24ad7d --- /dev/null +++ b/common/mekanism/client/render/tileentity/RenderGasTank.java @@ -0,0 +1,40 @@ +package mekanism.client.render.tileentity; + +import mekanism.client.model.ModelGasTank; +import mekanism.common.tileentity.TileEntityGasTank; +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 RenderGasTank extends TileEntitySpecialRenderer +{ + private ModelGasTank model = new ModelGasTank(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) + { + renderAModelAt((TileEntityGasTank)tileEntity, x, y, z, 1F); + } + + private void renderAModelAt(TileEntityGasTank 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, "GasTank.png")); + + switch(tileEntity.facing) + { + case 2: GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break; + case 3: GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break; + case 4: GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break; + case 5: GL11.glRotatef(270, 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/client/render/tileentity/RenderObsidianTNT.java b/common/mekanism/client/render/tileentity/RenderObsidianTNT.java new file mode 100644 index 000000000..de76fe81f --- /dev/null +++ b/common/mekanism/client/render/tileentity/RenderObsidianTNT.java @@ -0,0 +1,33 @@ +package mekanism.client.render.tileentity; + +import mekanism.client.model.ModelObsidianTNT; +import mekanism.common.tileentity.TileEntityObsidianTNT; +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 RenderObsidianTNT extends TileEntitySpecialRenderer +{ + private ModelObsidianTNT model = new ModelObsidianTNT(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) + { + renderAModelAt((TileEntityObsidianTNT)tileEntity, x, y, z, 1F); + } + + private void renderAModelAt(TileEntityObsidianTNT 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, "ObsidianTNT.png")); + + 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 6291303dd..29e3240bc 100644 --- a/common/mekanism/common/CommonProxy.java +++ b/common/mekanism/common/CommonProxy.java @@ -75,6 +75,7 @@ public class CommonProxy GameRegistry.registerTileEntity(TileEntityPurificationChamber.class, "PurificationChamber"); GameRegistry.registerTileEntity(TileEntityEnergizedSmelter.class, "EnergizedSmelter"); GameRegistry.registerTileEntity(TileEntityMetallurgicInfuser.class, "MetallurgicInfuser"); + GameRegistry.registerTileEntity(TileEntityGasTank.class, "GasTank"); GameRegistry.registerTileEntity(TileEntityEnergyCube.class, "EnergyCube"); GameRegistry.registerTileEntity(TileEntityPressurizedTube.class, "PressurizedTube"); GameRegistry.registerTileEntity(TileEntityUniversalCable.class, "UniversalCable"); diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index a8bb806c8..3aba9e853 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -1003,7 +1003,6 @@ public class Mekanism //Tile entities GameRegistry.registerTileEntity(TileEntityBoundingBlock.class, "BoundingBlock"); - GameRegistry.registerTileEntity(TileEntityGasTank.class, "GasTank"); GameRegistry.registerTileEntity(TileEntityTeleporter.class, "MekanismTeleporter"); //Load tile entities that have special renderers. diff --git a/common/mekanism/common/block/BlockGasTank.java b/common/mekanism/common/block/BlockGasTank.java index 05b4953d1..db322b0b7 100644 --- a/common/mekanism/common/block/BlockGasTank.java +++ b/common/mekanism/common/block/BlockGasTank.java @@ -28,7 +28,6 @@ import cpw.mods.fml.relauncher.SideOnly; public class BlockGasTank extends BlockContainer { - public Icon[] icons = new Icon[256]; public Random machineRand = new Random(); public BlockGasTank(int id) @@ -42,12 +41,7 @@ public class BlockGasTank extends BlockContainer @Override @SideOnly(Side.CLIENT) - public void registerIcons(IconRegister register) - { - icons[0] = register.registerIcon("mekanism:GasTankTop"); - icons[1] = register.registerIcon("mekanism:GasTankSide"); - icons[2] = register.registerIcon("mekanism:GasTankFront"); - } + public void registerIcons(IconRegister register) {} @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityliving, ItemStack itemstack) @@ -67,42 +61,6 @@ public class BlockGasTank extends BlockContainer tileEntity.setFacing((short)change); } - - @Override - @SideOnly(Side.CLIENT) - public Icon getIcon(int side, int meta) - { - if(side == 3) - { - return icons[2]; - } - else if(side == 0 || side == 1) - { - return icons[0]; - } - else { - return icons[1]; - } - } - - @Override - @SideOnly(Side.CLIENT) - public Icon getBlockTexture(IBlockAccess world, int x, int y, int z, int side) - { - TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z); - - if(side == tileEntity.facing) - { - return icons[2]; - } - else if(side == 0 || side == 1) - { - return icons[0]; - } - else { - return icons[1]; - } - } @Override public void breakBlock(World world, int x, int y, int z, int i1, int i2) @@ -250,6 +208,12 @@ public class BlockGasTank extends BlockContainer return false; } + @Override + public int getRenderType() + { + return -1; + } + @Override public TileEntity createNewTileEntity(World world) { diff --git a/common/mekanism/common/block/BlockMachine.java b/common/mekanism/common/block/BlockMachine.java index 1b2d3acc0..b3379cb0f 100644 --- a/common/mekanism/common/block/BlockMachine.java +++ b/common/mekanism/common/block/BlockMachine.java @@ -188,7 +188,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds { TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z); - if(MekanismUtils.isActive(world, x, y, z) && !(tileEntity instanceof TileEntityChargepad) && !(tileEntity instanceof TileEntityLogisticalSorter)) + if(MekanismUtils.isActive(world, x, y, z) && !(tileEntity instanceof TileEntityChargepad) && !(tileEntity instanceof TileEntityLogisticalSorter) && !(tileEntity instanceof TileEntityCrusher)) { float xRandom = (float)x + 0.5F; float yRandom = (float)y + 0.0F + random.nextFloat() * 6.0F / 16.0F; @@ -858,7 +858,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds ENRICHMENT_CHAMBER(0, "EnrichmentChamber", 3, Mekanism.enrichmentChamberUsage*400, TileEntityEnrichmentChamber.class, false), OSMIUM_COMPRESSOR(1, "OsmiumCompressor", 4, Mekanism.osmiumCompressorUsage*400, TileEntityOsmiumCompressor.class, false), COMBINER(2, "Combiner", 5, Mekanism.combinerUsage*400, TileEntityCombiner.class, false), - CRUSHER(3, "Crusher", 6, Mekanism.crusherUsage*400, TileEntityCrusher.class, false), + CRUSHER(3, "Crusher", 6, Mekanism.crusherUsage*400, TileEntityCrusher.class, true), BASIC_FACTORY(5, "BasicFactory", 11, Mekanism.factoryUsage*3*400, TileEntityFactory.class, false), ADVANCED_FACTORY(6, "AdvancedFactory", 11, Mekanism.factoryUsage*5*400, TileEntityAdvancedFactory.class, false), ELITE_FACTORY(7, "EliteFactory", 11, Mekanism.factoryUsage*7*400, TileEntityEliteFactory.class, false), diff --git a/common/mekanism/common/block/BlockObsidianTNT.java b/common/mekanism/common/block/BlockObsidianTNT.java index fa132a1a8..94c436107 100644 --- a/common/mekanism/common/block/BlockObsidianTNT.java +++ b/common/mekanism/common/block/BlockObsidianTNT.java @@ -2,6 +2,7 @@ package mekanism.common.block; import mekanism.common.EntityObsidianTNT; import mekanism.common.Mekanism; +import mekanism.common.tileentity.TileEntityObsidianTNT; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; @@ -9,7 +10,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Icon; import net.minecraft.world.Explosion; import net.minecraft.world.World; @@ -115,6 +116,36 @@ public class BlockObsidianTNT extends Block return false; } + @Override + public boolean hasTileEntity(int metadata) + { + return true; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) + { + return new TileEntityObsidianTNT(); + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } + @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { diff --git a/common/mekanism/common/tileentity/TileEntityBasicMachine.java b/common/mekanism/common/tileentity/TileEntityBasicMachine.java index cf0546047..174cc38a6 100644 --- a/common/mekanism/common/tileentity/TileEntityBasicMachine.java +++ b/common/mekanism/common/tileentity/TileEntityBasicMachine.java @@ -216,6 +216,11 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp @Override public double injectEnergyUnits(ForgeDirection direction, double i) { + if(Object3D.get(this).getFromSide(direction).getTileEntity(worldObj) instanceof TileEntityUniversalCable) + { + return i; + } + double givenEnergy = i*Mekanism.FROM_IC2; double rejects = 0; double neededEnergy = getMaxEnergy()-getEnergy(); diff --git a/common/mekanism/common/tileentity/TileEntityCrusher.java b/common/mekanism/common/tileentity/TileEntityCrusher.java index ffb4e557f..4d89c92d3 100644 --- a/common/mekanism/common/tileentity/TileEntityCrusher.java +++ b/common/mekanism/common/tileentity/TileEntityCrusher.java @@ -9,11 +9,43 @@ import mekanism.common.block.BlockMachine.MachineType; public class TileEntityCrusher extends TileEntityElectricMachine { + public float crushMatrix = 0; + public TileEntityCrusher() { super("Crusher.ogg", "Crusher", new ResourceLocation("mekanism", "gui/GuiCrusher.png"), Mekanism.crusherUsage, 200, MachineType.CRUSHER.baseEnergy); } + @Override + public void onUpdate() + { + super.onUpdate(); + + if(worldObj.isRemote) + { + if(crushMatrix < 6) + { + crushMatrix+=0.2F; + } + else { + crushMatrix = 0; + } + } + } + + public float getMatrix() + { + float matrix = 0; + + if(crushMatrix <= 3) + { + return crushMatrix; + } + else { + return 3 - (crushMatrix-3); + } + } + @Override public Map getRecipes() { diff --git a/common/mekanism/common/tileentity/TileEntityEnergyCube.java b/common/mekanism/common/tileentity/TileEntityEnergyCube.java index f5a8fdca6..875aea848 100644 --- a/common/mekanism/common/tileentity/TileEntityEnergyCube.java +++ b/common/mekanism/common/tileentity/TileEntityEnergyCube.java @@ -11,7 +11,6 @@ import java.util.HashSet; import mekanism.api.Object3D; import mekanism.api.energy.ICableOutputter; import mekanism.api.energy.IStrictEnergyAcceptor; -import mekanism.api.transmitters.TransmissionType; import mekanism.common.IRedstoneControl; import mekanism.common.Mekanism; import mekanism.common.Tier.EnergyCubeTier; @@ -23,13 +22,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraftforge.common.ForgeDirection; -import universalelectricity.core.block.IConductor; -import universalelectricity.core.electricity.ElectricityHelper; -import universalelectricity.core.electricity.ElectricityPack; -import universalelectricity.core.grid.IElectricityNetwork; import buildcraft.api.power.IPowerReceptor; -import buildcraft.api.power.PowerHandler.PowerReceiver; -import buildcraft.api.power.PowerHandler.Type; import com.google.common.io.ByteArrayDataInput; @@ -121,7 +114,7 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn @Override public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction) { - return direction != ForgeDirection.getOrientation(facing); + return direction != getOutputtingSide(); } @Override @@ -163,6 +156,11 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn @Override public double injectEnergyUnits(ForgeDirection direction, double i) { + if(Object3D.get(this).getFromSide(direction).getTileEntity(worldObj) instanceof TileEntityUniversalCable) + { + return i; + } + double givenEnergy = i*Mekanism.FROM_IC2; double rejects = 0; double neededEnergy = getMaxEnergy()-getEnergy(); @@ -201,13 +199,13 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn @Override public boolean canReceiveEnergy(ForgeDirection side) { - return side != ForgeDirection.getOrientation(facing); + return side != getOutputtingSide(); } @Override public boolean emitsEnergyTo(TileEntity receiver, ForgeDirection direction) { - return direction == ForgeDirection.getOrientation(facing); + return direction == getOutputtingSide() && !(receiver instanceof TileEntityUniversalCable); } @Override @@ -356,13 +354,13 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn @Override public boolean isTeleporterCompatible(ForgeDirection side) { - return true; + return side == getOutputtingSide(); } @Override public boolean canOutputTo(ForgeDirection side) { - return side == ForgeDirection.getOrientation(facing); + return side == getOutputtingSide(); } @Override diff --git a/common/mekanism/common/tileentity/TileEntityFactory.java b/common/mekanism/common/tileentity/TileEntityFactory.java index 2d8bb2bb1..5fefbd40d 100644 --- a/common/mekanism/common/tileentity/TileEntityFactory.java +++ b/common/mekanism/common/tileentity/TileEntityFactory.java @@ -201,7 +201,7 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IEnerg for(int process = 0; process < tier.processes; process++) { - if(MekanismUtils.canFunction(this) && canOperate(getInputSlot(process), getOutputSlot(process)) && electricityStored >= MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_PER_TICK)) + if(MekanismUtils.canFunction(this) && canOperate(getInputSlot(process), getOutputSlot(process)) && getEnergy() >= MekanismUtils.getEnergyPerTick(getSpeedMultiplier(), getEnergyMultiplier(), ENERGY_PER_TICK)) { if((progress[process]+1) < MekanismUtils.getTicks(getSpeedMultiplier(), TICKS_REQUIRED)) { @@ -658,6 +658,11 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IEnerg @Override public double injectEnergyUnits(ForgeDirection direction, double i) { + if(Object3D.get(this).getFromSide(direction).getTileEntity(worldObj) instanceof TileEntityUniversalCable) + { + return i; + } + double givenEnergy = i*Mekanism.FROM_IC2; double rejects = 0; double neededEnergy = getMaxEnergy()-getEnergy(); diff --git a/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java b/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java index 21fc14896..2cc980af5 100644 --- a/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java +++ b/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java @@ -35,6 +35,8 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen public EnumColor color; + public boolean autoEject; + public final int MAX_DELAY = 10; public int delayTicks; @@ -80,6 +82,7 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen if(inInventory != null && inInventory.itemStack != null) { + boolean hasFilter = false; EnumColor filterColor = color; for(TransporterFilter filter : filters) @@ -87,11 +90,12 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen if(filter.canFilter(inInventory.itemStack)) { filterColor = filter.color; + hasFilter = true; break; } } - if(TransporterUtils.insert(this, transporter, inInventory.itemStack, filterColor)) + if((hasFilter || autoEject) && TransporterUtils.insert(this, transporter, inInventory.itemStack, filterColor)) { inventory.setInventorySlotContents(inInventory.slotID, null); setActive(true); @@ -127,6 +131,8 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen nbtTags.setInteger("color", TransporterUtils.colors.indexOf(color)); } + nbtTags.setBoolean("autoEject", autoEject); + NBTTagList filterTags = new NBTTagList(); for(TransporterFilter filter : filters) @@ -154,6 +160,8 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen color = TransporterUtils.colors.get(nbtTags.getInteger("color")); } + autoEject = nbtTags.getBoolean("autoEject"); + if(nbtTags.hasKey("filters")) { NBTTagList tagList = nbtTags.getTagList("filters"); @@ -170,10 +178,16 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen { if(!worldObj.isRemote) { - if(dataStream.readInt() == 0) + int type = dataStream.readInt(); + + if(type == 0) { color = TransporterUtils.increment(color); } + else if(type == 1) + { + autoEject = !autoEject; + } return; } @@ -197,6 +211,8 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen color = null; } + autoEject = dataStream.readBoolean(); + filters.clear(); int amount = dataStream.readInt(); @@ -223,6 +239,8 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen color = null; } + autoEject = dataStream.readBoolean(); + MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord); } else if(type == 2) @@ -256,6 +274,8 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen data.add(-1); } + data.add(autoEject); + data.add(filters.size()); for(TransporterFilter filter : filters) @@ -283,6 +303,8 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen data.add(-1); } + data.add(autoEject); + return data; } diff --git a/common/mekanism/common/tileentity/TileEntityMetallurgicInfuser.java b/common/mekanism/common/tileentity/TileEntityMetallurgicInfuser.java index c0eeb301d..f7549b505 100644 --- a/common/mekanism/common/tileentity/TileEntityMetallurgicInfuser.java +++ b/common/mekanism/common/tileentity/TileEntityMetallurgicInfuser.java @@ -562,6 +562,11 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem @Override public double injectEnergyUnits(ForgeDirection direction, double i) { + if(Object3D.get(this).getFromSide(direction).getTileEntity(worldObj) instanceof TileEntityUniversalCable) + { + return i; + } + double givenEnergy = i*Mekanism.FROM_IC2; double rejects = 0; double neededEnergy = getMaxEnergy()-getEnergy(); diff --git a/common/mekanism/common/tileentity/TileEntityObsidianTNT.java b/common/mekanism/common/tileentity/TileEntityObsidianTNT.java new file mode 100644 index 000000000..73772f20a --- /dev/null +++ b/common/mekanism/common/tileentity/TileEntityObsidianTNT.java @@ -0,0 +1,6 @@ +package mekanism.common.tileentity; + +import net.minecraft.tileentity.TileEntity; + +//For a TESR +public class TileEntityObsidianTNT extends TileEntity {} \ No newline at end of file diff --git a/common/mekanism/common/tileentity/TileEntityTeleporter.java b/common/mekanism/common/tileentity/TileEntityTeleporter.java index b9587151b..fbf0bcb34 100644 --- a/common/mekanism/common/tileentity/TileEntityTeleporter.java +++ b/common/mekanism/common/tileentity/TileEntityTeleporter.java @@ -466,8 +466,13 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IEn } @Override - public double injectEnergyUnits(ForgeDirection directionFrom, double amount) + public double injectEnergyUnits(ForgeDirection direction, double amount) { + if(Object3D.get(this).getFromSide(direction).getTileEntity(worldObj) instanceof TileEntityUniversalCable) + { + return amount; + } + double givenEnergy = amount*Mekanism.FROM_IC2; double rejects = 0; double neededEnergy = getMaxEnergy()-getEnergy(); diff --git a/common/mekanism/generators/common/tileentity/TileEntityElectrolyticSeparator.java b/common/mekanism/generators/common/tileentity/TileEntityElectrolyticSeparator.java index 3bc12f941..9c6cd792b 100644 --- a/common/mekanism/generators/common/tileentity/TileEntityElectrolyticSeparator.java +++ b/common/mekanism/generators/common/tileentity/TileEntityElectrolyticSeparator.java @@ -18,6 +18,7 @@ import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; import mekanism.common.tileentity.TileEntityElectricBlock; +import mekanism.common.tileentity.TileEntityUniversalCable; import mekanism.common.util.ChargeUtils; import mekanism.common.util.MekanismUtils; import mekanism.generators.common.MekanismGenerators; @@ -454,8 +455,13 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp @Override public double injectEnergyUnits(ForgeDirection direction, double i) { + if(Object3D.get(this).getFromSide(direction).getTileEntity(worldObj) instanceof TileEntityUniversalCable) + { + return i; + } + double rejects = 0; - double neededEnergy = MAX_ELECTRICITY-electricityStored; + double neededEnergy = getMaxEnergy()-getEnergy(); if(i <= neededEnergy) { diff --git a/common/mekanism/generators/common/tileentity/TileEntityGenerator.java b/common/mekanism/generators/common/tileentity/TileEntityGenerator.java index d823ba5c9..efb867ad0 100644 --- a/common/mekanism/generators/common/tileentity/TileEntityGenerator.java +++ b/common/mekanism/generators/common/tileentity/TileEntityGenerator.java @@ -17,6 +17,7 @@ import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; import mekanism.common.network.PacketTileEntity; import mekanism.common.tileentity.TileEntityElectricBlock; +import mekanism.common.tileentity.TileEntityUniversalCable; import mekanism.common.util.CableUtils; import mekanism.common.util.MekanismUtils; import mekanism.generators.common.MekanismGenerators; @@ -208,7 +209,7 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem @Override public boolean emitsEnergyTo(TileEntity receiver, ForgeDirection direction) { - return getOutputtingSide() == direction; + return direction == getOutputtingSide() && !(receiver instanceof TileEntityUniversalCable); } @Override diff --git a/resources/assets/mekanism/gui/GuiLogisticalSorter.png b/resources/assets/mekanism/gui/GuiLogisticalSorter.png index 56efb5e5d19ec83bf8857581bc5608a53b56382c..9f5320f646f834848188d395b6263cf10f5c5783 100644 GIT binary patch delta 3653 zcmc&$c~BEs9_}&=$QiD11`^nws;S!At(vXb+1=Ux<5k!Db${>seZSxL z-s9=be#zU9N7gC0yX^3a#*Oy|pVEoZZJ6#iPWQjpBQxTxaL;w>tgXwlr=HB?R*SHi zlirBo6E}m6*K(*-_I&pe?3ps}Znnko(I86)GTN$h@1eVSV$-{(4po}bL855}M_l5b zF?lxNfp%R$z>uBYj8xhuGZGYe5}A=!*OX*s_6mbCk@vL7oDzwj-!Wp>`!jNrJ`0+q z4z<_6tze2nQ%a*E{iTBwEuSxzx@KG9AIok?z9=kC7CfN$b%#7y-Wo~P(h3Q>U{?`2 z86MtVK`ZYIr7XX?wXkUmBk1&L)BQJM z4&hPk@;!tj+PQN>P}sN4$y@Ji89uxs5rn)Aj%@9#jN%6Wbh3>zUg5Ylo}*A1XB#%S zM?wq5vwgp^vrFd;DS{Ddx6{+Zu3x_%6cXa;MDi6tkzwDyPo}yk&%6?~Rwqr5IDC+g|gm%pW+a!bkIiWjYg`A@YfxTOJys&gREt@qxyqHu3e`jty7Z?sH4u z++hWj%oHGkx=;6Qx26^cj)re^1M*xpu4f%(y+~e6C>}1qc&5DktAX^Bl2rn8F;^J z_ZtT@QTy&I$x-X(C}H!<6O`4IbqYBrayr71XvXvE)s-K$f9O0!r*rQ&g0w*>8_?S} zM~7F0Cgj=YuY=qWrSG5m`9Hkss1!Yti+D48pFMM7296U`fZ~YD=M&AWwr^MM9kJuC z`C8LOdBNd5QM*JuRO_#*gZol7!+?RJ5-~MSP*H>DcXmcfhRJTSWMs5*`T`&jNy&q!E<1}1tdPk*Mps+88}luLqw zf>!#&Ry#U6!W~*|ZkYneec$T9*1+@UyI-`mrQdyD{+---e9y%2t2=470%yn2hTyH~ z)0rzHZ}O+lQ91TnwIcGZ-K5Lm2!k{;ymJ4xDd4}PtY>eP%d4u=kwb;MEIQVnp;DvoWjQchxDP<_J}S#RU-0=g1CSmT%Oh#|bvV6T;^PSC$?$s(fdm zs`lwqWtPq*@`tPzDlXe8yA=!_xTumDpo3N+i#b4Aoym8D#N) z_`>A1b8JjIg3JpKNlf7wd0tuB;1k8UJQx^0WW6r|6g6^mM9ndn4Ln(r#!x}y)x{h6 zz+aq~lyU5RjQR&~Xg+n2x9UNO`Kwh0=S>QL<8uZQV9{utXsA};y2IAYCQ^9&eOK3j zcommv46K7c7|_6l$^Iy^Zx!!A_%}sHK;UZ#Y0^A0urxOo-)}QTQw3O)fZiU;+r$(0 zx4ENg(S~d@lX!i<-6+88AQ!p92T;J{v%eMo>{dWkbtI=6aM%>GJ6?$gEEV_ z^A5Q%-dcfyXQy3KSDB)sz!W#X1!A>eYXz8jyYMNPy=pnuhS*00Ag%DA3T_p1)9U%A z%Y;S?81Tsj`PktxQYP+HJJo9CTKn+71j34P{Dr zUM3`cq-7tS)q`VueuH|h{HJy1ZCkdm%H z5RYZ*tdS-I%3#}~%+rvPK>Rfg;O@J}2<;|CX6NMCX(4v`vSCQiSZ#L7&Vm=RJdj9Z z6O-k8%@I)hPLzTheVAhh_&;ma2E*$E)bLGeUA2>`6_&vbK~>Xld!ukMc0Vue6;f-( zrOSe$8jpU^fxAb7h)N5y)y)Pg@wjLYXG zFufMzeH`i083eiLnRL3T{W)YhICgq0q2U+K zSUnGgi|r}9zXBJ1KItuazX906q7TjXMelV5>C8pzE29$UUTZ4OY21EhCkZ<`x|9ge zK@@-IVhMc<+!Wz&qbwk7$NUVlzv zW4lA+(9hjaGASIJCBd?kHO)0E!=1@MLCgSY|MFjnh#))yX#(;`%Zq}{SD;j92Nio literal 3888 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 literal 0 HcmV?d00001 diff --git a/resources/assets/mekanism/render/EnergyCubeAdvanced.png b/resources/assets/mekanism/render/EnergyCubeAdvanced.png index c221bfba79f10b1496d1299fbd95bc4b83d0c1b4..7c4b20910582dfb39ab0de42c621b4bd5ca1f7d1 100644 GIT binary patch delta 2140 zcmX|Cdpy%?7)OXY$|V}gmRg=gg9BYn3SV% zB9ahVa-B;qBW7;1&E|~G=e+;E-}m`m-sgQ@>Mt`A4+8-a52(4R(_Q2e&NXPPT{@l_ zy*=9~_PXZAVxXu#&WQQMG+D;aV^9cNqB(j~vQk4pP)G8+h6?MmNzIx=G}Oz}7iMzO z|LzMD_gLcs+)#9{TvltCV7TMxn@AGz#;c%F6&8g&uhoxByYg!g$+!NRil>i{&x@s{ zC6C6&#u0$Fv~+x=HR14ng?2+Dd)JqJB_9xF&6Z)mB|>9B4OuA*s?4&X&?h1XKJG`A zPCyI{<{1n|!n>gY;i$xi^m+06Gj=d!1Aw)>uAmPZ?O zN0B;Nb27?*-nK5&uAg?*4OsEOm95pmjXwegg2q*v@}tJ7}8us7YAO4SwJ z(x-usRfjOS%A=1U*!*yQhw!JQndNfP%c~Z;Buz`-vDpqO_aD4WP2bn~XU@i(9ui6W z;L@S;Dhq5bX!n6q~-kMwwGrWqQuUxiub%>FB}#_jLhR2%rhw6S`B z(Q(hPf?i_8jMHw64ib6rnmmG?+uP@(Ktm`U^)_l_OLZ1BLYIE%Iv{%vr$-V)<^pB-S4x&|23_YTlrF%&x@^ zf?F#88E6s?9}Ox$f38hg%f=Jm#FP6nBe?}E-tHsXYjPje7_lTqH&jMxB7yPKIgFGS zl0_IaGh{eSozZEJ%G~^sdh=Zc_sfzJ_xe&{r<6~L>|O8Lwn4!Q!ESV>j%_Oad#48N zXh=RENQ%#+hOYBcmT}Cl_@hAr>{bs-x02Tp8xEHRsPGiNQP$(UEQde5AW|2Us8)pw zxvtHDG#ox+)$htg*Ly@Wkh%FRm@r(WV5=v~oM<($n0q{hTqjmIz%jh0uZYv<52eGj zP4c&om`R9yFm&Yj3j`CA2SdcJ#N6UJ#Hiw|iS1J{bwYJ)`Q?&Lkzx-!iNaZGi_sT>`8)RVvcY_%&%a09fKl&dZ&`~IypZcaF7g<);(ATo>KLexdd&4eFBlLuOGkHlsKWE$~gn* z=`IRTrtjQ=P#f93tiWjm<`okyj$VOmSJ4hNQyU8*jImgsIkxTN2GHx;Mz){88%79L zq}fJl!gBtfok<{@Q%S4e3FbW_Z#Pg}QvqSSnxgz9I{+QJy@+6J0gX)~952e4b;liK z5se6&^#m0yQa8t!xM#+e2Q+}SJFUbku{#swzQV~K3k+j^gUNNdp((7f-rj6w%Ph-x zmUG0jT(}}$E;p`{6=DjCW~lkxt#HbDW{CL8hn?_M04oz~KVURLlG@>*6o$qrtmR4o zLWeN#M44@!1q#`B^bTy2lXj3% z=e|W|w%JK3R_{;eoCBbkr}2}qUnpfXWB#0$%o3=ca?3a>;Ub0ZUp&~%o24Bw+=^l~ zfX#sZ(36Nj;kJJ7ck?*SWb~U4Z>LcX<+QBe#xDT#;Mp=7dpQ;;e7;G4n+s<_pxItK z3PY|JqV$X{vuBb1xyr4bOzIlzF6o4nHHSzujZ#NauY6gcl67s|UoCA!MPHI2+ z7Ddt8J6SQlSh?NzNnI?EI_D?RUUxt#4Y46fd;ocu2RALJm)hO`x?%wuQ1y{sf4-af z#djw_5AHUU;8`bA{iMya+$HV*LnM|1zHwB5{AG0)pV$Ud>k_J-%+RiYf#nfeuE@zy zQ^bY^2pCY6Odt8JG)>5jtl(jT$H6|6e%6|bOmp9+HC_8Gw@W0HDV{vs+MHv_@Qv9{S&gdH>_CoOqnzPcm_6X$ZMCIk!ZAn`h^vv(S0`o)@rS zE4YY<(cM#o3}gjS_7GOoX7pFR0fSS0{#ZX;mal%do*lFf>n&FacCpn>bCj&Ekj>T+ iR>;;6mY2=L5!eb0;s7m7x=Wppx1bm8%n5(E-~Sig!CBG( delta 1498 zcmXw1dpy%?7?*OWTt2#-hSPDXbErm}%Zim0D`9TAoaPc5bB!anIQSLL9JRU2M#ybW zn~~$z5Tb@-n6)9Z;}#}$fF4tH;U z%y$bOMI6HZ+NN$%8e>lDjf~TtJdpg5eCd?7tp(Uux$KgiOzpksR-^v+&0RO9{Lc{^ z(etsTCDmhsHO5+9=afO77Iv7+bs2n+z~dFiaXf&xjDeGNQ&#C5(*Aq{LqpW-#l=PP z1tTN3g8Y2Z5wU^sfQQ=c^6TMYwxyh5_p_n;UFJf$5epY~RYrj%>xn5Z0bG`(n?O`s{Q*+!nT))BA(M9o89>Sld>MXs5h0VJ4WcUN{`?OhqSNTzI65@AocN zbm$d%>zO4y_HP=gipyT9IP1nw#M#Pvs}@o0NWQ3ffDG>NUx4Hps=jl`^RC};WYvs> z+08oR1802GYJhgK_Af@1y8g}0&5U6@QP9`dM_$yTgu>!c!W&V4yKp?WKn(4N8R_Ox zmeEcDg&iFooKF_ayI817=`nnY-RC6C`zOkQB_AEgib7SeO#}u0!DXF&ruLW^RSD0D z1yD!Rb;3x$r=c{MRZEAUR|`Hkg%39@F*T;uST)W<=5UJ+m&>JC^Pfao(faJ$K-*Qv zMD>5UOPDFGdLE5Yc~(~^Fh;M?7{|f}=f?w3^JFlZ{!b=PTvS7o*7Y>TR7_6YilL~e z=roXD%E47Hc{PwbS}Zkz(X;{%!?n%9Z7vIE4c{eJQZMxK)d0dmp;W99g-H9ULrXeBzWb6^)r0E{ZsgddAC+rZxAtj z!sCuqlPpSB{RO9iXew?R<7SWs=eyZE19^s7noZt=WdZU7uq38qc|w&pl~ReDxL6_b zbw{^+O&`Qn|BF$a?haBx<8V>WJhCJ_Ic? zuKVBxDOUOs*1cpqL9SOHJ>6tZQdC1g&>LSDk)4FXlNf-3pp_QfXS`0F%@b} zqI_+NSGZ)A_E=E_LFoC)%+DaWjH#j!gk3kj^5yVEgQK3;*XnFgE@z0Phxa>-5diL; z&^|<}P_$Z&yU({lugAUWWzrO`0id2h;9NZIeprEOTuS)NcYC5qI@I>;4Fg8wkr`gH zM?@8PEktWewQ%uyXUruy_tphXWTY^u=*6FF=L-+SNF$|iP0ASF{;3}k>rsgqVd|~* zRcPkHcUQ7l3-pbTqniyU%ZyW}0pL~>#Kb4@)0>xj#xIJj2m&+Es$*6m!neNPHgypv zwptv*`H6O*Y490Xol<7VhhCXKz}|-qR8iWl58vOm|wo^kmryIXUR6049-6vd!nDg(60KN7B4n0h-ZP|gywo>4U zdm=ePlZ7xWby-RI+zxWPR$O9F=!G(QYLSoXo71}1B)`u$Ew_K}t$`{me*;IdvMsw2 z*562E__@|GCcS+XjNTBO-m;li0wmg5CKHNFi`wo)2TAE_4r-oj^}J1%;Py-}QL%oH zGyGs3`qtgGxt^-!Ue3KxyuB_JL!h4`I_YH=$$>Kq<&;&BIj<*SyM5yKWyzHSQerc| LVvVRY@reH)-Kh=8 diff --git a/resources/assets/mekanism/render/EnergyCubeBasic.png b/resources/assets/mekanism/render/EnergyCubeBasic.png index 98fee6a9d5aad9b48cebd09bced0b10c650055b1..fafa51be2f1276f4ca28fd1d599f69ba0f053b03 100644 GIT binary patch delta 2175 zcmbVN>0gp*8zs}i9CJ@|G!(b2OdZ!zlPs4qT(W>MC{oMBt#M16kS8@W(=^L1GnX{# z6_qs01(kl9+qmE|xYm%GxiIb`2m&wIy#K&^e|WxJ=Q-y(=lWguT`W7S@Hi9zd!2Q3 zxEOO~F`t?Cxm_WVWl4!(q##vK!lI~+SLH|3LiDP2&{dj-?x|WQ1(GZ0qP|ZLAFRnG zT9M{wELCTB@B5}ab{P?ycP+xds`h@}9d>Bhb@uXSLoSRyXFRC!$m4JD{+9YwRUDZ$9QOcmPTnAn>wxW;;8m&P*LEfDlTo0X_w3e*)r0%bpN45sIK$z;S!hh z1{%0{dJFk73Z3A`J3eLMa`cjj0XVn;RQ zVGteKJD}wcv>eHK0?T_(Yr4Z$ymf<8ZEtJKd~yTZMmIq&`n4rjmz@@ZdvsEaqV?O1 zwo1Htb}=hOlqO$Ynh{)LKHJ$Rm{;pR{dQ~*{?zs@p~wEd@WS5`?GKc$Ba)g`lJb>rc0zi`ldkbv^7Hc}odWtJ&Trn9QPXkH zL}+rCW?weA3Ic}h?UF1wieEV#j*d?xX6kAlOC7(+6nV<6nsW4}7vJ<%Ov!y{B}!+p zByo(-W7~GC;w(bStgz;so!9$w#^E+*cn2S%T1^g7J*Qg(-4?-`Jj1rl=l}3+a%Q@@v zs*@JdE4Y;!vcn?#XR&OT%+t{_@{Vt)iS)fy@0NGzUu$nN1ZVJRT{$T^?Bp3fwEW%; z0D>jtZ)$YMt_`6|PuTGD-WJ26C}}Wn-nF$)2LtvLJUg~(u}dC!IUem>g z;uSJs(15~}*XyqQ>fXeTNS4+wW(Dh!hz;JO8aE@gzn*lyBHsbJ*FGErjb(Gcbj(=| zTE0JPh_Em-b%ieZ`TJ%%e(vb`bT}EPOMjMpUNH<})($@yySK;~8YAlmh&HdsEpB<0 zMmTXU#VW;IIAmwkjE;<-#^Na~epo>^!)R!2aV?PgpI=6Hqc#`#M|v4OwrDDLxst>3 zVAjM?tQnyO2?if!C5v+y#FhzkWvwFD+gp8|!Y(}3pdF^E5a;ss^ZABw3o zrg{_UY*Gyu7c@cHMRlFT^542L<(NzRO?bYy-cym!m<}>c0L4ZH8y}ztE8`hGG z^g+-f@S8KoG`9s>y^KEFU8@niEq_*rg9@>7~ASonZVy>8h>tek^1O$$Rjis(%{cDQL5rAZ-`A;MUjmD+rjy?e6Fa zr)ey5eudP!bVq`!2?rGnH7;n6PmW9+74-Vnj$^mCfNdGb(mrP42!tvXOeW}moCn;a z38B1qwA%EiWdHfO)(pme;@tzG!sS3=wE*mwYU*$E`?-;j7wBJ8>^75juCEv}O^AOE z>vmqz-nqXjgZWL(0wflN7rh}pZpFGaf3wetVhi18H==Mb&h*nTkFZnmnFE>#;$i>w zHJgxizz0s!@&XXXtAQMyRGfY7GIZ5ZMx+?&ORW%*9SpL+o4e!XlnH$5UyRe#3{kjwc?S@aDd@i8 zX7=cUVg>P8yJ0eN2tJ+ZNWu}rTwl`7hphDm0`pAU)kLxXf1j@UC??f#qL0?Yb8rWV O&RHjS$I4Sz1A{2U?26v;J=qs_=U zwS-1y4C^SW88Pk|M>MXMWl*z|ouPX6pMC%MKF|04UZ3~#e!fhZQb-005LdOcws48K zxbE)2u^PDU6YX{Mgyz;P;R4(>Q8W%Frb&NP|G2Ur$oO1FG-E}(C7iWse(BxG z{AB0ODqQ3eR+R2_1)m-c@C^?i>`3Jk2qiJ>)-TohH8KHRgKd4}ea68U%#{uXgg|=H?{*U95IsBe+LJ?LdIuy5H+tkbY~Pw7>R9TTEh@{lan1F5~x53|^E! zHPuES5L{KeJSa$0S`ST*5mkl=W>{y^gZ~=0(3+K91A(Ti3RN6 zEo1TBVsfDXvzG~TY#=Q8Q7y@3XoawNnm@P{IUzZU4crPPBf4~i6uV0&^a-h99^Uvc0b8dwy1T}% zv3|`0xEAS&IPWiMJPp16!Ujft>j^uEuJ&NiD3`#2zAYN#eSKhD&A~eOu}Y`q5+2dy z{qYi|k%1Uf{q})HyKE#tq)%-9A+#@W*`B_DHM>ik8V67 z6eQqI78{4)G1jV3>}hwVH7-MM19!R@aaw>Z1x<@<2e^uH*+vb8M5Pzu=O;`t(8gXG zg|gx7ypRJ|P;pR!Z5>*ju)4rSBAivXuWZ%A*bn-@by&e!Y|b8vV6IH88c-3(aWr%u zZ;~>C2?!Y9zYw3GbZR6DKkU*){^_=~rG&cB$P^RHFFFcA#+F|k-2za}i&~-6xz}=A zUTU?M`jPCHI)-L~LUO%6e719i((*mWeSz)aHaInJRVTL7hm^FBT_Qa;T6q z6^K|yR%VeKHyHTXS&rzHrkdsvwoBtl!C#QYh+$3(dBCfu z-R%nknOl3cVolBJV_TCIm(_PGvL1QhIr|LjJ|Pt_#)&p(gqpPM_GkT-ER>YUAUaPn zLFS+I%iGe`A0HGZkj05>K}v2mkM=rLlID?DCC6Xgaf!3zo>PV3N`>4OD3dEtH>@k^ zhKfnCk(5%Yff^v)RxZ!F-Cyl%if#%(m!MHyW$hbJ{^;tx|IOv3Aph+~rNM^LPdju9 zgE&@b?ZX!nJAFoykZ3Dt<$pW39=SsD88Y6I4tCxduDj2?tpjV)ps$~_Ga27G5Pj@h zj7S4a*mOm5woHX+R>Z7tTB6E#9K^}$4y~f3PI^tcZMGw1TtJ%;kfaseL|NHN==c{w zy?8!`sH5f6xowHh&zAo$(KL%eFL`F;F~f3 hx)$I3|8w6mnE-70eu_B7{5nW*?9Mq^*IIhV{|o=N6g2<< diff --git a/resources/assets/mekanism/render/EnergyCubeElite.png b/resources/assets/mekanism/render/EnergyCubeElite.png index 3fa52225c261be1011d320454cb8e0700a830796..2710aae5b224c6fdac6c4b2235f7dd4fa152e223 100644 GIT binary patch delta 2112 zcmZuxc~sKd7A7B+7zSmUyx;M>nUR=HuIRW1U-nU*OR!?TQv1&OjWGrtQ;)XdS^cwlCB)qf9vpVeASXAheFMD&K%DE-)WJJING<5} z@ME&_>|dB{*RpyPSj2JcBE2-sR{&Y>3oQuPzRI{KcJV*H9gd%O^U@ftB(tnNu(8^D z$|6D0B*0_XH}sXO z_aa@|AC_18O9JN2r4c{2nH?`NX8u8~w*FQg=PI8$Xs7R~7B$mX6AdYv zbGZ}tAC>WpoWN*G&9oQBokttyQY4S};8mcuq&Y3$%U&ZsIB`*eaGJAxvfytnKh5g} z*Q^xwj6PV;k;!Crxf&t1VZT~`QTK%oNc-Q;Y|MCMao5CsuSt?ZZQ*%G#PohVJZXS7 zoR@k{N3j3xkyPmB9k;~L2SZ8+p%`=ovjuE8E1T&RGK_m{4!kbg`m9l&m#AKZEE@;P+m4BkAm5ka+eXm(c2HO)y+Kon{(9JH5m(W$v z?Y_Hh0LfzK=-kA)$sAhEeqn#*#a6nUFEo<}2(t{f5bhVoVV|`3syIa66^)sjP)VXY z*zD^K#vtn2q{rvTXz~=%Lin%Bs6Otv)H2G@IZvRscK1!wI@Lcb@R< zYSYk(*UD7E3|3WaP#uRY*30;uA zyeW+}9?=`C+Al}AyJ&9t(0>W7mQ=lbyLP#j>vq=AWlK5gOTnIuFxzlCK;Bs^C}-N! ztOJb{B`x5{D`1Q_BnGG2vMS<7I*v-QsIGfnv%% zurDv*Vrwon4W0#0>GTB4oJ4$(7P7h0pz-wxrky@my1rAhi!>Ew>;2nX@Q81zj&=s=;c&i-ftOvuB)+R+-A*!zI8cOX;+(Bo^j@PVQ%y^>`5Aj@@ zS8V22vSVoJG^4c7o3?=#CfSIp&xi)NpX6*o>HIVP?>6qBcci7+v~Djs zaKpd$)(TD9m74~?DUEpyn)@;j(B`eg1Z{t+IWO7ix#_f5XZ&k_;BT|9ke4O~r5*=U zPA_qa`?ah&;)Ug9Px4)nVuCGRAe@4mX6sis)le@)C)vFHlO$2G{<>IZVsCrJZU_pA zL;=NlzFiM@y2vna5oytas-uN`q&KA>tf6%8N#(ubWhJ(O;-fv1n-V_#-Yf{S8I=N{ zY&HzE(Uh6Dla5yu zT>^?WKNj-x)*t#`8_3bBF$3?E`M(I-7KX(epI0h*9QDC%`lVpuS7iZx?~vt)&#QG$ zPPZh?AF!}C`9LbtDai}AefyiUQ*CL`I>v6?X^Yez&1!~@!g8+C_kX$${S)|qSi$Y4 arWMf4k>)ey7hb*sDGutWGm?eyN%=30XFulv literal 1709 zcmb7FdpOf;9RDfeEKN=qSsYYP9i5cRba5KyF6K5$F4+>Jc4HSSm9#7l=cq?>nU^;YKoAfB z0IPg`JVMm_In6Ryp^nYY=r;AHi-9BH0B|>V&U+7ShNBHPS!?X!uP zo{Td>R-e3kKb7tW{e1D48y>zn*N<)yI3731v>MuD>@r^d@!GZ2`0WTvq5KY+TRcnm z>%3aj`;Z$*p-`OiF6^dKsobc$59`^l_z+pio@$2>1ud8skp|z^GMr?N!C>a8_C=wR zw`Ak7v9Sk?#*|Mmd{Hyq&8AgVSHwoHMLq1E!+ zQ+sQ~C~$+{=F(Z$k=GjXpfw7&Dx=9m2bA|!=L5t!vfC1gsHAsSG}=()H^ zHHO(aHHFWR)iCF!(t~}py7;kV-Ghqgt{Hrs{+ElwN5|0FMOhT2rck9i3#;EGrun0x znMjBe14laU1%~Phnx~W6%qA-XPS<5YNrLs1Fpe)I05&)$Hu5nNIYCgt`9nulMf*}m`3L(X2oq%

S2)uD6gr3S$=_wJ3Mq^?VgLqL5@NnPU~ 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 diff --git a/resources/assets/mekanism/render/GasTank.png b/resources/assets/mekanism/render/GasTank.png new file mode 100644 index 0000000000000000000000000000000000000000..355a92aa326ab35af6522e85f925de186dd09752 GIT binary patch literal 3253 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 literal 0 HcmV?d00001 diff --git a/resources/assets/mekanism/render/ObsidianTNT.png b/resources/assets/mekanism/render/ObsidianTNT.png new file mode 100644 index 0000000000000000000000000000000000000000..0c0ca2ca0a43b11a9c60c39119a7e3cd843dad56 GIT binary patch literal 2989 zcmeHJXIPWT7XGkM6r>np454T$B&3m$0HG>DiXg$eV8gH~AgF*u+9Dw=iqfQ9zz%|B zR}B%25(oH_4#&wJ*_T;AvIq_GLQ z2><{M=RLbw@;zQLRoBbcPtwe9@@+$a{a$+jD7&(G*>58NtOxeF?RS*hcWUi~Yr%Kw z?1byU;UG9d8-dh9qO?(HZ8Sm$fz&~wbWms=Gy;S`f{-W>3JpS|!Dx&Q##qPLM8^cX z6^j93j6udGAQLPIiveSd!Nw+F6D$~u+ls@1aHb$rye^)gOTd9~reIS%7*7Bbun;T` zf-{Af;vskfgn)1;hw0v>=|1AzqZPSF#kuT?Ty|%1Y70NJsrq(Pb$)Yge*fL19)5Dy z{j@GY`XK+(pdhX9VaDL2td`n>*19|G^+lZxce@&kdz$$@&A;`w{yx+xkaP=&`-HQv z?~nFBnvj%F{!u>lPW*9LJU3c3H(n(hfBNOGT6vrPKmHpExYQjt2LL62!*cgp``;db z*H;y!Tw}G+JqN-8V9N`|RMN$`#LJCPj-wC9E5x4@>38-7u+Q)084ljvalcW78J>zK zk(?GBXaJz1?Y!H5f0XZZ-b&;cQ}<#YvJ_bc4bBnxgMu?eX7DQW{b0we1Ha@o6t|&< z%GB%mePnA3mK$$O_VKHFg;_&RDwsI;{#O1P>)rWv+1W*}Kd4?&Q%!F!Dw=%%zC<+k z;U&nMd{BU{UG0175ht7ZKDD|oME6ns2qbD5U6Zoc*mRhILB|%U z9dF!q#BKD}}ED zid9s6Z;ZMyQ(gmsFav3jSNu1dXI(&ElbqOs7Tb0-m!`iZh4rh9$&U5w9l5;Y2eg_e z%tN%Hq5~dvK_pQ$Bvm=tvVQ9&!(Hcfd#bNah_GIVTLQ1u+mXutksw1uDj0t=DzLSW z?!RN^e=AiAi_dqJ=WT<9vr)xV_9eNF%=HzO9YHICQh&PTr00PmuIoX-e2(PY72=Y|Kf`t^Cujtn1ze(ZbL{O^E!GT$ldE zk-2tS*~>Ww_R+5^%~v}6d2M5I&k*2Wk-=V*%Emi^OO4{80m;>*xH)Jd^Usb9XZh5eE z=INJB@WhulLlzHJe%k-EyVRg2jsQNFv>EIiNiE112O|m`lr?T^RtY|}1lGu!jAB*~ zB++^fX_r*KPp%osz{#dE-xF2G^`bc5s=gr+qm;`Ht@ocwF0BxgbD_~6m|3hoAw}Sw zRf-e}SrQ%R&efZS8_Luj;)>pC>P1J0O5WsL%n4v+1qcP&I~p~)w@7qu)Yq>WW|;yp(7*Q^=ElLz08OSb(a z^hyf3_%9ZGqcvgEd*7!)vuWQ9$0e{de{K%K!P;IaoJ2$yM5TXXpVc S)fTPzyEr?#?-n|+6aEEyWmDJy literal 0 HcmV?d00001