From d0b69c2306699bf797b8f74bfdb23e68de4d4711 Mon Sep 17 00:00:00 2001 From: MrPowerGamerBR Date: Fri, 17 Nov 2023 18:30:03 -0300 Subject: [PATCH] Make the new map data skip optimization configurable per world --- patches/server/0002-SparklyPaper-config-files.patch | 11 +++++++---- ...Item-update-if-the-map-does-not-have-the-Cra.patch | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/patches/server/0002-SparklyPaper-config-files.patch b/patches/server/0002-SparklyPaper-config-files.patch index f1b231b..04ac3d0 100644 --- a/patches/server/0002-SparklyPaper-config-files.patch +++ b/patches/server/0002-SparklyPaper-config-files.patch @@ -225,10 +225,10 @@ index 0000000000000000000000000000000000000000..6398c7b40ba82ffc8588eca458ce92c2 \ No newline at end of file diff --git a/src/main/kotlin/net/sparklypower/sparklypaper/configs/SparklyPaperConfigUtils.kt b/src/main/kotlin/net/sparklypower/sparklypaper/configs/SparklyPaperConfigUtils.kt new file mode 100644 -index 0000000000000000000000000000000000000000..fbbb11c1a62a28a251c35261fb29e6267a08c1a3 +index 0000000000000000000000000000000000000000..4c736abcf64855e8fdfdeb2ba646288283ae278a --- /dev/null +++ b/src/main/kotlin/net/sparklypower/sparklypaper/configs/SparklyPaperConfigUtils.kt -@@ -0,0 +1,49 @@ +@@ -0,0 +1,50 @@ +package net.sparklypower.sparklypaper.configs + +import com.charleskorn.kaml.Yaml @@ -255,6 +255,7 @@ index 0000000000000000000000000000000000000000..fbbb11c1a62a28a251c35261fb29e626 + ), + mapOf( + "default" to SparklyPaperWorldConfig( ++ skipMapItemDataUpdatesIfMapDoesNotHaveCraftMapRenderer = true, + SparklyPaperWorldConfig.TickRates( + farmWhenMoisturised = 1 + ) @@ -281,10 +282,10 @@ index 0000000000000000000000000000000000000000..fbbb11c1a62a28a251c35261fb29e626 \ No newline at end of file diff --git a/src/main/kotlin/net/sparklypower/sparklypaper/configs/SparklyPaperWorldConfig.kt b/src/main/kotlin/net/sparklypower/sparklypaper/configs/SparklyPaperWorldConfig.kt new file mode 100644 -index 0000000000000000000000000000000000000000..190954d4533e53247f9a4af878a08ce96eee2ebd +index 0000000000000000000000000000000000000000..1b0851f6c66910773f99e9a6c6a99abc90164f51 --- /dev/null +++ b/src/main/kotlin/net/sparklypower/sparklypaper/configs/SparklyPaperWorldConfig.kt -@@ -0,0 +1,16 @@ +@@ -0,0 +1,18 @@ +package net.sparklypower.sparklypaper.configs + +import kotlinx.serialization.SerialName @@ -292,6 +293,8 @@ index 0000000000000000000000000000000000000000..190954d4533e53247f9a4af878a08ce9 + +@Serializable +class SparklyPaperWorldConfig( ++ @SerialName("skip-map-item-data-updates-if-map-does-not-have-craftmaprenderer") ++ val skipMapItemDataUpdatesIfMapDoesNotHaveCraftMapRenderer: Boolean, + @SerialName("tick-rates") + val tickRates: TickRates +) { diff --git a/patches/server/0006-Skip-MapItem-update-if-the-map-does-not-have-the-Cra.patch b/patches/server/0006-Skip-MapItem-update-if-the-map-does-not-have-the-Cra.patch index 5e6cdd2..7b81e73 100644 --- a/patches/server/0006-Skip-MapItem-update-if-the-map-does-not-have-the-Cra.patch +++ b/patches/server/0006-Skip-MapItem-update-if-the-map-does-not-have-the-Cra.patch @@ -9,7 +9,7 @@ Optimizes "image in map" maps, without requiring the map to be locked, which som This has the disadvantage that the vanilla map data will never be updated while the CraftMapRenderer is not present, but that's not a huuuge problem for us diff --git a/src/main/java/net/minecraft/world/item/MapItem.java b/src/main/java/net/minecraft/world/item/MapItem.java -index c368b437597edf7e165326727ae778a69c3fcc83..3d812694c6ca2f211ff4f2bdd4d0c1336652b421 100644 +index c368b437597edf7e165326727ae778a69c3fcc83..c54498c662fef50ffb16441e1480f4e048ff99d6 100644 --- a/src/main/java/net/minecraft/world/item/MapItem.java +++ b/src/main/java/net/minecraft/world/item/MapItem.java @@ -333,7 +333,14 @@ public class MapItem extends ComplexItem { @@ -18,7 +18,7 @@ index c368b437597edf7e165326727ae778a69c3fcc83..3d812694c6ca2f211ff4f2bdd4d0c133 if (!worldmap.locked && (selected || entity instanceof Player && ((Player) entity).getOffhandItem() == stack)) { - this.update(world, entity, worldmap); + // SparklyPaper - don't update maps if they don't have the CraftMapRenderer in the render list -+ if (worldmap.mapView.getRenderers().stream().anyMatch(mapRenderer -> mapRenderer.getClass() == org.bukkit.craftbukkit.map.CraftMapRenderer.class)) { ++ if (!world.sparklyPaperConfig.getSkipMapItemDataUpdatesIfMapDoesNotHaveCraftMapRenderer() || worldmap.mapView.getRenderers().stream().anyMatch(mapRenderer -> mapRenderer.getClass() == org.bukkit.craftbukkit.map.CraftMapRenderer.class)) { + this.update(world, entity, worldmap); + } else { + if (entity instanceof Player)