Fixed saving

This commit is contained in:
Aidan Brady 2013-12-21 15:58:59 -05:00
parent 198305ff39
commit f25bc6f941
4 changed files with 103 additions and 22 deletions

View file

@ -5,12 +5,13 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Set;
import mekanism.api.IClientTicker;
import mekanism.api.Coord4D;
import mekanism.api.IClientTicker;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@ -21,7 +22,7 @@ import cpw.mods.fml.common.FMLCommonHandler;
public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implements ITransmitterNetwork<A, N>, IClientTicker
{
public HashSet<IGridTransmitter<N>> transmitters = new HashSet<IGridTransmitter<N>>();
public LinkedHashSet<IGridTransmitter<N>> transmitters = new LinkedHashSet<IGridTransmitter<N>>();
public HashSet<A> possibleAcceptors = new HashSet<A>();
public HashMap<A, ForgeDirection> acceptorDirections = new HashMap<A, ForgeDirection>();
@ -45,6 +46,11 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
transmitters.addAll(newTransmitters);
}
public boolean isFirst(IGridTransmitter<N> transmitter)
{
return transmitters.iterator().next().equals(transmitter);
}
@Override
public void removeTransmitter(IGridTransmitter<N> transmitter)
{

View file

@ -7,6 +7,7 @@ import mekanism.api.transmitters.TransmissionType;
import mekanism.client.render.PartTransmitterIcons;
import mekanism.client.render.RenderPartTransmitter;
import mekanism.common.FluidNetwork;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.PipeUtils;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.nbt.NBTTagCompound;
@ -52,7 +53,17 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork> implements
cacheFluid = null;
}
if(getTransmitterNetwork(false) != null)
{
int last = lastWrite != null ? lastWrite.amount : 0;
if(last != getSaveShare())
{
MekanismUtils.saveChunk(tile());
}
}
IFluidHandler[] connectedAcceptors = PipeUtils.getConnectedAcceptors(tile());
for(ForgeDirection side : getConnections(ConnectionType.PULL))
@ -76,6 +87,24 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork> implements
super.update();
}
private int getSaveShare()
{
if(getTransmitterNetwork().fluidStored != null)
{
int remain = getTransmitterNetwork().fluidStored.amount%getTransmitterNetwork().transmitters.size();
int toSave = getTransmitterNetwork().fluidStored.amount/getTransmitterNetwork().transmitters.size();
if(getTransmitterNetwork().isFirst((IGridTransmitter<FluidNetwork>)tile()))
{
toSave += remain;
}
return toSave;
}
return 0;
}
@Override
public void onChunkUnload()
@ -134,11 +163,20 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork> implements
if(getTransmitterNetwork().fluidStored != null)
{
int toSave = (int)Math.round(getTransmitterNetwork().fluidStored.amount*(1F/getTransmitterNetwork().transmitters.size()));
FluidStack stack = new FluidStack(getTransmitterNetwork().fluidStored.getFluid(), toSave);
lastWrite = stack;
nbtTags.setCompoundTag("cacheFluid", stack.writeToNBT(new NBTTagCompound()));
int remain = getTransmitterNetwork().fluidStored.amount%getTransmitterNetwork().transmitters.size();
int toSave = getTransmitterNetwork().fluidStored.amount/getTransmitterNetwork().transmitters.size();
if(getTransmitterNetwork().isFirst((IGridTransmitter<FluidNetwork>)tile()))
{
toSave += remain;
}
if(toSave > 0)
{
FluidStack stack = new FluidStack(getTransmitterNetwork().fluidStored.getFluid(), toSave);
lastWrite = stack;
nbtTags.setCompoundTag("cacheFluid", stack.writeToNBT(new NBTTagCompound()));
}
}
}

View file

@ -11,6 +11,8 @@ import mekanism.api.transmitters.TransmissionType;
import mekanism.client.render.PartTransmitterIcons;
import mekanism.client.render.RenderPartTransmitter;
import mekanism.common.EnergyNetwork;
import mekanism.common.FluidNetwork;
import mekanism.common.util.MekanismUtils;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@ -46,6 +48,16 @@ public class PartPressurizedTube extends PartTransmitter<GasNetwork>
cacheGas = null;
}
if(getTransmitterNetwork(false) != null)
{
int last = lastWrite != null ? lastWrite.amount : 0;
if(last != getSaveShare())
{
MekanismUtils.saveChunk(tile());
}
}
}
else {
float targetScale = getTransmitterNetwork().gasScale;
@ -59,6 +71,24 @@ public class PartPressurizedTube extends PartTransmitter<GasNetwork>
super.update();
}
private int getSaveShare()
{
if(getTransmitterNetwork().gasStored != null)
{
int remain = getTransmitterNetwork().gasStored.amount%getTransmitterNetwork().transmitters.size();
int toSave = getTransmitterNetwork().gasStored.amount/getTransmitterNetwork().transmitters.size();
if(getTransmitterNetwork().isFirst((IGridTransmitter<GasNetwork>)tile()))
{
toSave += remain;
}
return toSave;
}
return 0;
}
@Override
public TransmitterType getTransmitter()
{
@ -122,11 +152,21 @@ public class PartPressurizedTube extends PartTransmitter<GasNetwork>
if(getTransmitterNetwork().gasStored != null)
{
int toSave = (int)Math.round(getTransmitterNetwork().gasStored.amount*(1F/getTransmitterNetwork().transmitters.size()));
GasStack stack = new GasStack(getTransmitterNetwork().gasStored.getGas(), toSave);
lastWrite = stack;
nbtTags.setCompoundTag("cacheGas", stack.write(new NBTTagCompound()));
int remain = getTransmitterNetwork().gasStored.amount%getTransmitterNetwork().transmitters.size();
int toSave = getTransmitterNetwork().gasStored.amount/getTransmitterNetwork().transmitters.size();
if(getTransmitterNetwork().isFirst((IGridTransmitter<GasNetwork>)tile()))
{
toSave += remain;
}
if(toSave > 0)
{
GasStack stack = new GasStack(getTransmitterNetwork().gasStored.getGas(), toSave);
lastWrite = stack;
nbtTags.setCompoundTag("cacheGas", stack.write(new NBTTagCompound()));
}
}
}

View file

@ -34,21 +34,18 @@ public class VoiceServerManager
public void stop()
{
try {
System.out.println("[Mekanism] VoiceServer: Shutting down server...");
try {
listenThread.interrupt();
} catch(Exception e) {}
foundLocal = false;
serverSocket.close();
serverSocket = null;
System.out.println("[Mekanism] VoiceServer: Shutting down server...");
} catch(SocketException e) {
if(!e.getLocalizedMessage().toLowerCase().equals("socket closed"))
{
e.printStackTrace();
}
try {
serverSocket.close();
serverSocket = null;
} catch(Exception e) {}
} catch(Exception e) {
System.err.println("[Mekanism] VoiceServer: Error while shutting down server.");
e.printStackTrace();