Merge branch 'development' of https://github.com/aidancbrady/Mekanism into development

This commit is contained in:
Aidan Brady 2014-01-02 21:58:23 -05:00
commit 7ad60f0796
31 changed files with 963 additions and 1078 deletions

View file

@ -50,7 +50,7 @@ public class ChemicalInput
* Swaps the right gas and left gas of this input.
* @return a swapped ChemicalInput
*/
private ChemicalInput swap()
public ChemicalInput swap()
{
return new ChemicalInput(rightGas, leftGas);
}
@ -93,4 +93,9 @@ public class ChemicalInput
return input.leftGas.amount >= leftGas.amount && input.rightGas.amount >= rightGas.amount;
}
public ChemicalInput copy()
{
return new ChemicalInput(leftGas.copy(), rightGas.copy());
}
}

View file

@ -11,7 +11,7 @@ public interface IGasHandler
{
/**
* Transfer a certain amount of gas to this block.
* @param amount - amount to transfer
* @param stack - gas to add
* @return gas added
*/
public int receiveGas(ForgeDirection side, GasStack stack);

View file

@ -1,121 +1,5 @@
package mekanism.client;
import java.io.File;
import java.util.HashMap;
import mekanism.client.gui.GuiChemicalInfuser;
import mekanism.client.gui.GuiChemicalInjectionChamber;
import mekanism.client.gui.GuiChemicalOxidizer;
import mekanism.client.gui.GuiCombiner;
import mekanism.client.gui.GuiConfiguration;
import mekanism.client.gui.GuiCredits;
import mekanism.client.gui.GuiCrusher;
import mekanism.client.gui.GuiDictionary;
import mekanism.client.gui.GuiDigitalMiner;
import mekanism.client.gui.GuiDynamicTank;
import mekanism.client.gui.GuiElectricChest;
import mekanism.client.gui.GuiElectricPump;
import mekanism.client.gui.GuiEnergizedSmelter;
import mekanism.client.gui.GuiEnergyCube;
import mekanism.client.gui.GuiEnrichmentChamber;
import mekanism.client.gui.GuiFactory;
import mekanism.client.gui.GuiGasTank;
import mekanism.client.gui.GuiMetallurgicInfuser;
import mekanism.client.gui.GuiOsmiumCompressor;
import mekanism.client.gui.GuiPasswordEnter;
import mekanism.client.gui.GuiPasswordModify;
import mekanism.client.gui.GuiPortableTeleporter;
import mekanism.client.gui.GuiPurificationChamber;
import mekanism.client.gui.GuiRobitCrafting;
import mekanism.client.gui.GuiRobitInventory;
import mekanism.client.gui.GuiRobitMain;
import mekanism.client.gui.GuiRobitRepair;
import mekanism.client.gui.GuiRobitSmelting;
import mekanism.client.gui.GuiRotaryCondensentrator;
import mekanism.client.gui.GuiTeleporter;
import mekanism.client.render.MekanismRenderer;
import mekanism.client.render.RenderPartTransmitter;
import mekanism.client.render.RenderTickHandler;
import mekanism.client.render.block.BasicRenderingHandler;
import mekanism.client.render.block.MachineRenderingHandler;
import mekanism.client.render.block.TransmitterRenderingHandler;
import mekanism.client.render.entity.RenderBalloon;
import mekanism.client.render.entity.RenderObsidianTNTPrimed;
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.RenderChemicalInfuser;
import mekanism.client.render.tileentity.RenderChemicalOxidizer;
import mekanism.client.render.tileentity.RenderConfigurableMachine;
import mekanism.client.render.tileentity.RenderDigitalMiner;
import mekanism.client.render.tileentity.RenderDynamicTank;
import mekanism.client.render.tileentity.RenderElectricChest;
import mekanism.client.render.tileentity.RenderElectricPump;
import mekanism.client.render.tileentity.RenderEnergyCube;
import mekanism.client.render.tileentity.RenderGasTank;
import mekanism.client.render.tileentity.RenderLogisticalSorter;
import mekanism.client.render.tileentity.RenderLogisticalTransporter;
import mekanism.client.render.tileentity.RenderMechanicalPipe;
import mekanism.client.render.tileentity.RenderMetallurgicInfuser;
import mekanism.client.render.tileentity.RenderObsidianTNT;
import mekanism.client.render.tileentity.RenderPressurizedTube;
import mekanism.client.render.tileentity.RenderRotaryCondensentrator;
import mekanism.client.render.tileentity.RenderTeleporter;
import mekanism.client.render.tileentity.RenderUniversalCable;
import mekanism.client.sound.Sound;
import mekanism.client.sound.SoundHandler;
import mekanism.common.CommonProxy;
import mekanism.common.EntityBalloon;
import mekanism.common.EntityObsidianTNT;
import mekanism.common.EntityRobit;
import mekanism.common.IElectricChest;
import mekanism.common.IInvConfiguration;
import mekanism.common.Mekanism;
import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.inventory.InventoryElectricChest;
import mekanism.common.item.ItemPortableTeleporter;
import mekanism.common.tileentity.TileEntityAdvancedElectricMachine;
import mekanism.common.tileentity.TileEntityAdvancedFactory;
import mekanism.common.tileentity.TileEntityBin;
import mekanism.common.tileentity.TileEntityChargepad;
import mekanism.common.tileentity.TileEntityChemicalInfuser;
import mekanism.common.tileentity.TileEntityChemicalInjectionChamber;
import mekanism.common.tileentity.TileEntityChemicalOxidizer;
import mekanism.common.tileentity.TileEntityCombiner;
import mekanism.common.tileentity.TileEntityCrusher;
import mekanism.common.tileentity.TileEntityDigitalMiner;
import mekanism.common.tileentity.TileEntityDiversionTransporter;
import mekanism.common.tileentity.TileEntityDynamicTank;
import mekanism.common.tileentity.TileEntityDynamicValve;
import mekanism.common.tileentity.TileEntityElectricChest;
import mekanism.common.tileentity.TileEntityElectricMachine;
import mekanism.common.tileentity.TileEntityElectricPump;
import mekanism.common.tileentity.TileEntityEliteFactory;
import mekanism.common.tileentity.TileEntityEnergizedSmelter;
import mekanism.common.tileentity.TileEntityEnergyCube;
import mekanism.common.tileentity.TileEntityEnrichmentChamber;
import mekanism.common.tileentity.TileEntityFactory;
import mekanism.common.tileentity.TileEntityGasTank;
import mekanism.common.tileentity.TileEntityLogisticalSorter;
import mekanism.common.tileentity.TileEntityLogisticalTransporter;
import mekanism.common.tileentity.TileEntityMechanicalPipe;
import mekanism.common.tileentity.TileEntityMetallurgicInfuser;
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;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.common.Configuration;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.client.registry.KeyBindingRegistry;
@ -125,6 +9,37 @@ import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.TickRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mekanism.client.gui.*;
import mekanism.client.render.MekanismRenderer;
import mekanism.client.render.RenderElectrolyticSeparator;
import mekanism.client.render.RenderPartTransmitter;
import mekanism.client.render.RenderTickHandler;
import mekanism.client.render.block.BasicRenderingHandler;
import mekanism.client.render.block.MachineRenderingHandler;
import mekanism.client.render.block.TransmitterRenderingHandler;
import mekanism.client.render.entity.RenderBalloon;
import mekanism.client.render.entity.RenderObsidianTNTPrimed;
import mekanism.client.render.entity.RenderRobit;
import mekanism.client.render.item.ItemRenderingHandler;
import mekanism.client.render.tileentity.*;
import mekanism.client.sound.Sound;
import mekanism.client.sound.SoundHandler;
import mekanism.common.*;
import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.inventory.InventoryElectricChest;
import mekanism.common.item.ItemPortableTeleporter;
import mekanism.common.tileentity.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.common.Configuration;
import java.io.File;
import java.util.HashMap;
/**
* Client proxy for the Mekanism mod.
@ -274,6 +189,7 @@ public class ClientProxy extends CommonProxy
ClientRegistry.registerTileEntity(TileEntityChemicalOxidizer.class, "ChemicalOxidizer", new RenderChemicalOxidizer());
ClientRegistry.registerTileEntity(TileEntityChemicalInfuser.class, "ChemicalInfuser", new RenderChemicalInfuser());
ClientRegistry.registerTileEntity(TileEntityChemicalInjectionChamber.class, "ChemicalInjectionChamber", new RenderConfigurableMachine());
ClientRegistry.registerTileEntity(TileEntityElectrolyticSeparator.class, "ElectrolyticSeparator", new RenderElectrolyticSeparator());
}
@Override
@ -396,6 +312,9 @@ public class ClientProxy extends CommonProxy
return new GuiChemicalInfuser(player.inventory, (TileEntityChemicalInfuser)tileEntity);
case 31:
return new GuiChemicalInjectionChamber(player.inventory, (TileEntityAdvancedElectricMachine)tileEntity);
case 32:
return new GuiElectrolyticSeparator(player.inventory, (TileEntityElectrolyticSeparator)tileEntity);
}
return null;

View file

@ -1,24 +1,20 @@
package mekanism.generators.client.gui;
import java.util.ArrayList;
import mekanism.api.Coord4D;
import mekanism.api.gas.Gas;
import mekanism.api.gas.GasRegistry;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import mekanism.generators.common.inventory.container.ContainerElectrolyticSeparator;
import mekanism.generators.common.tileentity.TileEntityElectrolyticSeparator;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import org.lwjgl.opengl.GL11;
package mekanism.client.gui;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mekanism.api.Coord4D;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.inventory.container.ContainerElectrolyticSeparator;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.tileentity.TileEntityElectrolyticSeparator;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
@SideOnly(Side.CLIENT)
public class GuiElectrolyticSeparator extends GuiContainer
@ -39,53 +35,23 @@ public class GuiElectrolyticSeparator extends GuiContainer
int xAxis = (x - (width - xSize) / 2);
int yAxis = (y - (height - ySize) / 2);
if(xAxis > 160 && xAxis < 169 && yAxis > 73 && yAxis < 82)
if(xAxis > 8 && xAxis < 17 && yAxis > 73 && yAxis < 82)
{
Gas gasToSet = null;
if(tileEntity.outputType == GasRegistry.getGas("hydrogen"))
{
gasToSet = GasRegistry.getGas("oxygen");
}
else if(tileEntity.outputType == GasRegistry.getGas("oxygen"))
{
gasToSet = null;
}
else if(tileEntity.outputType == null)
{
gasToSet = GasRegistry.getGas("hydrogen");
}
ArrayList data = new ArrayList();
data.add((byte)0);
data.add(GasRegistry.getGasID(gasToSet));
PacketHandler.sendPacket(Transmission.SERVER, new PacketTileEntity().setParams(Coord4D.get(tileEntity), data));
mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F);
}
else if(xAxis > 8 && xAxis < 17 && yAxis > 73 && yAxis < 82)
else if(xAxis > 160 && xAxis < 169 && yAxis > 73 && yAxis < 82)
{
Gas gasToSet = null;
if(tileEntity.dumpType == null)
{
gasToSet = GasRegistry.getGas("oxygen");
}
else if(tileEntity.dumpType == GasRegistry.getGas("oxygen"))
{
gasToSet = GasRegistry.getGas("hydrogen");
}
else if(tileEntity.dumpType == GasRegistry.getGas("hydrogen"))
{
gasToSet = null;
}
ArrayList data = new ArrayList();
data.add((byte)1);
data.add(GasRegistry.getGasID(gasToSet));
PacketHandler.sendPacket(Transmission.SERVER, new PacketTileEntity().setParams(Coord4D.get(tileEntity), data));
mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F);
}
}
@ -96,10 +62,24 @@ public class GuiElectrolyticSeparator extends GuiContainer
int yAxis = (mouseY - (height - ySize) / 2);
fontRenderer.drawString(tileEntity.getInvName(), 45, 6, 0x404040);
fontRenderer.drawString(MekanismUtils.localize("gui.output"), 124, 73, 0x404040);
fontRenderer.drawString(MekanismUtils.localize("gui.electrolyticSeparator.dump"), 21, 73, 0x404040);
String name = tileEntity.leftTank.getGas() == null ? MekanismUtils.localize("gui.none") : tileEntity.leftTank.getGas().getGas().getLocalizedName();
fontRenderer.drawString(name, 21, 73, 0x404040);
name = tileEntity.rightTank.getGas() == null ? MekanismUtils.localize("gui.none") : tileEntity.rightTank.getGas().getGas().getLocalizedName();
fontRenderer.drawString(name, 152-(name.length()*5), 73, 0x404040);
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
if(xAxis >= 7 && xAxis <= 11 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(tileEntity.fluidTank.getFluid() != null ? tileEntity.fluidTank.getFluid().getFluid().getLocalizedName() + ": " + tileEntity.fluidTank.getFluidAmount() + "mB" : MekanismUtils.localize("gui.empty"), xAxis, yAxis);
}
if(xAxis >= 65 && xAxis <= 69 && yAxis >= 17 && yAxis <= 48)
{
drawCreativeTabHoveringText(tileEntity.leftTank.getGas() != null ? tileEntity.leftTank.getGas().getGas().getLocalizedName() + ": " + tileEntity.leftTank.getStored() : MekanismUtils.localize("gui.empty"), xAxis, yAxis);
}
if(xAxis >= 107 && xAxis <= 111 && yAxis >= 17 && yAxis <= 48)
{
drawCreativeTabHoveringText(tileEntity.rightTank.getGas() != null ? tileEntity.rightTank.getGas().getGas().getLocalizedName() + ": " + tileEntity.rightTank.getStored() : MekanismUtils.localize("gui.empty"), xAxis, yAxis);
}
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()), xAxis, yAxis);
}
@ -114,21 +94,21 @@ public class GuiElectrolyticSeparator extends GuiContainer
int guiHeight = (height - ySize) / 2;
drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize);
int outputDisplay = tileEntity.outputType == GasRegistry.getGas("oxygen") ? 82 : (tileEntity.outputType == GasRegistry.getGas("hydrogen") ? 90 : 98);
drawTexturedModalRect(guiWidth + 160, guiHeight + 73, 176, outputDisplay, 8, 8);
int leftDisplay = tileEntity.dumpLeft ? 90 : 82;
drawTexturedModalRect(guiWidth + 8, guiHeight + 73, 176, leftDisplay, 8, 8);
int dumpDisplay = tileEntity.dumpType == GasRegistry.getGas("oxygen") ? 82 : (tileEntity.dumpType == GasRegistry.getGas("hydrogen") ? 90 : 98);
drawTexturedModalRect(guiWidth + 8, guiHeight + 73, 176, dumpDisplay, 8, 8);
int rightDisplay = tileEntity.dumpRight ? 90 : 82;
drawTexturedModalRect(guiWidth + 160, guiHeight + 73, 176, rightDisplay, 8, 8);
int displayInt;
displayInt = tileEntity.getScaledWaterLevel(52);
displayInt = tileEntity.getScaledFluidLevel(52);
drawTexturedModalRect(guiWidth + 7, guiHeight + 17 + 52 - displayInt, 176 + 4, 52 - displayInt, 4, displayInt);
displayInt = tileEntity.getScaledHydrogenLevel(30);
displayInt = tileEntity.getLeftScaledLevel(30);
drawTexturedModalRect(guiWidth + 65, guiHeight + 17 + 30 - displayInt, 176, 52 + 30 - displayInt, 4, displayInt);
displayInt = tileEntity.getScaledOxygenLevel(30);
displayInt = tileEntity.getRightScaledLevel(30);
drawTexturedModalRect(guiWidth + 107, guiHeight + 17 + 30 - displayInt, 176 + 4, 52 + 30 - displayInt, 4, displayInt);
displayInt = tileEntity.getScaledEnergyLevel(52);

View file

@ -1,10 +1,9 @@
package mekanism.generators.client.model;
package mekanism.client.model;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
@SideOnly(Side.CLIENT)
public class ModelElectrolyticSeparator extends ModelBase

View file

@ -68,6 +68,7 @@ public class MekanismRenderer
GasRegistry.getGas("hydrogen").setIcon(event.map.registerIcon("mekanism:LiquidHydrogen"));
GasRegistry.getGas("oxygen").setIcon(event.map.registerIcon("mekanism:LiquidOxygen"));
GasRegistry.getGas("water").setIcon(event.map.registerIcon("mekanism:WaterVapor"));
GasRegistry.getGas("chlorine").setIcon(event.map.registerIcon("mekanism:Chlorine"));
GasRegistry.getGas("sulfurDioxideGas").setIcon(event.map.registerIcon("mekanism:LiquidSulfurDioxide"));
GasRegistry.getGas("sulfurTrioxideGas").setIcon(event.map.registerIcon("mekanism:LiquidSulfurTrioxide"));
GasRegistry.getGas("sulfuricAcid").setIcon(event.map.registerIcon("mekanism:LiquidSulfuricAcid"));

View file

@ -1,17 +1,14 @@
package mekanism.generators.client.render;
import mekanism.api.gas.GasRegistry;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import mekanism.generators.client.model.ModelElectrolyticSeparator;
import mekanism.generators.common.tileentity.TileEntityElectrolyticSeparator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import org.lwjgl.opengl.GL11;
package mekanism.client.render;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mekanism.client.model.ModelElectrolyticSeparator;
import mekanism.common.tileentity.TileEntityElectrolyticSeparator;
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;
@SideOnly(Side.CLIENT)
public class RenderElectrolyticSeparator extends TileEntitySpecialRenderer
@ -28,15 +25,14 @@ public class RenderElectrolyticSeparator extends TileEntitySpecialRenderer
{
GL11.glPushMatrix();
GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F);
bindTexture(MekanismUtils.getResource(ResourceType.RENDER, tileEntity.outputType == GasRegistry.getGas("hydrogen") ? "ElectrolyticSeparatorHydrogen.png" :
(tileEntity.outputType == GasRegistry.getGas("oxygen") ? "ElectrolyticSeparatorOxygen.png" : "ElectrolyticSeparatorNone.png")));
bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ElectrolyticSeparatorNone.png"));
switch(tileEntity.facing)
{
case 2: GL11.glRotatef(270, 0.0F, 1.0F, 0.0F); break;
case 3: GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break;
case 4: GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break;
case 5: GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break;
case 2: GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break;
case 3: GL11.glRotatef(270, 0.0F, 1.0F, 0.0F); break;
case 4: GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break;
case 5: GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break;
}
GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);

View file

@ -1,14 +1,10 @@
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.ModelChargepad;
import mekanism.client.model.ModelChemicalInfuser;
import mekanism.client.model.ModelChemicalOxidizer;
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.model.*;
import mekanism.client.render.MekanismRenderer;
import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.util.MekanismUtils;
@ -17,13 +13,8 @@ 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
{
@ -35,6 +26,8 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler
public ModelRotaryCondensentrator rotaryCondensentrator = new ModelRotaryCondensentrator();
public ModelChemicalOxidizer chemicalOxidizer = new ModelChemicalOxidizer();
public ModelChemicalInfuser chemicalInfuser = new ModelChemicalInfuser();
public ModelElectrolyticSeparator electrolyticSeparator = new ModelElectrolyticSeparator();
@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)
@ -114,6 +107,13 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler
chemicalInfuser.render(0.0625F);
chemicalInfuser.renderGlass(0.0625F);
}
else if(type == MachineType.ELECTROLYTIC_SEPARATOR)
{
GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
GL11.glTranslated(0.0F, -1.0F, 0.0F);
Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ElectrolyticSeparatorHydrogen.png"));
electrolyticSeparator.render(0.0625F);
}
else {
MekanismRenderer.renderItem(renderer, metadata, block);
}

View file

@ -1,20 +1,18 @@
package mekanism.common;
import java.io.File;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.TickRegistry;
import cpw.mods.fml.relauncher.Side;
import mekanism.common.inventory.container.*;
import mekanism.common.inventory.container.ContainerChemicalOxidizer;
import mekanism.common.tileentity.*;
import mekanism.common.tileentity.TileEntityChemicalOxidizer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.Configuration;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.TickRegistry;
import cpw.mods.fml.relauncher.Side;
import java.io.File;
/**
* Common proxy for the Mekanism mod.
@ -59,6 +57,7 @@ public class CommonProxy
GameRegistry.registerTileEntity(TileEntityChemicalOxidizer.class, "ChemicalOxidizer");
GameRegistry.registerTileEntity(TileEntityChemicalInfuser.class, "ChemicalInfuser");
GameRegistry.registerTileEntity(TileEntityChemicalInjectionChamber.class, "ChemicalInjectionChamber");
GameRegistry.registerTileEntity(TileEntityElectrolyticSeparator.class, "ElectrolyticSeparator");
}
/**
@ -158,6 +157,7 @@ public class CommonProxy
Mekanism.oxidationChamberUsage = Mekanism.configuration.get("usage", "OxidationChamberUsage", 100D).getDouble(100D);
Mekanism.chemicalInfuserUsage = Mekanism.configuration.get("usage", "ChemicalInfuserUsage", 100D).getDouble(100D);
Mekanism.chemicalInjectionChamberUsage = Mekanism.configuration.get("usage", "ChemicalInjectionChamberUsage", 200D).getDouble(200D);
Mekanism.electrolyticSeparatorUsage = Mekanism.configuration.get("usage", "ElectrolyticSeparatorUsage", 50D).getDouble(50D);
Mekanism.configuration.save();
}
@ -295,6 +295,8 @@ public class CommonProxy
return new ContainerChemicalInfuser(player.inventory, (TileEntityChemicalInfuser)tileEntity);
case 31:
return new ContainerAdvancedElectricMachine(player.inventory, (TileEntityAdvancedElectricMachine)tileEntity);
case 32:
return new ContainerElectrolyticSeparator(player.inventory, (TileEntityElectrolyticSeparator)tileEntity);
}
return null;

View file

@ -1,15 +1,15 @@
package mekanism.common;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import mekanism.api.ChemicalInput;
import mekanism.api.Coord4D;
import mekanism.api.EnumColor;
@ -31,68 +31,12 @@ import mekanism.common.IFactory.RecipeType;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.Tier.EnergyCubeTier;
import mekanism.common.Tier.FactoryTier;
import mekanism.common.block.BlockBasic;
import mekanism.common.block.BlockBounding;
import mekanism.common.block.BlockEnergyCube;
import mekanism.common.block.BlockGasTank;
import mekanism.common.block.BlockMachine;
import mekanism.common.block.BlockObsidianTNT;
import mekanism.common.block.BlockOre;
import mekanism.common.block.BlockTransmitter;
import mekanism.common.item.ItemAtomicDisassembler;
import mekanism.common.item.ItemBalloon;
import mekanism.common.item.ItemBlockBasic;
import mekanism.common.item.ItemBlockEnergyCube;
import mekanism.common.item.ItemBlockGasTank;
import mekanism.common.item.ItemBlockMachine;
import mekanism.common.item.ItemBlockOre;
import mekanism.common.item.ItemBlockTransmitter;
import mekanism.common.item.ItemClump;
import mekanism.common.item.ItemConfigurator;
import mekanism.common.item.ItemDictionary;
import mekanism.common.item.ItemDirtyDust;
import mekanism.common.item.ItemDust;
import mekanism.common.item.ItemElectricBow;
import mekanism.common.item.ItemEnergized;
import mekanism.common.item.ItemGasMask;
import mekanism.common.item.ItemIngot;
import mekanism.common.item.ItemJetpack;
import mekanism.common.item.ItemMachineUpgrade;
import mekanism.common.item.ItemMekanism;
import mekanism.common.item.ItemNetworkReader;
import mekanism.common.item.ItemPortableTeleporter;
import mekanism.common.item.ItemProxy;
import mekanism.common.item.ItemRobit;
import mekanism.common.item.ItemScubaTank;
import mekanism.common.item.ItemShard;
import mekanism.common.item.ItemWalkieTalkie;
import mekanism.common.block.*;
import mekanism.common.item.*;
import mekanism.common.multipart.ItemPartTransmitter;
import mekanism.common.multipart.MultipartMekanism;
import mekanism.common.network.PacketConfigSync;
import mekanism.common.network.PacketConfigurationUpdate;
import mekanism.common.network.PacketConfiguratorState;
import mekanism.common.network.PacketDataRequest;
import mekanism.common.network.PacketDigitUpdate;
import mekanism.common.network.PacketDigitalMinerGui;
import mekanism.common.network.PacketEditFilter;
import mekanism.common.network.PacketElectricBowState;
import mekanism.common.network.PacketElectricChest;
import mekanism.common.network.PacketJetpackData;
import mekanism.common.network.PacketKey;
import mekanism.common.network.PacketLogisticalSorterGui;
import mekanism.common.network.PacketNewFilter;
import mekanism.common.network.PacketPortableTeleport;
import mekanism.common.network.PacketPortalFX;
import mekanism.common.network.PacketRedstoneControl;
import mekanism.common.network.PacketRemoveUpgrade;
import mekanism.common.network.PacketRobit;
import mekanism.common.network.PacketScubaTankData;
import mekanism.common.network.PacketSimpleGui;
import mekanism.common.network.PacketStatusUpdate;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.network.PacketTransmitterUpdate;
import mekanism.common.network.*;
import mekanism.common.network.PacketTransmitterUpdate.PacketType;
import mekanism.common.network.PacketWalkieTalkieState;
import mekanism.common.tileentity.TileEntityAdvancedBoundingBlock;
import mekanism.common.tileentity.TileEntityBoundingBlock;
import mekanism.common.tileentity.TileEntityElectricBlock;
@ -111,24 +55,15 @@ import net.minecraftforge.common.Configuration;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.world.ChunkEvent;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import rebelkeithy.mods.metallurgy.api.IOreInfo;
import rebelkeithy.mods.metallurgy.api.MetallurgyAPI;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.event.FMLServerStoppingEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import java.io.File;
import java.util.*;
import java.util.logging.Logger;
/**
* Mekanism - the mod that doesn't have a category.
@ -229,6 +164,7 @@ public class Mekanism
public static Item Dictionary;
public static Item Balloon;
public static Item Shard;
public static Item ElectrolyticCore;
//Blocks
public static Block BasicBlock;
@ -292,6 +228,7 @@ public class Mekanism
public static double oxidationChamberUsage;
public static double chemicalInfuserUsage;
public static double chemicalInjectionChamberUsage;
public static double electrolyticSeparatorUsage;
/**
* Adds all in-game crafting and smelting recipes.
@ -492,6 +429,13 @@ public class Mekanism
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MachineBlock2, 1, 4), new Object[] {
"ACA", "ERE", "ACA", Character.valueOf('C'), "circuitBasic", Character.valueOf('A'), AtomicCore, Character.valueOf('E'), new ItemStack(BasicBlock, 1, 8), Character.valueOf('R'), new ItemStack(MachineBlock, 1, 9)
}));
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MachineBlock2, 1, 5), new Object[] {
"IRI", "ECE", "IRI", Character.valueOf('I'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('E'), Mekanism.EnrichedAlloy, Character.valueOf('C'), ElectrolyticCore
}));
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(ElectrolyticCore), new Object[] {
"EPE", "IEG", "EPE", Character.valueOf('E'), Mekanism.EnrichedAlloy, Character.valueOf('P'), "dustOsmium", Character.valueOf('I'), "dustIron", Character.valueOf('G'), "dustGold"
}));
for(RecipeType type : RecipeType.values())
{
@ -633,6 +577,10 @@ public class Mekanism
RecipeHandler.addChemicalInfuserRecipe(new ChemicalInput(new GasStack(GasRegistry.getGas("oxygen"), 1), new GasStack(GasRegistry.getGas("sulfurDioxideGas"), 2)), new GasStack(GasRegistry.getGas("sulfurTrioxideGas"), 2));
RecipeHandler.addChemicalInfuserRecipe(new ChemicalInput(new GasStack(GasRegistry.getGas("sulfurTrioxideGas"), 1), new GasStack(GasRegistry.getGas("water"), 1)), new GasStack(GasRegistry.getGas("sulfuricAcid"), 1));
//Electrolytic Separator Recipes
RecipeHandler.addElectrolyticSeparatorRecipe(FluidRegistry.getFluidStack("water", 2), new ChemicalInput(new GasStack(GasRegistry.getGas("hydrogen"), 2), new GasStack(GasRegistry.getGas("oxygen"), 1)));
RecipeHandler.addElectrolyticSeparatorRecipe(FluidRegistry.getFluidStack("lava", 10), new ChemicalInput(new GasStack(GasRegistry.getGas("hydrogen"), 1), new GasStack(GasRegistry.getGas("chlorine"), 1)));
//Infuse objects
InfuseRegistry.registerInfuseObject(new ItemStack(Item.coal, 1, 0), new InfuseObject(InfuseRegistry.get("CARBON"), 10));
InfuseRegistry.registerInfuseObject(new ItemStack(Item.coal, 1, 1), new InfuseObject(InfuseRegistry.get("CARBON"), 20));
@ -675,6 +623,8 @@ public class Mekanism
PartTransmitter = new ItemPartTransmitter(configuration.getItem("MultipartTransmitter", 11225).getInt()).setUnlocalizedName("MultipartTransmitter");
Balloon = new ItemBalloon(configuration.getItem("Balloon", 11226).getInt()).setUnlocalizedName("Balloon");
Shard = new ItemShard(configuration.getItem("Shard", 11227).getInt());
ElectrolyticCore = new ItemMekanism(configuration.getItem("ElectrolyticCore", 11302).getInt()).setUnlocalizedName("ElectrolyticCore");
configuration.save();
//Registrations
@ -705,6 +655,7 @@ public class Mekanism
GameRegistry.registerItem(ScubaTank, "ScubaTank");
GameRegistry.registerItem(Balloon, "Balloon");
GameRegistry.registerItem(Shard, "Shard");
GameRegistry.registerItem(ElectrolyticCore, "ElectrolyticCore");
}
/**
@ -977,6 +928,7 @@ public class Mekanism
GasRegistry.register(new Gas("hydrogen")).registerFluid();
GasRegistry.register(new Gas("oxygen")).registerFluid();
GasRegistry.register(new Gas("water")).registerFluid();
GasRegistry.register(new Gas("chlorine")).registerFluid();
GasRegistry.register(new Gas("sulfurDioxideGas")).registerFluid();
GasRegistry.register(new Gas("sulfurTrioxideGas")).registerFluid();
GasRegistry.register(new Gas("sulfuricAcid")).registerFluid();

View file

@ -10,6 +10,9 @@ import mekanism.api.infuse.InfusionInput;
import mekanism.api.infuse.InfusionOutput;
import mekanism.common.util.StackUtils;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
/**
* Class used to handle machine recipes. This is used for both adding recipes and checking outputs.
@ -113,6 +116,16 @@ public final class RecipeHandler
Recipe.CHEMICAL_INJECTION_CHAMBER.put(input, output);
}
/**
* Add an Electrolytic Separator recipe.
* @param fluid - FluidStack to electrolyze
* @param products - Pair of gases to produce when the fluid is electrolyzed
*/
public static void addElectrolyticSeparatorRecipe(FluidStack fluid, ChemicalInput products)
{
Recipe.ELECTROLYTIC_SEPARATOR.put(fluid, products);
}
/**
* Gets the InfusionOutput of the InfusionInput in the parameters.
* @param infusion - input Infusion
@ -266,6 +279,34 @@ public final class RecipeHandler
return false;
}
/**
* Get the result of electrolysing a given fluid
* @param fluidTank - the FluidTank to electrolyse fluid from
*/
public static ChemicalInput getElectrolyticSeparatorOutput(FluidTank fluidTank, boolean doRemove)
{
FluidStack fluid = fluidTank.getFluid();
if(fluid != null)
{
HashMap<FluidStack, ChemicalInput> recipes = Recipe.ELECTROLYTIC_SEPARATOR.get();
for(Map.Entry<FluidStack, ChemicalInput> entry : recipes.entrySet())
{
FluidStack key = (FluidStack)entry.getKey();
if(fluid.containsFluid(key))
{
fluidTank.drain(key.amount, doRemove);
return entry.getValue().copy();
}
}
}
return null;
}
public static enum Recipe
{
ENRICHMENT_CHAMBER(new HashMap<ItemStack, ItemStack>()),
@ -276,7 +317,8 @@ public final class RecipeHandler
METALLURGIC_INFUSER(new HashMap<InfusionInput, InfusionOutput>()),
CHEMICAL_INFUSER(new HashMap<ChemicalInput, GasStack>()),
CHEMICAL_OXIDIZER(new HashMap<ItemStack, GasStack>()),
CHEMICAL_INJECTION_CHAMBER(new HashMap<ItemStack, ItemStack>());
CHEMICAL_INJECTION_CHAMBER(new HashMap<ItemStack, ItemStack>()),
ELECTROLYTIC_SEPARATOR(new HashMap<FluidStack, ChemicalInput>());
private HashMap recipes;
@ -305,6 +347,34 @@ public final class RecipeHandler
return true;
}
}
if(entry.getKey() instanceof FluidStack)
{
if(((FluidStack)entry.getKey()).isFluidEqual(input))
{
return true;
}
}
}
}
return false;
}
public boolean containsRecipe(Fluid input)
{
for(Object obj : get().entrySet())
{
if(obj instanceof Map.Entry)
{
Map.Entry entry = (Map.Entry)obj;
if(entry.getKey() instanceof FluidStack)
{
if(((FluidStack)entry.getKey()).getFluid() == input)
{
return true;
}
}
}
}

View file

@ -34,6 +34,7 @@ import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.MinecraftForge;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
@ -315,4 +316,10 @@ public class BlockEnergyCube extends BlockContainer
TileEntityEnergyCube tileEntity = (TileEntityEnergyCube)world.getBlockTileEntity(x, y, z);
return tileEntity.getRedstoneLevel();
}
@Override
public boolean isBlockSolidOnSide(World world, int x, int y, int z, ForgeDirection side)
{
return true;
}
}

View file

@ -1,25 +1,13 @@
package mekanism.common.block;
import java.util.List;
import java.util.Random;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mekanism.api.Coord4D;
import mekanism.api.energy.IEnergizedItem;
import mekanism.client.ClientProxy;
import mekanism.common.IActiveState;
import mekanism.common.IBoundingBlock;
import mekanism.common.IElectricChest;
import mekanism.common.IFactory;
import mekanism.common.*;
import mekanism.common.IFactory.RecipeType;
import mekanism.common.IInvConfiguration;
import mekanism.common.IRedstoneControl;
import mekanism.common.ISpecialBounds;
import mekanism.common.ISustainedInventory;
import mekanism.common.ISustainedTank;
import mekanism.common.IUpgradeManagement;
import mekanism.common.ItemAttacher;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.miner.MinerFilter;
import mekanism.common.network.PacketElectricChest;
@ -27,7 +15,6 @@ import mekanism.common.network.PacketElectricChest.ElectricChestPacketType;
import mekanism.common.network.PacketLogisticalSorterGui;
import mekanism.common.network.PacketLogisticalSorterGui.SorterGuiPacket;
import mekanism.common.tileentity.*;
import mekanism.common.tileentity.TileEntityChemicalOxidizer;
import mekanism.common.transporter.TransporterFilter;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.TransporterUtils;
@ -53,9 +40,9 @@ import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.List;
import java.util.Random;
/**
* Block class for handling multiple machine block IDs.
@ -1091,7 +1078,9 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds
ROTARY_CONDENSENTRATOR(Mekanism.machineBlock2ID, 0, "RotaryCondensentrator", 7, 20000, TileEntityRotaryCondensentrator.class, true, false),
CHEMICAL_OXIDIZER(Mekanism.machineBlock2ID, 1, "ChemicalOxidizer", 29, 20000, TileEntityChemicalOxidizer.class, true, false),
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);
CHEMICAL_INJECTION_CHAMBER(Mekanism.machineBlock2ID, 3, "ChemicalInjectionChamber", 31, Mekanism.chemicalInjectionChamberUsage*400, TileEntityChemicalInjectionChamber.class, false, true),
ELECTROLYTIC_SEPARATOR(Mekanism.machineBlock2ID, 5, "ElectrolyticSeparator", 32, 20000, TileEntityElectrolyticSeparator.class, true, false);
public int typeId;
public int meta;

View file

@ -1,19 +1,17 @@
package mekanism.generators.common.inventory.container;
package mekanism.common.inventory.container;
import mekanism.api.gas.GasRegistry;
import mekanism.api.gas.IGasItem;
import mekanism.common.RecipeHandler;
import mekanism.common.inventory.slot.SlotEnergy.SlotDischarge;
import mekanism.common.inventory.slot.SlotStorageTank;
import mekanism.common.tileentity.TileEntityElectrolyticSeparator;
import mekanism.common.util.ChargeUtils;
import mekanism.generators.common.tileentity.TileEntityElectrolyticSeparator;
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;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
public class ContainerElectrolyticSeparator extends Container
{
@ -23,8 +21,8 @@ public class ContainerElectrolyticSeparator extends Container
{
tileEntity = tentity;
addSlotToContainer(new Slot(tentity, 0, 17, 35));
addSlotToContainer(new SlotStorageTank(tentity, GasRegistry.getGas("hydrogen"), false, 1, 59, 52));
addSlotToContainer(new SlotStorageTank(tentity, GasRegistry.getGas("oxygen"), false, 2, 101, 52));
addSlotToContainer(new SlotStorageTank(tentity, null, true, 1, 59, 52));
addSlotToContainer(new SlotStorageTank(tentity, null, true, 2, 101, 52));
addSlotToContainer(new SlotDischarge(tentity, 3, 143, 35));
int slotX;
@ -73,7 +71,7 @@ public class ContainerElectrolyticSeparator extends Container
if(slotID != 0 && slotID != 1 && slotID != 2 && slotID != 3)
{
if(isWater(slotStack))
if(isCorrectFluid(slotStack))
{
if(!mergeItemStack(slotStack, 0, 1, false))
{
@ -166,18 +164,8 @@ public class ContainerElectrolyticSeparator extends Container
return stack;
}
public boolean isWater(ItemStack itemStack)
public boolean isCorrectFluid(ItemStack itemStack)
{
FluidStack fluid = FluidContainerRegistry.getFluidForFilledItem(itemStack);
if(fluid != null)
{
if(fluid.getFluid() == FluidRegistry.WATER)
{
return true;
}
}
return false;
return RecipeHandler.Recipe.ELECTROLYTIC_SEPARATOR.containsRecipe(itemStack);
}
}

View file

@ -0,0 +1,620 @@
package mekanism.common.tileentity;
import com.google.common.io.ByteArrayDataInput;
import dan200.computer.api.IComputerAccess;
import dan200.computer.api.ILuaContext;
import dan200.computer.api.IPeripheral;
import mekanism.api.ChemicalInput;
import mekanism.api.Coord4D;
import mekanism.api.gas.*;
import mekanism.common.ISustainedTank;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.RecipeHandler;
import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.util.ChargeUtils;
import mekanism.common.util.MekanismUtils;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.*;
import java.util.ArrayList;
public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock implements IFluidHandler, IPeripheral, ITubeConnection, ISustainedTank, IGasHandler
{
/** This separator's water slot. */
public FluidTank fluidTank = new FluidTank(24000);
/** The maximum amount of gas this block can store. */
public int MAX_GAS = 2400;
/** The amount of oxygen this block is storing. */
public GasTank leftTank = new GasTank(MAX_GAS);
/** The amount of hydrogen this block is storing. */
public GasTank rightTank = new GasTank(MAX_GAS);
/** How fast this block can output gas. */
public int output = 16;
/** The type of gas this block is outputting. */
public boolean dumpLeft = false;
/** Type type of gas this block is dumping. */
public boolean dumpRight = false;
public TileEntityElectrolyticSeparator()
{
super("ElectrolyticSeparator", MachineType.ELECTROLYTIC_SEPARATOR.baseEnergy);
inventory = new ItemStack[4];
}
@Override
public void onUpdate()
{
super.onUpdate();
if(!worldObj.isRemote)
{
ChargeUtils.discharge(3, this);
if(inventory[0] != null)
{
if(RecipeHandler.Recipe.ELECTROLYTIC_SEPARATOR.containsRecipe(inventory[0]))
{
FluidStack fluid = FluidContainerRegistry.getFluidForFilledItem(inventory[0]);
if(fluidTank.getFluid() == null || fluid.isFluidEqual(fluidTank.getFluid()) && fluidTank.getFluid().amount+fluid.amount <= fluidTank.getCapacity())
{
fluidTank.fill(fluid, true);
if(inventory[0].getItem().hasContainerItem())
{
inventory[0] = inventory[0].getItem().getContainerItemStack(inventory[0]);
}
else {
inventory[0].stackSize--;
}
if(inventory[0].stackSize == 0)
{
inventory[0] = null;
}
}
}
}
if(!worldObj.isRemote)
{
if(inventory[1] != null && leftTank.getStored() > 0)
{
leftTank.draw(GasTransmission.addGas(inventory[1], leftTank.getGas()), true);
MekanismUtils.saveChunk(this);
}
if(inventory[2] != null && rightTank.getStored() > 0)
{
rightTank.draw(GasTransmission.addGas(inventory[2], rightTank.getGas()), true);
MekanismUtils.saveChunk(this);
}
}
if(canOperate())
{
fillTanks(RecipeHandler.getElectrolyticSeparatorOutput(fluidTank, true));
setEnergy(getEnergy() - Mekanism.electrolyticSeparatorUsage);
}
if(leftTank.getGas() != null)
{
if(!dumpLeft)
{
GasStack toSend = new GasStack(leftTank.getGas().getGas(), Math.min(leftTank.getStored(), output));
leftTank.draw(GasTransmission.emitGasToNetwork(toSend, this, MekanismUtils.getLeft(facing)), true);
TileEntity tileEntity = Coord4D.get(this).getFromSide(MekanismUtils.getLeft(facing)).getTileEntity(worldObj);
if(tileEntity instanceof IGasHandler)
{
if(((IGasHandler)tileEntity).canReceiveGas(ForgeDirection.getOrientation(facing).getOpposite(), leftTank.getGas().getGas()))
{
leftTank.draw(((IGasHandler)tileEntity).receiveGas(ForgeDirection.getOrientation(facing).getOpposite(), toSend), true);
}
}
}
else
{
leftTank.draw(8, true);
if(worldObj.rand.nextInt(3) == 2)
{
PacketHandler.sendPacket(Transmission.CLIENTS_RANGE, new PacketTileEntity().setParams(Coord4D.get(this), getParticlePacket(new ArrayList())), Coord4D.get(this), 40D);
}
}
}
if(rightTank.getGas() != null)
{
if(!dumpRight)
{
GasStack toSend = new GasStack(rightTank.getGas().getGas(), Math.min(rightTank.getStored(), output));
rightTank.draw(GasTransmission.emitGasToNetwork(toSend, this, MekanismUtils.getRight(facing)), true);
TileEntity tileEntity = Coord4D.get(this).getFromSide(MekanismUtils.getRight(facing)).getTileEntity(worldObj);
if(tileEntity instanceof IGasHandler)
{
if(((IGasHandler)tileEntity).canReceiveGas(ForgeDirection.getOrientation(facing).getOpposite(), rightTank.getGas().getGas()))
{
rightTank.draw(((IGasHandler)tileEntity).receiveGas(ForgeDirection.getOrientation(facing).getOpposite(), toSend), true);
}
}
}
else
{
rightTank.draw(8, true);
if(worldObj.rand.nextInt(3) == 2)
{
PacketHandler.sendPacket(Transmission.CLIENTS_RANGE, new PacketTileEntity().setParams(Coord4D.get(this), getParticlePacket(new ArrayList())), Coord4D.get(this), 40D);
}
}
}
}
}
public boolean canOperate()
{
return canFillWithSwap(RecipeHandler.getElectrolyticSeparatorOutput(fluidTank, false)) && getEnergy() >= Mekanism.electrolyticSeparatorUsage;
}
public boolean canFillWithSwap(ChemicalInput gases)
{
if(gases == null)
return false;
return canFill(gases) || canFill(gases.swap());
}
public boolean canFill(ChemicalInput gases)
{
return (leftTank.canReceive(gases.leftGas.getGas()) && leftTank.getNeeded() >= gases.leftGas.amount
&& rightTank.canReceive(gases.rightGas.getGas()) && rightTank.getNeeded() >= gases.rightGas.amount);
}
public void fillTanks(ChemicalInput gases)
{
if(gases == null) return;
if(canFill(gases))
{
leftTank.receive(gases.leftGas, true);
rightTank.receive(gases.rightGas, true);
}
else if(canFill(gases.swap()))
{
leftTank.receive(gases.rightGas, true);
rightTank.receive(gases.leftGas, true);
}
}
public void spawnParticle()
{
switch(facing)
{
case 3:
worldObj.spawnParticle("smoke", xCoord+0.1, yCoord+1, zCoord+0.25, 0.0D, 0.0D, 0.0D);
break;
case 4:
worldObj.spawnParticle("smoke", xCoord+0.75, yCoord+1, zCoord+0.1, 0.0D, 0.0D, 0.0D);
break;
case 2:
worldObj.spawnParticle("smoke", xCoord+0.9, yCoord+1, zCoord+0.75, 0.0D, 0.0D, 0.0D);
break;
case 5:
worldObj.spawnParticle("smoke", xCoord+0.25, yCoord+1, zCoord+0.9, 0.0D, 0.0D, 0.0D);
break;
}
}
@Override
public boolean canExtractItem(int slotID, ItemStack itemstack, int side)
{
if(slotID == 3)
{
return ChargeUtils.canBeOutputted(itemstack, false);
}
else if(slotID == 0)
{
return FluidContainerRegistry.isEmptyContainer(itemstack);
}
else if(slotID == 1 || slotID == 2)
{
return itemstack.getItem() instanceof IGasItem && ((IGasItem)itemstack.getItem()).getGas(itemstack) != null &&
((IGasItem)itemstack.getItem()).getGas(itemstack).amount == ((IGasItem)itemstack.getItem()).getMaxGas(itemstack);
}
return false;
}
@Override
public boolean isItemValidForSlot(int slotID, ItemStack itemstack)
{
if(slotID == 0)
{
return RecipeHandler.Recipe.ELECTROLYTIC_SEPARATOR.containsRecipe(itemstack);
}
else if(slotID == 1)
{
return itemstack.getItem() instanceof IGasItem && (((IGasItem)itemstack.getItem()).getGas(itemstack) == null || ((IGasItem)itemstack.getItem()).getGas(itemstack).getGas() == GasRegistry.getGas("hydrogen"));
}
else if(slotID == 2)
{
return itemstack.getItem() instanceof IGasItem && (((IGasItem)itemstack.getItem()).getGas(itemstack) == null || ((IGasItem)itemstack.getItem()).getGas(itemstack).getGas() == GasRegistry.getGas("oxygen"));
}
else if(slotID == 3)
{
return ChargeUtils.canBeDischarged(itemstack);
}
return true;
}
@Override
public int[] getAccessibleSlotsFromSide(int side)
{
if(ForgeDirection.getOrientation(side) == MekanismUtils.getLeft(facing))
{
return new int[] {3};
}
else if(side == facing || ForgeDirection.getOrientation(side) == ForgeDirection.getOrientation(facing).getOpposite())
{
return new int[] {1, 2};
}
return new int[] {0};
}
/**
* Gets the scaled hydrogen level for the GUI.
* @param i - multiplier
* @return
*/
public int getLeftScaledLevel(int i)
{
return leftTank.getStored()*i / MAX_GAS;
}
/**
* Gets the scaled oxygen level for the GUI.
* @param i - multiplier
* @return
*/
public int getRightScaledLevel(int i)
{
return rightTank.getStored()*i / MAX_GAS;
}
/**
* Gets the scaled water level for the GUI.
* @param i - multiplier
* @return
*/
public int getScaledFluidLevel(int i)
{
return fluidTank.getFluid() != null ? fluidTank.getFluid().amount*i / fluidTank.getCapacity() : 0;
}
/**
* Gets the scaled energy level for the GUI.
* @param i - multiplier
* @return
*/
public int getScaledEnergyLevel(int i)
{
return (int)(electricityStored*i / MAX_ELECTRICITY);
}
@Override
public void handlePacketData(ByteArrayDataInput dataStream)
{
if(!worldObj.isRemote)
{
byte type = dataStream.readByte();
if(type == 0)
{
dumpLeft ^= true;
}
else if(type == 1)
{
dumpRight ^= true;
}
return;
}
super.handlePacketData(dataStream);
int type = dataStream.readInt();
if(type == 0)
{
if(dataStream.readBoolean())
{
fluidTank.setFluid(new FluidStack(FluidRegistry.getFluid(dataStream.readInt()), dataStream.readInt()));
}
else {
fluidTank.setFluid(null);
}
if(dataStream.readBoolean())
{
leftTank.setGas(new GasStack(GasRegistry.getGas(dataStream.readInt()), dataStream.readInt()));
}
else {
leftTank.setGas(null);
}
if(dataStream.readBoolean())
{
rightTank.setGas(new GasStack(GasRegistry.getGas(dataStream.readInt()), dataStream.readInt()));
}
else {
rightTank.setGas(null);
}
dumpLeft = dataStream.readBoolean();
dumpRight = dataStream.readBoolean();
}
else if(type == 1)
{
spawnParticle();
}
}
@Override
public ArrayList getNetworkedData(ArrayList data)
{
super.getNetworkedData(data);
data.add(0);
if(fluidTank.getFluid() != null)
{
data.add(true);
data.add(fluidTank.getFluid().getFluid().getID());
data.add(fluidTank.getFluidAmount());
}
else {
data.add(false);
}
if(leftTank.getGas() != null)
{
data.add(true);
data.add(leftTank.getGas().getGas().getID());
data.add(leftTank.getStored());
}
else {
data.add(false);
}
if(rightTank.getGas() != null)
{
data.add(true);
data.add(rightTank.getGas().getGas().getID());
data.add(rightTank.getStored());
}
else {
data.add(false);
}
data.add(dumpLeft);
data.add(dumpRight);
return data;
}
public ArrayList getParticlePacket(ArrayList data)
{
super.getNetworkedData(data);
data.add(1);
return data;
}
@Override
public void readFromNBT(NBTTagCompound nbtTags)
{
super.readFromNBT(nbtTags);
if(nbtTags.hasKey("fluidTank"))
{
fluidTank.readFromNBT(nbtTags.getCompoundTag("fluidTank"));
}
leftTank.read(nbtTags.getCompoundTag("leftTank"));
rightTank.read(nbtTags.getCompoundTag("rightTank"));
dumpLeft = nbtTags.getBoolean("dumpLeft");
dumpRight = nbtTags.getBoolean("dumpRight");
}
@Override
public void writeToNBT(NBTTagCompound nbtTags)
{
super.writeToNBT(nbtTags);
if(fluidTank.getFluid() != null)
{
nbtTags.setTag("fluidTank", fluidTank.writeToNBT(new NBTTagCompound()));
}
nbtTags.setCompoundTag("leftTank", leftTank.write(new NBTTagCompound()));
nbtTags.setCompoundTag("rightTank", rightTank.write(new NBTTagCompound()));
nbtTags.setBoolean("dumpLeft", dumpLeft);
nbtTags.setBoolean("dumpRight", dumpRight);
}
@Override
public String getType()
{
return getInvName();
}
@Override
public String[] getMethodNames()
{
return new String[] {"getStored", "getOutput", "getMaxEnergy", "getEnergyNeeded", "getWater", "getWaterNeeded", "getHydrogen", "getHydrogenNeeded", "getOxygen", "getOxygenNeeded"};
}
@Override
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws Exception
{
switch(method)
{
case 0:
return new Object[] {electricityStored};
case 1:
return new Object[] {output};
case 2:
return new Object[] {MAX_ELECTRICITY};
case 3:
return new Object[] {(MAX_ELECTRICITY-electricityStored)};
case 4:
return new Object[] {fluidTank.getFluid() != null ? fluidTank.getFluid().amount : 0};
case 5:
return new Object[] {fluidTank.getFluid() != null ? (fluidTank.getCapacity()- fluidTank.getFluid().amount) : 0};
case 6:
return new Object[] {leftTank.getStored()};
case 7:
return new Object[] {leftTank.getNeeded()};
case 8:
return new Object[] {rightTank.getStored()};
case 9:
return new Object[] {rightTank.getNeeded()};
default:
System.err.println("[Mekanism] Attempted to call unknown method with computer ID " + computer.getID());
return new Object[] {"Unknown command."};
}
}
@Override
public boolean canAttachToSide(int side)
{
return true;
}
@Override
public void attach(IComputerAccess computer) {}
@Override
public void detach(IComputerAccess computer) {}
@Override
public boolean canTubeConnect(ForgeDirection side)
{
return side == MekanismUtils.getLeft(facing) || side == MekanismUtils.getRight(facing);
}
@Override
public void setFluidStack(FluidStack fluidStack, Object... data)
{
fluidTank.setFluid(fluidStack);
}
@Override
public FluidStack getFluidStack(Object... data)
{
return fluidTank.getFluid();
}
@Override
public boolean hasTank(Object... data)
{
return true;
}
@Override
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
{
return null;
}
@Override
public boolean canFill(ForgeDirection from, Fluid fluid)
{
return RecipeHandler.Recipe.ELECTROLYTIC_SEPARATOR.containsRecipe(fluid);
}
@Override
public boolean canDrain(ForgeDirection from, Fluid fluid)
{
return false;
}
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{
if(RecipeHandler.Recipe.ELECTROLYTIC_SEPARATOR.containsRecipe(resource.getFluid()))
{
return fluidTank.fill(resource, doFill);
}
return 0;
}
@Override
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
{
return null;
}
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection from)
{
return new FluidTankInfo[] {fluidTank.getInfo()};
}
@Override
public int receiveGas(ForgeDirection side, GasStack stack) {
return 0;
}
@Override
public GasStack drawGas(ForgeDirection side, int amount) {
if(side == MekanismUtils.getLeft(facing))
{
return leftTank.draw(amount, true);
}
else if(side == MekanismUtils.getRight(facing))
{
return rightTank.draw(amount, true);
}
return null;
}
@Override
public boolean canReceiveGas(ForgeDirection side, Gas type) {
return false;
}
@Override
public boolean canDrawGas(ForgeDirection side, Gas type) {
if(side == MekanismUtils.getLeft(facing))
{
return leftTank.getGas() != null && leftTank.getGas().getGas() == type;
}
if(side == MekanismUtils.getRight(facing))
{
return rightTank.getGas() != null && rightTank.getGas().getGas() == type;
}
return false;
}
}

View file

@ -1,28 +1,20 @@
package mekanism.generators.client;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mekanism.client.render.MekanismRenderer;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import mekanism.generators.client.model.ModelAdvancedSolarGenerator;
import mekanism.generators.client.model.ModelBioGenerator;
import mekanism.generators.client.model.ModelElectrolyticSeparator;
import mekanism.generators.client.model.ModelHeatGenerator;
import mekanism.generators.client.model.ModelHydrogenGenerator;
import mekanism.generators.client.model.ModelSolarGenerator;
import mekanism.generators.client.model.ModelWindTurbine;
import mekanism.generators.client.model.*;
import mekanism.generators.common.MekanismGenerators;
import mekanism.generators.common.block.BlockGenerator.GeneratorType;
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 BlockRenderingHandler implements ISimpleBlockRenderingHandler
{
@ -31,7 +23,6 @@ public class BlockRenderingHandler implements ISimpleBlockRenderingHandler
public ModelBioGenerator bioGenerator = new ModelBioGenerator();
public ModelHeatGenerator heatGenerator = new ModelHeatGenerator();
public ModelHydrogenGenerator hydrogenGenerator = new ModelHydrogenGenerator();
public ModelElectrolyticSeparator electrolyticSeparator = new ModelElectrolyticSeparator();
public ModelWindTurbine windTurbine = new ModelWindTurbine();
@Override
@ -82,13 +73,6 @@ public class BlockRenderingHandler implements ISimpleBlockRenderingHandler
Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "HydrogenGenerator.png"));
hydrogenGenerator.render(0.0625F);
}
else if(metadata == GeneratorType.ELECTROLYTIC_SEPARATOR.meta)
{
GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
GL11.glTranslated(0.0F, -1.0F, 0.0F);
Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ElectrolyticSeparatorHydrogen.png"));
electrolyticSeparator.render(0.0625F);
}
else if(metadata == GeneratorType.WIND_TURBINE.meta)
{
GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);

View file

@ -1,34 +1,17 @@
package mekanism.generators.client;
import mekanism.generators.client.gui.GuiBioGenerator;
import mekanism.generators.client.gui.GuiElectrolyticSeparator;
import mekanism.generators.client.gui.GuiHeatGenerator;
import mekanism.generators.client.gui.GuiHydrogenGenerator;
import mekanism.generators.client.gui.GuiSolarGenerator;
import mekanism.generators.client.gui.GuiWindTurbine;
import mekanism.generators.client.render.RenderAdvancedSolarGenerator;
import mekanism.generators.client.render.RenderBioGenerator;
import mekanism.generators.client.render.RenderElectrolyticSeparator;
import mekanism.generators.client.render.RenderHeatGenerator;
import mekanism.generators.client.render.RenderHydrogenGenerator;
import mekanism.generators.client.render.RenderSolarGenerator;
import mekanism.generators.client.render.RenderWindTurbine;
import mekanism.generators.common.GeneratorsCommonProxy;
import mekanism.generators.common.tileentity.TileEntityAdvancedSolarGenerator;
import mekanism.generators.common.tileentity.TileEntityBioGenerator;
import mekanism.generators.common.tileentity.TileEntityElectrolyticSeparator;
import mekanism.generators.common.tileentity.TileEntityHeatGenerator;
import mekanism.generators.common.tileentity.TileEntityHydrogenGenerator;
import mekanism.generators.common.tileentity.TileEntitySolarGenerator;
import mekanism.generators.common.tileentity.TileEntityWindTurbine;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mekanism.generators.client.gui.*;
import mekanism.generators.client.render.*;
import mekanism.generators.common.GeneratorsCommonProxy;
import mekanism.generators.common.tileentity.*;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@SideOnly(Side.CLIENT)
public class GeneratorsClientProxy extends GeneratorsCommonProxy
@ -43,7 +26,6 @@ public class GeneratorsClientProxy extends GeneratorsCommonProxy
ClientRegistry.registerTileEntity(TileEntityBioGenerator.class, "BioGenerator", new RenderBioGenerator());
ClientRegistry.registerTileEntity(TileEntityHeatGenerator.class, "HeatGenerator", new RenderHeatGenerator());
ClientRegistry.registerTileEntity(TileEntityHydrogenGenerator.class, "HydrogenGenerator", new RenderHydrogenGenerator());
ClientRegistry.registerTileEntity(TileEntityElectrolyticSeparator.class, "ElectrolyticSeparator", new RenderElectrolyticSeparator());
ClientRegistry.registerTileEntity(TileEntityWindTurbine.class, "WindTurbine", new RenderWindTurbine());
}
@ -67,8 +49,6 @@ public class GeneratorsClientProxy extends GeneratorsCommonProxy
return new GuiHeatGenerator(player.inventory, (TileEntityHeatGenerator)tileEntity);
case 1:
return new GuiSolarGenerator(player.inventory, (TileEntitySolarGenerator)tileEntity);
case 2:
return new GuiElectrolyticSeparator(player.inventory, (TileEntityElectrolyticSeparator)tileEntity);
case 3:
return new GuiHydrogenGenerator(player.inventory, (TileEntityHydrogenGenerator)tileEntity);
case 4:

View file

@ -1,24 +1,13 @@
package mekanism.generators.common;
import cpw.mods.fml.common.registry.GameRegistry;
import mekanism.common.Mekanism;
import mekanism.generators.common.inventory.container.ContainerBioGenerator;
import mekanism.generators.common.inventory.container.ContainerElectrolyticSeparator;
import mekanism.generators.common.inventory.container.ContainerHeatGenerator;
import mekanism.generators.common.inventory.container.ContainerHydrogenGenerator;
import mekanism.generators.common.inventory.container.ContainerSolarGenerator;
import mekanism.generators.common.inventory.container.ContainerWindTurbine;
import mekanism.generators.common.tileentity.TileEntityAdvancedSolarGenerator;
import mekanism.generators.common.tileentity.TileEntityBioGenerator;
import mekanism.generators.common.tileentity.TileEntityElectrolyticSeparator;
import mekanism.generators.common.tileentity.TileEntityHeatGenerator;
import mekanism.generators.common.tileentity.TileEntityHydrogenGenerator;
import mekanism.generators.common.tileentity.TileEntitySolarGenerator;
import mekanism.generators.common.tileentity.TileEntityWindTurbine;
import mekanism.generators.common.inventory.container.*;
import mekanism.generators.common.tileentity.*;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import cpw.mods.fml.common.registry.GameRegistry;
/**
* Common proxy for the Mekanism Generators module.
@ -37,7 +26,6 @@ public class GeneratorsCommonProxy
GameRegistry.registerTileEntity(TileEntityBioGenerator.class, "BioGenerator");
GameRegistry.registerTileEntity(TileEntityHeatGenerator.class, "HeatGenerator");
GameRegistry.registerTileEntity(TileEntityHydrogenGenerator.class, "HydrogenGenerator");
GameRegistry.registerTileEntity(TileEntityElectrolyticSeparator.class, "ElectrolyticSeparator");
GameRegistry.registerTileEntity(TileEntityWindTurbine.class, "WindTurbine");
}
@ -59,7 +47,6 @@ public class GeneratorsCommonProxy
MekanismGenerators.hydrogenGeneration = Mekanism.configuration.get("generation", "HydrogenGeneration", 400D).getDouble(400D);
MekanismGenerators.solarGeneration = Mekanism.configuration.get("generation", "SolarGeneration", 50D).getDouble(50D);
MekanismGenerators.windGeneration = Mekanism.configuration.get("generation", "WindGeneration", 50D).getDouble(50D);
MekanismGenerators.electrolyticSeparatorUsage = Mekanism.configuration.get("usage", "ElectrolyticSeparatorUsage", 50D).getDouble(50D);
Mekanism.configuration.save();
}
@ -98,8 +85,6 @@ public class GeneratorsCommonProxy
return new ContainerHeatGenerator(player.inventory, (TileEntityHeatGenerator)tileEntity);
case 1:
return new ContainerSolarGenerator(player.inventory, (TileEntitySolarGenerator)tileEntity);
case 2:
return new ContainerElectrolyticSeparator(player.inventory, (TileEntityElectrolyticSeparator)tileEntity);
case 3:
return new ContainerHydrogenGenerator(player.inventory, (TileEntityHydrogenGenerator)tileEntity);
case 4:

View file

@ -1,23 +1,5 @@
package mekanism.generators.common;
import mekanism.api.infuse.InfuseObject;
import mekanism.api.infuse.InfuseRegistry;
import mekanism.api.infuse.InfuseType;
import mekanism.common.IModule;
import mekanism.common.Mekanism;
import mekanism.common.MekanismRecipe;
import mekanism.common.RecipeHandler;
import mekanism.common.Version;
import mekanism.common.item.ItemMekanism;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import mekanism.generators.common.block.BlockGenerator;
import mekanism.generators.common.item.ItemBlockGenerator;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraftforge.oredict.OreDictionary;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
@ -28,6 +10,20 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import mekanism.api.infuse.InfuseObject;
import mekanism.api.infuse.InfuseRegistry;
import mekanism.api.infuse.InfuseType;
import mekanism.common.*;
import mekanism.common.item.ItemMekanism;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import mekanism.generators.common.block.BlockGenerator;
import mekanism.generators.common.item.ItemBlockGenerator;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraftforge.oredict.OreDictionary;
@Mod(modid = "MekanismGenerators", name = "MekanismGenerators", version = "6.0.0", dependencies = "required-after:Mekanism")
@NetworkMod(clientSideRequired = true, serverSideRequired = false)
@ -44,7 +40,6 @@ public class MekanismGenerators implements IModule
//Items
public static Item BioFuel;
public static Item ElectrolyticCore;
public static Item SolarPanel;
//Blocks
@ -61,9 +56,6 @@ public class MekanismGenerators implements IModule
public static double solarGeneration;
public static double windGeneration;
//Usage Configuration
public static double electrolyticSeparatorUsage;
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
@ -122,14 +114,8 @@ public class MekanismGenerators implements IModule
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(Generator, 1, 4), new Object[] {
"RER", "BCB", "NEN", Character.valueOf('R'), Item.redstone, Character.valueOf('E'), Mekanism.EnrichedAlloy, Character.valueOf('B'), BioFuel, Character.valueOf('C'), "circuitBasic", Character.valueOf('N'), Item.ingotIron
}));
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(Generator, 1, 2), new Object[] {
"IRI", "ECE", "IRI", Character.valueOf('I'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('E'), Mekanism.EnrichedAlloy, Character.valueOf('C'), ElectrolyticCore
}));
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(Generator, 1, 3), new Object[] {
"PEP", "ICI", "PEP", Character.valueOf('P'), "ingotOsmium", Character.valueOf('E'), Mekanism.EnrichedAlloy, Character.valueOf('I'), new ItemStack(Mekanism.BasicBlock, 1, 8), Character.valueOf('C'), ElectrolyticCore
}));
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(ElectrolyticCore), new Object[] {
"EPE", "IEG", "EPE", Character.valueOf('E'), Mekanism.EnrichedAlloy, Character.valueOf('P'), "dustOsmium", Character.valueOf('I'), "dustIron", Character.valueOf('G'), "dustGold"
"PEP", "ICI", "PEP", Character.valueOf('P'), "ingotOsmium", Character.valueOf('E'), Mekanism.EnrichedAlloy, Character.valueOf('I'), new ItemStack(Mekanism.BasicBlock, 1, 8), Character.valueOf('C'), Mekanism.ElectrolyticCore
}));
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(SolarPanel), new Object[] {
"GGG", "RAR", "PPP", Character.valueOf('G'), Block.thinGlass, Character.valueOf('R'), Item.redstone, Character.valueOf('A'), Mekanism.EnrichedAlloy, Character.valueOf('P'), "ingotOsmium"
@ -167,13 +153,11 @@ public class MekanismGenerators implements IModule
Mekanism.configuration.load();
SolarPanel = new ItemMekanism(Mekanism.configuration.getItem("SolarPanel", 11300).getInt()).setUnlocalizedName("SolarPanel");
BioFuel = new ItemMekanism(Mekanism.configuration.getItem("BioFuel", 11301).getInt()).setUnlocalizedName("BioFuel");
ElectrolyticCore = new ItemMekanism(Mekanism.configuration.getItem("ElectrolyticCore", 11302).getInt()).setUnlocalizedName("ElectrolyticCore");
Mekanism.configuration.save();
//Registrations
GameRegistry.registerItem(SolarPanel, "SolarPanel");
GameRegistry.registerItem(BioFuel, "BioFuel");
GameRegistry.registerItem(ElectrolyticCore, "ElectrolyticCore");
//Ore Dictionary
OreDictionary.registerOre("itemBioFuel", new ItemStack(BioFuel));

View file

@ -1,28 +1,16 @@
package mekanism.generators.common.block;
import java.util.List;
import java.util.Random;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mekanism.api.energy.IEnergizedItem;
import mekanism.common.IActiveState;
import mekanism.common.IBoundingBlock;
import mekanism.common.ISpecialBounds;
import mekanism.common.ISustainedInventory;
import mekanism.common.ISustainedTank;
import mekanism.common.ItemAttacher;
import mekanism.common.Mekanism;
import mekanism.common.*;
import mekanism.common.tileentity.TileEntityBasicBlock;
import mekanism.common.tileentity.TileEntityElectricBlock;
import mekanism.common.util.MekanismUtils;
import mekanism.generators.client.GeneratorsClientProxy;
import mekanism.generators.common.MekanismGenerators;
import mekanism.generators.common.tileentity.TileEntityAdvancedSolarGenerator;
import mekanism.generators.common.tileentity.TileEntityBioGenerator;
import mekanism.generators.common.tileentity.TileEntityElectrolyticSeparator;
import mekanism.generators.common.tileentity.TileEntityHeatGenerator;
import mekanism.generators.common.tileentity.TileEntityHydrogenGenerator;
import mekanism.generators.common.tileentity.TileEntitySolarGenerator;
import mekanism.generators.common.tileentity.TileEntityWindTurbine;
import mekanism.generators.common.tileentity.*;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
@ -37,16 +25,14 @@ import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.List;
import java.util.Random;
/**
* Block class for handling multiple generator block IDs.
* 0: Heat Generator
* 1: Solar Generator
* 2: Electrolytic Separator
* 3: Hydrogen Generator
* 4: Bio-Generator
* 5: Advanced Solar Generator
@ -88,34 +74,6 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
{
TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z);
//If the block is a electrolytic separator.
if(world.getBlockMetadata(x, y, z) == 2)
{
boolean hasReactor = false;
//Loop through all possible orientations.
for(ForgeDirection direction : ForgeDirection.values())
{
int xPos = x + direction.offsetX;
int yPos = y + direction.offsetY;
int zPos = z + direction.offsetZ;
//If this orientation faces a hydrogen reactor.
if(world.getBlockId(xPos, yPos, zPos) == MekanismGenerators.generatorID && world.getBlockMetadata(xPos, yPos, zPos) == 3)
{
hasReactor = true;
//Set the separator's facing towards the reactor.
tileEntity.setFacing((short)direction.ordinal());
break;
}
}
//If there was a reactor next to this machine, no further calculations are needed.
if(hasReactor)
{
return;
}
}
int side = MathHelper.floor_double((double)(entityliving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
int height = Math.round(entityliving.rotationPitch);
int change = 3;
@ -180,7 +138,6 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
{
list.add(new ItemStack(i, 1, 0));
list.add(new ItemStack(i, 1, 1));
list.add(new ItemStack(i, 1, 2));
list.add(new ItemStack(i, 1, 3));
list.add(new ItemStack(i, 1, 4));
list.add(new ItemStack(i, 1, 5));
@ -203,7 +160,7 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
if(tileEntity.facing == 4)
{
switch(GeneratorType.values()[metadata])
switch(GeneratorType.getFromMetadata(metadata))
{
case HEAT_GENERATOR:
world.spawnParticle("smoke", (double)(xRandom + iRandom), (double)yRandom, (double)(zRandom - jRandom), 0.0D, 0.0D, 0.0D);
@ -218,7 +175,7 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
}
else if(tileEntity.facing == 5)
{
switch(GeneratorType.values()[metadata])
switch(GeneratorType.getFromMetadata(metadata))
{
case HEAT_GENERATOR:
world.spawnParticle("smoke", (double)(xRandom - iRandom), (double)yRandom, (double)(zRandom - jRandom), 0.0D, 0.0D, 0.0D);
@ -233,7 +190,7 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
}
else if(tileEntity.facing == 2)
{
switch(GeneratorType.values()[metadata])
switch(GeneratorType.getFromMetadata(metadata))
{
case HEAT_GENERATOR:
world.spawnParticle("smoke", (double)(xRandom - jRandom), (double)yRandom, (double)(zRandom + iRandom), 0.0D, 0.0D, 0.0D);
@ -248,7 +205,7 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
}
else if(tileEntity.facing == 3)
{
switch(GeneratorType.values()[metadata])
switch(GeneratorType.getFromMetadata(metadata))
{
case HEAT_GENERATOR:
world.spawnParticle("smoke", (double)(xRandom - jRandom), (double)yRandom, (double)(zRandom - iRandom), 0.0D, 0.0D, 0.0D);
@ -526,7 +483,6 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
{
HEAT_GENERATOR(0, "HeatGenerator", 0, 160000, TileEntityHeatGenerator.class, true),
SOLAR_GENERATOR(1, "SolarGenerator", 1, 96000, TileEntitySolarGenerator.class, true),
ELECTROLYTIC_SEPARATOR(2, "ElectrolyticSeparator", 2, 20000, TileEntityElectrolyticSeparator.class, true),
HYDROGEN_GENERATOR(3, "HydrogenGenerator", 3, 40000, TileEntityHydrogenGenerator.class, true),
BIO_GENERATOR(4, "BioGenerator", 4, 160000, TileEntityBioGenerator.class, true),
ADVANCED_SOLAR_GENERATOR(5, "AdvancedSolarGenerator", 1, 200000, TileEntityAdvancedSolarGenerator.class, true),
@ -551,7 +507,12 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
public static GeneratorType getFromMetadata(int meta)
{
return values()[meta];
for(GeneratorType type : values())
{
if(type.meta == meta)
return type;
}
return null;
}
public TileEntity create()

View file

@ -1,10 +1,10 @@
package mekanism.generators.common.item;
import cofh.api.energy.IEnergyContainerItem;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ic2.api.item.IElectricItemManager;
import ic2.api.item.ISpecialElectricItem;
import java.util.List;
import mekanism.api.EnumColor;
import mekanism.api.energy.IEnergizedItem;
import mekanism.common.ISustainedInventory;
@ -24,18 +24,14 @@ import net.minecraft.util.Icon;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import org.lwjgl.input.Keyboard;
import cofh.api.energy.IEnergyContainerItem;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.List;
/**
* Item class for handling multiple generator block IDs.
* 0: Heat Generator
* 1: Solar Generator
* 2: Electrolytic Separator
* 3: Hydrogen Generator
* 4: Bio-Generator
* 5: Advanced Solar Generator
@ -305,13 +301,13 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, ISp
@Override
public boolean canReceive(ItemStack itemStack)
{
return itemStack.getItemDamage() == GeneratorType.ELECTROLYTIC_SEPARATOR.meta;
return false;
}
@Override
public boolean canSend(ItemStack itemStack)
{
return itemStack.getItemDamage() != GeneratorType.ELECTROLYTIC_SEPARATOR.meta;
return true;
}
@Override

View file

@ -1,542 +0,0 @@
package mekanism.generators.common.tileentity;
import java.util.ArrayList;
import java.util.Random;
import mekanism.api.Coord4D;
import mekanism.api.gas.Gas;
import mekanism.api.gas.GasRegistry;
import mekanism.api.gas.GasStack;
import mekanism.api.gas.GasTransmission;
import mekanism.api.gas.IGasHandler;
import mekanism.api.gas.IGasItem;
import mekanism.api.gas.ITubeConnection;
import mekanism.common.ISustainedTank;
import mekanism.common.PacketHandler;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketTileEntity;
import mekanism.common.tileentity.TileEntityElectricBlock;
import mekanism.common.util.ChargeUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.generators.common.MekanismGenerators;
import mekanism.generators.common.block.BlockGenerator.GeneratorType;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import com.google.common.io.ByteArrayDataInput;
import dan200.computer.api.IComputerAccess;
import dan200.computer.api.ILuaContext;
import dan200.computer.api.IPeripheral;
public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock implements IFluidHandler, IPeripheral, ITubeConnection, ISustainedTank
{
/** This separator's water slot. */
public FluidTank waterTank = new FluidTank(24000);
/** The maximum amount of gas this block can store. */
public int MAX_GAS = 2400;
/** The amount of oxygen this block is storing. */
public int oxygenStored;
/** The amount of hydrogen this block is storing. */
public int hydrogenStored;
/** How fast this block can output gas. */
public int output = 16;
/** The type of gas this block is outputting. */
public Gas outputType;
/** Type type of gas this block is dumping. */
public Gas dumpType;
public TileEntityElectrolyticSeparator()
{
super("ElectrolyticSeparator", GeneratorType.ELECTROLYTIC_SEPARATOR.maxEnergy);
inventory = new ItemStack[4];
outputType = GasRegistry.getGas("oxygen");
dumpType = null;
}
@Override
public void onUpdate()
{
super.onUpdate();
if(!worldObj.isRemote)
{
ChargeUtils.discharge(3, this);
if(inventory[0] != null)
{
FluidStack fluid = FluidContainerRegistry.getFluidForFilledItem(inventory[0]);
if(fluid != null && fluid.getFluid() == FluidRegistry.WATER)
{
if(waterTank.getFluid() == null || waterTank.getFluid().amount+fluid.amount <= waterTank.getCapacity())
{
waterTank.fill(fluid, true);
if(inventory[0].getItem().hasContainerItem())
{
inventory[0] = inventory[0].getItem().getContainerItemStack(inventory[0]);
}
else {
inventory[0].stackSize--;
}
if(inventory[0].stackSize == 0)
{
inventory[0] = null;
}
}
}
}
if(!worldObj.isRemote)
{
if(inventory[1] != null && hydrogenStored > 0)
{
hydrogenStored -= GasTransmission.addGas(inventory[1], new GasStack(GasRegistry.getGas("hydrogen"), hydrogenStored));
MekanismUtils.saveChunk(this);
}
if(inventory[2] != null && oxygenStored > 0)
{
hydrogenStored -= GasTransmission.addGas(inventory[2], new GasStack(GasRegistry.getGas("oxygen"), oxygenStored));
MekanismUtils.saveChunk(this);
}
}
if(oxygenStored < MAX_GAS && hydrogenStored < MAX_GAS && waterTank.getFluid() != null && waterTank.getFluid().amount-2 >= 0 && getEnergy()-100 > 0)
{
waterTank.drain(2, true);
setEnergy(getEnergy() - MekanismGenerators.electrolyticSeparatorUsage);
setStored(GasRegistry.getGas("oxygen"), oxygenStored + 1);
setStored(GasRegistry.getGas("hydrogen"), hydrogenStored + 2);
}
if(outputType != null && getStored(outputType) > 0)
{
GasStack toSend = new GasStack(outputType, Math.min(getStored(outputType), output));
setStored(outputType, getStored(outputType) - GasTransmission.emitGasToNetwork(toSend, this, ForgeDirection.getOrientation(facing)));
TileEntity tileEntity = Coord4D.get(this).getFromSide(ForgeDirection.getOrientation(facing)).getTileEntity(worldObj);
if(tileEntity instanceof IGasHandler)
{
if(((IGasHandler)tileEntity).canReceiveGas(ForgeDirection.getOrientation(facing).getOpposite(), outputType))
{
int added = ((IGasHandler)tileEntity).receiveGas(ForgeDirection.getOrientation(facing).getOpposite(), new GasStack(outputType, Math.min(getStored(outputType), output)));
setStored(outputType, getStored(outputType) - added);
}
}
}
if(dumpType != null && getStored(dumpType) > 0)
{
setStored(dumpType, (getStored(dumpType) - 8));
if(worldObj.rand.nextInt(3) == 2)
{
PacketHandler.sendPacket(Transmission.CLIENTS_RANGE, new PacketTileEntity().setParams(Coord4D.get(this), getParticlePacket(new ArrayList())), Coord4D.get(this), 40D);
}
}
}
}
public int getStored(Gas gas)
{
if(gas == GasRegistry.getGas("oxygen"))
{
return oxygenStored;
}
else if(gas == GasRegistry.getGas("hydrogen"))
{
return hydrogenStored;
}
return 0;
}
public void setStored(Gas type, int amount)
{
if(type == GasRegistry.getGas("hydrogen"))
{
hydrogenStored = Math.max(Math.min(amount, MAX_GAS), 0);
}
else if(type == GasRegistry.getGas("oxygen"))
{
oxygenStored = Math.max(Math.min(amount, MAX_GAS), 0);
}
MekanismUtils.saveChunk(this);
}
public void spawnParticle()
{
switch(facing)
{
case 3:
worldObj.spawnParticle("smoke", xCoord+0.1, yCoord+1, zCoord+0.25, 0.0D, 0.0D, 0.0D);
break;
case 4:
worldObj.spawnParticle("smoke", xCoord+0.75, yCoord+1, zCoord+0.1, 0.0D, 0.0D, 0.0D);
break;
case 2:
worldObj.spawnParticle("smoke", xCoord+0.9, yCoord+1, zCoord+0.75, 0.0D, 0.0D, 0.0D);
break;
case 5:
worldObj.spawnParticle("smoke", xCoord+0.25, yCoord+1, zCoord+0.9, 0.0D, 0.0D, 0.0D);
break;
}
}
@Override
public boolean canExtractItem(int slotID, ItemStack itemstack, int side)
{
if(slotID == 3)
{
return ChargeUtils.canBeOutputted(itemstack, false);
}
else if(slotID == 0)
{
return FluidContainerRegistry.isEmptyContainer(itemstack);
}
else if(slotID == 1 || slotID == 2)
{
return itemstack.getItem() instanceof IGasItem && ((IGasItem)itemstack.getItem()).getGas(itemstack) != null &&
((IGasItem)itemstack.getItem()).getGas(itemstack).amount == ((IGasItem)itemstack.getItem()).getMaxGas(itemstack);
}
return false;
}
@Override
public boolean isItemValidForSlot(int slotID, ItemStack itemstack)
{
if(slotID == 0)
{
return FluidContainerRegistry.getFluidForFilledItem(itemstack) != null && FluidContainerRegistry.getFluidForFilledItem(itemstack).getFluid() == FluidRegistry.WATER;
}
else if(slotID == 1)
{
return itemstack.getItem() instanceof IGasItem && (((IGasItem)itemstack.getItem()).getGas(itemstack) == null || ((IGasItem)itemstack.getItem()).getGas(itemstack).getGas() == GasRegistry.getGas("hydrogen"));
}
else if(slotID == 2)
{
return itemstack.getItem() instanceof IGasItem && (((IGasItem)itemstack.getItem()).getGas(itemstack) == null || ((IGasItem)itemstack.getItem()).getGas(itemstack).getGas() == GasRegistry.getGas("oxygen"));
}
else if(slotID == 3)
{
return ChargeUtils.canBeDischarged(itemstack);
}
return true;
}
@Override
public int[] getAccessibleSlotsFromSide(int side)
{
if(ForgeDirection.getOrientation(side) == MekanismUtils.getLeft(facing))
{
return new int[] {3};
}
else if(side == facing || ForgeDirection.getOrientation(side) == ForgeDirection.getOrientation(facing).getOpposite())
{
return new int[] {1, 2};
}
return new int[] {0};
}
/**
* Gets the scaled hydrogen level for the GUI.
* @param i - multiplier
* @return
*/
public int getScaledHydrogenLevel(int i)
{
return hydrogenStored*i / MAX_GAS;
}
/**
* Gets the scaled oxygen level for the GUI.
* @param i - multiplier
* @return
*/
public int getScaledOxygenLevel(int i)
{
return oxygenStored*i / MAX_GAS;
}
/**
* Gets the scaled water level for the GUI.
* @param i - multiplier
* @return
*/
public int getScaledWaterLevel(int i)
{
return waterTank.getFluid() != null ? waterTank.getFluid().amount*i / waterTank.getCapacity() : 0;
}
/**
* Gets the scaled energy level for the GUI.
* @param i - multiplier
* @return
*/
public int getScaledEnergyLevel(int i)
{
return (int)(electricityStored*i / MAX_ELECTRICITY);
}
@Override
public void handlePacketData(ByteArrayDataInput dataStream)
{
if(!worldObj.isRemote)
{
byte type = dataStream.readByte();
if(type == 0)
{
outputType = GasRegistry.getGas(dataStream.readInt());
}
else if(type == 1)
{
dumpType = GasRegistry.getGas(dataStream.readInt());
}
return;
}
super.handlePacketData(dataStream);
int type = dataStream.readInt();
if(type == 0)
{
int amount = dataStream.readInt();
if(amount != 0)
{
waterTank.setFluid(new FluidStack(FluidRegistry.WATER, amount));
}
else {
waterTank.setFluid(null);
}
oxygenStored = dataStream.readInt();
hydrogenStored = dataStream.readInt();
outputType = GasRegistry.getGas(dataStream.readInt());
dumpType = GasRegistry.getGas(dataStream.readInt());
}
else if(type == 1)
{
spawnParticle();
}
}
@Override
public ArrayList getNetworkedData(ArrayList data)
{
super.getNetworkedData(data);
data.add(0);
if(waterTank.getFluid() != null)
{
data.add(waterTank.getFluid().amount);
}
else {
data.add(0);
}
data.add(oxygenStored);
data.add(hydrogenStored);
data.add(GasRegistry.getGasID(outputType));
data.add(GasRegistry.getGasID(dumpType));
return data;
}
public ArrayList getParticlePacket(ArrayList data)
{
super.getNetworkedData(data);
data.add(1);
return data;
}
@Override
public void readFromNBT(NBTTagCompound nbtTags)
{
super.readFromNBT(nbtTags);
hydrogenStored = nbtTags.getInteger("hydrogenStored");
oxygenStored = nbtTags.getInteger("oxygenStored");
if(nbtTags.hasKey("waterTank"))
{
waterTank.readFromNBT(nbtTags.getCompoundTag("waterTank"));
}
try {
outputType = Gas.readFromNBT(nbtTags.getCompoundTag("outputType"));
dumpType = Gas.readFromNBT(nbtTags.getCompoundTag("dumpType"));
} catch(Exception e) {} //TODO remove next major release
}
@Override
public void writeToNBT(NBTTagCompound nbtTags)
{
super.writeToNBT(nbtTags);
nbtTags.setInteger("hydrogenStored", hydrogenStored);
nbtTags.setInteger("oxygenStored", oxygenStored);
if(waterTank.getFluid() != null)
{
nbtTags.setTag("waterTank", waterTank.writeToNBT(new NBTTagCompound()));
}
if(outputType != null)
{
nbtTags.setCompoundTag("outputType", outputType.write(new NBTTagCompound()));
}
if(dumpType != null)
{
nbtTags.setCompoundTag("dumpType", dumpType.write(new NBTTagCompound()));
}
}
@Override
public String getType()
{
return getInvName();
}
@Override
public String[] getMethodNames()
{
return new String[] {"getStored", "getOutput", "getMaxEnergy", "getEnergyNeeded", "getWater", "getWaterNeeded", "getHydrogen", "getHydrogenNeeded", "getOxygen", "getOxygenNeeded"};
}
@Override
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws Exception
{
switch(method)
{
case 0:
return new Object[] {electricityStored};
case 1:
return new Object[] {output};
case 2:
return new Object[] {MAX_ELECTRICITY};
case 3:
return new Object[] {(MAX_ELECTRICITY-electricityStored)};
case 4:
return new Object[] {waterTank.getFluid() != null ? waterTank.getFluid().amount : 0};
case 5:
return new Object[] {waterTank.getFluid() != null ? (waterTank.getCapacity()-waterTank.getFluid().amount) : 0};
case 6:
return new Object[] {hydrogenStored};
case 7:
return new Object[] {MAX_GAS-hydrogenStored};
case 8:
return new Object[] {oxygenStored};
case 9:
return new Object[] {MAX_GAS-oxygenStored};
default:
System.err.println("[Mekanism] Attempted to call unknown method with computer ID " + computer.getID());
return new Object[] {"Unknown command."};
}
}
@Override
public boolean canAttachToSide(int side)
{
return true;
}
@Override
public void attach(IComputerAccess computer) {}
@Override
public void detach(IComputerAccess computer) {}
@Override
public boolean canTubeConnect(ForgeDirection side)
{
return side == ForgeDirection.getOrientation(facing);
}
@Override
public void setFluidStack(FluidStack fluidStack, Object... data)
{
waterTank.setFluid(fluidStack);
}
@Override
public FluidStack getFluidStack(Object... data)
{
return waterTank.getFluid();
}
@Override
public boolean hasTank(Object... data)
{
return true;
}
@Override
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
{
return null;
}
@Override
public boolean canFill(ForgeDirection from, Fluid fluid)
{
return fluid == FluidRegistry.WATER;
}
@Override
public boolean canDrain(ForgeDirection from, Fluid fluid)
{
return false;
}
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{
if(resource.getFluid() == FluidRegistry.WATER)
{
return waterTank.fill(resource, doFill);
}
return 0;
}
@Override
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
{
return null;
}
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection from)
{
return new FluidTankInfo[] {waterTank.getInfo()};
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -26,6 +26,7 @@ item.Jetpack.name=Jetpack
item.ScubaTank.name=Taucherflasche
item.GasMask.name=Gasmaske
item.Dictionary.name=Lexikon
item.ElectrolyticCore.name=Elektrolytischer Kern
//Gas Tank
tile.GasTank.GasTank.name=Gastank
@ -70,6 +71,7 @@ tile.MachineBlock2.ChemicalOxidizer.name=Chemischer Oxidierer
tile.MachineBlock2.ChemicalInfuser.name=Chemischer Infundierer
tile.MachineBlock2.ChemicalCombiner.name=Chemischer Kombinierer
tile.MachineBlock2.ChemicalInjectionChamber.name=Chemische Injektionskammer
tile.MachineBlock2.ElectrolyticSeparator.name=Elektrolytischer Separator
//Ore Block
tile.OreBlock.OsmiumOre.name=Osmiumerz
@ -352,13 +354,11 @@ itemGroup.tabMekanism=Mekanism
//Items
item.BioFuel.name=Biobrennstoff
item.ElectrolyticCore.name=Elektrolytischer Kern
item.SolarPanel.name=Solarmodul
//Generators
tile.Generator.HeatGenerator.name=Hitzegenerator
tile.Generator.SolarGenerator.name=Solargenerator
tile.Generator.ElectrolyticSeparator.name=Elektrolytischer Separator
tile.Generator.HydrogenGenerator.name=Wasserstoffgenerator
tile.Generator.BioGenerator.name=Bio-Generator
tile.Generator.AdvancedSolarGenerator.name=Fortgeschrittener Solargenerator

View file

@ -26,6 +26,7 @@ item.Jetpack.name=Jetpack
item.ScubaTank.name=Scuba Tank
item.GasMask.name=Gas Mask
item.Dictionary.name=Dictionary
item.ElectrolyticCore.name=Electrolytic Core
//Gas Tank
tile.GasTank.GasTank.name=Gas Tank
@ -70,6 +71,7 @@ tile.MachineBlock2.ChemicalOxidizer.name=Chemical Oxidizer
tile.MachineBlock2.ChemicalInfuser.name=Chemical Infuser
tile.MachineBlock2.ChemicalCombiner.name=Chemical Combiner
tile.MachineBlock2.ChemicalInjectionChamber.name=Chemical Injection Chamber
tile.MachineBlock2.ElectrolyticSeparator.name=Electrolytic Separator
//Ore Block
tile.OreBlock.OsmiumOre.name=Osmium Ore
@ -153,6 +155,7 @@ item.tinIngot.name=Tin Ingot
gas.hydrogen=Hydrogen
gas.oxygen=Oxygen
gas.water=Water Vapor
gas.chlorine=Chlorine
gas.sulfurDioxideGas=Sulfur Dioxide
gas.sulfurTrioxideGas=Sulfur Trioxide
gas.sulfuricAcid=Sulfuric Acid
@ -160,6 +163,7 @@ gas.sulfuricAcid=Sulfuric Acid
//Fluids
fluid.hydrogen=Liquid Hydrogen
fluid.oxygen=Liquid Oxygen
fluid.chlorine=Liquid Chlorine
fluid.sulfurDioxideGas=Liquid Sulfur Dioxide
fluid.sulfurTrioxideGas=Liquid Sulfur Trioxide
fluid.sulfuricAcid=Liquid Sulfuric Acid
@ -352,13 +356,11 @@ itemGroup.tabMekanism=Mekanism
//Items
item.BioFuel.name=Bio Fuel
item.ElectrolyticCore.name=Electrolytic Core
item.SolarPanel.name=Solar Panel
//Generators
tile.Generator.HeatGenerator.name=Heat Generator
tile.Generator.SolarGenerator.name=Solar Generator
tile.Generator.ElectrolyticSeparator.name=Electrolytic Separator
tile.Generator.HydrogenGenerator.name=Hydrogen Generator
tile.Generator.BioGenerator.name=Bio-Generator
tile.Generator.AdvancedSolarGenerator.name=Advanced Solar Generator

View file

@ -24,6 +24,7 @@ item.Configurator.name=Configurateur
item.NetworkReader.name=Analyseur de Réseaux
item.ManganeseAlloy.name=Alliage de Manganèse
item.WalkieTalkie.name=Talkie-Walkie
item.ElectrolyticCore.name=Noyau Electrolytique
//Basic Block
tile.BasicBlock.OsmiumBlock.name=Bloc d'Osmium
@ -57,6 +58,8 @@ tile.MachineBlock.Chargepad.name=Plaque de Chargement
tile.MachineBlock.LogisticalSorter.name=Trieur Logistique
tile.MachineBlock.DigitalMiner.name=Mineur Digital
tile.MachineBlock2.ElectrolyticSeparator.name=Séparateur Electrolytique
//Ore Block
tile.OreBlock.OsmiumOre.name=Minerai d'Osmium
@ -119,13 +122,11 @@ itemGroup.tabMekanism=Mekanism
//Items
item.BioFuel.name=Biocombustible
item.ElectrolyticCore.name=Noyau Electrolytique
item.SolarPanel.name=Panneau Solaire
//Generators
tile.Generator.HeatGenerator.name=Générateur Thermique
tile.Generator.SolarGenerator.name=Générateur Solaire
tile.Generator.ElectrolyticSeparator.name=Séparateur Electrolytique
tile.Generator.HydrogenGenerator.name=Générateur à Hydrogène
tile.Generator.BioGenerator.name=Bio-Générateur
tile.Generator.AdvancedSolarGenerator.name=Générateur Solaire Avancé

View file

@ -24,6 +24,7 @@ item.Configurator.name=Konfigurator
item.NetworkReader.name=Czytnik Sieci
item.ManganeseAlloy.name=Stop Manganu
item.WalkieTalkie.name=Walkie-Talkie
item.ElectrolyticCore.name=Jądro Elektrolityczne
//Basic Block
tile.BasicBlock.OsmiumBlock.name=Blok Osmu
@ -56,6 +57,8 @@ tile.MachineBlock.ElectricChest.name=Elektryczna Skrzynia
tile.MachineBlock.Chargepad.name=Chargepad
tile.MachineBlock.LogisticalSorter.name=Logistyczny Magazynier
tile.MachineBlock2.ElectrolyticSeparator.name=Separator Elektrolityczny
//Ore Block
tile.OreBlock.OsmiumOre.name=Ruda Osmu
@ -116,13 +119,11 @@ itemGroup.tabMekanism=Mekanism
//Items
item.BioFuel.name=Bio paliwo
item.ElectrolyticCore.name=Jądro Elektrolityczne
item.SolarPanel.name=Panel Słoneczny
//Generators
tile.Generator.HeatGenerator.name=Generator Cieplny
tile.Generator.SolarGenerator.name=Generator Słoneczny
tile.Generator.ElectrolyticSeparator.name=Separator Elektrolityczny
tile.Generator.HydrogenGenerator.name=Wodorowy Generator
tile.Generator.BioGenerator.name=Bio-Generator
tile.Generator.AdvancedSolarGenerator.name=Zaawansowany Generator Słoneczny

View file

@ -26,6 +26,7 @@ item.Jetpack.name=Реактивный ранец
item.ScubaTank.name=Scuba Tank
item.GasMask.name=Gas Mask
item.Dictionary.name=Словарь
item.ElectrolyticCore.name=Электролитическое ядро
//Gas Tank
tile.GasTank.GasTank.name=Газовый баллон
@ -70,6 +71,7 @@ tile.MachineBlock2.ChemicalOxidizer.name=Химический окислител
tile.MachineBlock2.ChemicalInfuser.name=Химический вливатель
tile.MachineBlock2.ChemicalCombiner.name=Химический объединитель
tile.MachineBlock2.ChemicalInjectionChamber.name=Инъекционная химическая камера
tile.MachineBlock2.ElectrolyticSeparator.name=Электролитический сепаратор
//Ore Block
tile.OreBlock.OsmiumOre.name=Осмиевая руда
@ -352,13 +354,11 @@ itemGroup.tabMekanism=Mekanism
//Items
item.BioFuel.name=Био-топливо
item.ElectrolyticCore.name=Электролитическое ядро
item.SolarPanel.name=Солнечная панель
//Generators
tile.Generator.HeatGenerator.name=Тепловой генератор
tile.Generator.SolarGenerator.name=Солнечный генератор
tile.Generator.ElectrolyticSeparator.name=Электролитический сепаратор
tile.Generator.HydrogenGenerator.name=Водородный генератор
tile.Generator.BioGenerator.name=Био-генератор
tile.Generator.AdvancedSolarGenerator.name=Продвинутый солнечный генератор

View file

@ -26,6 +26,7 @@ item.Jetpack.name=喷射背包
item.ScubaTank.name=潜水罐
item.GasMask.name=燃气面具
item.Dictionary.name=辞典
item.ElectrolyticCore.name=电解核心
//Gas Tank
tile.GasTank.GasTank.name=燃气储罐
@ -68,6 +69,7 @@ tile.MachineBlock.DigitalMiner.name=数字型采矿机
tile.MachineBlock2.RotaryCondensentrator.name=回旋式气液转换机
tile.MachineBlock2.OxidationChamber.name=化学程式机
tile.MachineBlock2.ChemicalInfuser.name=化学灌注器
tile.MachineBlock2.ElectrolyticSeparator.name=电解分离器
//Ore Block
tile.OreBlock.OsmiumOre.name=锇矿石
@ -315,13 +317,11 @@ itemGroup.tabMekanism=通用机器
//Items
item.BioFuel.name=生物燃料
item.ElectrolyticCore.name=电解核心
item.SolarPanel.name=太阳能板
//Generators
tile.Generator.HeatGenerator.name=热力发电机
tile.Generator.SolarGenerator.name=太阳能发电机
tile.Generator.ElectrolyticSeparator.name=电解分离器
tile.Generator.HydrogenGenerator.name=氢气生成器
tile.Generator.BioGenerator.name=生物能发电机
tile.Generator.AdvancedSolarGenerator.name=高级太阳能发电机

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,5 @@
{
"animation": {
"frametime": 2
}
}