Generalized some of the multiblock code into a stricter format

This commit is contained in:
Aidan Brady 2014-08-01 23:44:28 -04:00
parent 8f6cf7e1c9
commit c97f617692
4 changed files with 91 additions and 57 deletions

View file

@ -0,0 +1,19 @@
package mekanism.common.multiblock;
import java.util.HashSet;
import mekanism.api.Coord4D;
import net.minecraft.nbt.NBTTagCompound;
public abstract class MultiblockCache<T>
{
public HashSet<Coord4D> locations = new HashSet<Coord4D>();
public abstract void apply(T data);
public abstract void sync(T data);
public abstract void load(NBTTagCompound nbtTags);
public abstract void save(NBTTagCompound nbtTags);
}

View file

@ -0,0 +1,63 @@
package mekanism.common.multiblock;
import java.util.HashSet;
import java.util.Set;
import mekanism.api.Coord4D;
import mekanism.common.tank.SynchronizedTankData;
import net.minecraft.nbt.NBTTagCompound;
public abstract class SynchronizedData<T>
{
public Set<Coord4D> locations = new HashSet<Coord4D>();
public int volLength;
public int volWidth;
public int volHeight;
public int volume;
public int inventoryID;
@Override
public int hashCode()
{
int code = 1;
code = 31 * locations.hashCode();
code = 31 * volLength;
code = 31 * volWidth;
code = 31 * volHeight;
code = 31 * volume;
return code;
}
@Override
public boolean equals(Object obj)
{
if(obj == null || obj.getClass() != getClass())
{
return false;
}
SynchronizedData<T> data = (SynchronizedData<T>)obj;
if(!data.locations.equals(locations))
{
return false;
}
if(data.volLength != volLength || data.volWidth != volWidth || data.volHeight != volHeight)
{
return false;
}
if(data.volume != volume)
{
return false;
}
return true;
}
}

View file

@ -3,6 +3,7 @@ package mekanism.common.tank;
import java.util.HashSet;
import mekanism.api.Coord4D;
import mekanism.common.multiblock.MultiblockCache;
import mekanism.common.util.FluidContainerUtils.ContainerEditMode;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@ -10,14 +11,13 @@ import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.common.util.Constants.NBT;
import net.minecraftforge.fluids.FluidStack;
public class DynamicTankCache
{
public HashSet<Coord4D> locations = new HashSet<Coord4D>();
public class DynamicTankCache extends MultiblockCache<SynchronizedTankData>
{
public ItemStack[] inventory = new ItemStack[2];
public FluidStack fluid;
public ContainerEditMode editMode = ContainerEditMode.BOTH;
@Override
public void apply(SynchronizedTankData data)
{
data.inventory = inventory;
@ -25,6 +25,7 @@ public class DynamicTankCache
data.editMode = editMode;
}
@Override
public void sync(SynchronizedTankData data)
{
inventory = data.inventory;
@ -32,6 +33,7 @@ public class DynamicTankCache
editMode = data.editMode;
}
@Override
public void load(NBTTagCompound nbtTags)
{
editMode = ContainerEditMode.values()[nbtTags.getInteger("editMode")];
@ -56,6 +58,7 @@ public class DynamicTankCache
}
}
@Override
public void save(NBTTagCompound nbtTags)
{
nbtTags.setInteger("editMode", editMode.ordinal());

View file

@ -4,25 +4,14 @@ 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.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
public class SynchronizedTankData
public class SynchronizedTankData extends SynchronizedData<SynchronizedTankData>
{
public Set<Coord4D> locations = new HashSet<Coord4D>();
public int volLength;
public int volWidth;
public int volHeight;
public int volume;
public int inventoryID;
public FluidStack fluidStored;
public ContainerEditMode editMode = ContainerEditMode.BOTH;
@ -37,46 +26,6 @@ public class SynchronizedTankData
public Set<ValveData> valves = new HashSet<ValveData>();
@Override
public int hashCode()
{
int code = 1;
code = 31 * locations.hashCode();
code = 31 * volLength;
code = 31 * volWidth;
code = 31 * volHeight;
code = 31 * volume;
return code;
}
@Override
public boolean equals(Object obj)
{
if(!(obj instanceof SynchronizedTankData))
{
return false;
}
SynchronizedTankData data = (SynchronizedTankData)obj;
if(!data.locations.equals(locations))
{
return false;
}
if(data.volLength != volLength || data.volWidth != volWidth || data.volHeight != volHeight)
{
return false;
}
if(data.volume != volume)
{
return false;
}
return true;
}
public static class ValveData
{
public ForgeDirection side;