diff --git a/main/src/main/java/net/citizensnpcs/EventListen.java b/main/src/main/java/net/citizensnpcs/EventListen.java index d62b7ef95..38ab13e9a 100644 --- a/main/src/main/java/net/citizensnpcs/EventListen.java +++ b/main/src/main/java/net/citizensnpcs/EventListen.java @@ -526,7 +526,13 @@ public class EventListen implements Listener { event.setCancelled(true); return; } - PlayerAnimation.STOP_USE_ITEM.play(player); + if (SUPPORT_STOP_USE_ITEM) { + try { + PlayerAnimation.STOP_USE_ITEM.play(player); + } catch (UnsupportedOperationException e) { + SUPPORT_STOP_USE_ITEM = false; + } + } if (npc.hasTrait(CommandTrait.class)) { npc.getTraitNullable(CommandTrait.class).dispatch(player, CommandTrait.Hand.RIGHT); } @@ -764,4 +770,6 @@ public class EventListen implements Listener { } return npc.spawn(spawn, SpawnReason.CHUNK_LOAD); } + + private static boolean SUPPORT_STOP_USE_ITEM = true; } \ No newline at end of file diff --git a/main/src/main/java/net/citizensnpcs/trait/ArmorStandTrait.java b/main/src/main/java/net/citizensnpcs/trait/ArmorStandTrait.java index b575432d2..d13b6be0e 100644 --- a/main/src/main/java/net/citizensnpcs/trait/ArmorStandTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/ArmorStandTrait.java @@ -121,6 +121,16 @@ public class ArmorStandTrait extends Trait { entity.setMarker(marker); } + public void setAsHelperEntity(NPC parent) { + npc.addTrait(new ClickRedirectTrait(npc)); + setAsPointEntity(); + } + + public void setAsHelperEntityWithName(NPC parent) { + npc.addTrait(new ClickRedirectTrait(npc)); + setAsPointEntityWithName(); + } + /** * Configures the entity as an invisible point entity, e.g. for mounting NPCs on top, nameplates, etc. */ diff --git a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java index 2b2a81417..98e517d24 100644 --- a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java @@ -86,8 +86,7 @@ public class HologramTrait extends Trait { private NPC createHologram(String line, double heightOffset) { NPC hologramNPC = registry.createNPC(EntityType.ARMOR_STAND, line); - hologramNPC.addTrait(new ClickRedirectTrait(npc)); - hologramNPC.getOrAddTrait(ArmorStandTrait.class).setAsPointEntityWithName(); + hologramNPC.getOrAddTrait(ArmorStandTrait.class).setAsHelperEntityWithName(npc); hologramNPC.spawn(currentLoc.clone().add(0, getEntityHeight() + (direction == HologramDirection.BOTTOM_UP ? heightOffset : getMaxHeight() - heightOffset), diff --git a/main/src/main/java/net/citizensnpcs/trait/SitTrait.java b/main/src/main/java/net/citizensnpcs/trait/SitTrait.java index b19b8e572..d8720dffe 100644 --- a/main/src/main/java/net/citizensnpcs/trait/SitTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/SitTrait.java @@ -38,15 +38,17 @@ public class SitTrait extends Trait { if (!npc.isSpawned() || !sitting) { return; } + if (holder == null) { NPCRegistry registry = CitizensAPI.getNamedNPCRegistry("PlayerAnimationImpl"); if (registry == null) { registry = CitizensAPI.createNamedNPCRegistry("PlayerAnimationImpl", new MemoryNPCDataStore()); } holder = registry.createNPC(EntityType.ARMOR_STAND, ""); - holder.getOrAddTrait(ArmorStandTrait.class).setAsPointEntity(); + holder.getOrAddTrait(ArmorStandTrait.class).setAsHelperEntity(npc); holder.spawn(npc.getStoredLocation()); } + if (holder.getEntity() != null && !NMS.getPassengers(holder.getEntity()).contains(npc.getEntity())) { NMS.mount(holder.getEntity(), npc.getEntity()); }