diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index cefbb6118..0e1273603 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -46,8 +46,17 @@ public class WorldData{ this.dimension = dimension; } - public static WorldData getDataForWorld(int world){ - return worldData.get(world); + public static WorldData getDataForWorld(World world){ + int dim = world.provider.getDimension(); + WorldData data = worldData.get(dim); + + if(data == null && world.isRemote){ + data = new WorldData(null, dim); + worldData.put(dim, data); + ModUtil.LOGGER.info("Creating temporary WorldData for world "+dim+" on the client!"); + } + + return data; } private void readFromNBT(NBTTagCompound compound){ @@ -142,7 +151,7 @@ public class WorldData{ } } else{ - ModUtil.LOGGER.error("Tried to save WorldData without any data being present!?"); + ModUtil.LOGGER.error("Tried to save WorldData for "+world.provider.getDimension()+" without any data being present!?"); } } } @@ -150,9 +159,9 @@ public class WorldData{ public static void unload(World world){ if(!world.isRemote){ save(world); - int dim = world.provider.getDimension(); - worldData.remove(dim); - ModUtil.LOGGER.info("Unloading WorldData for world "+dim+"!"); + + worldData.remove(world.provider.getDimension()); + ModUtil.LOGGER.info("Unloading WorldData for world "+world.provider.getDimension()+"!"); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index 04695e7a6..eb4e353db 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -19,24 +19,18 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onLoad(WorldEvent.Load event){ - if(!event.getWorld().isRemote){ - WorldData.load(event.getWorld()); - } + WorldData.load(event.getWorld()); } @SubscribeEvent public void onUnload(WorldEvent.Unload event){ - if(!event.getWorld().isRemote){ - WorldData.unload(event.getWorld()); - FakePlayerUtil.unloadFakePlayer(); - } + WorldData.unload(event.getWorld()); + FakePlayerUtil.unloadFakePlayer(); } @SubscribeEvent public void onSave(WorldEvent.Save event){ - if(!event.getWorld().isRemote){ - WorldData.save(event.getWorld()); - } + WorldData.save(event.getWorld()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index e885545cb..599d76f5e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -54,7 +54,7 @@ public class ItemLaserWrench extends ItemBase{ BlockPos savedPos = ItemPhantomConnector.getStoredPosition(stack); if(savedPos != null){ TileEntity savedTile = world.getTileEntity(savedPos); - if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && LaserRelayConnectionHandler.addConnection(savedPos, pos, world.provider.getDimension())){ + if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && LaserRelayConnectionHandler.addConnection(savedPos, pos, world)){ ItemPhantomConnector.clearStorage(stack); ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 1930d596e..1c6bb47b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -17,6 +17,7 @@ import io.netty.util.internal.ConcurrentSet; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; public class LaserRelayConnectionHandler{ @@ -42,7 +43,7 @@ public class LaserRelayConnectionHandler{ /** * Gets all Connections for a Relay */ - public static ConcurrentSet getConnectionsFor(BlockPos relay, int world){ + public static ConcurrentSet getConnectionsFor(BlockPos relay, World world){ ConcurrentSet allPairs = new ConcurrentSet(); for(Network aNetwork : WorldData.getDataForWorld(world).laserRelayNetworks){ for(ConnectionPair pair : aNetwork.connections){ @@ -57,7 +58,7 @@ public class LaserRelayConnectionHandler{ /** * Removes a Relay from its Network */ - public static void removeRelayFromNetwork(BlockPos relay, int world){ + public static void removeRelayFromNetwork(BlockPos relay, World world){ Network network = getNetworkFor(relay, world); if(network != null){ //Setup new network (so that splitting a network will cause it to break into two) @@ -74,7 +75,7 @@ public class LaserRelayConnectionHandler{ /** * Gets a Network for a Relay */ - public static Network getNetworkFor(BlockPos relay, int world){ + public static Network getNetworkFor(BlockPos relay, World world){ for(Network aNetwork : WorldData.getDataForWorld(world).laserRelayNetworks){ for(ConnectionPair pair : aNetwork.connections){ if(pair.contains(relay)){ @@ -89,7 +90,7 @@ public class LaserRelayConnectionHandler{ * Adds a new connection between two relays * (Puts it into the correct network!) */ - public static boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, int world){ + public static boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, World world){ int distance = (int)PosUtil.toVec(firstRelay).distanceTo(PosUtil.toVec(secondRelay)); if(distance > TileEntityLaserRelay.MAX_DISTANCE || PosUtil.areSamePos(firstRelay, secondRelay)){ return false; @@ -131,7 +132,7 @@ public class LaserRelayConnectionHandler{ * Merges two laserRelayNetworks together * (Actually puts everything from the second network into the first one and removes the second one) */ - public static void mergeNetworks(Network firstNetwork, Network secondNetwork, int world){ + public static void mergeNetworks(Network firstNetwork, Network secondNetwork, World world){ for(ConnectionPair secondPair : secondNetwork.connections){ firstNetwork.connections.add(secondPair); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 750866584..e58cad08f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -31,7 +31,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ private List getItemHandlerInfos(){ TileEntityLaserRelayItem relay = this.getConnectedRelay(); if(relay != null){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(relay.getPos(), this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(relay.getPos(), this.worldObj); if(network != null){ return relay.getItemHandlersInNetwork(network); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index cc1dfe7b6..cc3806603 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -37,13 +37,13 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @Override public void receiveSyncCompound(NBTTagCompound compound){ - LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj); NBTTagList list = compound.getTagList("Connections", 10); if(!list.hasNoTags()){ for(int i = 0; i < list.tagCount(); i++){ LaserRelayConnectionHandler.ConnectionPair pair = LaserRelayConnectionHandler.ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); - LaserRelayConnectionHandler.addConnection(pair.firstRelay, pair.secondRelay, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.addConnection(pair.firstRelay, pair.secondRelay, this.worldObj); } } @@ -56,7 +56,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ NBTTagCompound compound = super.getUpdateTag(); NBTTagList list = new NBTTagList(); - ConcurrentSet connections = LaserRelayConnectionHandler.getConnectionsFor(this.pos, this.worldObj.provider.getDimension()); + ConcurrentSet connections = LaserRelayConnectionHandler.getConnectionsFor(this.pos, this.worldObj); if(connections != null && !connections.isEmpty()){ for(LaserRelayConnectionHandler.ConnectionPair pair : connections){ list.appendTag(pair.writeToNBT()); @@ -79,7 +79,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public void renderParticles(){ if(Util.RANDOM.nextInt(ConfigValues.lessParticles ? 16 : 8) == 0){ BlockPos thisPos = this.pos; - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(thisPos, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(thisPos, this.worldObj); if(network != null){ for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.firstRelay)){ @@ -93,7 +93,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @Override public void invalidate(){ super.invalidate(); - LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index dcfa71239..b8ebaf4f4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -46,7 +46,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements public int transmitEnergy(BlockPos blockFrom, int maxTransmit, boolean simulate){ int transmitted = 0; if(maxTransmit > 0){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj); if(network != null){ transmitted = this.transferEnergyToReceiverInNeed(blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); }