package mekanism.common.content.tank;
import java.util.HashSet;
import java.util.Set;
import mekanism.api.Coord4D;
import mekanism.common.multiblock.SynchronizedData;
import mekanism.common.util.FluidContainerUtils.ContainerEditMode;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.fluids.FluidStack;
public class SynchronizedTankData extends SynchronizedData<SynchronizedTankData>
{
public FluidStack fluidStored;
/** For use by rendering segment */
public FluidStack prevFluid;
public int prevFluidStage = 0;
public ContainerEditMode editMode = ContainerEditMode.BOTH;
public ItemStack[] inventory = new ItemStack[2];
public Set<ValveData> valves = new HashSet<ValveData>();
public boolean needsRenderUpdate()
{
if((fluidStored == null && prevFluid != null) || (fluidStored != null && prevFluid == null))
{
return true;
}
if(fluidStored != null && prevFluid != null)
{
int totalStage = (volHeight - 2) * (TankUpdateProtocol.FLUID_PER_TANK / 100);
int currentStage = (int)((fluidStored.amount / (float)(volume*TankUpdateProtocol.FLUID_PER_TANK)) * totalStage);
boolean stageChanged = currentStage != prevFluidStage;
prevFluidStage = currentStage;
if((fluidStored.getFluid() != prevFluid.getFluid()) || stageChanged)
{
return true;
}
}
return false;
}
@Override
public ItemStack[] getInventory()
{
return inventory;
}
public static class ValveData
{
public EnumFacing side;
public Coord4D location;
public boolean prevActive;
public int activeTicks;
public void onTransfer()
{
activeTicks = 30;
}
@Override
public int hashCode()
{
int code = 1;
code = 31 * code + side.ordinal();
code = 31 * code + location.hashCode();
return code;
}
@Override
public boolean equals(Object obj)
{
return obj instanceof ValveData && ((ValveData)obj).side == side && ((ValveData)obj).location.equals(location);
}
}
}