diff --git a/src/main/java/net/citizensnpcs/command/CommandContext.java b/src/main/java/net/citizensnpcs/command/CommandContext.java index d1b0df12c..876e83298 100644 --- a/src/main/java/net/citizensnpcs/command/CommandContext.java +++ b/src/main/java/net/citizensnpcs/command/CommandContext.java @@ -34,19 +34,9 @@ import com.google.common.collect.Maps; public class CommandContext { protected String[] args; protected final Set flags = new HashSet(); - protected final Map valueFlags = Maps.newHashMap(); - private final CommandSender sender; private Location location = null; - - public Location getSenderLocation() { - if (location != null) - return location; - if (sender instanceof Player) - location = ((Player) sender).getLocation(); - else if (sender instanceof BlockCommandSender) - location = ((BlockCommandSender) sender).getBlock().getLocation(); - return location; - } + private final CommandSender sender; + protected final Map valueFlags = Maps.newHashMap(); public CommandContext(CommandSender sender, String[] args) { this.sender = sender; @@ -202,6 +192,16 @@ public class CommandContext { return slice; } + public Location getSenderLocation() { + if (location != null) + return location; + if (sender instanceof Player) + location = ((Player) sender).getLocation(); + else if (sender instanceof BlockCommandSender) + location = ((BlockCommandSender) sender).getBlock().getLocation(); + return location; + } + public String[] getSlice(int index) { String[] slice = new String[args.length - index]; System.arraycopy(args, index, slice, 0, args.length - index); diff --git a/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java b/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java index 2a7c0ffd3..b6c8167ae 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java @@ -22,11 +22,11 @@ import net.citizensnpcs.trait.Controllable; import net.citizensnpcs.trait.CurrentLocation; import net.citizensnpcs.trait.Gravity; import net.citizensnpcs.trait.LookClose; +import net.citizensnpcs.trait.NPCSkeletonType; import net.citizensnpcs.trait.Poses; import net.citizensnpcs.trait.Powered; import net.citizensnpcs.trait.Saddle; import net.citizensnpcs.trait.Sheared; -import net.citizensnpcs.trait.NPCSkeletonType; import net.citizensnpcs.trait.SlimeSize; import net.citizensnpcs.trait.VillagerProfession; import net.citizensnpcs.trait.WoolColor; diff --git a/src/main/java/net/citizensnpcs/npc/NPCSelector.java b/src/main/java/net/citizensnpcs/npc/NPCSelector.java index 3434c370e..fd238bae2 100644 --- a/src/main/java/net/citizensnpcs/npc/NPCSelector.java +++ b/src/main/java/net/citizensnpcs/npc/NPCSelector.java @@ -83,11 +83,6 @@ public class NPCSelector implements Listener { npc.data().remove("selectors"); } - private void removeMetadata(Metadatable metadatable) { - if (metadatable != null) - metadatable.removeMetadata("selected", plugin); - } - @EventHandler public void onNPCRightClick(NPCRightClickEvent event) { Player player = event.getClicker(); @@ -105,6 +100,11 @@ public class NPCSelector implements Listener { } } + private void removeMetadata(Metadatable metadatable) { + if (metadatable != null) + metadatable.removeMetadata("selected", plugin); + } + public void select(CommandSender sender, NPC npc) { // Remove existing selection if any List selectors = npc.data().get("selectors"); @@ -131,15 +131,15 @@ public class NPCSelector implements Listener { Bukkit.getPluginManager().callEvent(new NPCSelectEvent(npc, sender)); } - private String toName(Block block) { - return '@' + block.getWorld().getName() + ":" + Integer.toString(block.getX()) + ":" - + Integer.toString(block.getY()) + ":" + Integer.toString(block.getZ()); - } - private void setMetadata(NPC npc, Metadatable metadatable) { if (metadatable.hasMetadata("selected")) metadatable.removeMetadata("selected", plugin); metadatable.setMetadata("selected", new FixedMetadataValue(plugin, npc.getId())); } + + private String toName(Block block) { + return '@' + block.getWorld().getName() + ":" + Integer.toString(block.getX()) + ":" + + Integer.toString(block.getY()) + ":" + Integer.toString(block.getZ()); + } } diff --git a/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java b/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java index 02546ce53..be3246262 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java +++ b/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java @@ -106,6 +106,31 @@ public class CitizensNavigator implements Navigator, Runnable { } } + @Override + public void run() { + if (!isNavigating()) + return; + if (!npc.isSpawned()) { + stopNavigating(CancelReason.NPC_DESPAWNED); + return; + } + if (updateStationaryStatus()) + return; + updatePathfindingRange(); + boolean finished = executing.update(); + if (!finished) + return; + if (executing.getCancelReason() != null) { + stopNavigating(executing.getCancelReason()); + } else { + NavigationCompleteEvent event = new NavigationCompleteEvent(this); + PathStrategy old = executing; + Bukkit.getPluginManager().callEvent(event); + if (old == executing) + stopNavigating(); + } + } + public void save(DataKey root) { root.setDouble("speed", defaultParams.baseSpeed()); root.setDouble("pathfindingrange", defaultParams.range()); @@ -184,31 +209,6 @@ public class CitizensNavigator implements Navigator, Runnable { Bukkit.getPluginManager().callEvent(new NavigationBeginEvent(this)); } - @Override - public void run() { - if (!isNavigating()) - return; - if (!npc.isSpawned()) { - stopNavigating(CancelReason.NPC_DESPAWNED); - return; - } - if (updateStationaryStatus()) - return; - updatePathfindingRange(); - boolean finished = executing.update(); - if (!finished) - return; - if (executing.getCancelReason() != null) { - stopNavigating(executing.getCancelReason()); - } else { - NavigationCompleteEvent event = new NavigationCompleteEvent(this); - PathStrategy old = executing; - Bukkit.getPluginManager().callEvent(event); - if (old == executing) - stopNavigating(); - } - } - private void updatePathfindingRange() { NMS.updatePathfindingRange(npc, localParams.range()); } diff --git a/src/main/java/net/citizensnpcs/trait/Age.java b/src/main/java/net/citizensnpcs/trait/Age.java index c7e59ab17..d9e126d46 100644 --- a/src/main/java/net/citizensnpcs/trait/Age.java +++ b/src/main/java/net/citizensnpcs/trait/Age.java @@ -11,9 +11,9 @@ import org.bukkit.entity.Ageable; public class Age extends Trait implements Toggleable { @Persist private int age = 0; + private Ageable ageable; @Persist private boolean locked = true; - private Ageable ageable; public Age() { super("age"); diff --git a/src/main/java/net/citizensnpcs/trait/SlimeSize.java b/src/main/java/net/citizensnpcs/trait/SlimeSize.java index 1de053a16..3facd603b 100644 --- a/src/main/java/net/citizensnpcs/trait/SlimeSize.java +++ b/src/main/java/net/citizensnpcs/trait/SlimeSize.java @@ -13,7 +13,7 @@ public class SlimeSize extends Trait { private int size = 3; private boolean slime; - protected SlimeSize(String name) { + public SlimeSize() { super("slimesize"); } diff --git a/src/main/java/net/citizensnpcs/trait/text/Text.java b/src/main/java/net/citizensnpcs/trait/text/Text.java index c75f483f3..846ef3101 100644 --- a/src/main/java/net/citizensnpcs/trait/text/Text.java +++ b/src/main/java/net/citizensnpcs/trait/text/Text.java @@ -31,7 +31,6 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.plugin.Plugin; -import org.uncommons.maths.random.XORShiftRNG; public class Text extends Trait implements Runnable, Toggleable, Listener, ConversationAbandonedListener { private final Map cooldowns = new HashMap(); @@ -151,8 +150,6 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve } } - private static final Random RANDOM = new XORShiftRNG(); - @Override public void save(DataKey key) { key.setBoolean("talk-close", talkClose); @@ -228,4 +225,6 @@ public class Text extends Trait implements Runnable, Toggleable, Listener, Conve builder.append("}"); return builder.toString(); } + + private static Random RANDOM = Util.getFastRandom(); } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/util/NMS.java b/src/main/java/net/citizensnpcs/util/NMS.java index 812d2463a..4f48d319d 100644 --- a/src/main/java/net/citizensnpcs/util/NMS.java +++ b/src/main/java/net/citizensnpcs/util/NMS.java @@ -35,7 +35,6 @@ import org.bukkit.entity.Player; import org.bukkit.material.Stairs; import org.bukkit.material.Step; import org.bukkit.util.Vector; -import org.uncommons.maths.random.XORShiftRNG; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -56,9 +55,11 @@ public class NMS { private static Field NAVIGATION_WORLD_FIELD; private static Field PATHFINDING_RANGE; private static Field PERSISTENT_FIELD; + private static final Random RANDOM = Util.getFastRandom(); private static Set SLAB_MATERIALS = Sets.newHashSet(); private static Field SPEED_FIELD; private static Set STAIR_MATERIALS = Sets.newHashSet(); + private static Field THREAD_STOPPER; public static void addOrRemoveFromPlayerList(LivingEntity bukkitEntity, boolean remove) { @@ -266,8 +267,6 @@ public class NMS { } } - private static final Random RANDOM = new XORShiftRNG(); - public static void updateAI(EntityLiving entity) { updateSenses(entity); entity.getNavigation().e(); diff --git a/src/main/java/net/citizensnpcs/util/Util.java b/src/main/java/net/citizensnpcs/util/Util.java index 259188804..04442b912 100644 --- a/src/main/java/net/citizensnpcs/util/Util.java +++ b/src/main/java/net/citizensnpcs/util/Util.java @@ -1,5 +1,7 @@ package net.citizensnpcs.util; +import java.util.Random; + import net.citizensnpcs.api.event.NPCCollisionEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; @@ -133,4 +135,20 @@ public class Util { } } } + + public static Random getFastRandom() { + try { + return (Random) RNG_CLASS.newInstance(); + } catch (Exception e) { + return new Random(); + } + } + + private static Class RNG_CLASS = null; + static { + try { + RNG_CLASS = Class.forName("org.uncommons.maths.random.XORShiftRNG"); + } catch (ClassNotFoundException e) { + } + } }