From cda8aceb5d81134ce98a4331d8c9cad442ba1adf Mon Sep 17 00:00:00 2001 From: fullwall Date: Sun, 6 Nov 2022 23:19:08 +0800 Subject: [PATCH] Minor changes --- .../citizensnpcs/commands/NPCCommands.java | 2 +- .../net/citizensnpcs/npc/CitizensNPC.java | 11 +++ .../npc/CitizensTraitFactory.java | 1 + .../waypoint/WanderWaypointProvider.java | 99 +++++++++---------- .../util/AbstractBlockBreaker.java | 2 +- .../main/java/net/citizensnpcs/util/Util.java | 30 +++--- .../src/main/resources/messages_en.properties | 2 +- 7 files changed, 79 insertions(+), 68 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 78ceb874d..57d6ff974 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -2862,7 +2862,7 @@ public class NPCCommands { permission = "citizens.npc.wander") public void wander(CommandContext args, CommandSender sender, NPC npc) throws CommandException { Waypoints trait = npc.getOrAddTrait(Waypoints.class); - trait.setWaypointProvider(trait.getCurrentProviderName().equals("wander") ? "wander" : "linear"); + trait.setWaypointProvider(trait.getCurrentProviderName().equals("wander") ? "linear" : "wander"); Messaging.sendTr(sender, Messages.WAYPOINT_PROVIDER_SET, trait.getCurrentProviderName()); } diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 2197bc9db..349f8c23a 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -223,6 +223,17 @@ public class CitizensNPC extends AbstractNPC { updateFlyableState(); } + @Override + public void setMoveDestination(Location destination) { + if (!isSpawned()) + return; + if (destination == null) { + NMS.cancelMoveDestination(getEntity()); + } else { + NMS.setDestination(getEntity(), destination.getX(), destination.getY(), destination.getZ(), 1); + } + } + @Override public void setName(String name) { super.setName(name); diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java b/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java index 8a114ba46..e10b997d9 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java @@ -184,6 +184,7 @@ public class CitizensTraitFactory implements TraitFactory { @Override public void registerTrait(TraitInfo info) { Preconditions.checkNotNull(info, "info cannot be null"); + info.checkValid(); if (registered.containsKey(info.getTraitName())) { throw new IllegalArgumentException("Trait name " + info.getTraitName() + " already registered"); } 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 3e69fea08..5732d529e 100644 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java +++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java @@ -48,6 +48,8 @@ public class WanderWaypointProvider @Persist public int delay = -1; private NPC npc; + @Persist + public boolean pathfind = true; private boolean paused; @Persist private final List regionCentres = Lists.newArrayList(); @@ -110,7 +112,7 @@ public class WanderWaypointProvider @Override public void begin() { - Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_BEGIN); + Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_BEGIN, pathfind ? "" : ""); if (currentGoal != null) { currentGoal.pause(); } @@ -155,29 +157,22 @@ public class WanderWaypointProvider recalculateTree(); } catch (Exception ex) { } - Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() { - @Override - public void run() { - Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_RANGE_SET, xrange, yrange); - } - }); + Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), + () -> Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_RANGE_SET, xrange, yrange)); } else if (message.startsWith("regions")) { event.setCancelled(true); editingRegions = !editingRegions; - Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() { - @Override - public void run() { - if (editingRegions) { - for (Location regionCentre : regionCentres) { - Entity entity = markers.createMarker(regionCentre, regionCentre); - entity.setMetadata("wandermarker", - new FixedMetadataValue(CitizensAPI.getPlugin(), regionCentre)); - } - Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_REGION_EDITING_START); - } else { - markers.destroyMarkers(); - Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_REGION_EDITING_STOP); + Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), () -> { + if (editingRegions) { + for (Location regionCentre : regionCentres) { + Entity entity = markers.createMarker(regionCentre, regionCentre); + entity.setMetadata("wandermarker", + new FixedMetadataValue(CitizensAPI.getPlugin(), regionCentre)); } + Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_REGION_EDITING_START); + } else { + markers.destroyMarkers(); + Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_REGION_EDITING_STOP); } }); } else if (message.startsWith("delay")) { @@ -187,44 +182,42 @@ public class WanderWaypointProvider if (currentGoal != null) { currentGoal.setDelay(delay); } - Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() { - @Override - public void run() { - Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_DELAY_SET, delay); - } - }); + Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), + () -> Messaging.sendTr(sender, Messages.WANDER_WAYPOINTS_DELAY_SET, delay)); } catch (Exception e) { - Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() { - @Override - public void run() { - Messaging.sendErrorTr(sender, Messages.WANDER_WAYPOINTS_INVALID_DELAY); - } - }); + Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), + () -> Messaging.sendErrorTr(sender, Messages.WANDER_WAYPOINTS_INVALID_DELAY)); } } else if (message.startsWith("worldguardregion")) { event.setCancelled(true); - Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() { - @Override - public void run() { - Object region = null; - String regionId = message.replace("worldguardregion ", ""); - try { - RegionManager manager = WorldGuard.getInstance().getPlatform().getRegionContainer() - .get(BukkitAdapter.adapt(npc.getStoredLocation().getWorld())); - region = manager.getRegion(regionId); - } catch (Exception e) { - e.printStackTrace(); - } - if (region == null) { - Messaging.sendErrorTr(sender, Messages.WANDER_WAYPOINTS_WORLDGUARD_REGION_NOT_FOUND); - return; - } - WanderWaypointProvider.this.worldguardRegion = regionId; - if (currentGoal != null) { - currentGoal.setWorldGuardRegion(region); - } - Messaging.sendErrorTr(sender, Messages.WANDER_WAYPOINTS_WORLDGUARD_REGION_SET, regionId); + Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), () -> { + Object region = null; + String regionId = message.replace("worldguardregion ", ""); + try { + RegionManager manager = WorldGuard.getInstance().getPlatform().getRegionContainer() + .get(BukkitAdapter.adapt(npc.getStoredLocation().getWorld())); + region = manager.getRegion(regionId); + } catch (Exception e) { + e.printStackTrace(); } + if (region == null) { + Messaging.sendErrorTr(sender, Messages.WANDER_WAYPOINTS_WORLDGUARD_REGION_NOT_FOUND); + return; + } + WanderWaypointProvider.this.worldguardRegion = regionId; + if (currentGoal != null) { + currentGoal.setWorldGuardRegion(region); + } + Messaging.sendErrorTr(sender, Messages.WANDER_WAYPOINTS_WORLDGUARD_REGION_SET, regionId); + }); + } else if (message.startsWith("pathfind")) { + event.setCancelled(true); + Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), () -> { + pathfind = !pathfind; + if (currentGoal != null) { + currentGoal.setPathfind(pathfind); + } + begin(); }); } } diff --git a/main/src/main/java/net/citizensnpcs/util/AbstractBlockBreaker.java b/main/src/main/java/net/citizensnpcs/util/AbstractBlockBreaker.java index 85eea1098..428ecfeba 100644 --- a/main/src/main/java/net/citizensnpcs/util/AbstractBlockBreaker.java +++ b/main/src/main/java/net/citizensnpcs/util/AbstractBlockBreaker.java @@ -95,7 +95,7 @@ public abstract class AbstractBlockBreaker extends BlockBreaker { .distanceMargin(Math.max(configuration.radius() - 1, 0.75)); setTarget = true; } - } else if (NMS.getDestination(entity) == null) { + } else { NMS.setDestination(entity, x, y, z, 1); setTarget = true; } diff --git a/main/src/main/java/net/citizensnpcs/util/Util.java b/main/src/main/java/net/citizensnpcs/util/Util.java index 5c8314afc..478b1834c 100644 --- a/main/src/main/java/net/citizensnpcs/util/Util.java +++ b/main/src/main/java/net/citizensnpcs/util/Util.java @@ -1,13 +1,14 @@ package net.citizensnpcs.util; +import java.text.DecimalFormat; import java.util.Arrays; import java.util.EnumSet; import java.util.Random; import java.util.Set; import java.util.UUID; import java.util.function.Function; - import java.util.stream.StreamSupport; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -27,7 +28,6 @@ import org.bukkit.util.Vector; import com.google.common.base.Joiner; import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; import io.netty.util.Version; import net.citizensnpcs.api.event.NPCCollisionEvent; @@ -331,8 +331,9 @@ public class Util { } public static String prettyPrintLocation(Location to) { - return String.format("%s at %d, %d, %d (%d, %d)", to.getWorld().getName(), to.getBlockX(), to.getBlockY(), - to.getBlockZ(), (int) to.getYaw(), (int) to.getPitch()); + return String.format("%s at %s, %s, %s (%s, %s)", to.getWorld().getName(), TWO_DIGIT_DECIMAL.format(to.getX()), + TWO_DIGIT_DECIMAL.format(to.getY()), TWO_DIGIT_DECIMAL.format(to.getZ()), + TWO_DIGIT_DECIMAL.format(to.getYaw()), TWO_DIGIT_DECIMAL.format(to.getPitch())); } public static boolean requiresNettyChannelMetadata() { @@ -346,14 +347,15 @@ public class Util { if (version == null) return REQUIRES_CHANNEL_METADATA = false; try { - Integer[] parts = StreamSupport.stream(Splitter.on('.').split(version.artifactVersion()).spliterator(), false).map(string -> { - // Newer versions of netty use suffix (like .Final) that can't be parsed to Integer - try { - return Integer.parseInt(string); - } catch (NumberFormatException e) { - return -1; - } - }).toArray(Integer[]::new); + Integer[] parts = StreamSupport + .stream(Splitter.on('.').split(version.artifactVersion()).spliterator(), false).map(string -> { + // Newer versions of netty use suffix (like .Final) that can't be parsed to Integer + try { + return Integer.parseInt(string); + } catch (NumberFormatException e) { + return -1; + } + }).toArray(Integer[]::new); int major = parts[0]; int minor = parts[1]; int patch = parts[2]; @@ -375,4 +377,8 @@ public class Util { private static final Scoreboard DUMMY_SCOREBOARD = Bukkit.getScoreboardManager().getNewScoreboard(); private static String MINECRAFT_REVISION; private static Boolean REQUIRES_CHANNEL_METADATA; + private static final DecimalFormat TWO_DIGIT_DECIMAL = new DecimalFormat(); + static { + TWO_DIGIT_DECIMAL.setMaximumFractionDigits(2); + } } diff --git a/main/src/main/resources/messages_en.properties b/main/src/main/resources/messages_en.properties index 63f709be6..42edf2d54 100644 --- a/main/src/main/resources/messages_en.properties +++ b/main/src/main/resources/messages_en.properties @@ -348,7 +348,7 @@ citizens.editors.waypoints.wander.editing-regions-stop=Exited the region editor. citizens.editors.waypoints.wander.worldguard-region-not-found=WorldGuard region not found. citizens.editors.waypoints.wander.worldguard-region-set=WorldGuard region set to [[{0}]]. citizens.editors.waypoints.wander.range-set=Wander range set to xrange [[{0}]] and yrange [[{1}]]. -citizens.editors.waypoints.wander.begin=Entered the wander waypoint editor.
x range | y range | delay
Enter the region editor | region +citizens.editors.waypoints.wander.begin=Entered the wander waypoint editor.
{0}Pathfind | x range | y range | delay
Enter the region editor | region citizens.editors.waypoints.wander.end=Exited the wander waypoint editor. citizens.editors.waypoints.wander.delay-set=Delay between wanders set to [[{0}]] ticks. citizens.editors.waypoints.wander.invalid-delay=Invalid delay specified.