diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 61e7fcc80..cd8bb6904 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -547,7 +547,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "command (add [command] | remove [id|all] | permissions [permissions] | sequential | cycle | random | forgetplayer (uuid) | clearerror [type] (name|uuid) | errormsg [type] [msg] | persistsequence [true|false] | cost [cost] (id) | expcost [cost] (id) | itemcost (id)) (-s(hift)) (-l[eft]/-r[ight]) (-p[layer] -o[p]), --cooldown --gcooldown [seconds] --delay [ticks] --permissions [perms] --n [max # of uses]", + usage = "command (add [command] | remove [id|all] | permissions [permissions] (duration) | sequential | cycle | random | forgetplayer (uuid) | clearerror [type] (name|uuid) | errormsg [type] [msg] | persistsequence [true|false] | cost [cost] (id) | expcost [cost] (id) | itemcost (id)) (-s(hift)) (-l[eft]/-r[ight]) (-p[layer] -o[p]), --cooldown --gcooldown [seconds] --delay [ticks] --permissions [perms] --n [max # of uses]", desc = "", modifiers = { "command", "cmd" }, min = 1, @@ -672,10 +672,14 @@ public class NPCCommands { } else if (action.equalsIgnoreCase("permissions") || action.equalsIgnoreCase("perms")) { if (!sender.hasPermission("citizens.admin")) throw new NoPermissionsException(); - List temporaryPermissions = Arrays.asList(args.getSlice(2)); - commands.setTemporaryPermissions(temporaryPermissions); + List temporaryPermissions = Arrays.asList(args.getString(2).split(",")); + int duration = -1; + if (args.argsLength() == 4) { + duration = Util.parseTicks(args.getString(3)); + } + commands.setTemporaryPermissions(temporaryPermissions, duration); Messaging.sendTr(sender, Messages.COMMAND_TEMPORARY_PERMISSIONS_SET, - Joiner.on(' ').join(temporaryPermissions)); + Joiner.on(' ').join(temporaryPermissions), duration); } else if (action.equalsIgnoreCase("cost")) { if (args.argsLength() == 2) throw new CommandException(Messages.COMMAND_MISSING_COST); diff --git a/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java b/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java index be7cfda99..39a140ffa 100644 --- a/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java @@ -84,6 +84,8 @@ public class CommandTrait extends Trait { private final Map playerTracking = Maps.newHashMap(); @Persist private final List temporaryPermissions = Lists.newArrayList(); + @Persist + private int temporaryPermissionsDuration; public CommandTrait() { super("commandtrait"); @@ -363,7 +365,12 @@ public class CommandTrait extends Trait { attachment.setPermission(permission, true); } command.run(npc, player); - attachment.remove(); + if (temporaryPermissionsDuration <= 0) { + attachment.remove(); + } else { + Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), + () -> attachment.remove()); + } return; } } @@ -481,8 +488,13 @@ public class CommandTrait extends Trait { } public void setTemporaryPermissions(List permissions) { + setTemporaryPermissions(permissions, -1); + } + + public void setTemporaryPermissions(List permissions, int duration) { temporaryPermissions.clear(); temporaryPermissions.addAll(permissions); + temporaryPermissionsDuration = duration; } public enum CommandTraitError { diff --git a/main/src/main/resources/en.json b/main/src/main/resources/en.json index be291c217..7a5f85de6 100644 --- a/main/src/main/resources/en.json +++ b/main/src/main/resources/en.json @@ -134,7 +134,7 @@ "citizens.commands.npc.command.persist-sequence-unset" : "Command sequences will no longer be saved across server restarts.", "citizens.commands.npc.command.player-forgotten" : "Forgot player command history for [[{0}]].", "citizens.commands.npc.command.right-hand-header" : "Commands to run on [[right click]]:", - "citizens.commands.npc.command.temporary-permissions-set" : "Temporary permissions set to [[{0}]].", + "citizens.commands.npc.command.temporary-permissions-set" : "Temporary permissions set to [[{0}]] for [[{1}]] ticks.", "citizens.commands.npc.command.unknown-id" : "Unknown command id [[{0}]] for this NPC.", "citizens.commands.npc.commands.random-set" : "Commands will now execute at random.", "citizens.commands.npc.commands.random-unset" : "Commands will no longer execute at random.",