From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Sat, 9 Jan 2021 14:17:07 +0100 Subject: [PATCH] Remove stale POIs diff --git a/src/main/java/net/minecraft/server/VillagePlace.java b/src/main/java/net/minecraft/server/VillagePlace.java index b926cebd053bef829517c9d9bbf1c609c23ca04a..6a0f07b13eef5560dfc7c7b39618c0b825533aec 100644 --- a/src/main/java/net/minecraft/server/VillagePlace.java +++ b/src/main/java/net/minecraft/server/VillagePlace.java @@ -41,6 +41,7 @@ public class VillagePlace extends RegionFileSection { ((VillagePlaceSection) this.e(SectionPosition.a(blockposition).s())).a(blockposition, villageplacetype); } + public void remove(BlockPosition blockposition) { this.a(blockposition); } // Paper - OBFHELPER public void a(BlockPosition blockposition) { ((VillagePlaceSection) this.e(SectionPosition.a(blockposition).s())).a(blockposition); } @@ -125,6 +126,7 @@ public class VillagePlace extends RegionFileSection { return ((VillagePlaceSection) this.e(SectionPosition.a(blockposition).s())).c(blockposition); } + public final boolean test(BlockPosition blockposition, Predicate predicate) { return this.a(blockposition, predicate); } // Paper - OBFHELPER public boolean a(BlockPosition blockposition, Predicate predicate) { return (Boolean) this.d(SectionPosition.a(blockposition).s()).map((villageplacesection) -> { return villageplacesection.a(blockposition, predicate); diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java index 5b0b6edfa790918e56399ff6c83f3feb6e5aca49..b033ff44373ec87702946c3cefe664fb46d609f4 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -1942,6 +1942,13 @@ public class WorldServer extends World implements GeneratorAccessSeed { Optional optional = VillagePlaceType.b(iblockdata); Optional optional1 = VillagePlaceType.b(iblockdata1); + // Paper start + this.getMinecraftServer().execute(() -> { + if (!optional.isPresent() && this.getPoiStorage().test(blockposition, com.google.common.base.Predicates.alwaysTrue())) { + this.getPoiStorage().remove(blockposition); + } + }); + // Paper end if (!Objects.equals(optional, optional1)) { BlockPosition blockposition1 = blockposition.immutableCopy(); @@ -1960,6 +1967,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } + public final VillagePlace getPoiStorage() { return this.y(); } // Paper - OBFHELPER public VillagePlace y() { return this.getChunkProvider().j(); }