mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-16 20:31:30 +01:00
Add simple /npc pausepathfinding command
This commit is contained in:
parent
224ffc7fc5
commit
585df3f696
@ -125,6 +125,7 @@ import net.citizensnpcs.trait.MirrorTrait;
|
||||
import net.citizensnpcs.trait.MountTrait;
|
||||
import net.citizensnpcs.trait.OcelotModifiers;
|
||||
import net.citizensnpcs.trait.PacketNPC;
|
||||
import net.citizensnpcs.trait.PausePathfindingTrait;
|
||||
import net.citizensnpcs.trait.Poses;
|
||||
import net.citizensnpcs.trait.Powered;
|
||||
import net.citizensnpcs.trait.RabbitType;
|
||||
@ -1972,6 +1973,36 @@ public class NPCCommands {
|
||||
npc.getNavigator().setTarget(loc);
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "pausepathfinding --onrightclick [true|false] --when_player_within [range in blocks] --pauseticks [ticks]",
|
||||
desc = "Sets pathfinding pause",
|
||||
modifiers = { "pausepathfinding" },
|
||||
min = 1,
|
||||
max = 1,
|
||||
permission = "citizens.npc.pausepathfinding")
|
||||
public void pausepathfinding(CommandContext args, CommandSender sender, NPC npc,
|
||||
@Flag("onrightclick") Boolean rightclick, @Flag("when_player_within") Double playerRange,
|
||||
@Flag("pauseticks") Integer ticks) throws CommandException {
|
||||
PausePathfindingTrait trait = npc.getOrAddTrait(PausePathfindingTrait.class);
|
||||
if (playerRange != null) {
|
||||
if (playerRange <= 0)
|
||||
throw new CommandException("Invalid range");
|
||||
trait.setPlayerRangeBlocks(playerRange);
|
||||
Messaging.sendTr(sender, Messages.PAUSEPATHFINDING_RANGE_SET, npc.getName(), playerRange);
|
||||
}
|
||||
if (rightclick != null) {
|
||||
trait.setRightClick(rightclick);
|
||||
Messaging.sendTr(sender,
|
||||
rightclick ? Messages.PAUSEPATHFINDING_RIGHTCLICK_SET : Messages.PAUSEPATHFINDING_RIGHTCLICK_SET,
|
||||
npc.getName());
|
||||
}
|
||||
if (ticks != null) {
|
||||
trait.setPauseTicks(ticks);
|
||||
Messaging.sendTr(sender, Messages.PAUSEPATHFINDING_TICKS_SET, npc.getName(), ticks);
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "pickupitems (--set [true|false])",
|
||||
|
@ -40,6 +40,7 @@ import net.citizensnpcs.trait.MirrorTrait;
|
||||
import net.citizensnpcs.trait.MountTrait;
|
||||
import net.citizensnpcs.trait.OcelotModifiers;
|
||||
import net.citizensnpcs.trait.PacketNPC;
|
||||
import net.citizensnpcs.trait.PausePathfindingTrait;
|
||||
import net.citizensnpcs.trait.Poses;
|
||||
import net.citizensnpcs.trait.Powered;
|
||||
import net.citizensnpcs.trait.RabbitType;
|
||||
@ -92,6 +93,7 @@ public class CitizensTraitFactory implements TraitFactory {
|
||||
registerTrait(TraitInfo.create(OcelotModifiers.class));
|
||||
registerTrait(TraitInfo.create(Owner.class));
|
||||
registerTrait(TraitInfo.create(PacketNPC.class));
|
||||
registerTrait(TraitInfo.create(PausePathfindingTrait.class));
|
||||
registerTrait(TraitInfo.create(Poses.class));
|
||||
registerTrait(TraitInfo.create(Powered.class));
|
||||
registerTrait(TraitInfo.create(RabbitType.class));
|
||||
|
@ -0,0 +1,66 @@
|
||||
package net.citizensnpcs.trait;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import net.citizensnpcs.api.event.NPCRightClickEvent;
|
||||
import net.citizensnpcs.api.persistence.Persist;
|
||||
import net.citizensnpcs.api.trait.Trait;
|
||||
import net.citizensnpcs.api.trait.TraitName;
|
||||
|
||||
@TraitName("pausepathfinding")
|
||||
public class PausePathfindingTrait extends Trait {
|
||||
@Persist("pauseticks")
|
||||
private int pauseTicks;
|
||||
@Persist("playerrange")
|
||||
private double playerRange = -1;
|
||||
@Persist("rightclick")
|
||||
private boolean rightclick;
|
||||
private int unpauseTaskId = -1;
|
||||
|
||||
public PausePathfindingTrait() {
|
||||
super("pausepathfinding");
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onInteract(NPCRightClickEvent event) {
|
||||
if (!rightclick || event.getNPC() != npc)
|
||||
return;
|
||||
pause();
|
||||
}
|
||||
|
||||
private void pause() {
|
||||
if (unpauseTaskId != -1) {
|
||||
Bukkit.getScheduler().cancelTask(unpauseTaskId);
|
||||
}
|
||||
npc.getNavigator().cancelNavigation();
|
||||
npc.getNavigator().setPaused(true);
|
||||
unpauseTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(),
|
||||
() -> npc.getNavigator().setPaused(false), pauseTicks <= 0 ? 20 : pauseTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (playerRange == -1 || !npc.isSpawned())
|
||||
return;
|
||||
if (unpauseTaskId == -1 && !npc.getNavigator().isNavigating())
|
||||
return;
|
||||
if (CitizensAPI.getLocationLookup().getNearbyPlayers(npc.getStoredLocation(), playerRange).iterator()
|
||||
.hasNext()) {
|
||||
pause();
|
||||
}
|
||||
}
|
||||
|
||||
public void setPauseTicks(int pauseTicks) {
|
||||
this.pauseTicks = pauseTicks;
|
||||
}
|
||||
|
||||
public void setPlayerRangeBlocks(double range) {
|
||||
this.playerRange = range;
|
||||
}
|
||||
|
||||
public void setRightClick(boolean rightclick) {
|
||||
this.rightclick = rightclick;
|
||||
}
|
||||
}
|
@ -305,6 +305,10 @@ public class Messages {
|
||||
public static final String PATHFINDING_OPTIONS_STATIONARY_TICKS_SET = "citizens.commands.npc.pathopt.stationary-ticks-set";
|
||||
public static final String PATHFINDING_OPTIONS_USE_NEW_FINDER = "citizens.commands.npc.pathopt.use-new-finder";
|
||||
public static final String PATHFINDING_RANGE_SET = "citizens.commands.npc.pathfindingrange.set";
|
||||
public static final String PAUSEPATHFINDING_RANGE_SET = "citizens.commands.npc.pausepathfinding.pause-range-set";
|
||||
public static final String PAUSEPATHFINDING_RIGHTCLICK_SET = "citizens.commands.npc.pausepathfinding.rightclick-set";
|
||||
public static final String PAUSEPATHFINDING_RIGHTCLICK_UNSET = "citizens.commands.npc.pausepathfinding.rightclick-unset";
|
||||
public static final String PAUSEPATHFINDING_TICKS_SET = "citizens.commands.npc.pausepathfinding.pause-ticks-set";
|
||||
public static final String PHANTOM_STATE_SET = "citizens.commands.npc.phantom.phantom-set";
|
||||
public static final String PICKUP_ITEMS_SET = "citizens.commands.npc.pickupitems.set";
|
||||
public static final String PICKUP_ITEMS_UNSET = "citizens.commands.npc.pickupitems.unset";
|
||||
|
@ -211,6 +211,10 @@ citizens.commands.npc.pathopt.distance-margin-set=[[{0}]]''s pathfinding distanc
|
||||
citizens.commands.npc.pathopt.path-distance-margin-set=[[{0}]]''s pathfinding path distance margin set to [[{1}]].
|
||||
citizens.commands.npc.pathopt.attack-range-set=[[{0}]]''s attack range set to [[{1}]].
|
||||
citizens.commands.npc.pathopt.use-new-finder=[[{0}]]''s use new finder set to [[{1}]].
|
||||
citizens.commands.npc.pausepathfinding.pause-range-set=[{0}]] will now pause pathfinding when a player is within [[{1}]] blocks.
|
||||
citizens.commands.npc.pausepathfinding.pause-ticks-set=[[{0}]] will now pause pathfinding for [[{1}]] ticks at a time.
|
||||
citizens.commands.npc.pausepathfinding.rightclick-set=[[{0}]] will now pause pathfinding on right click.
|
||||
citizens.commands.npc.pausepathfinding.rightclick-unset=[[{0}]] will no longer pause pathfinding on right click.
|
||||
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.polarbear.rearing-set=[[{0}]] is now rearing.
|
||||
|
Loading…
Reference in New Issue
Block a user