From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Cryptite Date: Mon, 12 Jun 2023 14:09:36 -0500 Subject: [PATCH] Shared Data Storage diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java index 4ac3fa45cd155ae8a852e26d4d4d1f16b28efdc2..b89e3568cc9371984fe1cd8f83008a9250956465 100644 --- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java @@ -270,6 +270,7 @@ public class GlobalConfiguration extends ConfigurationPart { public boolean lagCompensateBlockBreaking = true; public boolean useDimensionTypeForCustomSpawners = false; public boolean strictAdvancementDimensionCheck = false; + public String sharedDataFolder = ""; } public BlockUpdates blockUpdates; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 681123682c1a0060d05860835e5b9f46147f7c1f..619956817b5fccb74a6d68d5e3ea1b317c69b779 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -2,6 +2,7 @@ package net.minecraft.server; import com.google.common.base.Preconditions; import com.google.common.base.Splitter; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import co.aikar.timings.Timings; import com.destroystokyo.paper.event.server.PaperServerListPingEvent; @@ -311,6 +312,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); @@ -411,6 +413,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { + return (MapItemSavedData) this.getServer().getMapDataStorage().get((nbttagcompound) -> { // Slice // We only get here when the data file exists, but is not a valid map MapItemSavedData newMap = MapItemSavedData.load(nbttagcompound); newMap.id = id; @@ -2082,12 +2082,22 @@ public class ServerLevel extends Level implements WorldGenLevel { @Override public void setMapData(String id, MapItemSavedData state) { state.id = id; // CraftBukkit - this.getServer().overworld().getDataStorage().set(id, state); + this.getServer().getMapDataStorage().set(id, state); // Slice } @Override public int getFreeMapId() { - return ((MapIndex) this.getServer().overworld().getDataStorage().computeIfAbsent(MapIndex::load, MapIndex::new, "idcounts")).getFreeAuxValueForMap(); + // Slice start + DimensionDataStorage storage = this.getServer().getMapDataStorage(); + MapIndex mapIndex = storage.readSavedData(MapIndex::load, "idcounts"); + if (mapIndex == null) { + mapIndex = new MapIndex(); + } + int newId = mapIndex.getFreeAuxValueForMap(); + storage.set("idcounts", mapIndex); + storage.save(); + return newId; + // Slice end } // Paper start - helper function for configurable spawn radius diff --git a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java index defe31a5d3aa89a3d18b94f2ff005594e38754b3..637a86e74d633901fdd2f2f1ba6aa4ed49780ead 100644 --- a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java +++ b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java @@ -58,7 +58,7 @@ public class DimensionDataStorage { } @Nullable - private T readSavedData(Function readFunction, String id) { + public T readSavedData(Function readFunction, String id) { // Slice private -> public try { File file = this.getDataFile(id); if (file.exists()) {