From c023726b4b34eec515773886673a61e23d4aaa9a Mon Sep 17 00:00:00 2001 From: Ayham Al Ali <20037329+AyhamAl-Ali@users.noreply.github.com> Date: Mon, 21 Aug 2023 10:31:54 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Add=20`player(nameOrUUID:=20stri?= =?UTF-8?q?ng,=20getExactPlayer:=20boolean)`=20function=20(#5845)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skript/classes/data/DefaultFunctions.java | 41 +++++++++++++++++++ .../skript/registrations/DefaultClasses.java | 6 ++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java b/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java index eee9206b0a0..ed95a1a4bc5 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java @@ -34,13 +34,16 @@ import ch.njol.util.coll.CollectionUtils; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.OfflinePlayer; import org.bukkit.World; +import org.bukkit.entity.Player; import org.bukkit.util.Vector; import org.eclipse.jdt.annotation.Nullable; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Calendar; +import java.util.UUID; public class DefaultFunctions { @@ -500,6 +503,44 @@ public ColorRGB[] executeSimple(Object[][] params) { }).description("Returns a RGB color from the given red, green and blue parameters.") .examples("dye player's leggings rgb(120, 30, 45)") .since("2.5"); + + Functions.registerFunction(new SimpleJavaFunction("player", new Parameter[] { + new Parameter<>("nameOrUUID", DefaultClasses.STRING, true, null), + new Parameter<>("getExactPlayer", DefaultClasses.BOOLEAN, true, new SimpleLiteral(false, true)) // getExactPlayer -- grammar ¯\_ (ツ)_/¯ + }, DefaultClasses.PLAYER, true) { + @Override + public Player[] executeSimple(Object[][] params) { + String name = (String) params[0][0]; + boolean isExact = (boolean) params[1][0]; + UUID uuid = null; + if (name.length() > 16 || name.contains("-")) { // shortcut + try { + uuid = UUID.fromString(name); + } catch (IllegalArgumentException ignored) {} + } + return CollectionUtils.array(uuid != null ? Bukkit.getPlayer(uuid) : (isExact ? Bukkit.getPlayerExact(name) : Bukkit.getPlayer(name))); + } + }).description("Returns an online player from their name or UUID, if player is offline function will return nothing.", "Setting 'getExactPlayer' parameter to true will return the player whose name is exactly equal to the provided name instead of returning a player that their name starts with the provided name.") + .examples("set {_p} to player(\"Notch\") # will return an online player whose name is or starts with 'Notch'", "set {_p} to player(\"Notch\", true) # will return the only online player whose name is 'Notch'", "set {_p} to player(\"069a79f4-44e9-4726-a5be-fca90e38aaf5\") # if player is offline") + .since("INSERT VERSION"); + + Functions.registerFunction(new SimpleJavaFunction("offlineplayer", new Parameter[] { + new Parameter<>("nameOrUUID", DefaultClasses.STRING, true, null) + }, DefaultClasses.OFFLINE_PLAYER, true) { + @Override + public OfflinePlayer[] executeSimple(Object[][] params) { + String name = (String) params[0][0]; + UUID uuid = null; + if (name.length() > 16 || name.contains("-")) { // shortcut + try { + uuid = UUID.fromString(name); + } catch (IllegalArgumentException ignored) {} + } + return CollectionUtils.array(uuid != null ? Bukkit.getOfflinePlayer(uuid) : Bukkit.getOfflinePlayer(name)); + } + }).description("Returns a offline player from their name or UUID. This function will still return the player if they're online.") + .examples("set {_p} to offlineplayer(\"Notch\")", "set {_p} to offlineplayer(\"069a79f4-44e9-4726-a5be-fca90e38aaf5\")") + .since("INSERT VERSION"); } } diff --git a/src/main/java/ch/njol/skript/registrations/DefaultClasses.java b/src/main/java/ch/njol/skript/registrations/DefaultClasses.java index 1d0f10448af..737089d7b19 100644 --- a/src/main/java/ch/njol/skript/registrations/DefaultClasses.java +++ b/src/main/java/ch/njol/skript/registrations/DefaultClasses.java @@ -19,7 +19,9 @@ package ch.njol.skript.registrations; import org.bukkit.Location; +import org.bukkit.OfflinePlayer; import org.bukkit.World; +import org.bukkit.entity.Player; import org.bukkit.util.Vector; import org.eclipse.jdt.annotation.NonNull; @@ -45,7 +47,9 @@ public class DefaultClasses { public static ClassInfo COLOR = getClassInfo(Color.class); public static ClassInfo DATE = getClassInfo(Date.class); public static ClassInfo TIMESPAN = getClassInfo(Timespan.class); - + public static ClassInfo OFFLINE_PLAYER = getClassInfo(OfflinePlayer.class); + public static ClassInfo PLAYER = getClassInfo(Player.class); + @NonNull private static ClassInfo getClassInfo(Class tClass) { //noinspection ConstantConditions