Remove the map and use the world saved data, #986

This commit is contained in:
raoulvdberge
2017-05-13 15:16:47 +02:00
parent 492afce309
commit 1428350c67
2 changed files with 31 additions and 32 deletions

View File

@@ -36,13 +36,12 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.storage.MapStorage;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.common.discovery.ASMDataTable; import net.minecraftforge.fml.common.discovery.ASMDataTable;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; import java.util.Set;
public class API implements IRSAPI { public class API implements IRSAPI {
@@ -50,7 +49,6 @@ public class API implements IRSAPI {
private IComparer comparer = new Comparer(); private IComparer comparer = new Comparer();
private INetworkNodeRegistry networkNodeRegistry = new NetworkNodeRegistry(); private INetworkNodeRegistry networkNodeRegistry = new NetworkNodeRegistry();
private Map<Integer, INetworkNodeManager> networkNodeManagers = new HashMap<>();
private IStorageDiskBehavior storageDiskBehavior = new StorageDiskBehavior(); private IStorageDiskBehavior storageDiskBehavior = new StorageDiskBehavior();
private ISoldererRegistry soldererRegistry = new SoldererRegistry(); private ISoldererRegistry soldererRegistry = new SoldererRegistry();
private ICraftingTaskRegistry craftingTaskRegistry = new CraftingTaskRegistry(); private ICraftingTaskRegistry craftingTaskRegistry = new CraftingTaskRegistry();
@@ -98,7 +96,18 @@ public class API implements IRSAPI {
throw new IllegalStateException("Attempting to access network node manager on the client"); throw new IllegalStateException("Attempting to access network node manager on the client");
} }
return networkNodeManagers.computeIfAbsent(world.provider.getDimension(), m -> NetworkNodeManager.getManager(world)); MapStorage storage = world.getPerWorldStorage();
NetworkNodeManager instance = (NetworkNodeManager) storage.getOrLoadData(NetworkNodeManager.class, NetworkNodeManager.NAME);
if (instance == null) {
System.out.println("[RS DEBUG] Initializing Network Node Manager for " + world.provider.getDimension());
instance = new NetworkNodeManager(NetworkNodeManager.NAME);
storage.setData(NetworkNodeManager.NAME, instance);
}
return instance;
} }
@Override @Override

View File

@@ -6,9 +6,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.WorldSavedData; import net.minecraft.world.WorldSavedData;
import net.minecraft.world.storage.MapStorage;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -18,7 +16,7 @@ import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
public class NetworkNodeManager extends WorldSavedData implements INetworkNodeManager { public class NetworkNodeManager extends WorldSavedData implements INetworkNodeManager {
private static final String NAME = "refinedstorage_nodes"; public static final String NAME = "refinedstorage_nodes";
private static final String NBT_NODES = "Nodes"; private static final String NBT_NODES = "Nodes";
private static final String NBT_NODE_ID = "Id"; private static final String NBT_NODE_ID = "Id";
@@ -37,20 +35,28 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa
clear(); clear();
NBTTagList list = tag.getTagList(NBT_NODES, Constants.NBT.TAG_COMPOUND); if (tag.hasKey(NBT_NODES)) {
NBTTagList list = tag.getTagList(NBT_NODES, Constants.NBT.TAG_COMPOUND);
for (int i = 0; i < list.tagCount(); ++i) { int nodesRead = 0;
NBTTagCompound nodeTag = list.getCompoundTagAt(i);
String id = nodeTag.getString(NBT_NODE_ID); for (int i = 0; i < list.tagCount(); ++i) {
NBTTagCompound data = nodeTag.getCompoundTag(NBT_NODE_DATA); NBTTagCompound nodeTag = list.getCompoundTagAt(i);
BlockPos pos = BlockPos.fromLong(nodeTag.getLong(NBT_NODE_POS));
Function<NBTTagCompound, INetworkNode> factory = API.instance().getNetworkNodeRegistry().get(id); String id = nodeTag.getString(NBT_NODE_ID);
NBTTagCompound data = nodeTag.getCompoundTag(NBT_NODE_DATA);
BlockPos pos = BlockPos.fromLong(nodeTag.getLong(NBT_NODE_POS));
if (factory != null) { Function<NBTTagCompound, INetworkNode> factory = API.instance().getNetworkNodeRegistry().get(id);
setNode(pos, factory.apply(data));
if (factory != null) {
setNode(pos, factory.apply(data));
++nodesRead;
}
} }
System.out.println("[RS DEBUG] Read " + nodesRead + " nodes!");
} }
} }
@@ -75,22 +81,6 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa
return tag; return tag;
} }
public static NetworkNodeManager getManager(World world) {
MapStorage storage = world.getPerWorldStorage();
NetworkNodeManager instance = (NetworkNodeManager) storage.getOrLoadData(NetworkNodeManager.class, NAME);
if (instance == null) {
System.out.println("[RS DEBUG] Initializing Network Node Manager for " + world.provider.getDimension());
instance = new NetworkNodeManager(NAME);
storage.setData(NAME, instance);
} else {
System.out.println("[RS DEBUG] Network Node Manager for " + world.provider.getDimension() + " already exists, OK...");
}
return instance;
}
@Nullable @Nullable
@Override @Override
public INetworkNode getNode(BlockPos pos) { public INetworkNode getNode(BlockPos pos) {