From be6a4e79cc6b4c2230cf0a19ada789a9f7fcc594 Mon Sep 17 00:00:00 2001 From: david <89749147+davight@users.noreply.github.com> Date: Mon, 13 Jan 2025 17:05:13 +0100 Subject: [PATCH 1/3] add view_distance mech & tag --- .../properties/PaperPlayerExtensions.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java b/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java index be56152901..a3c09474c7 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java @@ -79,6 +79,19 @@ public static void register() { return map; }); + // <--[tag] + // @attribute + // @returns ElementTag(Number) + // @mechanism PlayerTag.view_distance + // @group paper + // @Plugin Paper + // @description + // Returns this player's view distance. + // --> + PlayerTag.registerOnlineOnlyTag(ElementTag.class, "view_distance", (attribute, object) -> { + return new ElementTag(object.getPlayerEntity().getViewDistance()); + }); + // <--[mechanism] // @object PlayerTag // @name affects_monster_spawning @@ -136,6 +149,29 @@ public static void register() { } }); + // <--[mechanism] + // @object PlayerTag + // @name view_distance + // @input ElementTag(Number) + // @Plugin Paper + // @group paper + // @description + // Sets this player's view distance. Input must be a number between 2 and 32. + // This will be reset when a player rejoins. + // @tags + // + // --> + PlayerTag.registerOnlineOnlyMechanism("view_distance", ElementTag.class, (object, mechanism, input) -> { + if (mechanism.requireInteger()) { + int distance = input.asInt(); + if (distance < 2 || distance > 32) { + mechanism.echoError("Invalid view distance '" + input + "': must be between 2 and 32."); + return; + } + object.getPlayerEntity().setViewDistance(distance); + } + }); + if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19)) { // <--[tag] From f97373c967d11fe6d76d852810eef475395455db Mon Sep 17 00:00:00 2001 From: david <89749147+davight@users.noreply.github.com> Date: Mon, 13 Jan 2025 20:49:05 +0100 Subject: [PATCH 2/3] add reset option --- .../denizen/paper/properties/PaperPlayerExtensions.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java b/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java index a3c09474c7..65b740b6dc 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java @@ -86,7 +86,7 @@ public static void register() { // @group paper // @Plugin Paper // @description - // Returns this player's view distance. + // Returns this player's view distance, or the view distance of the world they're in if unset. // --> PlayerTag.registerOnlineOnlyTag(ElementTag.class, "view_distance", (attribute, object) -> { return new ElementTag(object.getPlayerEntity().getViewDistance()); @@ -157,12 +157,15 @@ public static void register() { // @group paper // @description // Sets this player's view distance. Input must be a number between 2 and 32. - // This will be reset when a player rejoins. + // This will be reset when a player rejoins. Provide empty input to unset. // @tags // // --> PlayerTag.registerOnlineOnlyMechanism("view_distance", ElementTag.class, (object, mechanism, input) -> { - if (mechanism.requireInteger()) { + if (!mechanism.hasValue()) { + object.getPlayerEntity().setViewDistance(-1); + } + else if (mechanism.requireInteger()) { int distance = input.asInt(); if (distance < 2 || distance > 32) { mechanism.echoError("Invalid view distance '" + input + "': must be between 2 and 32."); From 39628cffc0db5f7b95b4826e9091c18f8a8bea80 Mon Sep 17 00:00:00 2001 From: david <89749147+davight@users.noreply.github.com> Date: Fri, 17 Jan 2025 12:15:44 +0100 Subject: [PATCH 3/3] remove required param --- .../denizen/paper/properties/PaperPlayerExtensions.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java b/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java index 65b740b6dc..d0d3806724 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperPlayerExtensions.java @@ -157,18 +157,18 @@ public static void register() { // @group paper // @description // Sets this player's view distance. Input must be a number between 2 and 32. - // This will be reset when a player rejoins. Provide empty input to unset. + // This will be reset when a player rejoins. Provide no input to unset. // @tags // // --> - PlayerTag.registerOnlineOnlyMechanism("view_distance", ElementTag.class, (object, mechanism, input) -> { + PlayerTag.registerOnlineOnlyMechanism("view_distance", (object, mechanism) -> { if (!mechanism.hasValue()) { object.getPlayerEntity().setViewDistance(-1); } else if (mechanism.requireInteger()) { - int distance = input.asInt(); + int distance = mechanism.getValue().asInt(); if (distance < 2 || distance > 32) { - mechanism.echoError("Invalid view distance '" + input + "': must be between 2 and 32."); + mechanism.echoError("Invalid view distance '" + distance + "': must be between 2 and 32."); return; } object.getPlayerEntity().setViewDistance(distance);