add synchronization, fixes #145
This commit is contained in:
		| @@ -48,7 +48,6 @@ import net.minecraft.world.chunk.Chunk; | ||||
| import org.lwjgl.input.Keyboard; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @author Brady | ||||
| @@ -56,7 +55,7 @@ import java.util.List; | ||||
|  */ | ||||
| public final class GameEventHandler implements IGameEventListener, Helper { | ||||
|  | ||||
|     private final List<IGameEventListener> listeners = new ArrayList<>(); | ||||
|     private final ArrayList<IGameEventListener> listeners = new ArrayList<>(); | ||||
|  | ||||
|     @Override | ||||
|     public final void onTick(TickEvent event) { | ||||
|   | ||||
| @@ -28,9 +28,10 @@ import net.minecraft.world.chunk.Chunk; | ||||
| import java.io.IOException; | ||||
| import java.nio.file.Files; | ||||
| import java.nio.file.Path; | ||||
| import java.util.ArrayList; | ||||
| import java.util.LinkedList; | ||||
| import java.util.List; | ||||
| import java.util.concurrent.LinkedBlockingQueue; | ||||
| import java.util.function.Consumer; | ||||
|  | ||||
| /** | ||||
|  * @author Brady | ||||
| @@ -154,7 +155,7 @@ public final class CachedWorld implements IBlockTypeAccess { | ||||
|             return; | ||||
|         } | ||||
|         long start = System.nanoTime() / 1000000L; | ||||
|         this.cachedRegions.values().parallelStream().forEach(region -> { | ||||
|         allRegions().parallelStream().forEach(region -> { | ||||
|             if (region != null) { | ||||
|                 region.save(this.directory); | ||||
|             } | ||||
| @@ -163,9 +164,13 @@ public final class CachedWorld implements IBlockTypeAccess { | ||||
|         System.out.println("World save took " + (now - start) + "ms"); | ||||
|     } | ||||
|  | ||||
|     private synchronized List<CachedRegion> allRegions() { | ||||
|         return new ArrayList<>(this.cachedRegions.values()); | ||||
|     } | ||||
|  | ||||
|     public final void reloadAllFromDisk() { | ||||
|         long start = System.nanoTime() / 1000000L; | ||||
|         this.cachedRegions.values().forEach(region -> { | ||||
|         allRegions().forEach(region -> { | ||||
|             if (region != null) { | ||||
|                 region.load(this.directory); | ||||
|             } | ||||
| @@ -181,7 +186,7 @@ public final class CachedWorld implements IBlockTypeAccess { | ||||
|      * @param regionZ The region Z coordinate | ||||
|      * @return The region located at the specified coordinates | ||||
|      */ | ||||
|     public final CachedRegion getRegion(int regionX, int regionZ) { | ||||
|     public final synchronized CachedRegion getRegion(int regionX, int regionZ) { | ||||
|         return cachedRegions.get(getRegionID(regionX, regionZ)); | ||||
|     } | ||||
|  | ||||
| @@ -201,14 +206,6 @@ public final class CachedWorld implements IBlockTypeAccess { | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     public void forEachRegion(Consumer<CachedRegion> consumer) { | ||||
|         this.cachedRegions.forEach((id, r) -> { | ||||
|             if (r != null) { | ||||
|                 consumer.accept(r); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns the region ID based on the region coordinates. 0 will be | ||||
|      * returned if the specified region coordinates are out of bounds. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user