From 8c30a785a4d0c361148e629f96f8454c4e6786f5 Mon Sep 17 00:00:00 2001 From: fullwall Date: Thu, 16 May 2019 19:58:29 +0800 Subject: [PATCH] Add some javadoc --- .../main/java/net/citizensnpcs/trait/Age.java | 11 +++ .../java/net/citizensnpcs/trait/Anchors.java | 11 ++- .../citizensnpcs/trait/ArmorStandTrait.java | 21 ++++ .../net/citizensnpcs/trait/Controllable.java | 98 ++++++++++++++----- .../citizensnpcs/trait/CurrentLocation.java | 3 + .../net/citizensnpcs/trait/FollowTrait.java | 39 ++++++-- .../net/citizensnpcs/trait/GameModeTrait.java | 5 + .../java/net/citizensnpcs/trait/Gravity.java | 9 ++ .../citizensnpcs/trait/HorseModifiers.java | 20 ++++ .../net/citizensnpcs/trait/LookClose.java | 32 +++++- .../net/citizensnpcs/trait/MountTrait.java | 3 + .../citizensnpcs/trait/OcelotModifiers.java | 5 + .../java/net/citizensnpcs/trait/Poses.java | 14 +++ .../java/net/citizensnpcs/trait/Powered.java | 5 + .../net/citizensnpcs/trait/RabbitType.java | 5 + .../java/net/citizensnpcs/trait/Saddle.java | 5 + .../net/citizensnpcs/trait/ScriptTrait.java | 24 +++++ .../net/citizensnpcs/trait/SheepTrait.java | 15 ++- .../net/citizensnpcs/trait/SkinLayers.java | 5 + .../net/citizensnpcs/trait/SlimeSize.java | 8 ++ .../net/citizensnpcs/trait/Toggleable.java | 3 + .../trait/VillagerProfession.java | 7 +- .../net/citizensnpcs/trait/WitherTrait.java | 9 +- .../net/citizensnpcs/trait/WolfModifiers.java | 5 + .../net/citizensnpcs/trait/WoolColor.java | 10 +- .../net/citizensnpcs/trait/text/Text.java | 64 ++++++++++-- .../trait/waypoint/EntityMarkers.java | 21 ++++ .../waypoint/GuidedWaypointProvider.java | 30 ++++++ .../waypoint/LinearWaypointProvider.java | 6 ++ .../waypoint/WanderWaypointProvider.java | 26 ++++- .../citizensnpcs/trait/waypoint/Waypoint.java | 12 +++ .../trait/waypoint/WaypointMarkers.java | 53 ---------- .../trait/waypoint/Waypoints.java | 16 +-- .../triggers/WaypointTriggerRegistry.java | 21 ++-- .../java/net/citizensnpcs/util/Anchor.java | 55 ++++++----- .../main/java/net/citizensnpcs/util/Pose.java | 1 - 36 files changed, 524 insertions(+), 153 deletions(-) delete mode 100644 main/src/main/java/net/citizensnpcs/trait/waypoint/WaypointMarkers.java diff --git a/main/src/main/java/net/citizensnpcs/trait/Age.java b/main/src/main/java/net/citizensnpcs/trait/Age.java index a47ff85b9..12880588f 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Age.java +++ b/main/src/main/java/net/citizensnpcs/trait/Age.java @@ -10,6 +10,11 @@ import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.util.Messages; +/** + * Persists the Minecraft age variable for {@link Ageable}s. Will also set baby for {@link Zombie}s. + * + * @see Ageable + */ @TraitName("age") public class Age extends Trait implements Toggleable { @Persist @@ -22,6 +27,9 @@ public class Age extends Trait implements Toggleable { super("age"); } + /** + * Send a brief description of the current state of the trait to the supplied {@link CommandSender}. + */ public void describe(CommandSender sender) { Messaging.sendTr(sender, Messages.AGE_TRAIT_DESCRIPTION, npc.getName(), age, locked); } @@ -61,6 +69,9 @@ public class Age extends Trait implements Toggleable { } } + /** + * Toggles the age lock variable and returns whether the age is currently locked. + */ @Override public boolean toggle() { locked = !locked; diff --git a/main/src/main/java/net/citizensnpcs/trait/Anchors.java b/main/src/main/java/net/citizensnpcs/trait/Anchors.java index 550edd4ed..48fc8f834 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Anchors.java +++ b/main/src/main/java/net/citizensnpcs/trait/Anchors.java @@ -16,6 +16,9 @@ import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.util.Anchor; import net.citizensnpcs.util.Messages; +/** + * Persists a list of {@link Anchor}s. + */ @TraitName("anchors") public class Anchors extends Trait { private final List anchors = new ArrayList(); @@ -33,10 +36,12 @@ public class Anchors extends Trait { } @EventHandler - public void checkWorld(WorldLoadEvent event) { - for (Anchor anchor : anchors) - if (!anchor.isLoaded()) + private void checkWorld(WorldLoadEvent event) { + for (Anchor anchor : anchors) { + if (!anchor.isLoaded()) { anchor.load(); + } + } } public Anchor getAnchor(String name) { diff --git a/main/src/main/java/net/citizensnpcs/trait/ArmorStandTrait.java b/main/src/main/java/net/citizensnpcs/trait/ArmorStandTrait.java index e647501f2..251babad8 100644 --- a/main/src/main/java/net/citizensnpcs/trait/ArmorStandTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/ArmorStandTrait.java @@ -7,6 +7,9 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists data related to {@link ArmorStand} NPCs. + */ @TraitName("armorstandtrait") public class ArmorStandTrait extends Trait { @Persist @@ -82,26 +85,44 @@ public class ArmorStandTrait extends Trait { } } + /** + * @see ArmorStand#setGravity(boolean) + */ public void setGravity(boolean gravity) { this.gravity = gravity; } + /** + * @see ArmorStand#setArms(boolean) + */ public void setHasArms(boolean arms) { this.hasarms = arms; } + /** + * @see ArmorStand#setBasePlate(boolean) + */ public void setHasBaseplate(boolean baseplate) { this.hasbaseplate = baseplate; } + /** + * @see ArmorStand#setMarker(boolean) + */ public void setMarker(boolean marker) { this.marker = marker; } + /** + * @see ArmorStand#setSmall(boolean) + */ public void setSmall(boolean small) { this.small = small; } + /** + * @see ArmorStand#setVisible(boolean) + */ public void setVisible(boolean visible) { this.visible = visible; } diff --git a/main/src/main/java/net/citizensnpcs/trait/Controllable.java b/main/src/main/java/net/citizensnpcs/trait/Controllable.java index 3e675a953..f6ebbfff8 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Controllable.java +++ b/main/src/main/java/net/citizensnpcs/trait/Controllable.java @@ -31,6 +31,12 @@ import net.citizensnpcs.api.util.DataKey; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; +/** + * Persists the controllable status for /npc controllable + * + * A controllable {@link NPC} can be mounted by a {@link Player} using right click or /npc mount and moved around using + * e.g. arrow keys. + */ @TraitName("controllable") public class Controllable extends Trait implements Toggleable, CommandConfigurable { private MovementController controller = new GroundController(); @@ -49,6 +55,11 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab this.enabled = enabled; } + /** + * Configures the explicit type parameter. + * + * @see #setExplicitType(EntityType) + */ @Override public void configure(CommandContext args) { if (args.hasFlag('f')) { @@ -103,22 +114,14 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab controller = new LookAirController(); return; } - Class clazz = controllerTypes.get(type); - if (clazz == null) { + Constructor innerConstructor = CONTROLLER_TYPES.get(type); + if (innerConstructor == null) { controller = new GroundController(); return; } - Constructor innerConstructor = null; try { - innerConstructor = clazz.getConstructor(Controllable.class); - innerConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - - try { - if (innerConstructor == null) { - controller = clazz.newInstance(); + if (innerConstructor.getParameterCount() == 0) { + controller = innerConstructor.newInstance(); } else { controller = innerConstructor.newInstance(this); } @@ -128,6 +131,13 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab } } + /** + * Attempts to mount the {@link NPC} onto the supplied {@link Player}. + * + * @param toMount + * the player to mount + * @return whether the mount was successful + */ public boolean mount(Player toMount) { boolean found = NMS.getPassengers(npc.getEntity()).size() == 0; for (Entity passenger : NMS.getPassengers(npc.getEntity())) { @@ -143,7 +153,7 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) - public void onPlayerInteract(PlayerInteractEvent event) { + private void onPlayerInteract(PlayerInteractEvent event) { if (!npc.isSpawned() || !enabled) return; Action performed = event.getAction(); @@ -164,7 +174,7 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab } @EventHandler - public void onRightClick(NPCRightClickEvent event) { + private void onRightClick(NPCRightClickEvent event) { if (!enabled || !npc.isSpawned() || !event.getNPC().equals(npc)) return; controller.rightClickEntity(event); @@ -199,6 +209,16 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab return enabled; } + /** + * Configures the explicit typei.e. whether the NPC should be controlled as if it was a certain {@link EntityType}. + * + * @param type + * the explicit type + */ + public void setExplicitType(EntityType type) { + this.explicitType = type; + } + private void setMountedYaw(Entity entity) { if (entity instanceof EnderDragon || !Setting.USE_BOAT_CONTROLS.asBoolean()) return; // EnderDragon handles this separately @@ -218,6 +238,12 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab NMS.look(entity, loc.getYaw(), loc.getPitch()); } + /** + * Sets whether the {@link Player} attempting to mount the {@link NPC} must actually own the {@link NPC} to mount + * it. + * + * @see Owner#isOwnedBy(org.bukkit.command.CommandSender) + */ public void setOwnerRequired(boolean ownerRequired) { this.ownerRequired = ownerRequired; } @@ -378,19 +404,47 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab } } + /** + * Register a movement controller for a certain {@link EntityType} to be used for {@link NPC}s with that type. + * + * Default controllers are registered for BAT, BLAZE, ENDER_DRAGON, GHAST, WITHER and PARROT using + * {@link PlayerInputAirController}. + * + * @param type + * the entity type + * @param clazz + * the controller class + */ public static void registerControllerType(EntityType type, Class clazz) { - controllerTypes.put(type, clazz); + try { + Constructor constructor = clazz.getConstructor(Controllable.class); + constructor.setAccessible(true); + CONTROLLER_TYPES.put(type, constructor); + return; + } catch (Exception e) { + try { + Constructor constructor = clazz.getConstructor(); + constructor.setAccessible(true); + CONTROLLER_TYPES.put(type, constructor); + } catch (Exception e2) { + throw new RuntimeException(e2); + } + } } - private static final Map> controllerTypes = Maps + private static final Map> CONTROLLER_TYPES = Maps .newEnumMap(EntityType.class); static { - controllerTypes.put(EntityType.BAT, PlayerInputAirController.class); - controllerTypes.put(EntityType.BLAZE, PlayerInputAirController.class); - controllerTypes.put(EntityType.ENDER_DRAGON, PlayerInputAirController.class); - controllerTypes.put(EntityType.GHAST, PlayerInputAirController.class); - controllerTypes.put(EntityType.WITHER, PlayerInputAirController.class); - controllerTypes.put(EntityType.UNKNOWN, LookAirController.class); + registerControllerType(EntityType.BAT, PlayerInputAirController.class); + registerControllerType(EntityType.BLAZE, PlayerInputAirController.class); + registerControllerType(EntityType.ENDER_DRAGON, PlayerInputAirController.class); + registerControllerType(EntityType.GHAST, PlayerInputAirController.class); + registerControllerType(EntityType.WITHER, PlayerInputAirController.class); + try { + registerControllerType(EntityType.valueOf("PARROT"), PlayerInputAirController.class); + } catch (IllegalArgumentException ex) { + } + registerControllerType(EntityType.UNKNOWN, LookAirController.class); } } diff --git a/main/src/main/java/net/citizensnpcs/trait/CurrentLocation.java b/main/src/main/java/net/citizensnpcs/trait/CurrentLocation.java index d7bec6b7b..dc66d338e 100644 --- a/main/src/main/java/net/citizensnpcs/trait/CurrentLocation.java +++ b/main/src/main/java/net/citizensnpcs/trait/CurrentLocation.java @@ -6,6 +6,9 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists the current {@link Location} of the {@link NPC}. Will cache last known location if despawned. + */ @TraitName("location") public class CurrentLocation extends Trait { @Persist(value = "", required = true) diff --git a/main/src/main/java/net/citizensnpcs/trait/FollowTrait.java b/main/src/main/java/net/citizensnpcs/trait/FollowTrait.java index 462091c30..16c4f19ad 100644 --- a/main/src/main/java/net/citizensnpcs/trait/FollowTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/FollowTrait.java @@ -12,10 +12,13 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists a {@link Player} to follow while spawned. Optionally allows protecting of the player as well. + */ @TraitName("followtrait") public class FollowTrait extends Trait { - @Persist - private boolean active = false; + @Persist("active") + private boolean enabled = false; @Persist private UUID followingUUID; private Player player; @@ -26,12 +29,19 @@ public class FollowTrait extends Trait { super("followtrait"); } - private boolean isActive() { - return active && npc.isSpawned() && player != null && npc.getEntity().getWorld().equals(player.getWorld()); + /** + * Returns whether the trait is actively following a {@link Player}. + */ + public boolean isActive() { + return enabled && npc.isSpawned() && player != null && npc.getEntity().getWorld().equals(player.getWorld()); + } + + public boolean isEnabled() { + return enabled; } @EventHandler - public void onEntityDamage(EntityDamageByEntityEvent event) { + private void onEntityDamage(EntityDamageByEntityEvent event) { if (isActive() && event.getEntity().equals(player)) { npc.getNavigator().setTarget(event.getDamager(), true); } @@ -55,18 +65,29 @@ public class FollowTrait extends Trait { } } + /** + * Toggles and/or sets the {@link OfflinePlayer} to follow and whether to protect them (similar to wolves in + * Minecraft, attack whoever attacks the player). + * + * Will toggle if the {@link OfflinePlayer} is the player currently being followed. + * + * @param player + * the player to follow + * @param protect + * whether to protect the player + * @return whether the trait is enabled + */ public boolean toggle(OfflinePlayer player, boolean protect) { this.protect = protect; if (player.getUniqueId().equals(this.followingUUID) || this.followingUUID == null) { - this.active = !active; + this.enabled = !enabled; } this.followingUUID = player.getUniqueId(); - if (npc.getNavigator().isNavigating() && this.player != null - && npc.getNavigator().getEntityTarget() != null + if (npc.getNavigator().isNavigating() && this.player != null && npc.getNavigator().getEntityTarget() != null && this.player == npc.getNavigator().getEntityTarget().getTarget()) { npc.getNavigator().cancelNavigation(); } this.player = null; - return this.active; + return this.enabled; } } diff --git a/main/src/main/java/net/citizensnpcs/trait/GameModeTrait.java b/main/src/main/java/net/citizensnpcs/trait/GameModeTrait.java index cf83b9a15..7174eee7e 100644 --- a/main/src/main/java/net/citizensnpcs/trait/GameModeTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/GameModeTrait.java @@ -7,6 +7,11 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists the {@link GameMode} of a {@link Player} NPC. + * + * @see Player#setGameMode(GameMode) + */ @TraitName("gamemodetrait") public class GameModeTrait extends Trait { @Persist diff --git a/main/src/main/java/net/citizensnpcs/trait/Gravity.java b/main/src/main/java/net/citizensnpcs/trait/Gravity.java index d8b53f463..f91872640 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Gravity.java +++ b/main/src/main/java/net/citizensnpcs/trait/Gravity.java @@ -6,6 +6,9 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Enable/disable gravity. Without gravity the y velocity of the NPC is always set to 0 + */ @TraitName("gravity") public class Gravity extends Trait implements Toggleable { @Persist @@ -15,6 +18,12 @@ public class Gravity extends Trait implements Toggleable { super("gravity"); } + /** + * Set whether to disable gravity or not + * + * @param gravitate + * true = disable gravity, false = enable gravity + */ public void gravitate(boolean gravitate) { enabled = gravitate; } diff --git a/main/src/main/java/net/citizensnpcs/trait/HorseModifiers.java b/main/src/main/java/net/citizensnpcs/trait/HorseModifiers.java index 91918082b..9ae599ca2 100644 --- a/main/src/main/java/net/citizensnpcs/trait/HorseModifiers.java +++ b/main/src/main/java/net/citizensnpcs/trait/HorseModifiers.java @@ -9,6 +9,11 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists various {@link Horse} metadata. + * + * @see Horse + */ @TraitName("horsemodifiers") public class HorseModifiers extends Trait { @Persist("armor") @@ -30,6 +35,9 @@ public class HorseModifiers extends Trait { return armor; } + /** + * @see Horse#getColor() + */ public Color getColor() { return color; } @@ -38,6 +46,9 @@ public class HorseModifiers extends Trait { return saddle; } + /** + * @see Horse#getStyle() + */ public Style getStyle() { return style; } @@ -60,11 +71,17 @@ public class HorseModifiers extends Trait { this.armor = armor; } + /** + * @see Horse#setCarryingChest(boolean) + */ public void setCarryingChest(boolean carryingChest) { this.carryingChest = carryingChest; updateModifiers(); } + /** + * @see Horse#setColor(Color) + */ public void setColor(Horse.Color color) { this.color = color; updateModifiers(); @@ -74,6 +91,9 @@ public class HorseModifiers extends Trait { this.saddle = saddle; } + /** + * @see Horse#setStyle(Style) + */ public void setStyle(Horse.Style style) { this.style = style; updateModifiers(); diff --git a/main/src/main/java/net/citizensnpcs/trait/LookClose.java b/main/src/main/java/net/citizensnpcs/trait/LookClose.java index da04dc0f7..da0f3563a 100644 --- a/main/src/main/java/net/citizensnpcs/trait/LookClose.java +++ b/main/src/main/java/net/citizensnpcs/trait/LookClose.java @@ -25,6 +25,10 @@ import net.citizensnpcs.api.util.DataKey; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; +/** + * Persists the /npc lookclose metadata + * + */ @TraitName("lookclose") public class LookClose extends Trait implements Toggleable, CommandConfigurable { @Persist("enabled") @@ -47,10 +51,14 @@ public class LookClose extends Trait implements Toggleable, CommandConfigurable super("lookclose"); } - private boolean canSeeTarget() { + /** + * Returns whether the target can be seen. Will use realistic line of sight if {@link #setRealisticLooking(boolean)} + * is true. + */ + public boolean canSeeTarget() { return realisticLooking && npc.getEntity() instanceof LivingEntity ? ((LivingEntity) npc.getEntity()).hasLineOfSight(lookingAt) - : true; + : lookingAt != null && lookingAt.isValid(); } @Override @@ -59,7 +67,10 @@ public class LookClose extends Trait implements Toggleable, CommandConfigurable realisticLooking = args.hasFlag('r'); } - private void findNewTarget() { + /** + * Finds a new look-close target + */ + public void findNewTarget() { List nearby = npc.getEntity().getNearbyEntities(range, range, range); Collections.sort(nearby, new Comparator() { @Override @@ -107,6 +118,9 @@ public class LookClose extends Trait implements Toggleable, CommandConfigurable range = key.getDouble("range"); } + /** + * Enables/disables the trait + */ public void lookClose(boolean lookClose) { enabled = lookClose; } @@ -150,10 +164,16 @@ public class LookClose extends Trait implements Toggleable, CommandConfigurable key.setDouble("range", range); } + /** + * Enables random looking - will look at a random {@link Location} every so often if enabled. + */ public void setRandomLook(boolean enableRandomLook) { this.enableRandomLook = enableRandomLook; } + /** + * Sets the delay between random looking in ticks + */ public void setRandomLookDelay(int delay) { this.randomLookDelay = delay; } @@ -166,10 +186,16 @@ public class LookClose extends Trait implements Toggleable, CommandConfigurable this.randomYawRange = new float[] { min, max }; } + /** + * Sets the maximum range in blocks to look at other Entities + */ public void setRange(int range) { this.range = range; } + /** + * Enables/disables realistic looking (using line of sight checks). More computationally expensive. + */ public void setRealisticLooking(boolean realistic) { this.realisticLooking = realistic; } diff --git a/main/src/main/java/net/citizensnpcs/trait/MountTrait.java b/main/src/main/java/net/citizensnpcs/trait/MountTrait.java index 47fd9b042..1e65fe691 100644 --- a/main/src/main/java/net/citizensnpcs/trait/MountTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/MountTrait.java @@ -12,6 +12,9 @@ import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; +/** + * Persists the NPC's mounted on entity, if any. Will attempt to respawn on mount. + */ @TraitName("mounttrait") public class MountTrait extends Trait { private UUID mountedOn; diff --git a/main/src/main/java/net/citizensnpcs/trait/OcelotModifiers.java b/main/src/main/java/net/citizensnpcs/trait/OcelotModifiers.java index 287411286..248cc9b6c 100644 --- a/main/src/main/java/net/citizensnpcs/trait/OcelotModifiers.java +++ b/main/src/main/java/net/citizensnpcs/trait/OcelotModifiers.java @@ -7,6 +7,11 @@ import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.util.NMS; +/** + * Persists Ocelot metadata. + * + * @see Ocelot + */ @TraitName("ocelotmodifiers") public class OcelotModifiers extends Trait { @Persist("sitting") diff --git a/main/src/main/java/net/citizensnpcs/trait/Poses.java b/main/src/main/java/net/citizensnpcs/trait/Poses.java index 23c2b2453..6499dec35 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Poses.java +++ b/main/src/main/java/net/citizensnpcs/trait/Poses.java @@ -19,6 +19,9 @@ import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Pose; import net.citizensnpcs.util.Util; +/** + * Persists named {@link Pose}s. + */ @TraitName("poses") public class Poses extends Trait { private final Map poses = Maps.newHashMap(); @@ -27,6 +30,11 @@ public class Poses extends Trait { super("poses"); } + /** + * Add a {@link Pose} + * + * @return whether the pose has already been added + */ public boolean addPose(String name, Location location) { name = name.toLowerCase(); Pose newPose = new Pose(name, location.getPitch(), location.getYaw()); @@ -43,10 +51,16 @@ public class Poses extends Trait { Util.assumePose(npc.getEntity(), yaw, pitch); } + /** + * Sets the yaw/pitch to the supplied {@link Location}. + */ public void assumePose(Location location) { assumePose(location.getYaw(), location.getPitch()); } + /** + * Sets the yaw/pitch to the stored pose, looked up by name. + */ public void assumePose(String flag) { Pose pose = poses.get(flag.toLowerCase()); assumePose(pose.getYaw(), pose.getPitch()); diff --git a/main/src/main/java/net/citizensnpcs/trait/Powered.java b/main/src/main/java/net/citizensnpcs/trait/Powered.java index c9999f68a..a56b7b68a 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Powered.java +++ b/main/src/main/java/net/citizensnpcs/trait/Powered.java @@ -6,6 +6,11 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists {@link Creeper} powered status. + * + * @see Creeper#setPowered(boolean) + */ @TraitName("powered") public class Powered extends Trait implements Toggleable { @Persist("") diff --git a/main/src/main/java/net/citizensnpcs/trait/RabbitType.java b/main/src/main/java/net/citizensnpcs/trait/RabbitType.java index 09e74484c..505696bad 100644 --- a/main/src/main/java/net/citizensnpcs/trait/RabbitType.java +++ b/main/src/main/java/net/citizensnpcs/trait/RabbitType.java @@ -6,6 +6,11 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists Rabbit metadata. + * + * @see Rabbit#getRabbitType() + */ @TraitName("rabbittype") public class RabbitType extends Trait { private Rabbit rabbit; diff --git a/main/src/main/java/net/citizensnpcs/trait/Saddle.java b/main/src/main/java/net/citizensnpcs/trait/Saddle.java index 4edef25b5..60d550913 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Saddle.java +++ b/main/src/main/java/net/citizensnpcs/trait/Saddle.java @@ -9,6 +9,11 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists saddle metadata. + * + * @see Pig#hasSaddle() + */ @TraitName("saddle") public class Saddle extends Trait implements Toggleable { private boolean pig; diff --git a/main/src/main/java/net/citizensnpcs/trait/ScriptTrait.java b/main/src/main/java/net/citizensnpcs/trait/ScriptTrait.java index 7a9fbb598..224cb1fc5 100644 --- a/main/src/main/java/net/citizensnpcs/trait/ScriptTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/ScriptTrait.java @@ -13,11 +13,17 @@ import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.scripting.CompileCallback; import net.citizensnpcs.api.scripting.Script; +import net.citizensnpcs.api.scripting.ScriptCompiler; import net.citizensnpcs.api.scripting.ScriptFactory; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.api.util.DataKey; +/** + * Stores a list of scripts, which are pieces of arbitrary code that can be run every tick. + * + * @see ScriptCompiler + */ @TraitName("scripttrait") public class ScriptTrait extends Trait { @Persist @@ -28,6 +34,11 @@ public class ScriptTrait extends Trait { super("scripttrait"); } + /** + * Add and load all given script file names + * + * @see #loadScript(String) + */ public void addScripts(List scripts) { for (String f : scripts) { if (!files.contains(f) && validateFile(f)) { @@ -50,6 +61,13 @@ public class ScriptTrait extends Trait { } } + /** + * Compile and load a script given by the file name. + * + * @param file + * the script file name relative to the script folder + * @see Citizens#getScriptFolder() + */ public void loadScript(final String file) { File f = new File(JavaPlugin.getPlugin(Citizens.class).getScriptFolder(), file); CitizensAPI.getScriptCompiler().compile(f).cache(true).withCallback(new CompileCallback() { @@ -73,6 +91,9 @@ public class ScriptTrait extends Trait { }).beginWithFuture(); } + /** + * Removes the given script file names. + */ public void removeScripts(List scripts) { files.removeAll(scripts); Iterator itr = runnableScripts.iterator(); @@ -99,6 +120,9 @@ public class ScriptTrait extends Trait { } } + /** + * Whether the file exists and can be compiled by the system {@link ScriptCompiler}. + */ public boolean validateFile(String file) { File f = new File(JavaPlugin.getPlugin(Citizens.class).getScriptFolder(), file); if (!f.exists() || !f.getParentFile().equals(JavaPlugin.getPlugin(Citizens.class).getScriptFolder())) { diff --git a/main/src/main/java/net/citizensnpcs/trait/SheepTrait.java b/main/src/main/java/net/citizensnpcs/trait/SheepTrait.java index d6bbdfd2f..a4dd0820b 100644 --- a/main/src/main/java/net/citizensnpcs/trait/SheepTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/SheepTrait.java @@ -10,6 +10,9 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists {@link Sheep} metadata. + */ @TraitName("sheeptrait") public class SheepTrait extends Trait { @Persist("color") @@ -22,16 +25,12 @@ public class SheepTrait extends Trait { } @EventHandler - public void onPlayerShearEntityEvent(PlayerShearEntityEvent event) { + private void onPlayerShearEntityEvent(PlayerShearEntityEvent event) { if (npc != null && npc.equals(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()))) { event.setCancelled(true); } } - @Override - public void onSpawn() { - } - @Override public void run() { if (npc.getEntity() instanceof Sheep) { @@ -41,10 +40,16 @@ public class SheepTrait extends Trait { } } + /** + * @see Sheep#setColor(DyeColor) + */ public void setColor(DyeColor color) { this.color = color; } + /** + * @see Sheep#setSheared(boolean) + */ public void setSheared(boolean sheared) { this.sheared = sheared; } diff --git a/main/src/main/java/net/citizensnpcs/trait/SkinLayers.java b/main/src/main/java/net/citizensnpcs/trait/SkinLayers.java index 771e36281..795d4838c 100644 --- a/main/src/main/java/net/citizensnpcs/trait/SkinLayers.java +++ b/main/src/main/java/net/citizensnpcs/trait/SkinLayers.java @@ -5,6 +5,11 @@ import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.npc.skin.SkinnableEntity; +/** + * Persists skin layers that should/should not be visible on the NPC skin. + * + * @see Layer + */ @TraitName("skinlayers") public class SkinLayers extends Trait { @Persist("cape") diff --git a/main/src/main/java/net/citizensnpcs/trait/SlimeSize.java b/main/src/main/java/net/citizensnpcs/trait/SlimeSize.java index 619e317e2..51a7f747a 100644 --- a/main/src/main/java/net/citizensnpcs/trait/SlimeSize.java +++ b/main/src/main/java/net/citizensnpcs/trait/SlimeSize.java @@ -9,6 +9,11 @@ import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.util.Messages; +/** + * Persists Slime size. + * + * @see Slime#setSize(int) + */ @TraitName("slimesize") public class SlimeSize extends Trait { @Persist @@ -33,6 +38,9 @@ public class SlimeSize extends Trait { slime = true; } + /** + * @see Slime#setSize(int) + */ public void setSize(int size) { this.size = size; if (slime) diff --git a/main/src/main/java/net/citizensnpcs/trait/Toggleable.java b/main/src/main/java/net/citizensnpcs/trait/Toggleable.java index ec957be11..2068dec12 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Toggleable.java +++ b/main/src/main/java/net/citizensnpcs/trait/Toggleable.java @@ -1,5 +1,8 @@ package net.citizensnpcs.trait; +/** + * Representing a state that can be toggled between enabled/disabled. + */ public interface Toggleable { public boolean toggle(); } \ No newline at end of file diff --git a/main/src/main/java/net/citizensnpcs/trait/VillagerProfession.java b/main/src/main/java/net/citizensnpcs/trait/VillagerProfession.java index 6a04d458a..0f8e0dff6 100644 --- a/main/src/main/java/net/citizensnpcs/trait/VillagerProfession.java +++ b/main/src/main/java/net/citizensnpcs/trait/VillagerProfession.java @@ -2,13 +2,18 @@ package net.citizensnpcs.trait; import org.bukkit.entity.Villager; import org.bukkit.entity.Villager.Profession; +import org.bukkit.entity.ZombieVillager; import net.citizensnpcs.api.exception.NPCLoadException; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.api.util.DataKey; -import org.bukkit.entity.ZombieVillager; +/** + * Persists the Villager profession metadata. + * + * @see Profession + */ @TraitName("profession") public class VillagerProfession extends Trait { private Profession profession = Profession.FARMER; diff --git a/main/src/main/java/net/citizensnpcs/trait/WitherTrait.java b/main/src/main/java/net/citizensnpcs/trait/WitherTrait.java index 964c494a4..6fc8c472c 100644 --- a/main/src/main/java/net/citizensnpcs/trait/WitherTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/WitherTrait.java @@ -7,6 +7,11 @@ import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.util.NMS; +/** + * Persists {@link Wither} metadata. + * + * @see Wither + */ @TraitName("withertrait") public class WitherTrait extends Trait { @Persist("charged") @@ -20,10 +25,6 @@ public class WitherTrait extends Trait { return charged; } - @Override - public void onSpawn() { - } - @Override public void run() { if (npc.getEntity() instanceof Wither) { diff --git a/main/src/main/java/net/citizensnpcs/trait/WolfModifiers.java b/main/src/main/java/net/citizensnpcs/trait/WolfModifiers.java index 53b6fc9b6..f557c89b6 100644 --- a/main/src/main/java/net/citizensnpcs/trait/WolfModifiers.java +++ b/main/src/main/java/net/citizensnpcs/trait/WolfModifiers.java @@ -7,6 +7,11 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +/** + * Persists {@link Wolf} metadata. + * + * @see Wolf + */ @TraitName("wolfmodifiers") public class WolfModifiers extends Trait { @Persist("angry") diff --git a/main/src/main/java/net/citizensnpcs/trait/WoolColor.java b/main/src/main/java/net/citizensnpcs/trait/WoolColor.java index 519cbf2e7..76ce9a5ad 100644 --- a/main/src/main/java/net/citizensnpcs/trait/WoolColor.java +++ b/main/src/main/java/net/citizensnpcs/trait/WoolColor.java @@ -11,6 +11,11 @@ import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.api.util.DataKey; +/** + * Persists {@link Sheep} wool color metadata. + * + * @see Sheep + */ @TraitName("woolcolor") public class WoolColor extends Trait { private DyeColor color = DyeColor.WHITE; @@ -30,9 +35,10 @@ public class WoolColor extends Trait { } @EventHandler - public void onSheepDyeWool(SheepDyeWoolEvent event) { - if (npc.equals(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()))) + private void onSheepDyeWool(SheepDyeWoolEvent event) { + if (npc.equals(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()))) { event.setCancelled(true); + } } @Override diff --git a/main/src/main/java/net/citizensnpcs/trait/text/Text.java b/main/src/main/java/net/citizensnpcs/trait/text/Text.java index 2b69eb2e6..607c06bd5 100644 --- a/main/src/main/java/net/citizensnpcs/trait/text/Text.java +++ b/main/src/main/java/net/citizensnpcs/trait/text/Text.java @@ -35,6 +35,9 @@ import net.citizensnpcs.trait.Toggleable; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Util; +/** + * Persists text metadata, i.e. text that will be said by an NPC on certain triggers. + */ @TraitName("text") public class Text extends Trait implements Runnable, Toggleable, Listener, ConversationAbandonedListener { private final Map cooldowns = Maps.newHashMap(); @@ -53,7 +56,13 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve this.plugin = CitizensAPI.getPlugin(); } - void add(String string) { + /** + * Adds a piece of text that will be said by the NPC. + * + * @param string + * the text to say + */ + public void add(String string) { text.add(string); } @@ -61,10 +70,21 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve public void conversationAbandoned(ConversationAbandonedEvent event) { } - void edit(int index, String newText) { + /** + * Edit the text at a given index to a new text. + * + * @param index + * the text's index + * @param newText + * the new text to use + */ + public void edit(int index, String newText) { text.set(index, newText); } + /** + * Builds a text editor in game for the supplied {@link Player}. + */ public Editor getEditor(final Player player) { final Conversation conversation = new ConversationFactory(plugin).addConversationAbandonedListener(this) .withLocalEcho(false).withEscapeSequence("/npc text").withEscapeSequence("exit").withModality(false) @@ -84,7 +104,10 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve }; } - boolean hasIndex(int index) { + /** + * @return whether there is text at a certain index + */ + public boolean hasIndex(int index) { return index >= 0 && text.size() > index; } @@ -111,7 +134,7 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve } @EventHandler - public void onRightClick(NPCRightClickEvent event) { + private void onRightClick(NPCRightClickEvent event) { if (!event.getNPC().equals(npc)) return; String localPattern = itemInHandPattern.equals("default") ? Setting.TALK_ITEM.asString() : itemInHandPattern; @@ -124,7 +147,10 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve text.addAll(Setting.DEFAULT_TEXT.asList()); } - void remove(int index) { + /** + * Remove text at a given index. + */ + public void remove(int index) { text.remove(index); } @@ -200,7 +226,13 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve return true; } - void setDelay(int delay) { + /** + * Set the text delay between messages. + * + * @param delay + * the delay in ticks + */ + public void setDelay(int delay) { this.delay = delay; } @@ -208,7 +240,12 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve itemInHandPattern = pattern; } - void setRange(double range) { + /** + * Set the range in blocks before text will be sent. + * + * @param range + */ + public void setRange(double range) { this.range = range; } @@ -216,16 +253,25 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve return talkClose; } + /** + * Toggles talking to nearby Players. + */ @Override public boolean toggle() { return (talkClose = !talkClose); } - boolean toggleRandomTalker() { + /** + * Toggles talking at random intervals. + */ + public boolean toggleRandomTalker() { return (randomTalker = !randomTalker); } - boolean toggleRealisticLooking() { + /** + * Toggles requiring line of sight before talking. + */ + public boolean toggleRealisticLooking() { return (realisticLooker = !realisticLooker); } diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/EntityMarkers.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/EntityMarkers.java index 5f3d8166f..ad5c547e8 100644 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/EntityMarkers.java +++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/EntityMarkers.java @@ -15,10 +15,22 @@ import net.citizensnpcs.api.npc.MemoryNPCDataStore; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPCRegistry; +/** + * A helper class for storing a number of entity markers. By default an entity marker is a non-persisted EnderSignal. + */ public class EntityMarkers { private final Map markers = Maps.newHashMap(); private final NPCRegistry registry = CitizensAPI.createAnonymousNPCRegistry(new MemoryNPCDataStore()); + /** + * Creates and persists (in memory) an {@link Entity} marker. + * + * @param marker + * the storage marker + * @param at + * the spawn location + * @return the created entity + */ public Entity createMarker(T marker, Location at) { Entity entity = spawnMarker(at.getWorld(), at); if (entity == null) @@ -41,6 +53,15 @@ public class EntityMarkers { } } + /** + * Spawns a marker {@link Entity} without storing it for later use. + * + * @param world + * the world (unused currently) + * @param at + * the location + * @return the spawned entity + */ public Entity spawnMarker(World world, Location at) { NPC npc = registry.createNPC(EntityType.ENDER_SIGNAL, ""); npc.spawn(at.clone().add(0.5, 0, 0.5), SpawnReason.CREATE); diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/GuidedWaypointProvider.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/GuidedWaypointProvider.java index a468a76fe..e6df6fc30 100644 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/GuidedWaypointProvider.java +++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/GuidedWaypointProvider.java @@ -1,5 +1,6 @@ package net.citizensnpcs.trait.waypoint; +import java.util.Collection; import java.util.Iterator; import java.util.List; @@ -43,6 +44,12 @@ import net.citizensnpcs.trait.waypoint.WaypointProvider.EnumerableWaypointProvid import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Util; +/** + * Stores guided waypoint info. Guided waypoints are a list of {@link Waypoint}s that will be navigated between + * randomly. Helper waypoints can be used to guide navigation between the random waypoints i.e. navigating between guide + * waypoints. For example, you might have a "realistic" NPC that walks between houses using helper waypoints placed + * along the roads. + */ public class GuidedWaypointProvider implements EnumerableWaypointProvider { private final List available = Lists.newArrayList(); private GuidedAIGoal currentGoal; @@ -51,6 +58,26 @@ public class GuidedWaypointProvider implements EnumerableWaypointProvider { private boolean paused; private PRTree> tree = PRTree.create(new Region3D.Converter(), 30); + public void addHelperWaypoint(Waypoint helper) { + helpers.add(helper); + rebuildTree(); + } + + public void addHelperWaypoints(Collection helper) { + helpers.addAll(helper); + rebuildTree(); + } + + public void addWaypoint(Waypoint waypoint) { + available.add(waypoint); + rebuildTree(); + } + + public void addWaypoints(Collection waypoint) { + available.addAll(waypoint); + rebuildTree(); + } + @Override public WaypointEditor createEditor(final CommandSender sender, CommandContext args) { if (!(sender instanceof Player)) { @@ -233,6 +260,9 @@ public class GuidedWaypointProvider implements EnumerableWaypointProvider { this.paused = paused; } + /** + * Returns available and helper waypoints. + */ @Override public Iterable waypoints() { return Iterables.concat(available, helpers); diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java index 311ce7958..9621ce404 100644 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java +++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java @@ -40,6 +40,9 @@ import net.citizensnpcs.trait.waypoint.triggers.TriggerEditPrompt; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Util; +/** + * An ordered list of {@link Waypoint}s to walk between. + */ public class LinearWaypointProvider implements EnumerableWaypointProvider { private LinearWaypointGoal currentGoal; private NPC npc; @@ -136,6 +139,9 @@ public class LinearWaypointProvider implements EnumerableWaypointProvider { } } + /** + * Returns the modifiable list of waypoints. + */ @Override public Iterable waypoints() { return waypoints; diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java index 1488986ed..99ac33105 100644 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java +++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java @@ -1,5 +1,6 @@ package net.citizensnpcs.trait.waypoint; +import java.util.Collection; import java.util.List; import org.bukkit.Bukkit; @@ -31,6 +32,10 @@ import net.citizensnpcs.api.util.cuboid.QuadTree; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Util; +/** + * A wandering waypoint provider that wanders between either a box centered at the current location or inside a region + * defined by a list of boxes. + */ public class WanderWaypointProvider implements WaypointProvider, Supplier, Function { private WanderGoal currentGoal; private NPC npc; @@ -43,6 +48,16 @@ public class WanderWaypointProvider implements WaypointProvider, Supplier centre) { + regionCentres.addAll(centre); + recalculateTree(); + } + @Override public Location apply(NPC npc) { Location closestCentre = null; @@ -218,6 +233,16 @@ public class WanderWaypointProvider implements WaypointProvider, Supplier centre) { + regionCentres.removeAll(centre); + recalculateTree(); + } + @Override public void save(DataKey key) { } @@ -262,6 +287,5 @@ public class WanderWaypointProvider implements WaypointProvider, Supplier triggers; + /** + * For persistence - avoid using otherwise. + */ public Waypoint() { } @@ -47,6 +53,9 @@ public class Waypoint implements Locatable { Messaging.sendTr(sender, Messages.WAYPOINT_TRIGGER_LIST, base); } + /** + * Returns the distance in blocks to another waypoint. + */ public double distance(Waypoint dest) { return location.distance(dest.location); } @@ -93,6 +102,9 @@ public class Waypoint implements Locatable { return prime * result + ((triggers == null) ? 0 : triggers.hashCode()); } + /** + * Runs waypoint triggers for the given NPC. + */ public void onReach(NPC npc) { if (triggers == null) return; diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/WaypointMarkers.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/WaypointMarkers.java deleted file mode 100644 index 335da4d09..000000000 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/WaypointMarkers.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.citizensnpcs.trait.waypoint; - -import java.util.Map; - -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; - -import com.google.common.collect.Maps; - -import net.citizensnpcs.api.CitizensAPI; -import net.citizensnpcs.api.event.SpawnReason; -import net.citizensnpcs.api.npc.MemoryNPCDataStore; -import net.citizensnpcs.api.npc.NPC; - -public class WaypointMarkers { - private final Map waypointMarkers = Maps.newHashMap(); - private final World world; - - public WaypointMarkers(World world) { - this.world = world; - } - - public Entity createWaypointMarker(Waypoint waypoint) { - Entity entity = spawnMarker(world, waypoint.getLocation().clone().add(0, 1, 0)); - if (entity == null) - return null; - waypointMarkers.put(waypoint, entity); - return entity; - } - - public void destroyWaypointMarkers() { - for (Entity entity : waypointMarkers.values()) { - entity.remove(); - } - waypointMarkers.clear(); - } - - public void removeWaypointMarker(Waypoint waypoint) { - Entity entity = waypointMarkers.remove(waypoint); - if (entity != null) { - entity.remove(); - } - } - - public Entity spawnMarker(World world, Location at) { - NPC npc = CitizensAPI.createAnonymousNPCRegistry(new MemoryNPCDataStore()).createNPC(EntityType.ENDER_SIGNAL, - ""); - npc.spawn(at, SpawnReason.CREATE); - return npc.getEntity(); - } -} \ No newline at end of file diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/Waypoints.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/Waypoints.java index 0ec65a468..846cc4a73 100644 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/Waypoints.java +++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/Waypoints.java @@ -38,7 +38,7 @@ public class Waypoints extends Trait { public void describeProviders(CommandSender sender) { Messaging.sendTr(sender, Messages.AVAILABLE_WAYPOINT_PROVIDERS); - for (String name : providers.keySet()) { + for (String name : PROVIDERS.keySet()) { Messaging.send(sender, " - " + StringHelper.wrap(name)); } } @@ -67,7 +67,7 @@ public class Waypoints extends Trait { public void load(DataKey key) throws NPCLoadException { provider = null; providerName = key.getString("provider", "linear"); - for (Entry> entry : providers.entrySet()) { + for (Entry> entry : PROVIDERS.entrySet()) { if (entry.getKey().equals(providerName)) { provider = create(entry.getValue()); break; @@ -102,7 +102,7 @@ public class Waypoints extends Trait { */ public boolean setWaypointProvider(String name) { name = name.toLowerCase(); - Class clazz = providers.get(name); + Class clazz = PROVIDERS.get(name); if (provider != null) { provider.onRemove(); } @@ -124,14 +124,14 @@ public class Waypoints extends Trait { * The name of the waypoint provider */ public static void registerWaypointProvider(Class clazz, String name) { - providers.put(name, clazz); + PROVIDERS.put(name, clazz); } - private static final Map> providers = Maps.newHashMap(); + private static final Map> PROVIDERS = Maps.newHashMap(); static { - providers.put("linear", LinearWaypointProvider.class); - providers.put("wander", WanderWaypointProvider.class); - providers.put("guided", GuidedWaypointProvider.class); + PROVIDERS.put("linear", LinearWaypointProvider.class); + PROVIDERS.put("wander", WanderWaypointProvider.class); + PROVIDERS.put("guided", GuidedWaypointProvider.class); } } \ No newline at end of file diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/WaypointTriggerRegistry.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/WaypointTriggerRegistry.java index 8a56658d3..93a115e66 100644 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/WaypointTriggerRegistry.java +++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/WaypointTriggerRegistry.java @@ -11,18 +11,23 @@ import net.citizensnpcs.api.persistence.PersistenceLoader; import net.citizensnpcs.api.persistence.Persister; import net.citizensnpcs.api.util.DataKey; +/** + * Registers valid {@link WaypointTrigger} classes and their chat configuration prompts. WaypointTriggers are persisted + * using {@link PersistenceLoader}. + * + */ public class WaypointTriggerRegistry implements Persister { @Override public WaypointTrigger create(DataKey root) { String type = root.getString("type"); - Class clazz = triggers.get(type); + Class clazz = TRIGGERS.get(type); return clazz == null ? null : PersistenceLoader.load(clazz, root); } @Override public void save(WaypointTrigger instance, DataKey root) { PersistenceLoader.save(instance, root); - for (Map.Entry> entry : triggers.entrySet()) { + for (Map.Entry> entry : TRIGGERS.entrySet()) { if (entry.getValue() == instance.getClass()) { root.setString("type", entry.getKey()); break; @@ -32,16 +37,16 @@ public class WaypointTriggerRegistry implements Persister { public static void addTrigger(String name, Class triggerClass, Class promptClass) { - triggers.put(name, triggerClass); - triggerPrompts.put(name, promptClass); + TRIGGERS.put(name, triggerClass); + TRIGGER_PROMPTS.put(name, promptClass); } public static String describeValidTriggerNames() { - return Joiner.on(", ").join(triggerPrompts.keySet()); + return Joiner.on(", ").join(TRIGGER_PROMPTS.keySet()); } public static Prompt getTriggerPromptFrom(String input) { - Class promptClass = triggerPrompts.get(input); + Class promptClass = TRIGGER_PROMPTS.get(input); if (promptClass == null) return null; try { @@ -51,8 +56,8 @@ public class WaypointTriggerRegistry implements Persister { } } - private static final Map> triggerPrompts = Maps.newHashMap(); - private static final Map> triggers = Maps.newHashMap(); + private static final Map> TRIGGER_PROMPTS = Maps.newHashMap(); + private static final Map> TRIGGERS = Maps.newHashMap(); static { addTrigger("animation", AnimationTrigger.class, AnimationTriggerPrompt.class); diff --git a/main/src/main/java/net/citizensnpcs/util/Anchor.java b/main/src/main/java/net/citizensnpcs/util/Anchor.java index fc3494367..fbac479fb 100644 --- a/main/src/main/java/net/citizensnpcs/util/Anchor.java +++ b/main/src/main/java/net/citizensnpcs/util/Anchor.java @@ -5,10 +5,9 @@ import org.apache.commons.lang.builder.HashCodeBuilder; import org.bukkit.Bukkit; import org.bukkit.Location; -/* - * Anchor object which holds a Location with a name to identify. +/** + * A named {@link Location}. */ - public class Anchor { private Location location; private final String name; @@ -16,13 +15,6 @@ public class Anchor { // Needed for Anchors defined that can't currently have a valid 'Location' private final String unloaded_value; - // Allow construction of anchor for unloaded worlds - public Anchor(String name, String unloaded_value) { - this.location = null; - this.unloaded_value = unloaded_value; - this.name = name; - } - public Anchor(String name, Location location) { this.location = location; this.name = name; @@ -30,19 +22,11 @@ public class Anchor { + location.getZ(); } - public boolean isLoaded() { - return location != null; - } - - public boolean load() { - try { - String[] parts = getUnloadedValue(); - this.location = new Location(Bukkit.getWorld(parts[0]), Double.valueOf(parts[1]), Double.valueOf(parts[2]), - Double.valueOf(parts[3])); - } catch (Exception e) { - // Still not able to be loaded - } - return location != null; + // Allow construction of anchor for unloaded worlds + public Anchor(String name, String unloaded_value) { + this.location = null; + this.unloaded_value = unloaded_value; + this.name = name; } @Override @@ -81,7 +65,30 @@ public class Anchor { return new HashCodeBuilder(13, 21).append(name).toHashCode(); } - // A friendly representation for use in saves.yml + public boolean isLoaded() { + return location != null; + } + + /** + * Attempts to load the unloaded value of the stored {@link Location}. + * + * @see #getUnloadedValue() + * @return whether the unloaded value could be loaded + */ + public boolean load() { + try { + String[] parts = getUnloadedValue(); + this.location = new Location(Bukkit.getWorld(parts[0]), Double.valueOf(parts[1]), Double.valueOf(parts[2]), + Double.valueOf(parts[3])); + } catch (Exception e) { + // Still not able to be loaded + } + return location != null; + } + + /** + * @return A string representation for use in saves.yml + */ public String stringValue() { return name + ';' + unloaded_value; } diff --git a/main/src/main/java/net/citizensnpcs/util/Pose.java b/main/src/main/java/net/citizensnpcs/util/Pose.java index 0ec9f9a16..454083b7d 100644 --- a/main/src/main/java/net/citizensnpcs/util/Pose.java +++ b/main/src/main/java/net/citizensnpcs/util/Pose.java @@ -56,5 +56,4 @@ public class Pose { public String toString() { return "Pose{Name='" + name + "';Pitch='" + pitch + "';Yaw='" + yaw + "';}"; } - } \ No newline at end of file