PaperMC/patches/server/0878-Fix-missing-map-initialize-event-call.patch
Spottedleaf da9d110d5b Remove chunk save reattempt patch
This patch does not appear to be doing anything useful, and may
hide errors.

Currently, the save logic does not run through this path either
so it did not do anything.

Additionally, properly implement support for handling
RegionFileSizeException in Moonrise.
2024-11-28 18:27:59 -08:00

48 lines
2.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Warrior <50800980+Warriorrrr@users.noreply.github.com>
Date: Sun, 24 Sep 2023 18:35:28 +0200
Subject: [PATCH] Fix missing map initialize event call
== AT ==
public net.minecraft.world.level.storage.DimensionDataStorage readSavedData(Ljava/util/function/Function;Lnet/minecraft/util/datafix/DataFixTypes;Ljava/lang/String;)Lnet/minecraft/world/level/saveddata/SavedData;
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 5770fa7a798c1c019bef27426f945f3cc0387a36..6923624f069c1aeb757386ef91d285769a2923a2 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1701,13 +1701,29 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@Nullable
@Override
public MapItemSavedData getMapData(MapId id) {
- // CraftBukkit start
- MapItemSavedData worldmap = (MapItemSavedData) this.getServer().overworld().getDataStorage().get(MapItemSavedData.factory(), id.key());
- if (worldmap != null) {
- worldmap.id = id;
+ // Paper start - Call missing map initialize event and set id
+ final DimensionDataStorage storage = this.getServer().overworld().getDataStorage();
+
+ final Optional<net.minecraft.world.level.saveddata.SavedData> cacheEntry = storage.cache.get(id.key());
+ if (cacheEntry == null) { // Cache did not contain, try to load and may init
+ final MapItemSavedData worldmap = storage.get(MapItemSavedData.factory(), id.key()); // get populates the cache
+ if (worldmap != null) { // map was read, init it and return
+ worldmap.id = id;
+ new MapInitializeEvent(worldmap.mapView).callEvent();
+ return worldmap;
+ }
+
+ return null; // Map does not exist, reading failed.
}
- return worldmap;
- // CraftBukkit end
+
+ // Cache entry exists, update it with the id ref and return.
+ if (cacheEntry.orElse(null) instanceof final MapItemSavedData mapItemSavedData) {
+ mapItemSavedData.id = id;
+ return mapItemSavedData;
+ }
+
+ return null;
+ // Paper end - Call missing map initialize event and set id
}
@Override