From 419a2950969770fd08d4f93e536de6aaf92633d9 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Wed, 27 Nov 2013 18:17:44 -0500 Subject: [PATCH] Work on Rotary Condensentrator, fix IC2 energy integration (mostly) --- common/mekanism/client/ClientProxy.java | 5 + .../model/ModelRotaryCondensentrator.java | 229 ++++++++++++++++++ .../render/block/MachineRenderingHandler.java | 10 + .../RenderRotaryCondensentrator.java | 44 ++++ common/mekanism/common/CommonProxy.java | 4 +- common/mekanism/common/EnergyNetwork.java | 13 +- common/mekanism/common/Mekanism.java | 4 + .../mekanism/common/block/BlockMachine.java | 5 +- .../ContainerRotaryCondensentrator.java | 126 ++++++++++ .../common/item/ItemBlockMachine.java | 4 +- .../tileentity/TileEntityElectricBlock.java | 23 +- .../TileEntityRotaryCondensentrator.java | 9 +- .../tileentity/TileEntityUniversalCable.java | 7 +- .../assets/mekanism/gui/GuiElectricPump.png | Bin 4325 -> 3932 bytes resources/assets/mekanism/gui/GuiGasTank.png | Bin 3982 -> 3600 bytes .../mekanism/gui/GuiMetallurgicInfuser.png | Bin 4467 -> 4070 bytes .../mekanism/gui/GuiRotaryCondensentrator.png | Bin 4550 -> 4305 bytes resources/assets/mekanism/lang/en_US.lang | 3 + .../mekanism/render/RotaryCondensentrator.png | Bin 0 -> 3702 bytes 19 files changed, 452 insertions(+), 34 deletions(-) create mode 100644 common/mekanism/client/model/ModelRotaryCondensentrator.java create mode 100644 common/mekanism/client/render/tileentity/RenderRotaryCondensentrator.java create mode 100644 common/mekanism/common/inventory/container/ContainerRotaryCondensentrator.java create mode 100644 resources/assets/mekanism/render/RotaryCondensentrator.png diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index 1c06d0172..a36828231 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -53,6 +53,7 @@ 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.RenderRotaryCondensentrator; import mekanism.client.render.tileentity.RenderUniversalCable; import mekanism.client.sound.Sound; import mekanism.client.sound.SoundHandler; @@ -91,6 +92,7 @@ import mekanism.common.tileentity.TileEntityObsidianTNT; import mekanism.common.tileentity.TileEntityOsmiumCompressor; import mekanism.common.tileentity.TileEntityPressurizedTube; import mekanism.common.tileentity.TileEntityPurificationChamber; +import mekanism.common.tileentity.TileEntityRotaryCondensentrator; import mekanism.common.tileentity.TileEntityTeleporter; import mekanism.common.tileentity.TileEntityUniversalCable; import net.minecraft.client.Minecraft; @@ -251,6 +253,7 @@ public class ClientProxy extends CommonProxy ClientRegistry.registerTileEntity(TileEntityLogisticalSorter.class, "LogisticalSorter", new RenderLogisticalSorter()); ClientRegistry.registerTileEntity(TileEntityBin.class, "Bin", new RenderBin()); ClientRegistry.registerTileEntity(TileEntityDigitalMiner.class, "DigitalMiner", new RenderDigitalMiner()); + ClientRegistry.registerTileEntity(TileEntityRotaryCondensentrator.class, "RotaryCondensentrator", new RenderRotaryCondensentrator()); } @Override @@ -299,6 +302,8 @@ public class ClientProxy extends CommonProxy return new GuiCombiner(player.inventory, (TileEntityAdvancedElectricMachine)tileEntity); case 6: return new GuiCrusher(player.inventory, (TileEntityElectricMachine)tileEntity); + case 7: + //return new GuiRotaryCondensentrator(player.inventory, (TileEntityRotaryCondensentrator)tileEntity); TODO case 8: return new GuiEnergyCube(player.inventory, (TileEntityEnergyCube)tileEntity); case 9: diff --git a/common/mekanism/client/model/ModelRotaryCondensentrator.java b/common/mekanism/client/model/ModelRotaryCondensentrator.java new file mode 100644 index 000000000..c52693ee9 --- /dev/null +++ b/common/mekanism/client/model/ModelRotaryCondensentrator.java @@ -0,0 +1,229 @@ +package mekanism.client.model; + +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 ModelRotaryCondensentrator extends ModelBase +{ + ModelRenderer GasBottleLid1; + ModelRenderer GasBottleLid2; + ModelRenderer GasBottleDecor1; + ModelRenderer GasBottleDecor2; + ModelRenderer GasBottleDecor3; + ModelRenderer GasBottleDecor4; + ModelRenderer GasBottle1; + ModelRenderer GasBottle2; + ModelRenderer GasBottleBot1; + ModelRenderer GasBottleBot2; + ModelRenderer LiqBottleLid1; + ModelRenderer LiqBottleLid2; + ModelRenderer LiqBottleBot1; + ModelRenderer LiqBottleBot2; + ModelRenderer LiqBottle2; + ModelRenderer LiqBottle1; + ModelRenderer LiqBottleDecor1; + ModelRenderer LiqBottleDecor2; + ModelRenderer LiqBottleDecor3; + ModelRenderer LiqBottleDecor4; + ModelRenderer GasInput; + ModelRenderer MidSection1; + ModelRenderer MidSection2; + ModelRenderer LiquidOutput; + ModelRenderer MidSection3; + + public ModelRotaryCondensentrator() + { + textureWidth = 128; + textureHeight = 128; + + GasBottleLid1 = new ModelRenderer(this, 0, 40); + GasBottleLid1.addBox(0F, 0F, 0F, 6, 1, 6); + GasBottleLid1.setRotationPoint(-7F, 11F, 1F); + GasBottleLid1.setTextureSize(128, 128); + GasBottleLid1.mirror = true; + setRotation(GasBottleLid1, 0F, 0F, 0F); + GasBottleLid2 = new ModelRenderer(this, 0, 40); + GasBottleLid2.addBox(0F, 0F, 0F, 6, 1, 6); + GasBottleLid2.setRotationPoint(1F, 11F, 1F); + GasBottleLid2.setTextureSize(128, 128); + GasBottleLid2.mirror = true; + setRotation(GasBottleLid2, 0F, 0F, 0F); + GasBottleDecor1 = new ModelRenderer(this, 0, 33); + GasBottleDecor1.addBox(0F, 0F, 0F, 5, 1, 5); + GasBottleDecor1.setRotationPoint(1.5F, 21F, 1.5F); + GasBottleDecor1.setTextureSize(128, 128); + GasBottleDecor1.mirror = true; + setRotation(GasBottleDecor1, 0F, 0F, 0F); + GasBottleDecor2 = new ModelRenderer(this, 0, 33); + GasBottleDecor2.addBox(0F, 0F, 0F, 5, 1, 5); + GasBottleDecor2.setRotationPoint(1.5F, 13F, 1.5F); + GasBottleDecor2.setTextureSize(128, 128); + GasBottleDecor2.mirror = true; + setRotation(GasBottleDecor2, 0F, 0F, 0F); + GasBottleDecor3 = new ModelRenderer(this, 0, 33); + GasBottleDecor3.addBox(0F, 0F, 0F, 5, 1, 5); + GasBottleDecor3.setRotationPoint(-6.5F, 21F, 1.5F); + GasBottleDecor3.setTextureSize(128, 128); + GasBottleDecor3.mirror = true; + setRotation(GasBottleDecor3, 0F, 0F, 0F); + GasBottleDecor4 = new ModelRenderer(this, 0, 33); + GasBottleDecor4.addBox(0F, 0F, 0F, 5, 1, 5); + GasBottleDecor4.setRotationPoint(-6.5F, 13F, 1.5F); + GasBottleDecor4.setTextureSize(128, 128); + GasBottleDecor4.mirror = true; + setRotation(GasBottleDecor4, 0F, 0F, 0F); + GasBottle1 = new ModelRenderer(this, 0, 48); + GasBottle1.addBox(0F, 0F, 0F, 4, 11, 4); + GasBottle1.setRotationPoint(-6F, 12F, 2F); + GasBottle1.setTextureSize(128, 128); + GasBottle1.mirror = true; + setRotation(GasBottle1, 0F, 0F, 0F); + GasBottle2 = new ModelRenderer(this, 0, 48); + GasBottle2.addBox(0F, 0F, 0F, 4, 11, 4); + GasBottle2.setRotationPoint(2F, 12F, 2F); + GasBottle2.setTextureSize(128, 128); + GasBottle2.mirror = true; + setRotation(GasBottle2, 0F, 0F, 0F); + GasBottleBot1 = new ModelRenderer(this, 0, 40); + GasBottleBot1.addBox(0F, 0F, 0F, 6, 1, 6); + GasBottleBot1.setRotationPoint(-7F, 23F, 1F); + GasBottleBot1.setTextureSize(128, 128); + GasBottleBot1.mirror = true; + setRotation(GasBottleBot1, 0F, 0F, 0F); + GasBottleBot2 = new ModelRenderer(this, 0, 40); + GasBottleBot2.addBox(0F, 0F, 0F, 6, 1, 6); + GasBottleBot2.setRotationPoint(1F, 23F, 1F); + GasBottleBot2.setTextureSize(128, 128); + GasBottleBot2.mirror = true; + setRotation(GasBottleBot2, 0F, 0F, 0F); + LiqBottleLid1 = new ModelRenderer(this, 25, 40); + LiqBottleLid1.addBox(0F, 0F, 0F, 6, 1, 6); + LiqBottleLid1.setRotationPoint(-7F, 11F, -7F); + LiqBottleLid1.setTextureSize(128, 128); + LiqBottleLid1.mirror = true; + setRotation(LiqBottleLid1, 0F, 0F, 0F); + LiqBottleLid2 = new ModelRenderer(this, 25, 40); + LiqBottleLid2.addBox(0F, 0F, 0F, 6, 1, 6); + LiqBottleLid2.setRotationPoint(1F, 11F, -7F); + LiqBottleLid2.setTextureSize(128, 128); + LiqBottleLid2.mirror = true; + setRotation(LiqBottleLid2, 0F, 0F, 0F); + LiqBottleBot1 = new ModelRenderer(this, 25, 40); + LiqBottleBot1.addBox(0F, 0F, 0F, 6, 1, 6); + LiqBottleBot1.setRotationPoint(-7F, 23F, -7F); + LiqBottleBot1.setTextureSize(128, 128); + LiqBottleBot1.mirror = true; + setRotation(LiqBottleBot1, 0F, 0F, 0F); + LiqBottleBot2 = new ModelRenderer(this, 25, 40); + LiqBottleBot2.addBox(0F, 0F, 0F, 6, 1, 6); + LiqBottleBot2.setRotationPoint(1F, 23F, -7F); + LiqBottleBot2.setTextureSize(128, 128); + LiqBottleBot2.mirror = true; + setRotation(LiqBottleBot2, 0F, 0F, 0F); + LiqBottle2 = new ModelRenderer(this, 25, 48); + LiqBottle2.addBox(0F, 0F, 0F, 4, 11, 4); + LiqBottle2.setRotationPoint(2F, 12F, -6F); + LiqBottle2.setTextureSize(128, 128); + LiqBottle2.mirror = true; + setRotation(LiqBottle2, 0F, 0F, 0F); + LiqBottle1 = new ModelRenderer(this, 25, 48); + LiqBottle1.addBox(0F, 0F, 0F, 4, 11, 4); + LiqBottle1.setRotationPoint(-6F, 12F, -6F); + LiqBottle1.setTextureSize(128, 128); + LiqBottle1.mirror = true; + setRotation(LiqBottle1, 0F, 0F, 0F); + LiqBottleDecor1 = new ModelRenderer(this, 25, 33); + LiqBottleDecor1.addBox(0F, 0F, 0F, 5, 1, 5); + LiqBottleDecor1.setRotationPoint(1.5F, 21F, -6.5F); + LiqBottleDecor1.setTextureSize(128, 128); + LiqBottleDecor1.mirror = true; + setRotation(LiqBottleDecor1, 0F, 0F, 0F); + LiqBottleDecor2 = new ModelRenderer(this, 25, 33); + LiqBottleDecor2.addBox(0F, 0F, 0F, 5, 1, 5); + LiqBottleDecor2.setRotationPoint(1.5F, 13F, -6.5F); + LiqBottleDecor2.setTextureSize(128, 128); + LiqBottleDecor2.mirror = true; + setRotation(LiqBottleDecor2, 0F, 0F, 0F); + LiqBottleDecor3 = new ModelRenderer(this, 25, 33); + LiqBottleDecor3.addBox(0F, 0F, 0F, 5, 1, 5); + LiqBottleDecor3.setRotationPoint(-6.5F, 21F, -6.5F); + LiqBottleDecor3.setTextureSize(128, 128); + LiqBottleDecor3.mirror = true; + setRotation(LiqBottleDecor3, 0F, 0F, 0F); + LiqBottleDecor4 = new ModelRenderer(this, 25, 33); + LiqBottleDecor4.addBox(0F, 0F, 0F, 5, 1, 5); + LiqBottleDecor4.setRotationPoint(-6.5F, 13F, -6.5F); + LiqBottleDecor4.setTextureSize(128, 128); + LiqBottleDecor4.mirror = true; + setRotation(LiqBottleDecor4, 0F, 0F, 0F); + GasInput = new ModelRenderer(this, 0, 24); + GasInput.addBox(0F, 0F, 0F, 6, 6, 1); + GasInput.setRotationPoint(-3F, 13F, 7F); + GasInput.setTextureSize(128, 128); + GasInput.mirror = true; + setRotation(GasInput, 0F, 0F, 0F); + MidSection1 = new ModelRenderer(this, 15, 20); + MidSection1.addBox(0F, 0F, 0F, 4, 5, 6); + MidSection1.setRotationPoint(-2F, 18F, 1F); + MidSection1.setTextureSize(128, 128); + MidSection1.mirror = true; + setRotation(MidSection1, 0F, 0F, 0F); + MidSection2 = new ModelRenderer(this, 37, 0); + MidSection2.addBox(0F, 0F, 0F, 6, 7, 8); + MidSection2.setRotationPoint(-3F, 17F, -7F); + MidSection2.setTextureSize(128, 128); + MidSection2.mirror = true; + setRotation(MidSection2, 0F, 0F, 0F); + LiquidOutput = new ModelRenderer(this, 36, 22); + LiquidOutput.addBox(0F, 0F, 0F, 8, 8, 1); + LiquidOutput.setRotationPoint(-4F, 12F, -8F); + LiquidOutput.setTextureSize(128, 128); + LiquidOutput.mirror = true; + setRotation(LiquidOutput, 0F, 0F, 0F); + MidSection3 = new ModelRenderer(this, 0, 0); + MidSection3.addBox(0F, 0F, 0F, 4, 2, 14); + MidSection3.setRotationPoint(-2F, 15F, -7F); + MidSection3.setTextureSize(128, 128); + MidSection3.mirror = true; + setRotation(MidSection3, 0F, 0F, 0F); + } + + public void render(float size) + { + GasBottleLid1.render(size); + GasBottleLid2.render(size); + GasBottleDecor1.render(size); + GasBottleDecor2.render(size); + GasBottleDecor3.render(size); + GasBottleDecor4.render(size); + GasBottle1.render(size); + GasBottle2.render(size); + GasBottleBot1.render(size); + GasBottleBot2.render(size); + LiqBottleLid1.render(size); + LiqBottleLid2.render(size); + LiqBottleBot1.render(size); + LiqBottleBot2.render(size); + LiqBottle2.render(size); + LiqBottle1.render(size); + LiqBottleDecor1.render(size); + LiqBottleDecor2.render(size); + LiqBottleDecor3.render(size); + LiqBottleDecor4.render(size); + GasInput.render(size); + MidSection1.render(size); + MidSection2.render(size); + LiquidOutput.render(size); + MidSection3.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 4ea7d1047..49ec3a3e4 100644 --- a/common/mekanism/client/render/block/MachineRenderingHandler.java +++ b/common/mekanism/client/render/block/MachineRenderingHandler.java @@ -6,6 +6,7 @@ import mekanism.client.model.ModelDigitalMiner; import mekanism.client.model.ModelElectricPump; 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; @@ -29,6 +30,7 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler public ModelChargepad chargepad = new ModelChargepad(); public ModelLogisticalSorter logisticalSorter = new ModelLogisticalSorter(); public ModelDigitalMiner digitalMiner = new ModelDigitalMiner(); + public ModelRotaryCondensentrator rotaryCondensentrator = new ModelRotaryCondensentrator(); @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) @@ -80,6 +82,14 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "DigitalMiner.png")); digitalMiner.render(0.03125F, false); } + else if(MachineType.get(block.blockID, metadata) == MachineType.ROTARY_CONDENSENTRATOR) + { + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1F, -0.05F); + Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "RotaryCondensentrator.png")); + rotaryCondensentrator.render(0.0625F); + } else { MekanismRenderer.renderItem(renderer, metadata, block); } diff --git a/common/mekanism/client/render/tileentity/RenderRotaryCondensentrator.java b/common/mekanism/client/render/tileentity/RenderRotaryCondensentrator.java new file mode 100644 index 000000000..7b4073f2f --- /dev/null +++ b/common/mekanism/client/render/tileentity/RenderRotaryCondensentrator.java @@ -0,0 +1,44 @@ +package mekanism.client.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import mekanism.client.model.ModelRotaryCondensentrator; +import mekanism.common.tileentity.TileEntityRotaryCondensentrator; +import mekanism.common.util.MekanismUtils; +import mekanism.common.util.MekanismUtils.ResourceType; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderRotaryCondensentrator extends TileEntitySpecialRenderer +{ + private ModelRotaryCondensentrator model = new ModelRotaryCondensentrator(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) + { + renderAModelAt((TileEntityRotaryCondensentrator)tileEntity, x, y, z, partialTick); + } + + private void renderAModelAt(TileEntityRotaryCondensentrator 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, "RotaryCondensentrator.png")); + + switch(tileEntity.facing) + { + case 2: GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break; + case 3: GL11.glRotatef(270, 0.0F, 1.0F, 0.0F); break; + case 4: GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break; + case 5: GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break; + } + + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + model.render(0.0625F); + GL11.glPopMatrix(); + } +} diff --git a/common/mekanism/common/CommonProxy.java b/common/mekanism/common/CommonProxy.java index 405d909cb..7d987f7d8 100644 --- a/common/mekanism/common/CommonProxy.java +++ b/common/mekanism/common/CommonProxy.java @@ -47,6 +47,7 @@ import mekanism.common.tileentity.TileEntityObsidianTNT; import mekanism.common.tileentity.TileEntityOsmiumCompressor; import mekanism.common.tileentity.TileEntityPressurizedTube; import mekanism.common.tileentity.TileEntityPurificationChamber; +import mekanism.common.tileentity.TileEntityRotaryCondensentrator; import mekanism.common.tileentity.TileEntityTeleporter; import mekanism.common.tileentity.TileEntityUniversalCable; import net.minecraft.entity.player.EntityPlayer; @@ -97,6 +98,7 @@ public class CommonProxy GameRegistry.registerTileEntity(TileEntityBin.class, "Bin"); GameRegistry.registerTileEntity(TileEntityDigitalMiner.class, "DigitalMiner"); GameRegistry.registerTileEntity(TileEntityObsidianTNT.class, "ObsidianTNT"); + GameRegistry.registerTileEntity(TileEntityRotaryCondensentrator.class, "RotaryCondensentrator"); } /** @@ -261,7 +263,7 @@ public class CommonProxy case 6: return new ContainerElectricMachine(player.inventory, (TileEntityElectricMachine)tileEntity); case 7: - return new ContainerAdvancedElectricMachine(player.inventory, (TileEntityAdvancedElectricMachine)tileEntity); + //return new ContainerRotaryCondensentrator(player.inventory, (TileEntityRotaryCondensentrator)tileEntity); TODO case 8: return new ContainerEnergyCube(player.inventory, (TileEntityEnergyCube)tileEntity); case 9: diff --git a/common/mekanism/common/EnergyNetwork.java b/common/mekanism/common/EnergyNetwork.java index 37f769bec..ab7066151 100644 --- a/common/mekanism/common/EnergyNetwork.java +++ b/common/mekanism/common/EnergyNetwork.java @@ -24,7 +24,6 @@ import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.Event; import universalelectricity.core.block.IElectrical; -import universalelectricity.core.electricity.ElectricityDisplay; import universalelectricity.core.electricity.ElectricityPack; import buildcraft.api.power.IPowerReceptor; import buildcraft.api.power.PowerHandler.PowerReceiver; @@ -131,7 +130,7 @@ public class EnergyNetwork extends DynamicNetwork prevEnergy = energyToSend; sent = 0; - energyToSend = doEmit(energyToSend, ignored); + energyToSend -= (energyToSend - doEmit(energyToSend, ignored)); sent = prevEnergy-energyToSend; if(energyToSend > 0 && sent > 0) @@ -143,6 +142,9 @@ public class EnergyNetwork extends DynamicNetwork return energyToSend; } + /** + * @return rejects + */ public synchronized double doEmit(double energyToSend, ArrayList ignored) { double energyAvailable = energyToSend; @@ -180,7 +182,8 @@ public class EnergyNetwork extends DynamicNetwork } else if(acceptor instanceof IEnergySink) { - double toSend = Math.min(currentSending, (((IEnergySink)acceptor).getMaxSafeInput()*Mekanism.FROM_IC2)); + double toSend = Math.min(currentSending, ((IEnergySink)acceptor).getMaxSafeInput()*Mekanism.FROM_IC2); + toSend = Math.min(toSend, ((IEnergySink)acceptor).demandedEnergyUnits()*Mekanism.FROM_IC2); energyToSend -= (toSend - (((IEnergySink)acceptor).injectEnergyUnits(side.getOpposite(), toSend*Mekanism.TO_IC2)*Mekanism.FROM_IC2)); } else if(acceptor instanceof IPowerReceptor && MekanismUtils.useBuildcraft()) @@ -440,12 +443,12 @@ public class EnergyNetwork extends DynamicNetwork @Override public String getNeeded() { - return ElectricityDisplay.getDisplay((float)(getEnergyNeeded(new ArrayList())*Mekanism.TO_UE), ElectricityDisplay.ElectricUnit.JOULES); + return MekanismUtils.getEnergyDisplay(getEnergyNeeded(new ArrayList())); } @Override public String getFlow() { - return ElectricityDisplay.getDisplay((float)(getPower()*Mekanism.TO_UE), ElectricityDisplay.ElectricUnit.JOULES); + return MekanismUtils.getEnergyDisplay(getPower()); } } diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 314f66e45..c3a0f3bda 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -435,6 +435,10 @@ public class Mekanism CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(Transmitter, 1, 4), new Object[] { "RRR", "SBS", "RRR", Character.valueOf('R'), Item.redstone, Character.valueOf('S'), "ingotSteel", Character.valueOf('B'), Block.fenceIron })); + CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MachineBlock2, 1, 0), new Object[] { + "GCG", "tET", "GIG", Character.valueOf('G'), Block.glass, Character.valueOf('C'), "circuitBasic", Character.valueOf('t'), MekanismUtils.getEmptyGasTank(), Character.valueOf('E'), EnergyTablet.getUnchargedItem(), + Character.valueOf('T'), new ItemStack(BasicBlock, 1, 9), Character.valueOf('I'), new ItemStack(BasicBlock, 1, 8) + })); for(RecipeType type : RecipeType.values()) { diff --git a/common/mekanism/common/block/BlockMachine.java b/common/mekanism/common/block/BlockMachine.java index 7ca236006..9e876bd57 100644 --- a/common/mekanism/common/block/BlockMachine.java +++ b/common/mekanism/common/block/BlockMachine.java @@ -21,7 +21,6 @@ import mekanism.common.ItemAttacher; import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; -import mekanism.common.Tier.FactoryTier; import mekanism.common.miner.MinerFilter; import mekanism.common.network.PacketElectricChest; import mekanism.common.network.PacketElectricChest.ElectricChestPacketType; @@ -45,6 +44,7 @@ import mekanism.common.tileentity.TileEntityLogisticalSorter; import mekanism.common.tileentity.TileEntityMetallurgicInfuser; import mekanism.common.tileentity.TileEntityOsmiumCompressor; import mekanism.common.tileentity.TileEntityPurificationChamber; +import mekanism.common.tileentity.TileEntityRotaryCondensentrator; import mekanism.common.tileentity.TileEntityTeleporter; import mekanism.common.transporter.TransporterFilter; import mekanism.common.util.MekanismUtils; @@ -1010,7 +1010,8 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds ELECTRIC_PUMP(Mekanism.machineBlockID, 12, "ElectricPump", 17, 10000, TileEntityElectricPump.class, true), ELECTRIC_CHEST(Mekanism.machineBlockID, 13, "ElectricChest", -1, 12000, TileEntityElectricChest.class, true), CHARGEPAD(Mekanism.machineBlockID, 14, "Chargepad", -1, 10000, TileEntityChargepad.class, true), - LOGISTICAL_SORTER(Mekanism.machineBlockID, 15, "LogisticalSorter", -1, 0, TileEntityLogisticalSorter.class, true); + LOGISTICAL_SORTER(Mekanism.machineBlockID, 15, "LogisticalSorter", -1, 0, TileEntityLogisticalSorter.class, true), + ROTARY_CONDENSENTRATOR(Mekanism.machineBlock2ID, 0, "RotaryCondensentrator", 7, 20000, TileEntityRotaryCondensentrator.class, true); public int typeId; public int meta; diff --git a/common/mekanism/common/inventory/container/ContainerRotaryCondensentrator.java b/common/mekanism/common/inventory/container/ContainerRotaryCondensentrator.java new file mode 100644 index 000000000..3f216ecf9 --- /dev/null +++ b/common/mekanism/common/inventory/container/ContainerRotaryCondensentrator.java @@ -0,0 +1,126 @@ +package mekanism.common.inventory.container; + +import mekanism.common.inventory.slot.SlotOutput; +import mekanism.common.inventory.slot.SlotStorageTank; +import mekanism.common.tileentity.TileEntityRotaryCondensentrator; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidContainerRegistry; + +public class ContainerRotaryCondensentrator extends Container +{ + private TileEntityRotaryCondensentrator tileEntity; + + public ContainerRotaryCondensentrator(InventoryPlayer inventory, TileEntityRotaryCondensentrator tentity) + { + tileEntity = tentity; + addSlotToContainer(new SlotStorageTank(tentity, null, true, 0, 8, 8)); + addSlotToContainer(new SlotStorageTank(tentity, null, true, 1, 8, 40)); + addSlotToContainer(new Slot(tentity, 0, 146, 20)); + addSlotToContainer(new SlotOutput(tentity, 1, 146, 51)); + int slotX; + + for(slotX = 0; slotX < 3; ++slotX) + { + for(int slotY = 0; slotY < 9; ++slotY) + { + addSlotToContainer(new Slot(inventory, slotY + slotX * 9 + 9, 8 + slotY * 18, 84 + slotX * 18)); + } + } + + for(slotX = 0; slotX < 9; ++slotX) + { + addSlotToContainer(new Slot(inventory, slotX, 8 + slotX * 18, 142)); + } + + tileEntity.playersUsing.add(inventory.player); + tileEntity.openChest(); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + + tileEntity.playersUsing.remove(entityplayer); + tileEntity.closeChest(); + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) + { + return tileEntity.isUseableByPlayer(entityplayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slotID) + { + ItemStack stack = null; + Slot currentSlot = (Slot)inventorySlots.get(slotID); + + if(currentSlot != null && currentSlot.getHasStack()) + { + ItemStack slotStack = currentSlot.getStack(); + stack = slotStack.copy(); + + if(FluidContainerRegistry.isEmptyContainer(slotStack) || FluidContainerRegistry.isFilledContainer(slotStack)) + { + if(slotID != 0 && slotID != 1) + { + if(!mergeItemStack(slotStack, 0, 1, false)) + { + return null; + } + } + else { + if(!mergeItemStack(slotStack, 2, inventorySlots.size(), true)) + { + return null; + } + } + } + else { + if(slotID >= 2 && slotID <= 8) + { + if(!mergeItemStack(slotStack, 29, inventorySlots.size(), false)) + { + return null; + } + } + else if(slotID > 28) + { + if(!mergeItemStack(slotStack, 2, 28, false)) + { + return null; + } + } + else { + if(!mergeItemStack(slotStack, 2, inventorySlots.size(), true)) + { + return null; + } + } + } + + if(slotStack.stackSize == 0) + { + currentSlot.putStack((ItemStack)null); + } + else { + currentSlot.onSlotChanged(); + } + + if(slotStack.stackSize == stack.stackSize) + { + return null; + } + + currentSlot.onPickupFromSlot(player, slotStack); + } + + return stack; + } +} diff --git a/common/mekanism/common/item/ItemBlockMachine.java b/common/mekanism/common/item/ItemBlockMachine.java index 76caa214f..4b9509214 100644 --- a/common/mekanism/common/item/ItemBlockMachine.java +++ b/common/mekanism/common/item/ItemBlockMachine.java @@ -100,9 +100,9 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem @Override public String getUnlocalizedName(ItemStack itemstack) { - if(MachineType.get(itemstack.itemID, itemstack.getItemDamage()) != null) + if(MachineType.get(itemstack) != null) { - return getUnlocalizedName() + "." + MachineType.get(itemstack.itemID, itemstack.getItemDamage()).name; + return getUnlocalizedName() + "." + MachineType.get(itemstack).name; } return "null"; diff --git a/common/mekanism/common/tileentity/TileEntityElectricBlock.java b/common/mekanism/common/tileentity/TileEntityElectricBlock.java index 3f36b1bcd..15966ee0c 100644 --- a/common/mekanism/common/tileentity/TileEntityElectricBlock.java +++ b/common/mekanism/common/tileentity/TileEntityElectricBlock.java @@ -3,7 +3,6 @@ package mekanism.common.tileentity; import ic2.api.energy.event.EnergyTileLoadEvent; import ic2.api.energy.event.EnergyTileUnloadEvent; import ic2.api.energy.tile.IEnergySink; -import ic2.api.energy.tile.IEnergySource; import ic2.api.energy.tile.IEnergyTile; import ic2.api.tile.IEnergyStorage; import ic2.api.tile.IWrenchable; @@ -34,7 +33,7 @@ import cofh.api.energy.IEnergyHandler; import com.google.common.io.ByteArrayDataInput; -public abstract class TileEntityElectricBlock extends TileEntityContainerBlock implements IWrenchable, ITileNetwork, IPowerReceptor, IEnergyTile, IElectrical, IElectricalStorage, IConnector, IStrictEnergyStorage, IEnergyHandler, IEnergySink, IEnergySource, IEnergyStorage, IStrictEnergyAcceptor, ICableOutputter +public abstract class TileEntityElectricBlock extends TileEntityContainerBlock implements IWrenchable, ITileNetwork, IPowerReceptor, IEnergyTile, IElectrical, IElectricalStorage, IConnector, IStrictEnergyStorage, IEnergyHandler, IEnergySink, IEnergyStorage, IStrictEnergyAcceptor, ICableOutputter { /** How much energy is stored in this block. */ public double electricityStored; @@ -343,7 +342,7 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i @Override public int getMaxSafeInput() { - return 2048; + return Integer.MAX_VALUE; } @Override @@ -401,36 +400,18 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i return (getMaxEnergy() - getEnergy())*Mekanism.TO_IC2; } - @Override - public double getOfferedEnergy() - { - return Math.min(getEnergy()*Mekanism.TO_IC2, getOutput()); - } - @Override public boolean canReceiveEnergy(ForgeDirection side) { return side != getOutputtingSide(); } - @Override - public boolean emitsEnergyTo(TileEntity receiver, ForgeDirection direction) - { - return direction == getOutputtingSide() && !(receiver instanceof TileEntityUniversalCable); - } - @Override public double getOutputEnergyUnitsPerTick() { return getMaxOutput()*Mekanism.TO_IC2; } - @Override - public void drawEnergy(double amount) - { - setEnergy(getEnergy()-amount*Mekanism.FROM_IC2); - } - @Override public double injectEnergyUnits(ForgeDirection direction, double i) { diff --git a/common/mekanism/common/tileentity/TileEntityRotaryCondensentrator.java b/common/mekanism/common/tileentity/TileEntityRotaryCondensentrator.java index a3b70a4c8..670500b7e 100644 --- a/common/mekanism/common/tileentity/TileEntityRotaryCondensentrator.java +++ b/common/mekanism/common/tileentity/TileEntityRotaryCondensentrator.java @@ -1,6 +1,13 @@ package mekanism.common.tileentity; +import mekanism.common.block.BlockMachine.MachineType; +import net.minecraft.item.ItemStack; + public class TileEntityRotaryCondensentrator extends TileEntityElectricBlock { - + public TileEntityRotaryCondensentrator() + { + super("RotaryCondensentrator", MachineType.ROTARY_CONDENSENTRATOR.baseEnergy); + inventory = new ItemStack[5]; + } } diff --git a/common/mekanism/common/tileentity/TileEntityUniversalCable.java b/common/mekanism/common/tileentity/TileEntityUniversalCable.java index 049950e5e..d76e59488 100644 --- a/common/mekanism/common/tileentity/TileEntityUniversalCable.java +++ b/common/mekanism/common/tileentity/TileEntityUniversalCable.java @@ -108,6 +108,9 @@ public class TileEntityUniversalCable extends TileEntityTransmitter(;4y-*?~r?tN7s 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 wExC&wYDgEC2ui diff --git a/resources/assets/mekanism/gui/GuiMetallurgicInfuser.png b/resources/assets/mekanism/gui/GuiMetallurgicInfuser.png index 81192d36e6ec24af6dc8c6ec92c0bedf80c45bae..159ec34c5d623d71cdd629ef8444d27833c68d72 100644 GIT binary patch delta 2994 zcmc&$Yc!O57k{3|$V@tns3Boe%Hf2{spJ?_sT7e!nX68I+o!0y1UGIl;)>*6nr@j7buf6wgUw(TF^@sFI zoKdhcd9Tg(Ll?ktPHpf?zK+tAllP!!&Q;?_1eB7GmI=nqO^K>`F#EUaYaB(?k8Qp< zjOHn?^iG+=LDa##)1k|x%A22shdg`z%yOmY%6kv@RA~v0M;;pwi+n&nK~OlcXOpDn z&2Xhq6m;CmyMS;?q8B-?=5~@=PKvaa2#*NiD(OU~bd=NM5NKQX66d9gvi$+mNLZJi!D)WSB2{XYfm?t+ytn*iGaCAB#gFq zBm(xuL-aJ_YCNz4QOa3|2XYQa9JbF=!va6V>OgFDEWj>c7_Via(UiF7DpWoOP2s;C zSf(C`LJ@cR#n(@xQ1#P66NwmeC?G~Fk0AWmc#TwfF?-haR|!dG&(`4 zSS*lgSbA*@%LEVnt19sS_rzl0ZKG0C_sA>6+*GCIbEEr2?xM!ARK+7fH|++KVeS%D z=_}JGqck`pR?^Y%5&8hw?v&4Xk0t%?s3-rBb(hmvyrbnO2o|^2vYyH3IlKc=Nj&JO zp&*!24ZU2K;zR_F{l3MVIsny1qthh%*SXC4iHTRL$GJ5Z zojG;nYB_Z}%>_~V?9r5)&X-zKSZl?| zm%~i!K>2t&p)XW6oo#p5#KnqbCg@$MnzXQz2DKPB3{Lj z|6`#_R__jz#Ou!LuXTne_*lbtJAp!9(ZGV9&#hl!l9T*qm)i~^5WNr_k`hoQHf{6d z-ok}3E?hGo`rL9CH|e|U$o!A>i5kz%(VwtWD){)S4N=Q9zv>XBl`$(Knoq+~ik98! zz}7gw%3r8FTC=K!WW&J1t6*~w!D7p7x0a2wM@MGGP4MFaQmj8ioH`i@;fp>wKR>G5 zffIG?BLv`t2{Rr+l1^BK*3XHjFpPbpAuUA|ad-4i_2%_>;LPFrIn>6*Xv+1uxV0%B zMBo#h@&$8D0}E(<`2pUKucQFYULa5XuZH}yAE|9Hx~#75K~&63S{9{;6TXY44fN2x z3Oe<)sjC!gCgQs2MqFr#AjBLpHZYsjso&Syc`Olo;p?Zplfs&)+0aSy=+tEjFz4%6 ztVA7dr_HijoN$Nfp8O(HopR;5<^P>(IMq;Cf)fumTsD&CSCW`9_Durm{8K{Yf}pCl z=`%t!pWiuD4ackMZQde2nQ%6>XIRiQZ;{KSCr5eSpa5<+3cPU|c`y7LhBCYk5CKo@ z8}?n}l=on79Ku>J+#Q3md2nh^n1C}-FuT-NUi?nh5V^I~)3}hXdrfP-KAa-cA#$x3 z)xdIDdj6@fFg@M={(igUU2<-8fJx|}f=s8re$ZccV!XfdHjQ)F#Sc8-TI))x2!TC{ zr?2d%N4ZZG6&0Cvv}SH8xPM}<8v5aDADXCrk37Lx*ua1SM;5)t}sy!F}!Gi{0o z=C{0EO+AXx?S{u2ogk?)nj+gTvdz*2!2|aB_P2;~gem`t8TgwWYMTh?oSe$#Hr)uF z=P&=n9_NjHMQy_=mg}>k=gzW^@B=kzY-7k><7}N|SNqvI1>5_Nain9VANN=4(uCwf zbXSOmg*HfP({rN%BoD9Kg zAc*Z?-ywcL08Bv{1Zn~WNEkV3mlcjcy8!N|5p9To&2*W;foBxJu!fT3h}Xvh`lP<4 zhMq{qyou~}SR_$uRv{P-6Ba|4ayzK1pd~<)HsN$H3GJp9xZTPaI`=}v_urKjDrkP! zb{@#*9cpeq(U=)(MHq%9Zfbe`hG)71zL~%Si%qlm>IulI`y z!*|=w2%JY-wbe#E)eJkIR-o<}l+@OedqwZxdz0*o{rWFKb&76ShfR<_vJ?ID9tPt} zvXC+O>t|#E8y*~N9Gyg_t5lbk`V%5hFUO)uE`t^*6;nJ*3&>|qKTka6T07p&i>OO> zp;p65`T=C+f3E_6H+?YD3fp=VN=8G@pA#?Pv8@tI)xZL1&vaR_6o*0*;vR-|M<3I>q3cb9_=eTVO*KL8pR;%fi^ delta 3394 zcmcguYfw{X8a@dJlfV{2uz2AXQ5!GZDq^u#5?L2PL2&WXfIwPXvr@`c8Vtmfh(brC zT7`l@Otv5(0#dmI!N9Q;5D=n7K@EfmhFgS0Nk|}&?CI?8Ogp=?({4LGf4-UT`_41Z z`##V6zTcSRtW$Le2)$+IzkAogWYqLfOQzlUDvWA-8|r4j`3Ay32A`ID&!6J61$6TJ zx@(GX!`!a88g?bP`;Bk8uErE&iyPW|!_{tn{O{}FocLU?26tV8k~>~Y>gk=FwL+h(I5CI#{qa=3^6w1AZBMJXMuc*4*OzJGX zSqrs7=7MHcM2?k0#wD?&3coTGR>VMmdt_klGvPby)#4ygg;Xl_PL#Zbwn9fRtjdQx zS>_L?Mfe!_E@bQB$E>i?- zVB(8-Hx3nxWm7La+fSIV!2?6CGwa>Wkx(+s5Zpqe(AH*HHtzN3`S4>Tz$x5QZw}5BgwN`>1=6B8 zyS%|dCMg<9=A@<7ICh<$m*@6OO9UCim(E{7{_~$7NF0^R+%StH@`BiA>fOnObZm40 zU^ke0i@A<`qCTIegbs(3Zo@rV!#2u1BYz2kgc2(K**$2ym)kquMa13;+Pu`tdu;-$Kr;qII+iFJiL7Bex>#g;(cf4B5r~w}jp_=OKfUux&y>uT#QTpPT9>^qAV zk@3e0V?^@A6&bl^2QhFbbTzftAbfp2Y!*HTmgwA7Nw!CGJ?0l@MRd`Ilj@JgUMOZ- zH;Fd$ag+abz#5r7 zynL#Ddl{Uk1fG*M-P<|_XZSSpHV{Uq-<$_+$X`3w=mWiUnFEMO+pq4KXBm20?urW+ zy^Uka$;O!%C3cH#jALkiVJE4z^Mk0!$0YijQ<_g4>XK@zM21A&jUg7+O9Mvp;IoLk zd{PVEafj*WGL}@B!cgU#HRJIR;O2bPmLluCLNYnHePg`5E9YL+#>XzQu%8xR$57`* z?}f6B#=6`&roL`)I3l*CUh5)_8PKmL5rL6tdieb4MY8wK`;qAzFsJm%`Z`u`w?Lw2 zWm(~YcdN>)HatvkJ>Tup#AgEy#JtiDvup<7I*P+W?AI0ay6bJ^PKiKcF{4SrWkUn6 zR1*n<&koW*3@6*zS2_h79N>rKWs9m-%g7U-G8kH2bH_!;+!e7?P=PXsYddcNS<*gH z1xg2xM6#afp0TQM=Io=hp^BI$Lv4g2-E#m6RdKo8sBgmrF`g+YDO1i?vKnwq-;^nW z>OLD-;Jtj5W7^BY1TPCtyaO2x@j#il@_wo0x=^6gMVCKWX}HNl|0%ZIiL(`rCiawV z-AhYG)Vh1)JlKacxvfQg8#phJHlZrnMDSZn1o|%QEdtY5;DOeHazA1g8}Rekltow> zK>_{)1p37&6y-e7rBvk(cT@?>#BTRXhdYYm(L$1Gk}qGblJk>FisDlvyw_g3a>kX> zGO<>u1onRS#^=@@uhGC32i`2J(5h^>Z0rCJ^>~81k9Y@RslRn8EL>TO&)u5R-;hCMRXU=OC`G(0i zt2#=d%??ndRh%#XZ4E-sF~-l44o(TGPStAdDI1S2qbA0;7o6VdJ+Aj!8{BfBr^wr+ z>`~1(lmry&QY!m7DHut0l)7U5rK1#Jog;q^_ZSgl_0G?5>yXrUV#-)(Ph`&cibBzy z$dG!2isDfaEq)FG{R#}G2qU}j-jZ1E@l}xV@CTu5AEx;7^S|#Wd`WmZG_=!oN%wkm zOr@&6n;w36xyl7TANP&bQxJu!#)Z^cf`^ymfz97jeQDMplMD_%dv-(Gu|@=0GzkQy zy!GgUSBr0`oLqcEiYZ45Y|wO>-y9pM5G*lMd$sY0Wv7es_pr==KNRfZn_=MP?=oo3sX6tsVlgEqMw7# z2KIbx9h(hNFYqYGXyOgZok9zm-U5)%|1bM@SNYJ+`~&z8z5)OM diff --git a/resources/assets/mekanism/gui/GuiRotaryCondensentrator.png b/resources/assets/mekanism/gui/GuiRotaryCondensentrator.png index 80cae4b02f367eb9e5e498d2b7d45960da93960e..4348e6402920253120b063a101e9cb154b894fc8 100644 GIT binary patch delta 3231 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

n0 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