Skip to content

Commit 5367454

Browse files
committed
Map thread safety (Fixes #27)
1 parent a546caf commit 5367454

1 file changed

Lines changed: 37 additions & 1 deletion

File tree

patches/server/0024-Misc-threadsafety.patch

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1325,7 +1325,7 @@ index 763b315b1d761bc3bd82d9b847ed3f64fd5ce991..841aa55043f354d5058992d43645bf9e
13251325
this.usedAuxIds.put("map", i);
13261326
this.setDirty();
13271327
diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
1328-
index e26f6215ca42885cb0635a3183a8df93a924ba7f..5d01e9c124047ab89be5727ec4ecd044f76c202e 100644
1328+
index e26f6215ca42885cb0635a3183a8df93a924ba7f..6e22cf6b41bebc93db6ce43e1f0d634017b0f591 100644
13291329
--- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
13301330
+++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
13311331
@@ -12,6 +12,7 @@ import java.util.List;
@@ -1344,6 +1344,42 @@ index e26f6215ca42885cb0635a3183a8df93a924ba7f..5d01e9c124047ab89be5727ec4ecd044
13441344
public final List<MapItemSavedData.HoldingPlayer> carriedBy = Lists.newArrayList();
13451345
public final Map<Player, MapItemSavedData.HoldingPlayer> carriedByPlayers = Maps.newHashMap();
13461346
private final Map<String, MapBanner> bannerMarkers = Maps.newHashMap();
1347+
@@ -262,7 +264,7 @@ public class MapItemSavedData extends SavedData {
1348+
return nbt;
1349+
}
1350+
1351+
- public MapItemSavedData locked() {
1352+
+ public synchronized MapItemSavedData locked() { // ShreddedPaper - thread-safe
1353+
MapItemSavedData worldmap = new MapItemSavedData(this.centerX, this.centerZ, this.scale, this.trackingPosition, this.unlimitedTracking, true, this.dimension);
1354+
1355+
worldmap.bannerMarkers.putAll(this.bannerMarkers);
1356+
@@ -285,7 +287,7 @@ public class MapItemSavedData extends SavedData {
1357+
};
1358+
}
1359+
1360+
- public void tickCarriedBy(Player player, ItemStack stack) {
1361+
+ public synchronized void tickCarriedBy(Player player, ItemStack stack) { // ShreddedPaper - thread-safe
1362+
if (!this.carriedByPlayers.containsKey(player)) {
1363+
MapItemSavedData.HoldingPlayer worldmap_worldmaphumantracker = new MapItemSavedData.HoldingPlayer(player);
1364+
1365+
@@ -438,7 +440,7 @@ public class MapItemSavedData extends SavedData {
1366+
}
1367+
1368+
@Nullable
1369+
- public Packet<?> getUpdatePacket(MapId mapId, Player player) {
1370+
+ public synchronized Packet<?> getUpdatePacket(MapId mapId, Player player) { // ShreddedPaper - thread-safe
1371+
MapItemSavedData.HoldingPlayer worldmap_worldmaphumantracker = (MapItemSavedData.HoldingPlayer) this.carriedByPlayers.get(player);
1372+
1373+
return worldmap_worldmaphumantracker == null ? null : worldmap_worldmaphumantracker.nextUpdatePacket(mapId);
1374+
@@ -562,7 +564,7 @@ public class MapItemSavedData extends SavedData {
1375+
return true;
1376+
}
1377+
1378+
- public void addClientSideDecorations(List<MapDecoration> decorations) {
1379+
+ public synchronized void addClientSideDecorations(List<MapDecoration> decorations) { // ShreddedPaper - thread-safe
1380+
this.decorations.clear();
1381+
this.trackedDecorationCount = 0;
1382+
13471383
diff --git a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java
13481384
index 6e23e69abd56eeda3b52a22019e1b74ae10682e7..f3d1dfb2cca74ecfc123f1c06a20462a1295d60f 100644
13491385
--- a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java

0 commit comments

Comments
 (0)