Work on Salination Plants

This commit is contained in:
Aidan C. Brady 2014-01-14 16:19:21 -05:00
parent 7ed788cab4
commit e726e5039e
8 changed files with 213 additions and 31 deletions

View file

@ -96,7 +96,7 @@ public class BlockBasic extends Block
if(tileEntity instanceof TileEntityBasicBlock) if(tileEntity instanceof TileEntityBasicBlock)
{ {
((TileEntityBasicBlock)tileEntity).onNeighborChange(x, y, z, id); ((TileEntityBasicBlock)tileEntity).onNeighborChange(id);
} }
} }
} }

View file

@ -73,7 +73,7 @@ public class BlockEnergyCube extends BlockContainer
if(tileEntity instanceof TileEntityBasicBlock) if(tileEntity instanceof TileEntityBasicBlock)
{ {
((TileEntityBasicBlock)tileEntity).onNeighborChange(x, y, z, id); ((TileEntityBasicBlock)tileEntity).onNeighborChange(id);
} }
} }
} }

View file

@ -71,7 +71,7 @@ public class BlockGasTank extends BlockContainer
if(tileEntity instanceof TileEntityBasicBlock) if(tileEntity instanceof TileEntityBasicBlock)
{ {
((TileEntityBasicBlock)tileEntity).onNeighborChange(x, y, z, id); ((TileEntityBasicBlock)tileEntity).onNeighborChange(id);
} }
} }
} }

View file

@ -797,7 +797,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds
if(tileEntity instanceof TileEntityBasicBlock) if(tileEntity instanceof TileEntityBasicBlock)
{ {
((TileEntityBasicBlock)tileEntity).onNeighborChange(x, y, z, id); ((TileEntityBasicBlock)tileEntity).onNeighborChange(id);
} }
if(tileEntity instanceof TileEntityLogisticalSorter) if(tileEntity instanceof TileEntityLogisticalSorter)

View file

@ -217,11 +217,11 @@ public abstract class TileEntityBasicBlock extends TileEntity implements IWrench
return redstone; return redstone;
} }
public void onNeighborChange(int x, int y, int z, int id) public void onNeighborChange(int id)
{ {
if(!worldObj.isRemote) if(!worldObj.isRemote)
{ {
boolean power = worldObj.isBlockIndirectlyGettingPowered(x, y, z); boolean power = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
if(redstone != power) if(redstone != power)
{ {

View file

@ -1,19 +1,25 @@
package mekanism.common.tile; package mekanism.common.tile;
import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import mekanism.api.Coord4D; import mekanism.api.Coord4D;
import mekanism.common.IConfigurable; import mekanism.common.IConfigurable;
import mekanism.common.IRedstoneControl.RedstoneControl;
import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils;
import mekanism.generators.common.tile.TileEntityAdvancedSolarGenerator; import mekanism.generators.common.tile.TileEntityAdvancedSolarGenerator;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatMessageComponent; import net.minecraft.util.ChatMessageComponent;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTank;
import com.google.common.io.ByteArrayDataInput;
public class TileEntitySalinationController extends TileEntitySalinationTank implements IConfigurable public class TileEntitySalinationController extends TileEntitySalinationTank implements IConfigurable
{ {
public static int MAX_WATER = 100000; public static int MAX_WATER = 100000;
@ -26,14 +32,22 @@ public class TileEntitySalinationController extends TileEntitySalinationTank imp
public TileEntityAdvancedSolarGenerator[] solars = new TileEntityAdvancedSolarGenerator[4]; public TileEntityAdvancedSolarGenerator[] solars = new TileEntityAdvancedSolarGenerator[4];
public boolean temperatureSet = false; public boolean temperatureSet = false;
public double partialWater = 0; public double partialWater = 0;
public double partialBrine = 0; public double partialBrine = 0;
public float temperature = 0;
public float baseTemperature = 0;
public int height = 0; public int height = 0;
public boolean structured = false; public boolean structured = false;
public boolean controllerConflict = false;
public boolean isLeftOnFace; public boolean isLeftOnFace;
public boolean updatedThisTick = false;
public int clientSolarAmount;
public TileEntitySalinationController() public TileEntitySalinationController()
{ {
super("SalinationController"); super("SalinationController");
@ -42,25 +56,67 @@ public class TileEntitySalinationController extends TileEntitySalinationTank imp
@Override @Override
public void onUpdate() public void onUpdate()
{ {
setTemperature(); super.onUpdate();
if(canOperate()) if(!worldObj.isRemote)
{ {
partialWater += temperature * (height + 7)/8; if(ticker == 5)
if(partialWater >= 1)
{ {
int waterInt = (int)Math.floor(partialWater); refresh();
waterTank.drain(waterInt, true);
partialWater %= 1;
partialBrine += ((double)waterInt)/100D;
} }
if(partialBrine >= 1) setTemperature();
if(canOperate())
{ {
int brineInt = (int)Math.floor(partialBrine); partialWater += baseTemperature * (height + 7)/8;
brineTank.fill(FluidRegistry.getFluidStack("brine", brineInt), true);
partialBrine %= 1; if(partialWater >= 1)
{
int waterInt = (int)Math.floor(partialWater);
waterTank.drain(waterInt, true);
partialWater %= 1;
partialBrine += ((double)waterInt)/100D;
}
if(partialBrine >= 1)
{
int brineInt = (int)Math.floor(partialBrine);
brineTank.fill(FluidRegistry.getFluidStack("brine", brineInt), true);
partialBrine %= 1;
}
}
}
}
@Override
public void onChunkUnload()
{
super.onChunkUnload();
refresh();
}
@Override
public void onNeighborChange(int id)
{
super.onNeighborChange(id);
refresh();
}
protected void refresh()
{
if(!worldObj.isRemote)
{
if(!updatedThisTick)
{
structured = buildStructure();
if(!structured)
{
clearStructure();
}
} }
} }
} }
@ -92,13 +148,15 @@ public class TileEntitySalinationController extends TileEntitySalinationTank imp
{ {
if(!temperatureSet) if(!temperatureSet)
{ {
temperature = worldObj.getBiomeGenForCoordsBody(xCoord, zCoord).getFloatTemperature(); baseTemperature = worldObj.getBiomeGenForCoordsBody(xCoord, zCoord).getFloatTemperature();
temperatureSet = true; temperatureSet = true;
} }
} }
public boolean buildStructure() public boolean buildStructure()
{ {
controllerConflict = false;
updatedThisTick = true;
ForgeDirection right = MekanismUtils.getRight(facing); ForgeDirection right = MekanismUtils.getRight(facing);
height = 0; height = 0;
@ -131,6 +189,16 @@ public class TileEntitySalinationController extends TileEntitySalinationTank imp
structured = scanTopLayer(startPoint); structured = scanTopLayer(startPoint);
height = structured ? height : 0; height = structured ? height : 0;
worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockType().blockID);
for(TileEntitySalinationTank tank : tankParts)
{
if(tank != this && tank instanceof TileEntitySalinationValve)
{
worldObj.notifyBlocksOfNeighborChange(tank.xCoord, tank.yCoord, tank.zCoord, tank.getBlockType().blockID);
}
}
return structured; return structured;
} }
@ -173,8 +241,11 @@ public class TileEntitySalinationController extends TileEntitySalinationTank imp
} }
} }
else { else {
if(!addTankPart(pointer.getTileEntity(worldObj))) TileEntity pointerTile = pointer.getTileEntity(worldObj);
if(!addTankPart(pointerTile))
{ {
if(pointerTile != this && pointerTile instanceof TileEntitySalinationController)
return false; return false;
} }
} }
@ -305,7 +376,7 @@ public class TileEntitySalinationController extends TileEntitySalinationTank imp
public boolean addTankPart(TileEntity tile) public boolean addTankPart(TileEntity tile)
{ {
if(tile instanceof TileEntitySalinationTank) if(tile instanceof TileEntitySalinationTank && !(tile instanceof TileEntitySalinationController))
{ {
((TileEntitySalinationTank)tile).addToStructure(this); ((TileEntitySalinationTank)tile).addToStructure(this);
tankParts.add((TileEntitySalinationTank)tile); tankParts.add((TileEntitySalinationTank)tile);
@ -338,11 +409,101 @@ public class TileEntitySalinationController extends TileEntitySalinationTank imp
@Override @Override
public boolean onRightClick(EntityPlayer player, int side) public boolean onRightClick(EntityPlayer player, int side)
{ {
structured = buildStructure(); return false;
player.sendChatToPlayer(ChatMessageComponent.createFromText("Height: " + height + ", Structured: " + structured));
System.out.println(solars[0] + " " + solars[1] + " " + solars[2] + " " + solars[3]);
return true;
} }
@Override
public void handlePacketData(ByteArrayDataInput dataStream)
{
super.handlePacketData(dataStream);
if(dataStream.readBoolean())
{
waterTank.setFluid(new FluidStack(dataStream.readInt(), dataStream.readInt()));
}
else {
waterTank.setFluid(null);
}
if(dataStream.readBoolean())
{
brineTank.setFluid(new FluidStack(dataStream.readInt(), dataStream.readInt()));
}
else {
brineTank.setFluid(null);
}
structured = dataStream.readBoolean();
controllerConflict = dataStream.readBoolean();
clientSolarAmount = dataStream.readInt();
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
}
@Override
public ArrayList getNetworkedData(ArrayList data)
{
super.getNetworkedData(data);
if(waterTank.getFluid() != null)
{
data.add(true);
data.add(waterTank.getFluid().fluidID);
data.add(waterTank.getFluid().amount);
}
else {
data.add(false);
}
if(brineTank.getFluid() != null)
{
data.add(true);
data.add(brineTank.getFluid().fluidID);
data.add(brineTank.getFluid().amount);
}
else {
data.add(false);
}
data.add(structured);
data.add(controllerConflict);
data.add(getSolarAmount());
return data;
}
private int getSolarAmount()
{
int ret = 0;
for(TileEntityAdvancedSolarGenerator solar : solars)
{
if(solar != null)
{
ret++;
}
}
return ret;
}
@Override
public void readFromNBT(NBTTagCompound nbtTags)
{
super.readFromNBT(nbtTags);
waterTank.readFromNBT(nbtTags.getCompoundTag("waterTank"));
brineTank.readFromNBT(nbtTags.getCompoundTag("brineTank"));
}
@Override
public void writeToNBT(NBTTagCompound nbtTags)
{
super.writeToNBT(nbtTags);
nbtTags.setCompoundTag("waterTank", waterTank.writeToNBT(new NBTTagCompound()));
nbtTags.setCompoundTag("brineTank", brineTank.writeToNBT(new NBTTagCompound()));
}
public void clearStructure() public void clearStructure()
{ {

View file

@ -12,7 +12,6 @@ public class TileEntitySalinationTank extends TileEntityContainerBlock
super("SalinationTank"); super("SalinationTank");
inventory = new ItemStack[0]; inventory = new ItemStack[0];
} }
public TileEntitySalinationTank(String fullName) public TileEntitySalinationTank(String fullName)
@ -34,4 +33,26 @@ public class TileEntitySalinationTank extends TileEntityContainerBlock
{ {
master = null; master = null;
} }
@Override
public void onChunkUnload()
{
super.onChunkUnload();
if(master != null)
{
master.refresh();
}
}
@Override
public void onNeighborChange(int id)
{
super.onNeighborChange(id);
if(master != null)
{
master.refresh();
}
}
} }

View file

@ -64,7 +64,7 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
if(tileEntity instanceof TileEntityBasicBlock) if(tileEntity instanceof TileEntityBasicBlock)
{ {
((TileEntityBasicBlock)tileEntity).onNeighborChange(x, y, z, id); ((TileEntityBasicBlock)tileEntity).onNeighborChange(id);
} }
} }
} }