mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-17 04:41:31 +01:00
Add new options to /npc pathopt, save modified options only if they are different from the settings
This commit is contained in:
parent
be9fb19d39
commit
bdede8fb79
@ -65,6 +65,7 @@ public class Settings {
|
||||
CHECK_MINECRAFT_VERSION("advanced.check-minecraft-version", true),
|
||||
DEBUG_MODE("general.debug-mode", false),
|
||||
DEBUG_PATHFINDING("general.debug-pathfinding", false),
|
||||
DEFAULT_DISTANCE_MARGIN("npc.pathfinding.default-distance-margin", 2),
|
||||
DEFAULT_LOOK_CLOSE("npc.default.look-close.enabled", false),
|
||||
DEFAULT_LOOK_CLOSE_RANGE("npc.default.look-close.range", 5),
|
||||
DEFAULT_NPC_LIMIT("npc.limits.default-limit", 10),
|
||||
|
@ -973,20 +973,47 @@ public class NPCCommands {
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "pathopt --avoid-water|aw [true|false]",
|
||||
usage = "pathopt --avoid-water|aw [true|false] --stationary-ticks [ticks] --attack-range [range] --distance-margin [margin]",
|
||||
desc = "Sets an NPC's pathfinding options",
|
||||
modifiers = { "pathopt", "po", "patho" },
|
||||
min = 1,
|
||||
max = 1,
|
||||
permission = "citizens.npc.pathfindingoptions")
|
||||
public void pathfindingOptions(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||
boolean found = false;
|
||||
if (args.hasValueFlag("avoid-water") || args.hasValueFlag("aw")) {
|
||||
String raw = args.getFlag("avoid-water", args.getFlag("aw"));
|
||||
boolean avoid = Boolean.parseBoolean(raw);
|
||||
npc.getNavigator().getDefaultParameters().avoidWater(avoid);
|
||||
Messaging.sendTr(sender, avoid ? Messages.PATHFINDING_OPTIONS_AVOID_WATER_SET
|
||||
: Messages.PATHFINDING_OPTIONS_AVOID_WATER_UNSET, npc.getName());
|
||||
} else {
|
||||
found = true;
|
||||
}
|
||||
if (args.hasValueFlag("stationary-ticks")) {
|
||||
int ticks = Integer.parseInt(args.getFlag("stationary-ticks"));
|
||||
if (ticks < 0)
|
||||
throw new CommandException();
|
||||
npc.getNavigator().getDefaultParameters().stationaryTicks(ticks);
|
||||
Messaging.sendTr(sender, Messages.PATHFINDING_OPTIONS_STATIONARY_TICKS_SET, npc.getName(), ticks);
|
||||
found = true;
|
||||
}
|
||||
if (args.hasValueFlag("distance-margin")) {
|
||||
double distance = Double.parseDouble(args.getFlag("distance-margin"));
|
||||
if (distance < 0)
|
||||
throw new CommandException();
|
||||
npc.getNavigator().getDefaultParameters().distanceMargin(distance);
|
||||
Messaging.sendTr(sender, Messages.PATHFINDING_OPTIONS_DISTANCE_MARGIN_SET, npc.getName(), distance);
|
||||
found = true;
|
||||
}
|
||||
if (args.hasValueFlag("attack-range")) {
|
||||
double range = Double.parseDouble(args.getFlag("attack-range"));
|
||||
if (range < 0)
|
||||
throw new CommandException();
|
||||
npc.getNavigator().getDefaultParameters().attackRange(range);
|
||||
Messaging.sendTr(sender, Messages.PATHFINDING_OPTIONS_ATTACK_RANGE_SET, npc.getName(), range);
|
||||
found = true;
|
||||
}
|
||||
if (!found) {
|
||||
throw new CommandException();
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ public class CitizensNavigator implements Navigator, Runnable {
|
||||
.defaultAttackStrategy(MCTargetStrategy.DEFAULT_ATTACK_STRATEGY)
|
||||
.attackRange(Setting.NPC_ATTACK_DISTANCE.asDouble())
|
||||
.updatePathRate(Setting.DEFAULT_PATHFINDER_UPDATE_PATH_RATE.asInt())
|
||||
.distanceMargin(Setting.DEFAULT_DISTANCE_MARGIN.asDouble())
|
||||
.stationaryTicks(Setting.DEFAULT_STATIONARY_TICKS.asInt()).stuckAction(TeleportStuckAction.INSTANCE)
|
||||
.examiner(new MinecraftBlockExaminer()).useNewPathfinder(Setting.USE_NEW_PATHFINDER.asBoolean());
|
||||
private PathStrategy executing;
|
||||
@ -74,8 +75,9 @@ public class CitizensNavigator implements Navigator, Runnable {
|
||||
|
||||
@Override
|
||||
public NavigatorParameters getLocalParameters() {
|
||||
if (!isNavigating())
|
||||
if (!isNavigating()) {
|
||||
return defaultParams;
|
||||
}
|
||||
return localParams;
|
||||
}
|
||||
|
||||
@ -105,13 +107,20 @@ public class CitizensNavigator implements Navigator, Runnable {
|
||||
}
|
||||
|
||||
public void load(DataKey root) {
|
||||
defaultParams.range((float) root.getDouble("pathfindingrange", Setting.DEFAULT_PATHFINDING_RANGE.asFloat()));
|
||||
defaultParams.stationaryTicks(root.getInt("stationaryticks", Setting.DEFAULT_STATIONARY_TICKS.asInt()));
|
||||
if (root.keyExists("pathfindingrange")) {
|
||||
defaultParams.range((float) root.getDouble("pathfindingrange"));
|
||||
}
|
||||
if (root.keyExists("stationaryticks")) {
|
||||
defaultParams.stationaryTicks(root.getInt("stationaryticks"));
|
||||
}
|
||||
if (root.keyExists("distancemargin")) {
|
||||
defaultParams.distanceMargin(root.getDouble("distancemargin"));
|
||||
}
|
||||
defaultParams.speedModifier((float) root.getDouble("speedmodifier", 1F));
|
||||
if (root.keyExists("avoidwater"))
|
||||
defaultParams.avoidWater(root.getBoolean("avoidwater"));
|
||||
if (!root.getBoolean("usedefaultstuckaction") && defaultParams.stuckAction() == TeleportStuckAction.INSTANCE)
|
||||
defaultParams.avoidWater(root.getBoolean("avoidwater"));
|
||||
if (!root.getBoolean("usedefaultstuckaction") && defaultParams.stuckAction() == TeleportStuckAction.INSTANCE) {
|
||||
defaultParams.stuckAction(null);
|
||||
}
|
||||
}
|
||||
|
||||
public void onDespawn() {
|
||||
@ -149,8 +158,15 @@ public class CitizensNavigator implements Navigator, Runnable {
|
||||
}
|
||||
|
||||
public void save(DataKey root) {
|
||||
root.setDouble("pathfindingrange", defaultParams.range());
|
||||
root.setInt("stationaryticks", defaultParams.stationaryTicks());
|
||||
if (defaultParams.range() != Setting.DEFAULT_PATHFINDING_RANGE.asFloat()) {
|
||||
root.setDouble("pathfindingrange", defaultParams.range());
|
||||
}
|
||||
if (defaultParams.stationaryTicks() != Setting.DEFAULT_STATIONARY_TICKS.asInt()) {
|
||||
root.setInt("stationaryticks", defaultParams.stationaryTicks());
|
||||
}
|
||||
if (defaultParams.distanceMargin() != Setting.DEFAULT_DISTANCE_MARGIN.asDouble()) {
|
||||
root.setDouble("distancemargin", defaultParams.distanceMargin());
|
||||
}
|
||||
root.setDouble("speedmodifier", defaultParams.speedModifier());
|
||||
root.setBoolean("avoidwater", defaultParams.avoidWater());
|
||||
root.setBoolean("usedefaultstuckaction", defaultParams.stuckAction() == TeleportStuckAction.INSTANCE);
|
||||
|
@ -161,8 +161,11 @@ public class Messages {
|
||||
public static final String OWNER_SET_SERVER = "citizens.commands.npc.owner.set-server";
|
||||
public static final String PASSIVE_SET = "citizens.commands.npc.passive.set";
|
||||
public static final String PASSIVE_UNSET = "citizens.commands.npc.passive.unset";
|
||||
public static final String PATHFINDING_OPTIONS_ATTACK_RANGE_SET = "citizens.commands.npc.pathopt.attack-range-set";
|
||||
public static final String PATHFINDING_OPTIONS_AVOID_WATER_SET = "citizens.commands.npc.pathopt.avoid-water-set";
|
||||
public static final String PATHFINDING_OPTIONS_AVOID_WATER_UNSET = "citizens.commands.npc.pathopt.avoid-water-unset";
|
||||
public static final String PATHFINDING_OPTIONS_DISTANCE_MARGIN_SET = "citizens.commands.npc.pathopt.distance-margin-set";
|
||||
public static final String PATHFINDING_OPTIONS_STATIONARY_TICKS_SET = "citizens.commands.npc.pathopt.stationary-ticks-set";
|
||||
public static final String PATHFINDING_RANGE_SET = "citizens.commands.npc.pathfindingrange.set";
|
||||
public static final String PLAYER_NOT_FOUND_FOR_SPAWN = "citizens.commands.npc.create.no-player-for-spawn";
|
||||
public static final String POSE_ADDED = "citizens.commands.npc.pose.added";
|
||||
|
@ -74,6 +74,9 @@ citizens.commands.npc.passive.unset=[[{0}]] will now damage entities.
|
||||
citizens.commands.npc.pathfindingrange.set=Pathfinding range set to [[{0}]].
|
||||
citizens.commands.npc.pathopt.avoid-water-set=[[{0}]] will now avoid water.
|
||||
citizens.commands.npc.pathopt.avoid-water-unset=[[{0}]] will no longer avoid water.
|
||||
citizens.commands.npc.pathopt.stationary-ticks-set=[[{0}]]'s maximum stationary ticks set to [[{1}]].
|
||||
citizens.commands.npc.pathopt.distance-margin-set=[[{0}]]'s pathfinding distance margin set to [[{1}]].
|
||||
citizens.commands.npc.pathopt.attack-range-set=[[{0}]]'s attack range set to [[{1}]].
|
||||
citizens.commands.npc.playerlist.added=Added [[{0}]] to the player list.
|
||||
citizens.commands.npc.playerlist.removed=Removed [[{0}]] from the player list.
|
||||
citizens.commands.npc.pose.added=Pose added.
|
||||
|
Loading…
Reference in New Issue
Block a user