From 9aa306d0c674e5deeccfa0e4472369fb7882fa89 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 20 Apr 2026 06:48:09 +0000 Subject: [PATCH] Fix setPersistent(true) not applying when Bukkit registry lags behind spawn The previous code called getServer().getEntity(uuid) immediately after MythicMobs returned the UUID. At that point the entity may not yet be registered in Bukkit's entity registry, so getEntity() could return null and the setPersistent(true) call was silently skipped. Fix: call BukkitAdapter.adapt(active.getEntity()) inside spawnMob() while the ActiveMob reference is still live, then set persistent before returning the UUID. The entity is always accessible at that point. The redundant getServer().getEntity() + setPersistent() in spawnBatch() is removed since persistence is now guaranteed by the adapter. https://claude.ai/code/session_01QRahgKn43HbgkmDkQZCq9Z --- src/main/java/net/tylers1066/mob/MobSpawnManager.java | 5 +---- .../java/net/tylers1066/mob/mythic/MythicV5Adapter.java | 6 +++++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/tylers1066/mob/MobSpawnManager.java b/src/main/java/net/tylers1066/mob/MobSpawnManager.java index 9f9c6f8..3239866 100644 --- a/src/main/java/net/tylers1066/mob/MobSpawnManager.java +++ b/src/main/java/net/tylers1066/mob/MobSpawnManager.java @@ -282,10 +282,7 @@ private void spawnBatch(World world, ProtectedRegion region, MobSpawnData data, Optional result = adapter.spawnMob(mobType, loc, level); if (result.isPresent()) { - UUID uuid = result.get(); - recordSpawn(zoneKey, uuid); - Entity entity = plugin.getServer().getEntity(uuid); - if (entity != null) entity.setPersistent(true); + recordSpawn(zoneKey, result.get()); debug("[MobSpawn] Spawned '" + mobType + "' at " + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + " in region '" + region.getId() + "'."); diff --git a/src/main/java/net/tylers1066/mob/mythic/MythicV5Adapter.java b/src/main/java/net/tylers1066/mob/mythic/MythicV5Adapter.java index b7b39dc..13e9087 100644 --- a/src/main/java/net/tylers1066/mob/mythic/MythicV5Adapter.java +++ b/src/main/java/net/tylers1066/mob/mythic/MythicV5Adapter.java @@ -36,7 +36,11 @@ public Optional spawnMob(@NotNull String mobName, @NotNull Location locati } try { ActiveMob active = mythicMob.get().spawn(BukkitAdapter.adapt(location), level); - return Optional.of(active.getEntity().getUniqueId()); + org.bukkit.entity.Entity entity = BukkitAdapter.adapt(active.getEntity()); + // Mark persistent immediately — getServer().getEntity(uuid) in the caller + // may return null if the entity is not yet registered in Bukkit's registry. + entity.setPersistent(true); + return Optional.of(entity.getUniqueId()); } catch (Exception e) { return Optional.empty(); }