From 10a11c3712b733e9f3a3bb584435acb9bf42385c Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Sat, 13 May 2023 17:26:08 -0700 Subject: [PATCH] Do not access POI data for lodestone compass Instead, we can just check the loaded chunk's block position for the lodestone block, as that is at least safe enough for the light engine compared to the POI access. This should make it safe for off-region access. Fixes https://github.com/PaperMC/Folia/issues/60 --- ...ccess-POI-data-for-lodestone-compass.patch | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 patches/server/0023-Do-not-access-POI-data-for-lodestone-compass.patch diff --git a/patches/server/0023-Do-not-access-POI-data-for-lodestone-compass.patch b/patches/server/0023-Do-not-access-POI-data-for-lodestone-compass.patch new file mode 100644 index 0000000..9cf34d1 --- /dev/null +++ b/patches/server/0023-Do-not-access-POI-data-for-lodestone-compass.patch @@ -0,0 +1,27 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Spottedleaf +Date: Sat, 13 May 2023 17:13:40 -0700 +Subject: [PATCH] Do not access POI data for lodestone compass + +Instead, we can just check the loaded chunk's block position for +the lodestone block, as that is at least safe enough for the light +engine compared to the POI access. This should make it safe for +off-region access. + +diff --git a/src/main/java/net/minecraft/world/item/CompassItem.java b/src/main/java/net/minecraft/world/item/CompassItem.java +index 7c4a2f8bb3efd11db2f8711952cc26a067c6d56b..2a60db30bc113039c03ff10b45d5a704a4106b48 100644 +--- a/src/main/java/net/minecraft/world/item/CompassItem.java ++++ b/src/main/java/net/minecraft/world/item/CompassItem.java +@@ -77,7 +77,11 @@ public class CompassItem extends Item implements Vanishable { + Optional> optional = getLodestoneDimension(compoundTag); + if (optional.isPresent() && optional.get() == world.dimension() && compoundTag.contains("LodestonePos")) { + BlockPos blockPos = NbtUtils.readBlockPos(compoundTag.getCompound("LodestonePos")); +- if (!world.isInWorldBounds(blockPos) || (world.hasChunkAt(blockPos) && !((ServerLevel)world).getPoiManager().existsAtPosition(PoiTypes.LODESTONE, blockPos))) { // Paper ++ ++ // Folia start - do not access the POI data off-region ++ net.minecraft.world.level.chunk.LevelChunk chunk = world.getChunkIfLoaded(blockPos); ++ if (!world.isInWorldBounds(blockPos) || chunk != null && chunk.getBlockState(blockPos).getBlock() != Blocks.LODESTONE) { // Paper ++ // Folia end - do not access the POI data off-region + compoundTag.remove("LodestonePos"); + } + }