From b180f4e9688a71f741453d6603302fa1e095b10b Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Sun, 26 Jan 2014 17:12:03 -0500 Subject: [PATCH] Started on new machines --- common/mekanism/client/ClientProxy.java | 9 + .../model/ModelChemicalCrystalizer.java | 314 ++++++++++++++++++ .../ModelChemicalDissolutionChamber.java | 314 ++++++++++++++++++ .../client/model/ModelChemicalWasher.java | 300 +++++++++++++++++ .../render/block/MachineRenderingHandler.java | 49 ++- .../tileentity/RenderChemicalCrystalizer.java | 44 +++ .../RenderChemicalDissolutionChamber.java | 44 +++ .../tileentity/RenderChemicalWasher.java | 40 +++ common/mekanism/common/CommonProxy.java | 9 + common/mekanism/common/Mekanism.java | 3 + .../mekanism/common/block/BlockMachine.java | 11 +- .../common/item/ItemBlockMachine.java | 3 + .../common/network/PacketConfigSync.java | 6 + .../tile/TileEntityChemicalCrystalizer.java | 14 + .../TileEntityChemicalDissolutionChamber.java | 14 + .../common/tile/TileEntityChemicalWasher.java | 14 + ...Chamber.png => GuiChemicalCrystalizer.png} | Bin resources/assets/mekanism/lang/en_US.lang | 3 + .../mekanism/render/ChemicalCrystalizer.png | Bin 0 -> 5024 bytes .../render/ChemicalDissolutionChamber.png | Bin 0 -> 3530 bytes .../assets/mekanism/render/ChemicalWasher.png | Bin 0 -> 4516 bytes 21 files changed, 1185 insertions(+), 6 deletions(-) create mode 100644 common/mekanism/client/model/ModelChemicalCrystalizer.java create mode 100644 common/mekanism/client/model/ModelChemicalDissolutionChamber.java create mode 100644 common/mekanism/client/model/ModelChemicalWasher.java create mode 100644 common/mekanism/client/render/tileentity/RenderChemicalCrystalizer.java create mode 100644 common/mekanism/client/render/tileentity/RenderChemicalDissolutionChamber.java create mode 100644 common/mekanism/client/render/tileentity/RenderChemicalWasher.java create mode 100644 common/mekanism/common/tile/TileEntityChemicalCrystalizer.java create mode 100644 common/mekanism/common/tile/TileEntityChemicalDissolutionChamber.java create mode 100644 common/mekanism/common/tile/TileEntityChemicalWasher.java rename resources/assets/mekanism/gui/{GuiChemicalRecrystalizationChamber.png => GuiChemicalCrystalizer.png} (100%) create mode 100644 resources/assets/mekanism/render/ChemicalCrystalizer.png create mode 100644 resources/assets/mekanism/render/ChemicalDissolutionChamber.png create mode 100644 resources/assets/mekanism/render/ChemicalWasher.png diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index d0e368dcd..db0ee9733 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -47,8 +47,11 @@ import mekanism.client.render.entity.RenderRobit; import mekanism.client.render.item.ItemRenderingHandler; import mekanism.client.render.tileentity.RenderBin; import mekanism.client.render.tileentity.RenderChargepad; +import mekanism.client.render.tileentity.RenderChemicalCrystalizer; +import mekanism.client.render.tileentity.RenderChemicalDissolutionChamber; import mekanism.client.render.tileentity.RenderChemicalInfuser; import mekanism.client.render.tileentity.RenderChemicalOxidizer; +import mekanism.client.render.tileentity.RenderChemicalWasher; import mekanism.client.render.tileentity.RenderConfigurableMachine; import mekanism.client.render.tileentity.RenderDigitalMiner; import mekanism.client.render.tileentity.RenderDynamicTank; @@ -80,9 +83,12 @@ import mekanism.common.tile.TileEntityAdvancedElectricMachine; import mekanism.common.tile.TileEntityAdvancedFactory; import mekanism.common.tile.TileEntityBin; import mekanism.common.tile.TileEntityChargepad; +import mekanism.common.tile.TileEntityChemicalCrystalizer; +import mekanism.common.tile.TileEntityChemicalDissolutionChamber; import mekanism.common.tile.TileEntityChemicalInfuser; import mekanism.common.tile.TileEntityChemicalInjectionChamber; import mekanism.common.tile.TileEntityChemicalOxidizer; +import mekanism.common.tile.TileEntityChemicalWasher; import mekanism.common.tile.TileEntityCombiner; import mekanism.common.tile.TileEntityCrusher; import mekanism.common.tile.TileEntityDigitalMiner; @@ -298,6 +304,9 @@ public class ClientProxy extends CommonProxy GameRegistry.registerTileEntity(TileEntitySalinationValve.class, "SalinationValve"); GameRegistry.registerTileEntity(TileEntitySalinationTank.class, "SalinationTank"); ClientRegistry.registerTileEntity(TileEntityPrecisionSawmill.class, "PrecisionSawmill", new RenderConfigurableMachine()); + ClientRegistry.registerTileEntity(TileEntityChemicalDissolutionChamber.class, "ChemicalDissolutionChamber", new RenderChemicalDissolutionChamber()); + ClientRegistry.registerTileEntity(TileEntityChemicalWasher.class, "ChemicalWasher", new RenderChemicalWasher()); + ClientRegistry.registerTileEntity(TileEntityChemicalCrystalizer.class, "ChemicalCrystalizer", new RenderChemicalCrystalizer()); } @Override diff --git a/common/mekanism/client/model/ModelChemicalCrystalizer.java b/common/mekanism/client/model/ModelChemicalCrystalizer.java new file mode 100644 index 000000000..d897270a6 --- /dev/null +++ b/common/mekanism/client/model/ModelChemicalCrystalizer.java @@ -0,0 +1,314 @@ +package mekanism.client.model; + +import mekanism.client.render.MekanismRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelChemicalCrystalizer extends ModelBase +{ + ModelRenderer Base; + ModelRenderer IO1; + ModelRenderer IO2; + ModelRenderer Base3; + ModelRenderer Base2; + ModelRenderer Can1B; + ModelRenderer Can1T; + ModelRenderer Can1Side3; + ModelRenderer Can1Side1; + ModelRenderer Can1Side2; + ModelRenderer Can1Side4; + ModelRenderer Can2Side4; + ModelRenderer Can3Side3; + ModelRenderer Can2Side2; + ModelRenderer Can2Side3; + ModelRenderer Can2Side1; + ModelRenderer Can4Side3; + ModelRenderer Can4Side1; + ModelRenderer Can4Sjde4; + ModelRenderer Can4Side2; + ModelRenderer Can3Side4; + ModelRenderer Can4B; + ModelRenderer Can3Side2; + ModelRenderer Can3Side1; + ModelRenderer Can2B; + ModelRenderer Can4T; + ModelRenderer Can2T; + ModelRenderer Can3T; + ModelRenderer Can3B; + ModelRenderer Spire; + ModelRenderer Spin; + ModelRenderer Vial1; + ModelRenderer Vial2; + ModelRenderer Vial3; + ModelRenderer Vial4; + + public ModelChemicalCrystalizer() + { + textureWidth = 128; + textureHeight = 64; + + Base = new ModelRenderer(this, 16, 0); + Base.addBox(0F, 0F, 0F, 14, 1, 14); + Base.setRotationPoint(-7F, 23F, -7F); + Base.setTextureSize(128, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + IO1 = new ModelRenderer(this, 9, 17); + IO1.addBox(0F, 0F, 0F, 1, 8, 8); + IO1.setRotationPoint(-8F, 12F, -4F); + IO1.setTextureSize(128, 64); + IO1.mirror = true; + setRotation(IO1, 0F, 0F, 0F); + IO2 = new ModelRenderer(this, 9, 17); + IO2.addBox(0F, 0F, 0F, 1, 8, 8); + IO2.setRotationPoint(7F, 12F, -4F); + IO2.setTextureSize(128, 64); + IO2.mirror = true; + setRotation(IO2, 0F, 0F, 0F); + Base3 = new ModelRenderer(this, 16, 0); + Base3.addBox(0F, 0F, 0F, 14, 1, 14); + Base3.setRotationPoint(-7F, 9F, -7F); + Base3.setTextureSize(128, 64); + Base3.mirror = true; + setRotation(Base3, 0F, 0F, 0F); + Base2 = new ModelRenderer(this, 16, 0); + Base2.addBox(0F, 0F, 0F, 14, 1, 14); + Base2.setRotationPoint(-7F, 14F, -7F); + Base2.setTextureSize(128, 64); + Base2.mirror = true; + setRotation(Base2, 0F, 0F, 0F); + Can1B = new ModelRenderer(this, 0, 0); + Can1B.addBox(0F, 0F, 0F, 4, 1, 4); + Can1B.setRotationPoint(2F, 13F, 2F); + Can1B.setTextureSize(128, 64); + Can1B.mirror = true; + setRotation(Can1B, 0F, 0F, 0F); + Can1T = new ModelRenderer(this, 0, 0); + Can1T.addBox(0F, 0F, 0F, 4, 1, 4); + Can1T.setRotationPoint(2F, 10F, 2F); + Can1T.setTextureSize(128, 64); + Can1T.mirror = true; + setRotation(Can1T, 0F, 0F, 0F); + Can1Side3 = new ModelRenderer(this, 0, 0); + Can1Side3.addBox(0F, 0F, 0F, 1, 2, 2); + Can1Side3.setRotationPoint(5F, 11F, 3F); + Can1Side3.setTextureSize(128, 64); + Can1Side3.mirror = true; + setRotation(Can1Side3, 0F, 0F, 0F); + Can1Side1 = new ModelRenderer(this, 0, 0); + Can1Side1.addBox(0F, 0F, 0F, 4, 2, 1); + Can1Side1.setRotationPoint(2F, 11F, 5F); + Can1Side1.setTextureSize(128, 64); + Can1Side1.mirror = true; + setRotation(Can1Side1, 0F, 0F, 0F); + Can1Side2 = new ModelRenderer(this, 0, 0); + Can1Side2.addBox(0F, 0F, 0F, 4, 2, 1); + Can1Side2.setRotationPoint(2F, 11F, 2F); + Can1Side2.setTextureSize(128, 64); + Can1Side2.mirror = true; + setRotation(Can1Side2, 0F, 0F, 0F); + Can1Side4 = new ModelRenderer(this, 0, 0); + Can1Side4.addBox(0F, 0F, 0F, 1, 2, 2); + Can1Side4.setRotationPoint(2F, 11F, 3F); + Can1Side4.setTextureSize(128, 64); + Can1Side4.mirror = true; + setRotation(Can1Side4, 0F, 0F, 0F); + Can2Side4 = new ModelRenderer(this, 0, 0); + Can2Side4.addBox(0F, 0F, 0F, 1, 2, 2); + Can2Side4.setRotationPoint(-6F, 11F, 3F); + Can2Side4.setTextureSize(128, 64); + Can2Side4.mirror = true; + setRotation(Can2Side4, 0F, 0F, 0F); + Can3Side3 = new ModelRenderer(this, 0, 0); + Can3Side3.addBox(0F, 0F, 0F, 1, 2, 2); + Can3Side3.setRotationPoint(5F, 11F, -5F); + Can3Side3.setTextureSize(128, 64); + Can3Side3.mirror = true; + setRotation(Can3Side3, 0F, 0F, 0F); + Can2Side2 = new ModelRenderer(this, 0, 0); + Can2Side2.addBox(0F, 0F, 0F, 4, 2, 1); + Can2Side2.setRotationPoint(-6F, 11F, 2F); + Can2Side2.setTextureSize(128, 64); + Can2Side2.mirror = true; + setRotation(Can2Side2, 0F, 0F, 0F); + Can2Side3 = new ModelRenderer(this, 0, 0); + Can2Side3.addBox(0F, 0F, 0F, 1, 2, 2); + Can2Side3.setRotationPoint(-3F, 11F, 3F); + Can2Side3.setTextureSize(128, 64); + Can2Side3.mirror = true; + setRotation(Can2Side3, 0F, 0F, 0F); + Can2Side1 = new ModelRenderer(this, 0, 0); + Can2Side1.addBox(0F, 0F, 0F, 4, 2, 1); + Can2Side1.setRotationPoint(-6F, 11F, 5F); + Can2Side1.setTextureSize(128, 64); + Can2Side1.mirror = true; + setRotation(Can2Side1, 0F, 0F, 0F); + Can4Side3 = new ModelRenderer(this, 0, 0); + Can4Side3.addBox(0F, 0F, 0F, 1, 2, 2); + Can4Side3.setRotationPoint(-3F, 11F, -5F); + Can4Side3.setTextureSize(128, 64); + Can4Side3.mirror = true; + setRotation(Can4Side3, 0F, 0F, 0F); + Can4Side1 = new ModelRenderer(this, 0, 0); + Can4Side1.addBox(0F, 0F, 0F, 4, 2, 1); + Can4Side1.setRotationPoint(-6F, 11F, -3F); + Can4Side1.setTextureSize(128, 64); + Can4Side1.mirror = true; + setRotation(Can4Side1, 0F, 0F, 0F); + Can4Sjde4 = new ModelRenderer(this, 0, 0); + Can4Sjde4.addBox(0F, 0F, 0F, 1, 2, 2); + Can4Sjde4.setRotationPoint(-6F, 11F, -5F); + Can4Sjde4.setTextureSize(128, 64); + Can4Sjde4.mirror = true; + setRotation(Can4Sjde4, 0F, 0F, 0F); + Can4Side2 = new ModelRenderer(this, 0, 0); + Can4Side2.addBox(0F, 0F, 0F, 4, 2, 1); + Can4Side2.setRotationPoint(-6F, 11F, -6F); + Can4Side2.setTextureSize(128, 64); + Can4Side2.mirror = true; + setRotation(Can4Side2, 0F, 0F, 0F); + Can3Side4 = new ModelRenderer(this, 0, 0); + Can3Side4.addBox(0F, 0F, 0F, 1, 2, 2); + Can3Side4.setRotationPoint(2F, 11F, -5F); + Can3Side4.setTextureSize(128, 64); + Can3Side4.mirror = true; + setRotation(Can3Side4, 0F, 0F, 0F); + Can4B = new ModelRenderer(this, 0, 0); + Can4B.addBox(0F, 0F, 0F, 4, 1, 4); + Can4B.setRotationPoint(-6F, 13F, -6F); + Can4B.setTextureSize(128, 64); + Can4B.mirror = true; + setRotation(Can4B, 0F, 0F, 0F); + Can3Side2 = new ModelRenderer(this, 0, 0); + Can3Side2.addBox(0F, 0F, 0F, 4, 2, 1); + Can3Side2.setRotationPoint(2F, 11F, -6F); + Can3Side2.setTextureSize(128, 64); + Can3Side2.mirror = true; + setRotation(Can3Side2, 0F, 0F, 0F); + Can3Side1 = new ModelRenderer(this, 0, 0); + Can3Side1.addBox(0F, 0F, 0F, 4, 2, 1); + Can3Side1.setRotationPoint(2F, 11F, -3F); + Can3Side1.setTextureSize(128, 64); + Can3Side1.mirror = true; + setRotation(Can3Side1, 0F, 0F, 0F); + Can2B = new ModelRenderer(this, 0, 0); + Can2B.addBox(0F, 0F, 0F, 4, 1, 4); + Can2B.setRotationPoint(-6F, 13F, 2F); + Can2B.setTextureSize(128, 64); + Can2B.mirror = true; + setRotation(Can2B, 0F, 0F, 0F); + Can4T = new ModelRenderer(this, 0, 0); + Can4T.addBox(0F, 0F, 0F, 4, 1, 4); + Can4T.setRotationPoint(-6F, 10F, -6F); + Can4T.setTextureSize(128, 64); + Can4T.mirror = true; + setRotation(Can4T, 0F, 0F, 0F); + Can2T = new ModelRenderer(this, 0, 0); + Can2T.addBox(0F, 0F, 0F, 4, 1, 4); + Can2T.setRotationPoint(-6F, 10F, 2F); + Can2T.setTextureSize(128, 64); + Can2T.mirror = true; + setRotation(Can2T, 0F, 0F, 0F); + Can3T = new ModelRenderer(this, 0, 0); + Can3T.addBox(0F, 0F, 0F, 4, 1, 4); + Can3T.setRotationPoint(2F, 10F, -6F); + Can3T.setTextureSize(128, 64); + Can3T.mirror = true; + setRotation(Can3T, 0F, 0F, 0F); + Can3B = new ModelRenderer(this, 0, 0); + Can3B.addBox(0F, 0F, 0F, 4, 1, 4); + Can3B.setRotationPoint(2F, 13F, -6F); + Can3B.setTextureSize(128, 64); + Can3B.mirror = true; + setRotation(Can3B, 0F, 0F, 0F); + Spire = new ModelRenderer(this, 0, 6); + Spire.addBox(0F, 0F, 0F, 2, 8, 2); + Spire.setRotationPoint(-1F, 15F, -1F); + Spire.setTextureSize(128, 64); + Spire.mirror = true; + setRotation(Spire, 0F, 0F, 0F); + Spin = new ModelRenderer(this, 28, 24); + Spin.addBox(-4F, 0F, -4F, 8, 1, 8); + Spin.setRotationPoint(0F, 16F, 0F); + Spin.setTextureSize(128, 64); + Spin.mirror = true; + setRotation(Spin, 0F, 0F, 0F); + Vial1 = new ModelRenderer(this, 8, 6); + Vial1.addBox(-3F, 0.5F, 3F, 2, 3, 2); + Vial1.setRotationPoint(0F, 16F, 0F); + Vial1.setTextureSize(128, 64); + Vial1.mirror = true; + setRotation(Vial1, 0F, 0F, 0F); + Vial2 = new ModelRenderer(this, 8, 6); + Vial2.addBox(1F, 0.5F, 3F, 2, 3, 2); + Vial2.setRotationPoint(0F, 16F, 0F); + Vial2.setTextureSize(128, 64); + Vial2.mirror = true; + setRotation(Vial2, 0F, 0F, 0F); + Vial3 = new ModelRenderer(this, 8, 6); + Vial3.addBox(-3F, 0.5F, -5F, 2, 3, 2); + Vial3.setRotationPoint(0F, 16F, 0F); + Vial3.setTextureSize(128, 64); + Vial3.mirror = true; + setRotation(Vial3, 0F, 0F, 0F); + Vial4 = new ModelRenderer(this, 8, 6); + Vial4.addBox(1F, 0.5F, -5F, 2, 3, 2); + Vial4.setRotationPoint(0F, 16F, 0F); + Vial4.setTextureSize(128, 64); + Vial4.mirror = true; + setRotation(Vial4, 0F, 0F, 0F); + } + + public void render(float size) + { + MekanismRenderer.blendOn(); + + Base.render(size); + IO1.render(size); + IO2.render(size); + Base3.render(size); + Base2.render(size); + Can1B.render(size); + Can1T.render(size); + Can1Side3.render(size); + Can1Side1.render(size); + Can1Side2.render(size); + Can1Side4.render(size); + Can2Side4.render(size); + Can3Side3.render(size); + Can2Side2.render(size); + Can2Side3.render(size); + Can2Side1.render(size); + Can4Side3.render(size); + Can4Side1.render(size); + Can4Sjde4.render(size); + Can4Side2.render(size); + Can3Side4.render(size); + Can4B.render(size); + Can3Side2.render(size); + Can3Side1.render(size); + Can2B.render(size); + Can4T.render(size); + Can2T.render(size); + Can3T.render(size); + Can3B.render(size); + Spire.render(size); + Spin.render(size); + Vial1.render(size); + Vial2.render(size); + Vial3.render(size); + Vial4.render(size); + + MekanismRenderer.blendOff(); + } + + 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/ModelChemicalDissolutionChamber.java b/common/mekanism/client/model/ModelChemicalDissolutionChamber.java new file mode 100644 index 000000000..4972bd6d3 --- /dev/null +++ b/common/mekanism/client/model/ModelChemicalDissolutionChamber.java @@ -0,0 +1,314 @@ +package mekanism.client.model; + +import mekanism.client.render.MekanismRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelChemicalDissolutionChamber extends ModelBase +{ + ModelRenderer Centre; + ModelRenderer Base; + ModelRenderer Base2; + ModelRenderer Can1B; + ModelRenderer Can1T; + ModelRenderer Can1Side3; + ModelRenderer Can1Side1; + ModelRenderer Can1Side2; + ModelRenderer Can1Side4; + ModelRenderer Can2Side4; + ModelRenderer Can3Side3; + ModelRenderer Can2Side2; + ModelRenderer Can2Side3; + ModelRenderer Can2Side1; + ModelRenderer Can4Side3; + ModelRenderer Can4Side1; + ModelRenderer Can4Sjde4; + ModelRenderer Can4Side2; + ModelRenderer Can3Side4; + ModelRenderer Can4B; + ModelRenderer Can3Side2; + ModelRenderer Can3Side1; + ModelRenderer Can2B; + ModelRenderer Can4T; + ModelRenderer Can2T; + ModelRenderer Can3T; + ModelRenderer Can3B; + ModelRenderer IO1; + ModelRenderer IO2Port; + ModelRenderer IO2; + ModelRenderer IO2Port2; + ModelRenderer Coil1; + ModelRenderer Coil2; + ModelRenderer Coil3; + ModelRenderer Coil4; + + public ModelChemicalDissolutionChamber() + { + textureWidth = 128; + textureHeight = 64; + + Centre = new ModelRenderer(this, 0, 17); + Centre.addBox(0F, 0F, 0F, 2, 13, 2); + Centre.setRotationPoint(-1F, 9F, -1F); + Centre.setTextureSize(128, 64); + Centre.mirror = true; + setRotation(Centre, 0F, 0F, 0F); + Base = new ModelRenderer(this, 16, 0); + Base.addBox(0F, 0F, 0F, 14, 2, 14); + Base.setRotationPoint(-7F, 22F, -7F); + Base.setTextureSize(128, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + Base2 = new ModelRenderer(this, 16, 0); + Base2.addBox(0F, 0F, 0F, 14, 1, 14); + Base2.setRotationPoint(-7F, 16F, -7F); + Base2.setTextureSize(128, 64); + Base2.mirror = true; + setRotation(Base2, 0F, 0F, 0F); + Can1B = new ModelRenderer(this, 0, 0); + Can1B.addBox(0F, 0F, 0F, 4, 1, 4); + Can1B.setRotationPoint(2F, 21F, 2F); + Can1B.setTextureSize(128, 64); + Can1B.mirror = true; + setRotation(Can1B, 0F, 0F, 0F); + Can1T = new ModelRenderer(this, 0, 0); + Can1T.addBox(0F, 0F, 0F, 4, 1, 4); + Can1T.setRotationPoint(2F, 17F, 2F); + Can1T.setTextureSize(128, 64); + Can1T.mirror = true; + setRotation(Can1T, 0F, 0F, 0F); + Can1Side3 = new ModelRenderer(this, 0, 0); + Can1Side3.addBox(0F, 0F, 0F, 1, 3, 2); + Can1Side3.setRotationPoint(5F, 18F, 3F); + Can1Side3.setTextureSize(128, 64); + Can1Side3.mirror = true; + setRotation(Can1Side3, 0F, 0F, 0F); + Can1Side1 = new ModelRenderer(this, 0, 0); + Can1Side1.addBox(0F, 0F, 0F, 4, 3, 1); + Can1Side1.setRotationPoint(2F, 18F, 5F); + Can1Side1.setTextureSize(128, 64); + Can1Side1.mirror = true; + setRotation(Can1Side1, 0F, 0F, 0F); + Can1Side2 = new ModelRenderer(this, 0, 0); + Can1Side2.addBox(0F, 0F, 0F, 4, 3, 1); + Can1Side2.setRotationPoint(2F, 18F, 2F); + Can1Side2.setTextureSize(128, 64); + Can1Side2.mirror = true; + setRotation(Can1Side2, 0F, 0F, 0F); + Can1Side4 = new ModelRenderer(this, 0, 0); + Can1Side4.addBox(0F, 0F, 0F, 1, 3, 2); + Can1Side4.setRotationPoint(2F, 18F, 3F); + Can1Side4.setTextureSize(128, 64); + Can1Side4.mirror = true; + setRotation(Can1Side4, 0F, 0F, 0F); + Can2Side4 = new ModelRenderer(this, 0, 0); + Can2Side4.addBox(0F, 0F, 0F, 1, 3, 2); + Can2Side4.setRotationPoint(-6F, 18F, 3F); + Can2Side4.setTextureSize(128, 64); + Can2Side4.mirror = true; + setRotation(Can2Side4, 0F, 0F, 0F); + Can3Side3 = new ModelRenderer(this, 0, 0); + Can3Side3.addBox(0F, 0F, 0F, 1, 3, 2); + Can3Side3.setRotationPoint(5F, 18F, -5F); + Can3Side3.setTextureSize(128, 64); + Can3Side3.mirror = true; + setRotation(Can3Side3, 0F, 0F, 0F); + Can2Side2 = new ModelRenderer(this, 0, 0); + Can2Side2.addBox(0F, 0F, 0F, 4, 3, 1); + Can2Side2.setRotationPoint(-6F, 18F, 2F); + Can2Side2.setTextureSize(128, 64); + Can2Side2.mirror = true; + setRotation(Can2Side2, 0F, 0F, 0F); + Can2Side3 = new ModelRenderer(this, 0, 0); + Can2Side3.addBox(0F, 0F, 0F, 1, 3, 2); + Can2Side3.setRotationPoint(-3F, 18F, 3F); + Can2Side3.setTextureSize(128, 64); + Can2Side3.mirror = true; + setRotation(Can2Side3, 0F, 0F, 0F); + Can2Side1 = new ModelRenderer(this, 0, 0); + Can2Side1.addBox(0F, 0F, 0F, 4, 3, 1); + Can2Side1.setRotationPoint(-6F, 18F, 5F); + Can2Side1.setTextureSize(128, 64); + Can2Side1.mirror = true; + setRotation(Can2Side1, 0F, 0F, 0F); + Can4Side3 = new ModelRenderer(this, 0, 0); + Can4Side3.addBox(0F, 0F, 0F, 1, 3, 2); + Can4Side3.setRotationPoint(-3F, 18F, -5F); + Can4Side3.setTextureSize(128, 64); + Can4Side3.mirror = true; + setRotation(Can4Side3, 0F, 0F, 0F); + Can4Side1 = new ModelRenderer(this, 0, 0); + Can4Side1.addBox(0F, 0F, 0F, 4, 3, 1); + Can4Side1.setRotationPoint(-6F, 18F, -3F); + Can4Side1.setTextureSize(128, 64); + Can4Side1.mirror = true; + setRotation(Can4Side1, 0F, 0F, 0F); + Can4Sjde4 = new ModelRenderer(this, 0, 0); + Can4Sjde4.addBox(0F, 0F, 0F, 1, 3, 2); + Can4Sjde4.setRotationPoint(-6F, 18F, -5F); + Can4Sjde4.setTextureSize(128, 64); + Can4Sjde4.mirror = true; + setRotation(Can4Sjde4, 0F, 0F, 0F); + Can4Side2 = new ModelRenderer(this, 0, 0); + Can4Side2.addBox(0F, 0F, 0F, 4, 3, 1); + Can4Side2.setRotationPoint(-6F, 18F, -6F); + Can4Side2.setTextureSize(128, 64); + Can4Side2.mirror = true; + setRotation(Can4Side2, 0F, 0F, 0F); + Can3Side4 = new ModelRenderer(this, 0, 0); + Can3Side4.addBox(0F, 0F, 0F, 1, 3, 2); + Can3Side4.setRotationPoint(2F, 18F, -5F); + Can3Side4.setTextureSize(128, 64); + Can3Side4.mirror = true; + setRotation(Can3Side4, 0F, 0F, 0F); + Can4B = new ModelRenderer(this, 0, 0); + Can4B.addBox(0F, 0F, 0F, 4, 1, 4); + Can4B.setRotationPoint(-6F, 21F, -6F); + Can4B.setTextureSize(128, 64); + Can4B.mirror = true; + setRotation(Can4B, 0F, 0F, 0F); + Can3Side2 = new ModelRenderer(this, 0, 0); + Can3Side2.addBox(0F, 0F, 0F, 4, 3, 1); + Can3Side2.setRotationPoint(2F, 18F, -6F); + Can3Side2.setTextureSize(128, 64); + Can3Side2.mirror = true; + setRotation(Can3Side2, 0F, 0F, 0F); + Can3Side1 = new ModelRenderer(this, 0, 0); + Can3Side1.addBox(0F, 0F, 0F, 4, 3, 1); + Can3Side1.setRotationPoint(2F, 18F, -3F); + Can3Side1.setTextureSize(128, 64); + Can3Side1.mirror = true; + setRotation(Can3Side1, 0F, 0F, 0F); + Can2B = new ModelRenderer(this, 0, 0); + Can2B.addBox(0F, 0F, 0F, 4, 1, 4); + Can2B.setRotationPoint(-6F, 21F, 2F); + Can2B.setTextureSize(128, 64); + Can2B.mirror = true; + setRotation(Can2B, 0F, 0F, 0F); + Can4T = new ModelRenderer(this, 0, 0); + Can4T.addBox(0F, 0F, 0F, 4, 1, 4); + Can4T.setRotationPoint(-6F, 17F, -6F); + Can4T.setTextureSize(128, 64); + Can4T.mirror = true; + setRotation(Can4T, 0F, 0F, 0F); + Can2T = new ModelRenderer(this, 0, 0); + Can2T.addBox(0F, 0F, 0F, 4, 1, 4); + Can2T.setRotationPoint(-6F, 17F, 2F); + Can2T.setTextureSize(128, 64); + Can2T.mirror = true; + setRotation(Can2T, 0F, 0F, 0F); + Can3T = new ModelRenderer(this, 0, 0); + Can3T.addBox(0F, 0F, 0F, 4, 1, 4); + Can3T.setRotationPoint(2F, 17F, -6F); + Can3T.setTextureSize(128, 64); + Can3T.mirror = true; + setRotation(Can3T, 0F, 0F, 0F); + Can3B = new ModelRenderer(this, 0, 0); + Can3B.addBox(0F, 0F, 0F, 4, 1, 4); + Can3B.setRotationPoint(2F, 21F, -6F); + Can3B.setTextureSize(128, 64); + Can3B.mirror = true; + setRotation(Can3B, 0F, 0F, 0F); + IO1 = new ModelRenderer(this, 9, 17); + IO1.addBox(0F, 0F, 0F, 1, 8, 8); + IO1.setRotationPoint(-8F, 12F, -4F); + IO1.setTextureSize(128, 64); + IO1.mirror = true; + setRotation(IO1, 0F, 0F, 0F); + IO2Port = new ModelRenderer(this, 28, 17); + IO2Port.addBox(0F, 0F, 0F, 2, 2, 4); + IO2Port.setRotationPoint(-7F, 14F, -2F); + IO2Port.setTextureSize(128, 64); + IO2Port.mirror = true; + setRotation(IO2Port, 0F, 0F, 0F); + IO2 = new ModelRenderer(this, 9, 17); + IO2.addBox(0F, 0F, 0F, 1, 8, 8); + IO2.setRotationPoint(7F, 12F, -4F); + IO2.setTextureSize(128, 64); + IO2.mirror = true; + setRotation(IO2, 0F, 0F, 0F); + IO2Port2 = new ModelRenderer(this, 28, 17); + IO2Port2.addBox(0F, 0F, 0F, 2, 2, 4); + IO2Port2.setRotationPoint(5F, 14F, -2F); + IO2Port2.setTextureSize(128, 64); + IO2Port2.mirror = true; + setRotation(IO2Port2, 0F, 0F, 0F); + Coil1 = new ModelRenderer(this, 0, 34); + Coil1.addBox(0F, 0F, 0F, 8, 1, 8); + Coil1.setRotationPoint(-4F, 14F, -4F); + Coil1.setTextureSize(128, 64); + Coil1.mirror = true; + setRotation(Coil1, 0F, 0F, 0F); + Coil2 = new ModelRenderer(this, 0, 34); + Coil2.addBox(0F, 0F, 0F, 8, 1, 8); + Coil2.setRotationPoint(-4F, 12F, -4F); + Coil2.setTextureSize(128, 64); + Coil2.mirror = true; + setRotation(Coil2, 0F, 0F, 0F); + Coil3 = new ModelRenderer(this, 0, 34); + Coil3.addBox(0F, 0F, 0F, 8, 1, 8); + Coil3.setRotationPoint(-4F, 10F, -4F); + Coil3.setTextureSize(128, 64); + Coil3.mirror = true; + setRotation(Coil3, 0F, 0F, 0F); + Coil4 = new ModelRenderer(this, 0, 34); + Coil4.addBox(0F, 0F, 0F, 8, 1, 8); + Coil4.setRotationPoint(-4F, 8F, -4F); + Coil4.setTextureSize(128, 64); + Coil4.mirror = true; + setRotation(Coil4, 0F, 0F, 0F); + } + + public void render(float size) + { + MekanismRenderer.blendOn(); + + Centre.render(size); + Base.render(size); + Base2.render(size); + Can1B.render(size); + Can1T.render(size); + Can1Side3.render(size); + Can1Side1.render(size); + Can1Side2.render(size); + Can1Side4.render(size); + Can2Side4.render(size); + Can3Side3.render(size); + Can2Side2.render(size); + Can2Side3.render(size); + Can2Side1.render(size); + Can4Side3.render(size); + Can4Side1.render(size); + Can4Sjde4.render(size); + Can4Side2.render(size); + Can3Side4.render(size); + Can4B.render(size); + Can3Side2.render(size); + Can3Side1.render(size); + Can2B.render(size); + Can4T.render(size); + Can2T.render(size); + Can3T.render(size); + Can3B.render(size); + IO1.render(size); + IO2Port.render(size); + IO2.render(size); + IO2Port2.render(size); + Coil1.render(size); + Coil2.render(size); + Coil3.render(size); + Coil4.render(size); + + MekanismRenderer.blendOff(); + } + + 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/ModelChemicalWasher.java b/common/mekanism/client/model/ModelChemicalWasher.java new file mode 100644 index 000000000..a8950cbe9 --- /dev/null +++ b/common/mekanism/client/model/ModelChemicalWasher.java @@ -0,0 +1,300 @@ +package mekanism.client.model; + +import mekanism.client.render.MekanismRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelChemicalWasher extends ModelBase +{ + ModelRenderer Base; + ModelRenderer Base2; + ModelRenderer IO1; + ModelRenderer IO2; + ModelRenderer IO3; + ModelRenderer Base3; + ModelRenderer Base4; + ModelRenderer Base5; + ModelRenderer Base6; + ModelRenderer Can1B; + ModelRenderer Can1T; + ModelRenderer Can1Side3; + ModelRenderer Can1Side1; + ModelRenderer Can1Side2; + ModelRenderer Can1Side4; + ModelRenderer Can2Side4; + ModelRenderer Can3Side3; + ModelRenderer Can2Side2; + ModelRenderer Can2Side3; + ModelRenderer Can2Side1; + ModelRenderer Can4Side3; + ModelRenderer Can4Side1; + ModelRenderer Can4Sjde4; + ModelRenderer Can4Side2; + ModelRenderer Can3Side4; + ModelRenderer Can4B; + ModelRenderer Can3Side2; + ModelRenderer Can3Side1; + ModelRenderer Can2B; + ModelRenderer Can4T; + ModelRenderer Can2T; + ModelRenderer Can3T; + ModelRenderer Can3B; + + public ModelChemicalWasher() + { + textureWidth = 128; + textureHeight = 64; + + Base = new ModelRenderer(this, 16, 0); + Base.addBox(0F, 0F, 0F, 14, 1, 14); + Base.setRotationPoint(-7F, 23F, -7F); + Base.setTextureSize(128, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + Base2 = new ModelRenderer(this, 72, 0); + Base2.addBox(0F, 0F, 0F, 14, 10, 1); + Base2.setRotationPoint(-7F, 8F, 6F); + Base2.setTextureSize(128, 64); + Base2.mirror = true; + setRotation(Base2, 0F, 0F, 0F); + Base2.mirror = false; + IO1 = new ModelRenderer(this, 9, 17); + IO1.addBox(0F, 0F, 0F, 1, 8, 8); + IO1.setRotationPoint(-8F, 12F, -4F); + IO1.setTextureSize(128, 64); + IO1.mirror = true; + setRotation(IO1, 0F, 0F, 0F); + IO2 = new ModelRenderer(this, 9, 17); + IO2.addBox(0F, 0F, 0F, 1, 8, 8); + IO2.setRotationPoint(7F, 12F, -4F); + IO2.setTextureSize(128, 64); + IO2.mirror = true; + setRotation(IO2, 0F, 0F, 0F); + IO3 = new ModelRenderer(this, 0, 42); + IO3.addBox(0F, 0F, 0F, 12, 1, 8); + IO3.setRotationPoint(-6F, 8F, -4F); + IO3.setTextureSize(128, 64); + IO3.mirror = true; + setRotation(IO3, 0F, 0F, 0F); + Base3 = new ModelRenderer(this, 72, 0); + Base3.addBox(0F, 0F, 0F, 14, 10, 1); + Base3.setRotationPoint(-7F, 8F, -7F); + Base3.setTextureSize(128, 64); + Base3.mirror = true; + setRotation(Base3, 0F, 0F, 0F); + Base4 = new ModelRenderer(this, 72, 12); + Base4.addBox(0F, 0F, 0F, 1, 10, 12); + Base4.setRotationPoint(6F, 8F, -6F); + Base4.setTextureSize(128, 64); + Base4.mirror = true; + setRotation(Base4, 0F, 0F, 0F); + Base5 = new ModelRenderer(this, 72, 12); + Base5.addBox(0F, 0F, 0F, 1, 10, 12); + Base5.setRotationPoint(-7F, 8F, -6F); + Base5.setTextureSize(128, 64); + Base5.mirror = true; + setRotation(Base5, 0F, 0F, 0F); + Base6 = new ModelRenderer(this, 16, 0); + Base6.addBox(0F, 0F, 0F, 14, 1, 14); + Base6.setRotationPoint(-7F, 18F, -7F); + Base6.setTextureSize(128, 64); + Base6.mirror = true; + setRotation(Base6, 0F, 0F, 0F); + Can1B = new ModelRenderer(this, 0, 0); + Can1B.addBox(0F, 0F, 0F, 4, 1, 4); + Can1B.setRotationPoint(2F, 22F, 2F); + Can1B.setTextureSize(128, 64); + Can1B.mirror = true; + setRotation(Can1B, 0F, 0F, 0F); + Can1T = new ModelRenderer(this, 0, 0); + Can1T.addBox(0F, 0F, 0F, 4, 1, 4); + Can1T.setRotationPoint(2F, 19F, 2F); + Can1T.setTextureSize(128, 64); + Can1T.mirror = true; + setRotation(Can1T, 0F, 0F, 0F); + Can1Side3 = new ModelRenderer(this, 0, 0); + Can1Side3.addBox(0F, 0F, 0F, 1, 2, 2); + Can1Side3.setRotationPoint(5F, 20F, 3F); + Can1Side3.setTextureSize(128, 64); + Can1Side3.mirror = true; + setRotation(Can1Side3, 0F, 0F, 0F); + Can1Side1 = new ModelRenderer(this, 0, 0); + Can1Side1.addBox(0F, 0F, 0F, 4, 2, 1); + Can1Side1.setRotationPoint(2F, 20F, 5F); + Can1Side1.setTextureSize(128, 64); + Can1Side1.mirror = true; + setRotation(Can1Side1, 0F, 0F, 0F); + Can1Side2 = new ModelRenderer(this, 0, 0); + Can1Side2.addBox(0F, 0F, 0F, 4, 2, 1); + Can1Side2.setRotationPoint(2F, 20F, 2F); + Can1Side2.setTextureSize(128, 64); + Can1Side2.mirror = true; + setRotation(Can1Side2, 0F, 0F, 0F); + Can1Side4 = new ModelRenderer(this, 0, 0); + Can1Side4.addBox(0F, 0F, 0F, 1, 2, 2); + Can1Side4.setRotationPoint(2F, 20F, 3F); + Can1Side4.setTextureSize(128, 64); + Can1Side4.mirror = true; + setRotation(Can1Side4, 0F, 0F, 0F); + Can2Side4 = new ModelRenderer(this, 0, 0); + Can2Side4.addBox(0F, 0F, 0F, 1, 2, 2); + Can2Side4.setRotationPoint(-6F, 20F, 3F); + Can2Side4.setTextureSize(128, 64); + Can2Side4.mirror = true; + setRotation(Can2Side4, 0F, 0F, 0F); + Can3Side3 = new ModelRenderer(this, 0, 0); + Can3Side3.addBox(0F, 0F, 0F, 1, 2, 2); + Can3Side3.setRotationPoint(5F, 20F, -5F); + Can3Side3.setTextureSize(128, 64); + Can3Side3.mirror = true; + setRotation(Can3Side3, 0F, 0F, 0F); + Can2Side2 = new ModelRenderer(this, 0, 0); + Can2Side2.addBox(0F, 0F, 0F, 4, 2, 1); + Can2Side2.setRotationPoint(-6F, 20F, 2F); + Can2Side2.setTextureSize(128, 64); + Can2Side2.mirror = true; + setRotation(Can2Side2, 0F, 0F, 0F); + Can2Side3 = new ModelRenderer(this, 0, 0); + Can2Side3.addBox(0F, 0F, 0F, 1, 2, 2); + Can2Side3.setRotationPoint(-3F, 20F, 3F); + Can2Side3.setTextureSize(128, 64); + Can2Side3.mirror = true; + setRotation(Can2Side3, 0F, 0F, 0F); + Can2Side1 = new ModelRenderer(this, 0, 0); + Can2Side1.addBox(0F, 0F, 0F, 4, 2, 1); + Can2Side1.setRotationPoint(-6F, 20F, 5F); + Can2Side1.setTextureSize(128, 64); + Can2Side1.mirror = true; + setRotation(Can2Side1, 0F, 0F, 0F); + Can4Side3 = new ModelRenderer(this, 0, 0); + Can4Side3.addBox(0F, 0F, 0F, 1, 2, 2); + Can4Side3.setRotationPoint(-3F, 20F, -5F); + Can4Side3.setTextureSize(128, 64); + Can4Side3.mirror = true; + setRotation(Can4Side3, 0F, 0F, 0F); + Can4Side1 = new ModelRenderer(this, 0, 0); + Can4Side1.addBox(0F, 0F, 0F, 4, 2, 1); + Can4Side1.setRotationPoint(-6F, 20F, -3F); + Can4Side1.setTextureSize(128, 64); + Can4Side1.mirror = true; + setRotation(Can4Side1, 0F, 0F, 0F); + Can4Sjde4 = new ModelRenderer(this, 0, 0); + Can4Sjde4.addBox(0F, 0F, 0F, 1, 2, 2); + Can4Sjde4.setRotationPoint(-6F, 20F, -5F); + Can4Sjde4.setTextureSize(128, 64); + Can4Sjde4.mirror = true; + setRotation(Can4Sjde4, 0F, 0F, 0F); + Can4Side2 = new ModelRenderer(this, 0, 0); + Can4Side2.addBox(0F, 0F, 0F, 4, 2, 1); + Can4Side2.setRotationPoint(-6F, 20F, -6F); + Can4Side2.setTextureSize(128, 64); + Can4Side2.mirror = true; + setRotation(Can4Side2, 0F, 0F, 0F); + Can3Side4 = new ModelRenderer(this, 0, 0); + Can3Side4.addBox(0F, 0F, 0F, 1, 2, 2); + Can3Side4.setRotationPoint(2F, 20F, -5F); + Can3Side4.setTextureSize(128, 64); + Can3Side4.mirror = true; + setRotation(Can3Side4, 0F, 0F, 0F); + Can4B = new ModelRenderer(this, 0, 0); + Can4B.addBox(0F, 0F, 0F, 4, 1, 4); + Can4B.setRotationPoint(-6F, 22F, -6F); + Can4B.setTextureSize(128, 64); + Can4B.mirror = true; + setRotation(Can4B, 0F, 0F, 0F); + Can3Side2 = new ModelRenderer(this, 0, 0); + Can3Side2.addBox(0F, 0F, 0F, 4, 2, 1); + Can3Side2.setRotationPoint(2F, 20F, -6F); + Can3Side2.setTextureSize(128, 64); + Can3Side2.mirror = true; + setRotation(Can3Side2, 0F, 0F, 0F); + Can3Side1 = new ModelRenderer(this, 0, 0); + Can3Side1.addBox(0F, 0F, 0F, 4, 2, 1); + Can3Side1.setRotationPoint(2F, 20F, -3F); + Can3Side1.setTextureSize(128, 64); + Can3Side1.mirror = true; + setRotation(Can3Side1, 0F, 0F, 0F); + Can2B = new ModelRenderer(this, 0, 0); + Can2B.addBox(0F, 0F, 0F, 4, 1, 4); + Can2B.setRotationPoint(-6F, 22F, 2F); + Can2B.setTextureSize(128, 64); + Can2B.mirror = true; + setRotation(Can2B, 0F, 0F, 0F); + Can4T = new ModelRenderer(this, 0, 0); + Can4T.addBox(0F, 0F, 0F, 4, 1, 4); + Can4T.setRotationPoint(-6F, 19F, -6F); + Can4T.setTextureSize(128, 64); + Can4T.mirror = true; + setRotation(Can4T, 0F, 0F, 0F); + Can2T = new ModelRenderer(this, 0, 0); + Can2T.addBox(0F, 0F, 0F, 4, 1, 4); + Can2T.setRotationPoint(-6F, 19F, 2F); + Can2T.setTextureSize(128, 64); + Can2T.mirror = true; + setRotation(Can2T, 0F, 0F, 0F); + Can3T = new ModelRenderer(this, 0, 0); + Can3T.addBox(0F, 0F, 0F, 4, 1, 4); + Can3T.setRotationPoint(2F, 19F, -6F); + Can3T.setTextureSize(128, 64); + Can3T.mirror = true; + setRotation(Can3T, 0F, 0F, 0F); + Can3B = new ModelRenderer(this, 0, 0); + Can3B.addBox(0F, 0F, 0F, 4, 1, 4); + Can3B.setRotationPoint(2F, 22F, -6F); + Can3B.setTextureSize(128, 64); + Can3B.mirror = true; + setRotation(Can3B, 0F, 0F, 0F); + } + + public void render(float size) + { + MekanismRenderer.blendOn(); + + Base.render(size); + Base2.render(size); + IO1.render(size); + IO2.render(size); + IO3.render(size); + Base3.render(size); + Base4.render(size); + Base5.render(size); + Base6.render(size); + Can1B.render(size); + Can1T.render(size); + Can1Side3.render(size); + Can1Side1.render(size); + Can1Side2.render(size); + Can1Side4.render(size); + Can2Side4.render(size); + Can3Side3.render(size); + Can2Side2.render(size); + Can2Side3.render(size); + Can2Side1.render(size); + Can4Side3.render(size); + Can4Side1.render(size); + Can4Sjde4.render(size); + Can4Side2.render(size); + Can3Side4.render(size); + Can4B.render(size); + Can3Side2.render(size); + Can3Side1.render(size); + Can2B.render(size); + Can4T.render(size); + Can2T.render(size); + Can3T.render(size); + Can3B.render(size); + + MekanismRenderer.blendOff(); + } + + 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 32edbf6f8..63b81aa3b 100644 --- a/common/mekanism/client/render/block/MachineRenderingHandler.java +++ b/common/mekanism/client/render/block/MachineRenderingHandler.java @@ -1,10 +1,18 @@ package mekanism.client.render.block; -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import mekanism.client.ClientProxy; -import mekanism.client.model.*; +import mekanism.client.model.ModelChargepad; +import mekanism.client.model.ModelChemicalCrystalizer; +import mekanism.client.model.ModelChemicalDissolutionChamber; +import mekanism.client.model.ModelChemicalInfuser; +import mekanism.client.model.ModelChemicalOxidizer; +import mekanism.client.model.ModelChemicalWasher; +import mekanism.client.model.ModelDigitalMiner; +import mekanism.client.model.ModelElectricPump; +import mekanism.client.model.ModelElectrolyticSeparator; +import mekanism.client.model.ModelLogisticalSorter; +import mekanism.client.model.ModelMetallurgicInfuser; +import mekanism.client.model.ModelRotaryCondensentrator; import mekanism.client.render.MekanismRenderer; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.util.MekanismUtils; @@ -13,8 +21,13 @@ import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; + import org.lwjgl.opengl.GL11; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + @SideOnly(Side.CLIENT) public class MachineRenderingHandler implements ISimpleBlockRenderingHandler { @@ -27,7 +40,9 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler public ModelChemicalOxidizer chemicalOxidizer = new ModelChemicalOxidizer(); public ModelChemicalInfuser chemicalInfuser = new ModelChemicalInfuser(); public ModelElectrolyticSeparator electrolyticSeparator = new ModelElectrolyticSeparator(); - + public ModelChemicalDissolutionChamber chemicalDissolutionChamber = new ModelChemicalDissolutionChamber(); + public ModelChemicalWasher chemicalWasher = new ModelChemicalWasher(); + public ModelChemicalCrystalizer chemicalCrystalizer = new ModelChemicalCrystalizer(); @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) @@ -114,6 +129,30 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ElectrolyticSeparator.png")); electrolyticSeparator.render(0.0625F); } + else if(type == MachineType.CHEMICAL_DISSOLUTION_CHAMBER) + { + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.06F, 0.05F); + Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ChemicalDissolutionChamber.png")); + chemicalDissolutionChamber.render(0.0625F); + } + else if(type == MachineType.CHEMICAL_WASHER) + { + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.06F, 0.05F); + Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ChemicalWasher.png")); + chemicalWasher.render(0.0625F); + } + else if(type == MachineType.CHEMICAL_CRYSTALIZER) + { + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.06F, 0.05F); + Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ChemicalCrystalizer.png")); + chemicalCrystalizer.render(0.0625F); + } else { MekanismRenderer.renderItem(renderer, metadata, block); } diff --git a/common/mekanism/client/render/tileentity/RenderChemicalCrystalizer.java b/common/mekanism/client/render/tileentity/RenderChemicalCrystalizer.java new file mode 100644 index 000000000..8ce35ab8e --- /dev/null +++ b/common/mekanism/client/render/tileentity/RenderChemicalCrystalizer.java @@ -0,0 +1,44 @@ +package mekanism.client.render.tileentity; + +import mekanism.client.model.ModelChemicalCrystalizer; +import mekanism.common.tile.TileEntityChemicalCrystalizer; +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; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderChemicalCrystalizer extends TileEntitySpecialRenderer +{ + private ModelChemicalCrystalizer model = new ModelChemicalCrystalizer(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) + { + renderAModelAt((TileEntityChemicalCrystalizer)tileEntity, x, y, z, partialTick); + } + + private void renderAModelAt(TileEntityChemicalCrystalizer 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, "ChemicalCrystalizer.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/RenderChemicalDissolutionChamber.java b/common/mekanism/client/render/tileentity/RenderChemicalDissolutionChamber.java new file mode 100644 index 000000000..9d9ceb2ae --- /dev/null +++ b/common/mekanism/client/render/tileentity/RenderChemicalDissolutionChamber.java @@ -0,0 +1,44 @@ +package mekanism.client.render.tileentity; + +import mekanism.client.model.ModelChemicalDissolutionChamber; +import mekanism.common.tile.TileEntityChemicalDissolutionChamber; +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; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderChemicalDissolutionChamber extends TileEntitySpecialRenderer +{ + private ModelChemicalDissolutionChamber model = new ModelChemicalDissolutionChamber(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) + { + renderAModelAt((TileEntityChemicalDissolutionChamber)tileEntity, x, y, z, partialTick); + } + + private void renderAModelAt(TileEntityChemicalDissolutionChamber 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, "ChemicalDissolutionChamber.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/RenderChemicalWasher.java b/common/mekanism/client/render/tileentity/RenderChemicalWasher.java new file mode 100644 index 000000000..89a16cf9f --- /dev/null +++ b/common/mekanism/client/render/tileentity/RenderChemicalWasher.java @@ -0,0 +1,40 @@ +package mekanism.client.render.tileentity; + +import mekanism.client.model.ModelChemicalWasher; +import mekanism.common.tile.TileEntityChemicalWasher; +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 RenderChemicalWasher extends TileEntitySpecialRenderer +{ + private ModelChemicalWasher model = new ModelChemicalWasher(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) + { + renderAModelAt((TileEntityChemicalWasher)tileEntity, x, y, z, partialTick); + } + + private void renderAModelAt(TileEntityChemicalWasher 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, "ChemicalWasher.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/common/CommonProxy.java b/common/mekanism/common/CommonProxy.java index 12be3a848..effb0cf36 100644 --- a/common/mekanism/common/CommonProxy.java +++ b/common/mekanism/common/CommonProxy.java @@ -33,9 +33,12 @@ import mekanism.common.tile.TileEntityAdvancedFactory; import mekanism.common.tile.TileEntityBin; import mekanism.common.tile.TileEntityChanceMachine; import mekanism.common.tile.TileEntityChargepad; +import mekanism.common.tile.TileEntityChemicalCrystalizer; +import mekanism.common.tile.TileEntityChemicalDissolutionChamber; import mekanism.common.tile.TileEntityChemicalInfuser; import mekanism.common.tile.TileEntityChemicalInjectionChamber; import mekanism.common.tile.TileEntityChemicalOxidizer; +import mekanism.common.tile.TileEntityChemicalWasher; import mekanism.common.tile.TileEntityCombiner; import mekanism.common.tile.TileEntityContainerBlock; import mekanism.common.tile.TileEntityCrusher; @@ -118,6 +121,9 @@ public class CommonProxy GameRegistry.registerTileEntity(TileEntitySalinationValve.class, "SalinationValve"); GameRegistry.registerTileEntity(TileEntitySalinationTank.class, "SalinationTank"); GameRegistry.registerTileEntity(TileEntityPrecisionSawmill.class, "PrecisionSawmill"); + GameRegistry.registerTileEntity(TileEntityChemicalDissolutionChamber.class, "ChemicalDissolutionChamber"); + GameRegistry.registerTileEntity(TileEntityChemicalWasher.class, "ChemicalWasher"); + GameRegistry.registerTileEntity(TileEntityChemicalCrystalizer.class, "ChemicalCrystalizer"); } /** @@ -229,6 +235,9 @@ public class CommonProxy Mekanism.chemicalInjectionChamberUsage = Mekanism.configuration.get("usage", "ChemicalInjectionChamberUsage", 400D).getDouble(400D); Mekanism.electrolyticSeparatorUsage = Mekanism.configuration.get("usage", "ElectrolyticSeparatorUsage", 50D).getDouble(50D); Mekanism.precisionSawmillUsage = Mekanism.configuration.get("usage", "PrecisionSawmillUsage", 50D).getDouble(50D); + Mekanism.chemicalDissolutionChamberUsage = Mekanism.configuration.get("usage", "ChemicalDissolutionChamberUsage", 400D).getDouble(400D); + Mekanism.chemicalWasherUsage = Mekanism.configuration.get("usage", "ChemicalWasherUsage", 200D).getDouble(200D); + Mekanism.chemicalCrystalizerUsage = Mekanism.configuration.get("usage", "ChemicalCrystalizerUsage", 400D).getDouble(400D); Mekanism.configuration.save(); } diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index efb1d221f..86d061a33 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -323,6 +323,9 @@ public class Mekanism public static double chemicalInjectionChamberUsage; public static double electrolyticSeparatorUsage; public static double precisionSawmillUsage; + public static double chemicalDissolutionChamberUsage; + public static double chemicalWasherUsage; + public static double chemicalCrystalizerUsage; /** * Adds all in-game crafting and smelting recipes. diff --git a/common/mekanism/common/block/BlockMachine.java b/common/mekanism/common/block/BlockMachine.java index 60f209a04..292611568 100644 --- a/common/mekanism/common/block/BlockMachine.java +++ b/common/mekanism/common/block/BlockMachine.java @@ -29,9 +29,12 @@ import mekanism.common.network.PacketLogisticalSorterGui.SorterGuiPacket; import mekanism.common.tile.TileEntityAdvancedFactory; import mekanism.common.tile.TileEntityBasicBlock; import mekanism.common.tile.TileEntityChargepad; +import mekanism.common.tile.TileEntityChemicalCrystalizer; +import mekanism.common.tile.TileEntityChemicalDissolutionChamber; import mekanism.common.tile.TileEntityChemicalInfuser; import mekanism.common.tile.TileEntityChemicalInjectionChamber; import mekanism.common.tile.TileEntityChemicalOxidizer; +import mekanism.common.tile.TileEntityChemicalWasher; import mekanism.common.tile.TileEntityCombiner; import mekanism.common.tile.TileEntityContainerBlock; import mekanism.common.tile.TileEntityCrusher; @@ -104,6 +107,9 @@ import cpw.mods.fml.relauncher.SideOnly; * 1:3: Chemical Injection Chamber * 1:4: Electrolytic Separator * 1:5: Precision Sawmill + * 1:6: Chemical Dissolution Chamber + * 1:7: Chemical Washer + * 1:8: Chemical Crystalizer * @author AidanBrady * */ @@ -1093,7 +1099,10 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds CHEMICAL_INFUSER(Mekanism.machineBlock2ID, 2, "ChemicalInfuser", 30, 20000, TileEntityChemicalInfuser.class, true, false), CHEMICAL_INJECTION_CHAMBER(Mekanism.machineBlock2ID, 3, "ChemicalInjectionChamber", 31, Mekanism.chemicalInjectionChamberUsage*400, TileEntityChemicalInjectionChamber.class, false, true), ELECTROLYTIC_SEPARATOR(Mekanism.machineBlock2ID, 4, "ElectrolyticSeparator", 32, 20000, TileEntityElectrolyticSeparator.class, true, false), - PRECISION_SAWMILL(Mekanism.machineBlock2ID, 5, "PrecisionSawmill", 34, Mekanism.precisionSawmillUsage*400, TileEntityPrecisionSawmill.class, false, true); + PRECISION_SAWMILL(Mekanism.machineBlock2ID, 5, "PrecisionSawmill", 34, Mekanism.precisionSawmillUsage*400, TileEntityPrecisionSawmill.class, false, true), + CHEMICAL_DISSOLUTION_CHAMBER(Mekanism.machineBlock2ID, 6, "ChemicalDissolutionChamber", -1, 20000, TileEntityChemicalDissolutionChamber.class, true, false), + CHEMICAL_WASHER(Mekanism.machineBlock2ID, 7, "ChemicalWasher", -1, 20000, TileEntityChemicalWasher.class, true, false), + CHEMICAL_CRYSTALIZER(Mekanism.machineBlock2ID, 8, "ChemicalCrystalizer", -1, 20000, TileEntityChemicalCrystalizer.class, true, false); public int typeId; public int meta; diff --git a/common/mekanism/common/item/ItemBlockMachine.java b/common/mekanism/common/item/ItemBlockMachine.java index 6ef768f34..486cd09df 100644 --- a/common/mekanism/common/item/ItemBlockMachine.java +++ b/common/mekanism/common/item/ItemBlockMachine.java @@ -76,6 +76,9 @@ import cpw.mods.fml.relauncher.SideOnly; * 1:3: Chemical Injection Chamber * 1:4: Electrolytic Separator * 1:5: Precision Sawmill + * 1:6: Chemical Dissolution Chamber + * 1:7: Chemical Washer + * 1:8: Chemical Crystalizer * @author AidanBrady * */ diff --git a/common/mekanism/common/network/PacketConfigSync.java b/common/mekanism/common/network/PacketConfigSync.java index fef2ef7e6..70d21a688 100644 --- a/common/mekanism/common/network/PacketConfigSync.java +++ b/common/mekanism/common/network/PacketConfigSync.java @@ -70,6 +70,9 @@ public class PacketConfigSync implements IMekanismPacket Mekanism.chemicalInjectionChamberUsage = dataStream.readDouble(); Mekanism.electrolyticSeparatorUsage = dataStream.readDouble(); Mekanism.precisionSawmillUsage = dataStream.readDouble(); + Mekanism.chemicalDissolutionChamberUsage = dataStream.readDouble(); + Mekanism.chemicalWasherUsage = dataStream.readDouble(); + Mekanism.chemicalCrystalizerUsage = dataStream.readDouble(); for(IModule module : Mekanism.modulesLoaded) { @@ -123,6 +126,9 @@ public class PacketConfigSync implements IMekanismPacket dataStream.writeDouble(Mekanism.chemicalInjectionChamberUsage); dataStream.writeDouble(Mekanism.electrolyticSeparatorUsage); dataStream.writeDouble(Mekanism.precisionSawmillUsage); + dataStream.writeDouble(Mekanism.chemicalDissolutionChamberUsage); + dataStream.writeDouble(Mekanism.chemicalWasherUsage); + dataStream.writeDouble(Mekanism.chemicalCrystalizerUsage); for(IModule module : Mekanism.modulesLoaded) { diff --git a/common/mekanism/common/tile/TileEntityChemicalCrystalizer.java b/common/mekanism/common/tile/TileEntityChemicalCrystalizer.java new file mode 100644 index 000000000..f3b49ff96 --- /dev/null +++ b/common/mekanism/common/tile/TileEntityChemicalCrystalizer.java @@ -0,0 +1,14 @@ +package mekanism.common.tile; + +import mekanism.common.block.BlockMachine.MachineType; +import net.minecraft.item.ItemStack; + +public class TileEntityChemicalCrystalizer extends TileEntityElectricBlock +{ + public TileEntityChemicalCrystalizer() + { + super("ChemicalCrystalizer", MachineType.CHEMICAL_CRYSTALIZER.baseEnergy); + + inventory = new ItemStack[3]; + } +} diff --git a/common/mekanism/common/tile/TileEntityChemicalDissolutionChamber.java b/common/mekanism/common/tile/TileEntityChemicalDissolutionChamber.java new file mode 100644 index 000000000..45c94ff63 --- /dev/null +++ b/common/mekanism/common/tile/TileEntityChemicalDissolutionChamber.java @@ -0,0 +1,14 @@ +package mekanism.common.tile; + +import mekanism.common.block.BlockMachine.MachineType; +import net.minecraft.item.ItemStack; + +public class TileEntityChemicalDissolutionChamber extends TileEntityElectricBlock +{ + public TileEntityChemicalDissolutionChamber() + { + super("ChemicalDissolutionChamber", MachineType.CHEMICAL_DISSOLUTION_CHAMBER.baseEnergy); + + inventory = new ItemStack[4]; + } +} diff --git a/common/mekanism/common/tile/TileEntityChemicalWasher.java b/common/mekanism/common/tile/TileEntityChemicalWasher.java new file mode 100644 index 000000000..f4afe5fe0 --- /dev/null +++ b/common/mekanism/common/tile/TileEntityChemicalWasher.java @@ -0,0 +1,14 @@ +package mekanism.common.tile; + +import mekanism.common.block.BlockMachine.MachineType; +import net.minecraft.item.ItemStack; + +public class TileEntityChemicalWasher extends TileEntityElectricBlock +{ + public TileEntityChemicalWasher() + { + super("ChemicalWasher", MachineType.CHEMICAL_WASHER.baseEnergy); + + inventory = new ItemStack[3]; + } +} diff --git a/resources/assets/mekanism/gui/GuiChemicalRecrystalizationChamber.png b/resources/assets/mekanism/gui/GuiChemicalCrystalizer.png similarity index 100% rename from resources/assets/mekanism/gui/GuiChemicalRecrystalizationChamber.png rename to resources/assets/mekanism/gui/GuiChemicalCrystalizer.png diff --git a/resources/assets/mekanism/lang/en_US.lang b/resources/assets/mekanism/lang/en_US.lang index 8d1df6fab..bef18987a 100644 --- a/resources/assets/mekanism/lang/en_US.lang +++ b/resources/assets/mekanism/lang/en_US.lang @@ -85,6 +85,9 @@ tile.MachineBlock2.ChemicalCombiner.name=Chemical Combiner tile.MachineBlock2.ChemicalInjectionChamber.name=Chemical Injection Chamber tile.MachineBlock2.ElectrolyticSeparator.name=Electrolytic Separator tile.MachineBlock2.PrecisionSawmill.name=Precision Sawmill +tile.MachineBlock2.ChemicalDissolutionChamber.name=Chemical Dissolution Chamber +tile.MachineBlock2.ChemicalWasher.name=Chemical Washer +tile.MachineBlock2.ChemicalCrystalizer.name=Chemical Crystalizer //Infuse types infuse.carbon=Carbon diff --git a/resources/assets/mekanism/render/ChemicalCrystalizer.png b/resources/assets/mekanism/render/ChemicalCrystalizer.png new file mode 100644 index 0000000000000000000000000000000000000000..ed9fad844248465f8dd873fb352e78a8bb0bcfa9 GIT binary patch literal 5024 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 Bk-h)` literal 0 HcmV?d00001 diff --git a/resources/assets/mekanism/render/ChemicalWasher.png b/resources/assets/mekanism/render/ChemicalWasher.png new file mode 100644 index 0000000000000000000000000000000000000000..93c84aa42c6b52ffa69262906a913259aa0c268a GIT binary patch literal 4516 zcmbVQc|4R0+a4J)RLmgf*v6VIyow={eZ(lc%w*rnP7-m9HOdg9X{78-mX7Sknk8AX zWXm#9iOG@-#vbA$>YVSt@BRLm`OQ4@-1mK5_jO&*^ZW*DWT11BnVT5^0GveXB1`}P zy8VxUFs9@C?_Wq&2R{IvHS{$AfKnXGjy=QvchF7UYrX)$spf+h9jCZn*#1H8+uG>c zrrtMh-?6`S9bjbd>UCSjK-)~f|GbQXjGUa#il!m}02V+ZG|U2QsA-q;ZBU%;YHY?} zu*Fw6omlqWco9!LtV6%LULT6o6@ew1v`S89qQU)>>Kr5`lO<4u_-uDLQ%p4L-{Q0C zMyaz+j24j*;y_|%NqwW?E>x;O>gx~wpp2j%o4e4U4ARE6pyKk8z4?{2pv61R<-JLY zr;rlYhw*ib4Ru%kgnCP5*IWTX7tLmuk1zFUvAzxb9M0JJV`JRbAVanO^D9PZDp6HA zH*QxF8nQXTwfayk>x*&YY0CEi%Pe$W4DOEP?I8MuH|p6fXC4YxpLg!*_H=7pY}lT@ zc@{i?I+nkFwX$pBY#~!E+B_gg5Wu`=gbr4@*J^fxPm`WDnl>% z@qS--;veCEs2iS1E}uR*M|2$Jzxksu797 zw{D;!DtUX`EqPk2^-_zsTgE%FvNkrUN1mG<30fbJSsp$E`%OO-4da~c;FHrd`8M% zoWXOo95m{7SXk!MlfHR9@cs6l#i@&?ou#sgITT(ut9?yCai*6*uba#ARqY8UV00d~ zqd?dgVXxJq2}reWGiM=1sUYv*3mKQjR(u3=Ez!m2)U}tmHqC zSCc|8ZcaFBVa3AY$*vJhI02EPnm(MO!M%y^8F!82L%%mpeOYj(jfCvz1%COq7b=&h6#QV>vE4)EK+4EAiPu7I_DF7N znN2>eSR7NL9bry*RyaeQF9lLDb=cnML^5%@;KDNP`g#klb6$E}x_o2D3l*Kz)und3 z=EL`=CN{Ly@veSD6}84Q5Fu6I487;S_M!I&=n9J`S2{zLC-2HYystVaH!@2_x%Z4q z0S)t#Wc(mA(6ynt$8VjyaVKi??Z=OsjMvu(7rQQh+P12haNIjvF1BZ6v)8?XN-OsD zz|JRWn?rA%fUPFswPus-4jn}X~RskNk> zNP8|@zfo~f-Oh67-k!^&vjvfTfvdzglaN^=(DOn%t_l_desX`>m7&AR&(zc^#&Y&z z7J1N6mFmam@SAc)tb2d6Ww?aTOY;2pU0%I;J)?NbxP7m_ov2%|Xn9_99)%!&cSvHB z@Wdq7-GB1ck@Co}jr&)G?rEC|k+m7;EHDDDVaiBH_WQLxN!F@UhDXtT!A4D`o4Cf2 zH(gXaX~J81k^}BJ_@{gR!FBB?jfdLPMW-wm%(c;CVG1aF1gZ^edfA@Z3CAf)s%Gq$#N$uw;>Dcv8h z;=KUU?JKl+K5MOsu}5o6ai;e~G|`acNCrq2r;sN5d_{DeHJRCDw*;huui6(7?tlAa zl(*rq@V+Q`Cc10J7J?B#7Y0{``{brdI@KWqYvkDe)J1Z?0!M?&wS&rN_~j+b|iK~*u;AAEaNR!rI(a7wqnyh;7G_G+Y`sPh^I2Kg1QkloeDtSeFa zJ+F&ra%ql7b!am@m0apL)q-We?(Xhx)41^|hzqMHG{Bg$#jh5Eu^A}(k{O>CQU=2F z!O;)ND;u5UX-oFT^pxDSfO;^u?cRvXzS__;i%wQ8hU>`D8E;VAx_aZ;ZWP)l0gk=CWK zb1tr}vb`a6;B+DOaEjn(#j%QQ(+w&~;Q1<#pWeBk`E4=J{$!@{^cOlVyb-=LJ5mh>}@Z^UV4)N?tLmFssTTupo$?#EVZq1fglq%taKU@eq%GJF zb=6v$CE{du-$d1V7c(GRg&Tv9mHcl60q=ypZ9V|C zEX*v9XRW~j6QOlQtCKs-P>I)Uiu%Am_ce z63v)K8-P~1jR*Z|r<<$9_Wgc8bNZxR@k_ETIdGXzBY2*ayZTcnLG{(Y7)v^M)X#Y> zA2&K!Ht7?c2<417zz-CsB|zIBGH)o-H+puP=5ZB+F%^?PrLo8&XO5PtKRY!gA*;(E zYY+|_DqS&29N5+3AicW>{Xu9QaNvcG4}#(fnpz!aKE1yXJY>)#$CYloP!m9NsJZ>s zumqmF4La@ATM}c=!UEx4;Y<*_HP6mTAb&4qjP+d-#N) z50%8jf{@I*)=%e|dRL%cT%zzlmT?qHigK0@CmUaL95Co}Q+Q1rEFr+P@yGhujM^5Z zpC5V%g|1)M1#$*nBwa|J)%sY4OofP}?JK#D(4!}sWp_7|ZY_O&Rr4RxWz%MT#gFn_ z(gJopLmPA+owy8J6GnuvhM+viq^@YGxgs0bGlPcdNp+i3HaBw(T&x&CN!AwGiP56y zzIc78-slC?IAe)~T1W_zPvi=JujrNf2P@gnS`4s!JTrPv2y>U~IByjA{1mS!LbXm9 zO(jR0O)^MXkc@?_f}u^hJDcA{{nX_l_?BE{A>ezFD|1X}&5G=2MXKgc3fpKj{j|Pn zW-APcOHS{}{4jxOIL5pVHd_v#94A248lRntzNAU4D0v(mXX5Y(9f;Y;9=uRN>18e- zI@&zlgrJqb2MFIgyY9o6g7CzNVn6}xKbNihBpT~3%f{;u%!Ab@JX#Xb&9n{?G5Qx- z{(7*C=Af58R$bI2Q)c3CCqcGi{t3m2_FmcN^w}B+rZ|X*e8L;E8DDs?=oM=Bob$Hj zKg(WPJ~^S689mUD`N%~WeFAZ0HjU=Nh1fUh@cH%ib;D*aEli{l=&D}Z^H|%3iIk{4qE5EFtGGZne3>;>L!JxH*9&p7;*43 z{tk`i)og;xkdEpSb)0UH`xkM@=ONVTG6MmZ?nfeD@Af?rK|&+jM37qo@@J3(j9GF>yed;162Gdkf5Z4c zpK5h{Z;H7I?@znzF z)hTq&7UEbTb-ewNhzgiHi4H6%&R-e`Oi~xNUrzi)cA>`-{2M-{_)h6GxNUFHM39D& zZP%;Q)x-BbzrM3BtWIqsG==`qP7N~>4j*1$q#*I>OmSUd(VHQDQj)+!rLYE$+ArsF2NKY2K0FK%!HN6@h3cXPk&-@cI=OK= zfpdgZDK$ut=bmc1$X9G%^@-@{s@3RDW2PRaO?c;r>yd<7U~N9R_{8+(X4M1saz;vJLUy mSnj`Y=l|nW6{8z_^x5+7GXqwJpYH#o0zhgTAc{2YBK`-^$)_Fw literal 0 HcmV?d00001