Updated Electrolytic Separator internals to support redstone control
This commit is contained in:
parent
bd3bc4402f
commit
3ff2ede090
2 changed files with 114 additions and 27 deletions
|
@ -1,26 +1,18 @@
|
||||||
package mekanism.client.gui;
|
package mekanism.client.gui;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import java.util.List;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
import mekanism.api.gas.GasTank;
|
import mekanism.api.gas.GasTank;
|
||||||
import mekanism.api.util.ListUtils;
|
import mekanism.api.util.ListUtils;
|
||||||
import mekanism.client.gui.element.GuiEnergyInfo;
|
import mekanism.client.gui.element.*;
|
||||||
import mekanism.client.gui.element.GuiEnergyInfo.IInfoHandler;
|
import mekanism.client.gui.element.GuiEnergyInfo.IInfoHandler;
|
||||||
import mekanism.client.gui.element.GuiFluidGauge;
|
|
||||||
import mekanism.client.gui.element.GuiFluidGauge.IFluidInfoHandler;
|
import mekanism.client.gui.element.GuiFluidGauge.IFluidInfoHandler;
|
||||||
import mekanism.client.gui.element.GuiGasGauge;
|
|
||||||
import mekanism.client.gui.element.GuiGasGauge.IGasInfoHandler;
|
import mekanism.client.gui.element.GuiGasGauge.IGasInfoHandler;
|
||||||
import mekanism.client.gui.element.GuiGauge;
|
|
||||||
import mekanism.client.gui.element.GuiPowerBar;
|
|
||||||
import mekanism.client.gui.element.GuiProgress;
|
|
||||||
import mekanism.client.gui.element.GuiProgress.IProgressInfoHandler;
|
import mekanism.client.gui.element.GuiProgress.IProgressInfoHandler;
|
||||||
import mekanism.client.gui.element.GuiProgress.ProgressBar;
|
import mekanism.client.gui.element.GuiProgress.ProgressBar;
|
||||||
import mekanism.client.gui.element.GuiSlot;
|
|
||||||
import mekanism.client.gui.element.GuiSlot.SlotOverlay;
|
import mekanism.client.gui.element.GuiSlot.SlotOverlay;
|
||||||
import mekanism.client.gui.element.GuiSlot.SlotType;
|
import mekanism.client.gui.element.GuiSlot.SlotType;
|
||||||
import mekanism.client.gui.element.GuiUpgradeTab;
|
|
||||||
import mekanism.client.sound.SoundHandler;
|
import mekanism.client.sound.SoundHandler;
|
||||||
import mekanism.common.Mekanism;
|
import mekanism.common.Mekanism;
|
||||||
import mekanism.common.inventory.container.ContainerElectrolyticSeparator;
|
import mekanism.common.inventory.container.ContainerElectrolyticSeparator;
|
||||||
|
@ -32,11 +24,10 @@ import mekanism.common.util.MekanismUtils;
|
||||||
import mekanism.common.util.MekanismUtils.ResourceType;
|
import mekanism.common.util.MekanismUtils.ResourceType;
|
||||||
import net.minecraft.entity.player.InventoryPlayer;
|
import net.minecraft.entity.player.InventoryPlayer;
|
||||||
import net.minecraftforge.fluids.FluidTank;
|
import net.minecraftforge.fluids.FluidTank;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import java.util.ArrayList;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import java.util.List;
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public class GuiElectrolyticSeparator extends GuiMekanism
|
public class GuiElectrolyticSeparator extends GuiMekanism
|
||||||
|
@ -49,6 +40,7 @@ public class GuiElectrolyticSeparator extends GuiMekanism
|
||||||
|
|
||||||
tileEntity = tentity;
|
tileEntity = tentity;
|
||||||
|
|
||||||
|
guiElements.add(new GuiRedstoneControl(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiElectrolyticSeparator.png")));
|
||||||
guiElements.add(new GuiUpgradeTab(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiElectrolyticSeparator.png")));
|
guiElements.add(new GuiUpgradeTab(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiElectrolyticSeparator.png")));
|
||||||
guiElements.add(new GuiEnergyInfo(new IInfoHandler() {
|
guiElements.add(new GuiEnergyInfo(new IInfoHandler() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -2,14 +2,13 @@ package mekanism.common.tile;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
|
import mekanism.api.MekanismConfig;
|
||||||
import mekanism.api.Range4D;
|
import mekanism.api.Range4D;
|
||||||
import mekanism.api.gas.*;
|
import mekanism.api.gas.*;
|
||||||
import mekanism.common.Mekanism;
|
import mekanism.common.Mekanism;
|
||||||
import mekanism.common.Upgrade;
|
import mekanism.common.Upgrade;
|
||||||
import mekanism.common.Upgrade.IUpgradeInfoHandler;
|
import mekanism.common.Upgrade.IUpgradeInfoHandler;
|
||||||
import mekanism.common.base.ISustainedData;
|
import mekanism.common.base.*;
|
||||||
import mekanism.common.base.ITankManager;
|
|
||||||
import mekanism.common.base.IUpgradeTile;
|
|
||||||
import mekanism.common.block.BlockMachine.MachineType;
|
import mekanism.common.block.BlockMachine.MachineType;
|
||||||
import mekanism.common.integration.IComputerIntegration;
|
import mekanism.common.integration.IComputerIntegration;
|
||||||
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
||||||
|
@ -33,7 +32,7 @@ import net.minecraftforge.fluids.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock implements IFluidHandler, IComputerIntegration, ITubeConnection, ISustainedData, IGasHandler, IUpgradeTile, IUpgradeInfoHandler, ITankManager
|
public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock implements IFluidHandler, IComputerIntegration, ITubeConnection, ISustainedData, IGasHandler, IUpgradeTile, IUpgradeInfoHandler, ITankManager, IRedstoneControl, IActiveState
|
||||||
{
|
{
|
||||||
/** This separator's water slot. */
|
/** This separator's water slot. */
|
||||||
public FluidTank fluidTank = new FluidTank(24000);
|
public FluidTank fluidTank = new FluidTank(24000);
|
||||||
|
@ -63,14 +62,23 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
|
|
||||||
public double energyPerTick;
|
public double energyPerTick;
|
||||||
|
|
||||||
|
public int updateDelay;
|
||||||
|
|
||||||
public boolean isActive = false;
|
public boolean isActive = false;
|
||||||
|
|
||||||
|
public boolean clientActive = false;
|
||||||
|
|
||||||
|
public double prevEnergy;
|
||||||
|
|
||||||
public SeparatorRecipe cachedRecipe;
|
public SeparatorRecipe cachedRecipe;
|
||||||
|
|
||||||
public double clientEnergyUsed;
|
public double clientEnergyUsed;
|
||||||
|
|
||||||
public TileComponentUpgrade upgradeComponent = new TileComponentUpgrade(this, 4);
|
public TileComponentUpgrade upgradeComponent = new TileComponentUpgrade(this, 4);
|
||||||
|
|
||||||
|
/** This machine's current RedstoneControl type. */
|
||||||
|
public RedstoneControl controlType = RedstoneControl.DISABLED;
|
||||||
|
|
||||||
public TileEntityElectrolyticSeparator()
|
public TileEntityElectrolyticSeparator()
|
||||||
{
|
{
|
||||||
super("ElectrolyticSeparator", MachineType.ELECTROLYTIC_SEPARATOR.baseEnergy);
|
super("ElectrolyticSeparator", MachineType.ELECTROLYTIC_SEPARATOR.baseEnergy);
|
||||||
|
@ -82,8 +90,29 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
{
|
{
|
||||||
super.onUpdate();
|
super.onUpdate();
|
||||||
|
|
||||||
|
if(worldObj.isRemote && updateDelay > 0)
|
||||||
|
{
|
||||||
|
updateDelay--;
|
||||||
|
|
||||||
|
if(updateDelay == 0 && clientActive != isActive)
|
||||||
|
{
|
||||||
|
isActive = clientActive;
|
||||||
|
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!worldObj.isRemote)
|
if(!worldObj.isRemote)
|
||||||
{
|
{
|
||||||
|
if(updateDelay > 0)
|
||||||
|
{
|
||||||
|
updateDelay--;
|
||||||
|
|
||||||
|
if(updateDelay == 0 && clientActive != isActive)
|
||||||
|
{
|
||||||
|
Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), new Range4D(Coord4D.get(this)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ChargeUtils.discharge(3, this);
|
ChargeUtils.discharge(3, this);
|
||||||
|
|
||||||
if(inventory[0] != null)
|
if(inventory[0] != null)
|
||||||
|
@ -132,8 +161,10 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
|
|
||||||
SeparatorRecipe recipe = getRecipe();
|
SeparatorRecipe recipe = getRecipe();
|
||||||
|
|
||||||
if(canOperate(recipe) && getEnergy() >= energyPerTick)
|
if(canOperate(recipe) && getEnergy() >= energyPerTick && MekanismUtils.canFunction(this))
|
||||||
{
|
{
|
||||||
|
setActive(true);
|
||||||
|
|
||||||
boolean update = BASE_ENERGY_USAGE != recipe.energyUsage;
|
boolean update = BASE_ENERGY_USAGE != recipe.energyUsage;
|
||||||
|
|
||||||
BASE_ENERGY_USAGE = recipe.energyUsage;
|
BASE_ENERGY_USAGE = recipe.energyUsage;
|
||||||
|
@ -143,8 +174,6 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
recalculateUpgradables(Upgrade.ENERGY);
|
recalculateUpgradables(Upgrade.ENERGY);
|
||||||
}
|
}
|
||||||
|
|
||||||
setActive(true);
|
|
||||||
|
|
||||||
int operations = operate(recipe);
|
int operations = operate(recipe);
|
||||||
double prev = getEnergy();
|
double prev = getEnergy();
|
||||||
|
|
||||||
|
@ -152,7 +181,10 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
clientEnergyUsed = prev-getEnergy();
|
clientEnergyUsed = prev-getEnergy();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
if(prevEnergy >= getEnergy())
|
||||||
|
{
|
||||||
setActive(false);
|
setActive(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int dumpAmount = 8*(int)Math.pow(2, upgradeComponent.getUpgrades(Upgrade.SPEED));
|
int dumpAmount = 8*(int)Math.pow(2, upgradeComponent.getUpgrades(Upgrade.SPEED));
|
||||||
|
@ -229,6 +261,8 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
|
|
||||||
Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), new Range4D(Coord4D.get(this)));
|
Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), new Range4D(Coord4D.get(this)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prevEnergy = getEnergy();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(clientDumpLeft)
|
if(clientDumpLeft)
|
||||||
|
@ -434,12 +468,20 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
rightTank.setGas(null);
|
rightTank.setGas(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
controlType = RedstoneControl.values()[dataStream.readInt()];
|
||||||
dumpLeft = GasMode.values()[dataStream.readInt()];
|
dumpLeft = GasMode.values()[dataStream.readInt()];
|
||||||
dumpRight = GasMode.values()[dataStream.readInt()];
|
dumpRight = GasMode.values()[dataStream.readInt()];
|
||||||
clientDumpLeft = dataStream.readBoolean();
|
clientDumpLeft = dataStream.readBoolean();
|
||||||
clientDumpRight = dataStream.readBoolean();
|
clientDumpRight = dataStream.readBoolean();
|
||||||
isActive = dataStream.readBoolean();
|
clientActive = dataStream.readBoolean();
|
||||||
clientEnergyUsed = dataStream.readDouble();
|
clientEnergyUsed = dataStream.readDouble();
|
||||||
|
|
||||||
|
if(updateDelay == 0 && clientActive != isActive)
|
||||||
|
{
|
||||||
|
updateDelay = MekanismConfig.general.UPDATE_DELAY;
|
||||||
|
isActive = clientActive;
|
||||||
|
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -477,6 +519,7 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
data.add(false);
|
data.add(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data.add(controlType.ordinal());
|
||||||
data.add(dumpLeft.ordinal());
|
data.add(dumpLeft.ordinal());
|
||||||
data.add(dumpRight.ordinal());
|
data.add(dumpRight.ordinal());
|
||||||
data.add(clientDumpLeft);
|
data.add(clientDumpLeft);
|
||||||
|
@ -503,6 +546,9 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
fluidTank.readFromNBT(nbtTags.getCompoundTag("fluidTank"));
|
fluidTank.readFromNBT(nbtTags.getCompoundTag("fluidTank"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isActive = nbtTags.getBoolean("isActive");
|
||||||
|
controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")];
|
||||||
|
|
||||||
leftTank.read(nbtTags.getCompoundTag("leftTank"));
|
leftTank.read(nbtTags.getCompoundTag("leftTank"));
|
||||||
rightTank.read(nbtTags.getCompoundTag("rightTank"));
|
rightTank.read(nbtTags.getCompoundTag("rightTank"));
|
||||||
|
|
||||||
|
@ -520,6 +566,9 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
nbtTags.setTag("fluidTank", fluidTank.writeToNBT(new NBTTagCompound()));
|
nbtTags.setTag("fluidTank", fluidTank.writeToNBT(new NBTTagCompound()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nbtTags.setBoolean("isActive", isActive);
|
||||||
|
nbtTags.setInteger("controlType", controlType.ordinal());
|
||||||
|
|
||||||
nbtTags.setTag("leftTank", leftTank.write(new NBTTagCompound()));
|
nbtTags.setTag("leftTank", leftTank.write(new NBTTagCompound()));
|
||||||
nbtTags.setTag("rightTank", rightTank.write(new NBTTagCompound()));
|
nbtTags.setTag("rightTank", rightTank.write(new NBTTagCompound()));
|
||||||
|
|
||||||
|
@ -693,9 +742,55 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RedstoneControl getControlType()
|
||||||
|
{
|
||||||
|
return controlType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setControlType(RedstoneControl type)
|
||||||
|
{
|
||||||
|
controlType = type;
|
||||||
|
MekanismUtils.saveChunk(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canPulse()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setActive(boolean active)
|
public void setActive(boolean active)
|
||||||
{
|
{
|
||||||
isActive = active;
|
isActive = active;
|
||||||
|
|
||||||
|
if(clientActive != active && updateDelay == 0)
|
||||||
|
{
|
||||||
|
Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), new Range4D(Coord4D.get(this)));
|
||||||
|
|
||||||
|
updateDelay = 10;
|
||||||
|
clientActive = active;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getActive()
|
||||||
|
{
|
||||||
|
return isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean renderUpdate()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean lightUpdate()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue