9
0
mirror of https://github.com/Samsuik/Sakura.git synced 2025-12-23 00:39:20 +00:00

Synchronise methods in LocalConfigManager

This commit is contained in:
Samsuik
2024-03-09 01:03:38 +00:00
parent 4f7b6d9564
commit 91803759a8

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Local Config and Value Storage API
diff --git a/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java diff --git a/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..ff54d6b5d3f0299a37f36dde86fd00c5d04115dc index 0000000000000000000000000000000000000000..a3a09b8d58589883c7c465597bc64502bbfa0d88
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java +++ b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java
@@ -0,0 +1,143 @@ @@ -0,0 +1,143 @@
@@ -49,7 +49,7 @@ index 0000000000000000000000000000000000000000..ff54d6b5d3f0299a37f36dde86fd00c5
+ } + }
+ +
+ @Override + @Override
+ public LocalRegion locate(int x, int z, int searchDistance) { + public synchronized LocalRegion locate(int x, int z, int searchDistance) {
+ long search = (long) searchDistance << 32; + long search = (long) searchDistance << 32;
+ long coordinate = ChunkPos.asLong(x, z); + long coordinate = ChunkPos.asLong(x, z);
+ +
@@ -74,17 +74,17 @@ index 0000000000000000000000000000000000000000..ff54d6b5d3f0299a37f36dde86fd00c5
+ } + }
+ +
+ @Override + @Override
+ public LocalValueStorage get(LocalRegion region) { + public synchronized LocalValueStorage get(LocalRegion region) {
+ return this.storageMap.get(region); + return this.storageMap.get(region);
+ } + }
+ +
+ @Override + @Override
+ public boolean has(LocalRegion region) { + public synchronized boolean has(LocalRegion region) {
+ return this.storageMap.containsKey(region); + return this.storageMap.containsKey(region);
+ } + }
+ +
+ @Override + @Override
+ public void put(LocalRegion region, LocalValueStorage storage) { + public synchronized void put(LocalRegion region, LocalValueStorage storage) {
+ assert region != null : "region cannot be null"; + assert region != null : "region cannot be null";
+ assert storage != null : "storage cannot be null"; + assert storage != null : "storage cannot be null";
+ +
@@ -96,7 +96,7 @@ index 0000000000000000000000000000000000000000..ff54d6b5d3f0299a37f36dde86fd00c5
+ } + }
+ +
+ @Override + @Override
+ public void remove(LocalRegion region) { + public synchronized void remove(LocalRegion region) {
+ assert region != null : "region cannot be null"; + assert region != null : "region cannot be null";
+ +
+ long base = ChunkPos.asLong(region.minX(), region.minZ()); + long base = ChunkPos.asLong(region.minX(), region.minZ());
@@ -106,11 +106,11 @@ index 0000000000000000000000000000000000000000..ff54d6b5d3f0299a37f36dde86fd00c5
+ } + }
+ +
+ @Override + @Override
+ public List<LocalRegion> regions() { + public synchronized List<LocalRegion> regions() {
+ return new ArrayList<>(this.storageMap.keySet()); + return new ArrayList<>(this.storageMap.keySet());
+ } + }
+ +
+ public LocalValueConfig config(BlockPos position) { + public synchronized LocalValueConfig config(BlockPos position) {
+ long chunkKey = ChunkPos.asLong(position.getX() >> 4, position.getZ() >> 4); + long chunkKey = ChunkPos.asLong(position.getX() >> 4, position.getZ() >> 4);
+ +
+ LocalValueConfig local = this.configMap.computeIfAbsent(chunkKey, (key) -> { + LocalValueConfig local = this.configMap.computeIfAbsent(chunkKey, (key) -> {
@@ -134,7 +134,7 @@ index 0000000000000000000000000000000000000000..ff54d6b5d3f0299a37f36dde86fd00c5
+ return local; + return local;
+ } + }
+ +
+ public void expire(long tick) { + public synchronized void expire(long tick) {
+ if (tick % 200 != 0) return; + if (tick % 200 != 0) return;
+ +
+ // remove expired + // remove expired
@@ -231,7 +231,7 @@ index eb04fab84e266b11ef4e531cb7ea8504a1e46aac..23e5fcffe6e1b1a12af5c7399dd8b2f6
this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 8be02651774f7f7c5b383759df41ee18a8b5c267..d40c3aefde1e3b70657b48241cda2d0b0c457531 100644 index 1830fc9bb35f900df389e8886b5355478bf3148c..7a1eb9f7fa60125cc1660d6f9c244101991123d9 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -177,6 +177,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -177,6 +177,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable {