From b49698b02dc32d349b6ec0ec017b6572d9b62868 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Tue, 8 Apr 2025 15:51:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B8=B8=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=8C=BA=E5=9D=97=E6=BD=9C=E5=BD=B1=E8=B4=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/furniture/BukkitFurnitureManager.java | 13 ++++++++++++- .../entity/furniture/FurnitureEventListener.java | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java index 9fd2c4f8f..25d4bd735 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java @@ -217,6 +217,8 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager { for (Entity entity : entities) { if (entity instanceof ItemDisplay display) { handleBaseEntityLoadEarly(display); + } else if (entity instanceof Shulker shulker) { + handleCollisionEntityLoadOnEntitiesLoad(shulker); } } } @@ -366,10 +368,19 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager { } public void handleCollisionEntityLoadOnEntitiesLoad(Shulker shulker) { - // remove the shulker if it's on chunk load stage + // faster if (FastNMS.INSTANCE.method$CraftEntity$getHandle(shulker) instanceof CollisionEntity) { shulker.remove(); + return; } + + // not a collision entity + Byte flag = shulker.getPersistentDataContainer().get(FURNITURE_COLLISION, PersistentDataType.BYTE); + if (flag == null || flag != 1) { + return; + } + + shulker.remove(); } private AnchorType getAnchorType(Entity baseEntity, CustomFurniture furniture) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/FurnitureEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/FurnitureEventListener.java index 18bfa8e42..fab4d3059 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/FurnitureEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/FurnitureEventListener.java @@ -45,6 +45,8 @@ public class FurnitureEventListener implements Listener { for (Entity entity : entities) { if (entity instanceof ItemDisplay itemDisplay) { this.manager.handleBaseEntityLoadEarly(itemDisplay); + } else if (entity instanceof Shulker shulker) { + this.manager.handleCollisionEntityLoadOnEntitiesLoad(shulker); } } }