diff --git a/src/main/java/com/laytonsmith/abstraction/MCPlayer.java b/src/main/java/com/laytonsmith/abstraction/MCPlayer.java index ec820b66e..0cb4cf2cd 100644 --- a/src/main/java/com/laytonsmith/abstraction/MCPlayer.java +++ b/src/main/java/com/laytonsmith/abstraction/MCPlayer.java @@ -16,6 +16,10 @@ public interface MCPlayer extends MCCommandSender, MCHumanEntity, MCOfflinePlayer { + void setSleepingIgnored(boolean value); + + boolean isSleepingIgnored(); + boolean canSee(MCPlayer p); void chat(String chat); diff --git a/src/main/java/com/laytonsmith/abstraction/bukkit/entities/BukkitMCPlayer.java b/src/main/java/com/laytonsmith/abstraction/bukkit/entities/BukkitMCPlayer.java index 1ef6b88c7..ee69a4894 100644 --- a/src/main/java/com/laytonsmith/abstraction/bukkit/entities/BukkitMCPlayer.java +++ b/src/main/java/com/laytonsmith/abstraction/bukkit/entities/BukkitMCPlayer.java @@ -81,6 +81,16 @@ public Player _Player() { return p; } + @Override + public void setSleepingIgnored(boolean value) { + p.setSleepingIgnored(value); + } + + @Override + public boolean isSleepingIgnored() { + return p.isSleepingIgnored(); + } + @Override public boolean canSee(MCPlayer p) { return this.p.canSee(((BukkitMCPlayer) p)._Player()); diff --git a/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java b/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java index 5497cff13..9b90b3453 100644 --- a/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java +++ b/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java @@ -7307,4 +7307,111 @@ public Boolean runAsync() { return false; } } + + @api + public static class set_player_sleeping_ignored extends AbstractFunction { + + @Override public String getName() { + return "set_player_sleeping_ignored"; + } + + @Override public Integer[] numArgs() { + return new Integer[]{1, 2}; + } + + @Override + public Mixed exec(Target t, Environment env, Mixed... args) + throws ConfigRuntimeException { + final MCPlayer player; + final boolean value; + if(args.length == 1) { + player = env.getEnv(CommandHelperEnvironment.class).GetPlayer(); + Static.AssertPlayerNonNull(player, t); + value = ArgumentValidation.getBoolean(args[0], t); + } else { + player = Static.GetPlayer(args[0], t); + value = ArgumentValidation.getBoolean(args[1], t); + } + player.setSleepingIgnored(value); + return CVoid.VOID; + } + + @Override + public Class[] thrown() { + return new Class[]{ + CREPlayerOfflineException.class, + CREInsufficientArgumentsException.class, + CRECastException.class + }; + } + + @Override public boolean isRestricted() { + return false; + } + + @Override public Boolean runAsync() { + return false; + } + + @Override public MSVersion since() { + return MSVersion.V3_3_5; + } + + @Override + public String docs() { + return "void {[player], boolean} Sets whether is ignored when " + + "counting sleepers to skip night."; + } + } + + @api + public static class is_player_sleeping_ignored extends AbstractFunction { + + @Override public String getName() { + return "is_player_sleeping_ignored"; + } + + @Override public Integer[] numArgs() { + return new Integer[]{0, 1}; + } + + @Override + public Mixed exec(Target t, Environment env, Mixed... args) + throws ConfigRuntimeException { + final MCPlayer player; + if(args.length == 0) { + player = env.getEnv(CommandHelperEnvironment.class).GetPlayer(); + Static.AssertPlayerNonNull(player, t); + } else { + player = Static.GetPlayer(args[0], t); + } + return CBoolean.get(player.isSleepingIgnored()); + } + + @Override + public Class[] thrown() { + return new Class[] { + CREPlayerOfflineException.class, + CREInsufficientArgumentsException.class + }; + } + + @Override public boolean isRestricted() { + return false; + } + + @Override public Boolean runAsync() { + return false; + } + + @Override public MSVersion since() { + return MSVersion.V3_3_5; + } + + @Override + public String docs() { + return "boolean {[player]} Returns whether is currently ignored " + + "by the night-skip sleep check."; + } + } }