diff --git a/main/src/main/java/net/citizensnpcs/Citizens.java b/main/src/main/java/net/citizensnpcs/Citizens.java index ae787b6b6..d94c4e15d 100644 --- a/main/src/main/java/net/citizensnpcs/Citizens.java +++ b/main/src/main/java/net/citizensnpcs/Citizens.java @@ -32,6 +32,7 @@ import com.google.common.io.Files; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; +import ch.ethz.globis.phtree.PhTreeHelper; import net.byteflux.libby.BukkitLibraryManager; import net.byteflux.libby.Library; import net.byteflux.libby.LibraryManager; @@ -337,6 +338,7 @@ public class Citizens extends JavaPlugin implements CitizensPlugin { } catch (Throwable t) { lib.loadLibrary(Library.builder().groupId("org{}joml").artifactId("joml").version("1.10.5").build()); } + PhTreeHelper.enablePooling(false); } @Override diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 4a1683f94..a2b6d7702 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -2670,7 +2670,7 @@ public class NPCCommands { at = npc.getStoredLocation(); } trait.setSitting(at); - Messaging.sendTr(sender, Messages.SITTING_SET, npc.getName(), at); + Messaging.sendTr(sender, Messages.SITTING_SET, npc.getName(), Util.prettyPrintLocation(at)); } @Command( diff --git a/main/src/main/java/net/citizensnpcs/npc/ai/FlyingAStarNavigationStrategy.java b/main/src/main/java/net/citizensnpcs/npc/ai/FlyingAStarNavigationStrategy.java index e42abd665..9b3bfc4be 100644 --- a/main/src/main/java/net/citizensnpcs/npc/ai/FlyingAStarNavigationStrategy.java +++ b/main/src/main/java/net/citizensnpcs/npc/ai/FlyingAStarNavigationStrategy.java @@ -174,19 +174,11 @@ public class FlyingAStarNavigationStrategy extends AbstractPathStrategy { velocity.setX(motX).setY(motY).setZ(motZ).multiply(parameters.speed()); npc.getEntity().setVelocity(velocity); - float targetYaw = (float) (Math.toDegrees(Math.atan2(motZ, motX))) - 90.0F; - float normalisedTargetYaw = (targetYaw - current.getYaw()) % 360; - if (normalisedTargetYaw >= 180.0F) { - normalisedTargetYaw -= 360.0F; - } - if (normalisedTargetYaw < -180.0F) { - normalisedTargetYaw += 360.0F; - } - if (npc.getEntity().getType() != EntityType.ENDER_DRAGON) { NMS.setVerticalMovement(npc.getEntity(), 0.5); Util.faceLocation(npc.getEntity(), centeredDest.toLocation(npc.getEntity().getWorld())); } + plan.run(npc); return false; } diff --git a/main/src/main/java/net/citizensnpcs/trait/SitTrait.java b/main/src/main/java/net/citizensnpcs/trait/SitTrait.java index 750b8c1b6..1729f6eb5 100644 --- a/main/src/main/java/net/citizensnpcs/trait/SitTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/SitTrait.java @@ -2,6 +2,7 @@ package net.citizensnpcs.trait; import org.bukkit.Location; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Sittable; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import net.citizensnpcs.api.CitizensAPI; @@ -29,6 +30,11 @@ public class SitTrait extends Trait { @Override public void onDespawn() { + if (SUPPORT_SITTABLE && npc.getEntity() instanceof Sittable) { + ((Sittable) npc.getEntity()).setSitting(false); + return; + } + if (chair != null) { if (chair.getEntity() != null) { chair.getEntity().eject(); @@ -48,6 +54,13 @@ public class SitTrait extends Trait { if (!npc.isSpawned() || !isSitting()) return; + if (SUPPORT_SITTABLE && npc.getEntity() instanceof Sittable) { + ((Sittable) npc.getEntity()).setSitting(true); + if (npc.getEntity().getLocation().distance(sittingAt) > 0.05) { + npc.teleport(sittingAt, TeleportCause.PLUGIN); + } + } + if (chair == null) { NPCRegistry registry = CitizensAPI.getNamedNPCRegistry("SitRegistry"); if (registry == null) { @@ -76,4 +89,13 @@ public class SitTrait extends Trait { onDespawn(); } } + + private static boolean SUPPORT_SITTABLE = true; + static { + try { + Class.forName("org.bukkit.entity.Sittable"); + } catch (ClassNotFoundException e) { + SUPPORT_SITTABLE = false; + } + } } diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/AnimationTriggerPrompt.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/AnimationTriggerPrompt.java index 2d26cd717..a41e9504e 100644 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/AnimationTriggerPrompt.java +++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/AnimationTriggerPrompt.java @@ -33,6 +33,8 @@ public class AnimationTriggerPrompt extends StringPrompt implements WaypointTrig at = CommandContext.parseLocation( context.getForWhom() instanceof Player ? ((Player) context.getForWhom()).getLocation() : null, input.replaceFirst("at ", "")); + Messaging.send((CommandSender) context.getForWhom(), Messages.WAYPOINT_TRIGGER_ANIMATION_AT_SET, + Util.prettyPrintLocation(at)); } catch (CommandException e) { Messaging.send((CommandSender) context.getForWhom(), e.getMessage()); } diff --git a/main/src/main/java/net/citizensnpcs/util/Messages.java b/main/src/main/java/net/citizensnpcs/util/Messages.java index a4caced69..31cec9941 100644 --- a/main/src/main/java/net/citizensnpcs/util/Messages.java +++ b/main/src/main/java/net/citizensnpcs/util/Messages.java @@ -457,6 +457,7 @@ public class Messages { public static final String WAYPOINT_TELEPORTING_ENABLED = "citizens.commands.waypoints.disableteleporting.enabled"; public static final String WAYPOINT_TRIGGER_ADD_PROMPT = "citizens.editors.waypoints.triggers.add.prompt"; public static final String WAYPOINT_TRIGGER_ADDED_SUCCESSFULLY = "citizens.editors.waypoints.triggers.add.added"; + public static final String WAYPOINT_TRIGGER_ANIMATION_AT_SET = "citizens.editors.waypoints.triggers.animation.at-set"; public static final String WAYPOINT_TRIGGER_CHAT_INVALID_RADIUS = "citizens.editors.waypoints.triggers.chat.invalid-radius"; public static final String WAYPOINT_TRIGGER_CHAT_NO_RADIUS = "citizens.editors.waypoints.triggers.chat.missing-radius"; public static final String WAYPOINT_TRIGGER_EDITOR_EXIT = "citizens.editors.waypoints.triggers.main.exit"; diff --git a/main/src/main/resources/messages_en.properties b/main/src/main/resources/messages_en.properties index c1a3844b8..7f15b3995 100644 --- a/main/src/main/resources/messages_en.properties +++ b/main/src/main/resources/messages_en.properties @@ -431,6 +431,7 @@ citizens.editors.waypoints.triggers.add.added=Added waypoint trigger successfull citizens.editors.waypoints.triggers.add.invalid-trigger=Couldn''t create a trigger by the name [[{0}]]. citizens.editors.waypoints.triggers.add.prompt=Enter in a trigger name to add or type [[back]] to return to the edit prompt. Valid trigger names are {0}. citizens.editors.waypoints.triggers.animation.added=Animation [[{0}]] added. +citizens.editors.waypoints.triggers.animation.at-set=Animation location set to [[{0}]]. citizens.editors.waypoints.triggers.list=Current triggers are:{0} citizens.editors.waypoints.triggers.animation.prompt=Enter in animations to perform - valid animations are {0}.
[[at (x:y:z:world)]] optionally set a location to perform the animation at.
Type in [[finish]] to finish the animation trigger or [[back]] to return to the previous prompt. citizens.editors.waypoints.triggers.animation.invalid-animation=Invalid animation [[{0}]]. Valid animations are {1}.