From b977fdd885d9e84b4b2a0f5ce0a39e3f7482d128 Mon Sep 17 00:00:00 2001 From: malonnnn Date: Thu, 24 Apr 2025 18:47:28 -0500 Subject: [PATCH 1/4] Broken Build --- .../com/laytonsmith/abstraction/MCPlayer.java | 4 + .../bukkit/entities/BukkitMCPlayer.java | 10 ++ .../core/functions/PlayerManagement.java | 107 ++++++++++++++++++ .../core/functions/SleepingIgnoredTest.java | 50 ++++++++ 4 files changed, 171 insertions(+) create mode 100644 src/test/java/com/laytonsmith/core/functions/SleepingIgnoredTest.java 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..44590045c 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) { // no explicit player + player = env.getEnv(CommandHelperEnvironment.class).GetPlayer(); + Static.AssertPlayerNonNull(player, t); // may throw CREInsufficientArgumentsException + value = ArgumentValidation.getBoolean(args[0], t); + } else { // player supplied + player = Static.GetPlayer(args[0], t); // may throw CREPlayerOfflineException + value = ArgumentValidation.getBoolean(args[1], t); // may throw CRECastException + } + 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) { // no explicit player + player = env.getEnv(CommandHelperEnvironment.class).GetPlayer(); + Static.AssertPlayerNonNull(player, t); // may throw CREInsufficientArgumentsException + } else { + player = Static.GetPlayer(args[0], t); // may throw CREPlayerOfflineException + } + 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."; + } + } } diff --git a/src/test/java/com/laytonsmith/core/functions/SleepingIgnoredTest.java b/src/test/java/com/laytonsmith/core/functions/SleepingIgnoredTest.java new file mode 100644 index 000000000..4a2b0e4ed --- /dev/null +++ b/src/test/java/com/laytonsmith/core/functions/SleepingIgnoredTest.java @@ -0,0 +1,50 @@ +package com.laytonsmith.core.functions; + +import com.laytonsmith.abstraction.MCPlayer; +import com.laytonsmith.core.Static; +import com.laytonsmith.core.environments.CommandHelperEnvironment; +import com.laytonsmith.core.environments.Environment; +import com.laytonsmith.testing.StaticTest; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class SleepingIgnoredTest { + + private MCPlayer player; + private Environment env; + + @Before + public void setUp() throws Exception { + player = StaticTest.GetOnlinePlayer(); + + env = Static.GenerateStandaloneEnvironment() + .cloneAndAdd(new CommandHelperEnvironment()); + env.getEnv(CommandHelperEnvironment.class).SetPlayer(player); + + player.setSleepingIgnored(false); // start from a known state + } + + @Test + public void testImplicitAndExplicitForms() throws Exception { + + /* ---------- implicit-player form ---------- */ + assertFalse(player.isSleepingIgnored()); + StaticTest.SRun("set_player_sleeping_ignored(true)", player, env); + assertTrue(player.isSleepingIgnored()); + + /* ---------- explicit-player form ---------- */ + String pLiteral = "p@" + player.getName(); // literal player constant + + StaticTest.SRun("set_player_sleeping_ignored(" + pLiteral + ", false)", player, env); + + String raw = StaticTest.SRun("is_player_sleeping_ignored(" + pLiteral + ")", player, env); + assertFalse(parseBool(raw)); // now really off + } + + /** CommandHelper returns “:true” / “:false”. */ + private static boolean parseBool(String s) { + return s.trim().replaceFirst("^:", "").equalsIgnoreCase("true"); + } +} From 4261c0feab72471b23680524c34d01847ed8a598 Mon Sep 17 00:00:00 2001 From: malonnnn Date: Fri, 25 Apr 2025 11:56:49 -0500 Subject: [PATCH 2/4] delete unit test --- .../core/functions/SleepingIgnoredTest.java | 50 ------------------- 1 file changed, 50 deletions(-) delete mode 100644 src/test/java/com/laytonsmith/core/functions/SleepingIgnoredTest.java diff --git a/src/test/java/com/laytonsmith/core/functions/SleepingIgnoredTest.java b/src/test/java/com/laytonsmith/core/functions/SleepingIgnoredTest.java deleted file mode 100644 index 4a2b0e4ed..000000000 --- a/src/test/java/com/laytonsmith/core/functions/SleepingIgnoredTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.laytonsmith.core.functions; - -import com.laytonsmith.abstraction.MCPlayer; -import com.laytonsmith.core.Static; -import com.laytonsmith.core.environments.CommandHelperEnvironment; -import com.laytonsmith.core.environments.Environment; -import com.laytonsmith.testing.StaticTest; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class SleepingIgnoredTest { - - private MCPlayer player; - private Environment env; - - @Before - public void setUp() throws Exception { - player = StaticTest.GetOnlinePlayer(); - - env = Static.GenerateStandaloneEnvironment() - .cloneAndAdd(new CommandHelperEnvironment()); - env.getEnv(CommandHelperEnvironment.class).SetPlayer(player); - - player.setSleepingIgnored(false); // start from a known state - } - - @Test - public void testImplicitAndExplicitForms() throws Exception { - - /* ---------- implicit-player form ---------- */ - assertFalse(player.isSleepingIgnored()); - StaticTest.SRun("set_player_sleeping_ignored(true)", player, env); - assertTrue(player.isSleepingIgnored()); - - /* ---------- explicit-player form ---------- */ - String pLiteral = "p@" + player.getName(); // literal player constant - - StaticTest.SRun("set_player_sleeping_ignored(" + pLiteral + ", false)", player, env); - - String raw = StaticTest.SRun("is_player_sleeping_ignored(" + pLiteral + ")", player, env); - assertFalse(parseBool(raw)); // now really off - } - - /** CommandHelper returns “:true” / “:false”. */ - private static boolean parseBool(String s) { - return s.trim().replaceFirst("^:", "").equalsIgnoreCase("true"); - } -} From 176b0dcac3af6413b7dc7c49697033f14f7695da Mon Sep 17 00:00:00 2001 From: malonnnn Date: Fri, 25 Apr 2025 13:06:09 -0500 Subject: [PATCH 3/4] clean up debug comments --- .../core/functions/PlayerManagement.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java b/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java index 44590045c..38db27ce0 100644 --- a/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java +++ b/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java @@ -7324,13 +7324,13 @@ public Mixed exec(Target t, Environment env, Mixed... args) throws ConfigRuntimeException { final MCPlayer player; final boolean value; - if(args.length == 1) { // no explicit player + if(args.length == 1) { player = env.getEnv(CommandHelperEnvironment.class).GetPlayer(); - Static.AssertPlayerNonNull(player, t); // may throw CREInsufficientArgumentsException + Static.AssertPlayerNonNull(player, t); value = ArgumentValidation.getBoolean(args[0], t); - } else { // player supplied - player = Static.GetPlayer(args[0], t); // may throw CREPlayerOfflineException - value = ArgumentValidation.getBoolean(args[1], t); // may throw CRECastException + } else { + player = Static.GetPlayer(args[0], t); + value = ArgumentValidation.getBoolean(args[1], t); } player.setSleepingIgnored(value); return CVoid.VOID; @@ -7379,11 +7379,11 @@ public static class is_player_sleeping_ignored extends AbstractFunction { public Mixed exec(Target t, Environment env, Mixed... args) throws ConfigRuntimeException { final MCPlayer player; - if(args.length == 0) { // no explicit player + if(args.length == 0) { player = env.getEnv(CommandHelperEnvironment.class).GetPlayer(); - Static.AssertPlayerNonNull(player, t); // may throw CREInsufficientArgumentsException + Static.AssertPlayerNonNull(player, t); } else { - player = Static.GetPlayer(args[0], t); // may throw CREPlayerOfflineException + player = Static.GetPlayer(args[0], t); } return CBoolean.get(player.isSleepingIgnored()); } From 67ae8d926205b1292cc22052b6e1eba0c27ab9e2 Mon Sep 17 00:00:00 2001 From: malonnnn Date: Fri, 25 Apr 2025 13:45:07 -0500 Subject: [PATCH 4/4] removed extraneous spaces --- .../core/functions/PlayerManagement.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java b/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java index 38db27ce0..9b90b3453 100644 --- a/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java +++ b/src/main/java/com/laytonsmith/core/functions/PlayerManagement.java @@ -7323,14 +7323,14 @@ public static class set_player_sleeping_ignored extends AbstractFunction { public Mixed exec(Target t, Environment env, Mixed... args) throws ConfigRuntimeException { final MCPlayer player; - final boolean value; + final boolean value; if(args.length == 1) { player = env.getEnv(CommandHelperEnvironment.class).GetPlayer(); Static.AssertPlayerNonNull(player, t); - value = ArgumentValidation.getBoolean(args[0], t); + value = ArgumentValidation.getBoolean(args[0], t); } else { player = Static.GetPlayer(args[0], t); - value = ArgumentValidation.getBoolean(args[1], t); + value = ArgumentValidation.getBoolean(args[1], t); } player.setSleepingIgnored(value); return CVoid.VOID; @@ -7349,11 +7349,11 @@ public Class[] thrown() { return false; } - @Override public Boolean runAsync() { + @Override public Boolean runAsync() { return false; } - @Override public MSVersion since() { + @Override public MSVersion since() { return MSVersion.V3_3_5; } @@ -7400,11 +7400,11 @@ public Class[] thrown() { return false; } - @Override public Boolean runAsync() { + @Override public Boolean runAsync() { return false; } - @Override public MSVersion since() { + @Override public MSVersion since() { return MSVersion.V3_3_5; }