From b8fe22c9cdbaf3f42e64d050f035604236168a35 Mon Sep 17 00:00:00 2001 From: Bjarne Koll Date: Sat, 24 May 2025 22:17:42 +0200 Subject: [PATCH] Do not call EntityRemoveEvent during worldgen (#12588) Ports the follow commits from spigot to paper. All credits to go the respective commit authors listed below. CraftBukkit: 3b4fd5b321f4440a2b3a67f3945739b45e6e687f By: md_5 --- .../net/minecraft/server/level/ServerLevel.java.patch | 6 +++--- .../org/bukkit/craftbukkit/event/CraftEventFactory.java | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/paper-server/patches/sources/net/minecraft/server/level/ServerLevel.java.patch b/paper-server/patches/sources/net/minecraft/server/level/ServerLevel.java.patch index 25f605cfb..1649ec39d 100644 --- a/paper-server/patches/sources/net/minecraft/server/level/ServerLevel.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/level/ServerLevel.java.patch @@ -1065,10 +1065,11 @@ @Override public CrashReportCategory fillReportDetails(CrashReport report) { CrashReportCategory crashReportCategory = super.fillReportDetails(report); -@@ -1712,6 +_,7 @@ +@@ -1712,6 +_,8 @@ final class EntityCallbacks implements LevelCallback { @Override public void onCreated(Entity entity) { ++ entity.inWorld = true; // CraftBukkit - Mark entity as in world + entity.setOldPosAndRot(); // Paper - update old pos / rot for new entities as it will default to Vec3.ZERO } @@ -1108,11 +1109,10 @@ String string = "onTrackingStart called during navigation iteration"; Util.logAndPauseIfInIde( "onTrackingStart called during navigation iteration", new IllegalStateException("onTrackingStart called during navigation iteration") -@@ -1755,10 +_,52 @@ +@@ -1755,10 +_,51 @@ } entity.updateDynamicGameEventListener(DynamicGameEventListener::add); -+ entity.inWorld = true; // CraftBukkit - Mark entity as in world + entity.valid = true; // CraftBukkit + ServerLevel.this.getChunkSource().addEntity(entity); // Paper - ignore and warn about illegal addEntity calls instead of crashing server + // Paper start - Entity origin API diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 6f86a505c..c55d7e05d 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1961,6 +1961,11 @@ public class CraftEventFactory { return; } + // SPIGOT-8041: Do not call event unless entity has been spawned into world + if (!entity.inWorld) { + return; + } + Bukkit.getPluginManager().callEvent(new EntityRemoveEvent(entity.getBukkitEntity(), cause)); }