From fdacd2cb08618c64d8d7890a6b71bfd02da78d3d Mon Sep 17 00:00:00 2001 From: Rorkh <78957156+Rorkh@users.noreply.github.com> Date: Mon, 5 Jun 2023 21:52:19 +0300 Subject: [PATCH 1/2] Basic Geyser & Floodgate support --- Docs/BukkitPlugins.md | 2 + pom.xml | 14 ++ .../depenizen/bukkit/Depenizen.java | 2 + .../bukkit/bridges/FloodgateBridge.java | 18 +++ .../bukkit/bridges/GeyserBridge.java | 13 ++ .../floodgate/FloodgatePlayerProperties.java | 148 ++++++++++++++++++ .../geyser/GeyserPlayerProperties.java | 72 +++++++++ 7 files changed, 269 insertions(+) create mode 100644 src/main/java/com/denizenscript/depenizen/bukkit/bridges/FloodgateBridge.java create mode 100644 src/main/java/com/denizenscript/depenizen/bukkit/bridges/GeyserBridge.java create mode 100644 src/main/java/com/denizenscript/depenizen/bukkit/properties/floodgate/FloodgatePlayerProperties.java create mode 100644 src/main/java/com/denizenscript/depenizen/bukkit/properties/geyser/GeyserPlayerProperties.java diff --git a/Docs/BukkitPlugins.md b/Docs/BukkitPlugins.md index e659276ae..071cf1c7f 100644 --- a/Docs/BukkitPlugins.md +++ b/Docs/BukkitPlugins.md @@ -12,6 +12,8 @@ Supported Plugins: (And the sources we acquired Jar files from.) - EffectLib (https://dev.bukkit.org/projects/effectlib) - EssentialsX (https://www.spigotmc.org/resources/essentialsx.9089/) - Factions (https://www.spigotmc.org/resources/factions3-for-1-13.63602/) +- Floodgate (https://geysermc.org/download) +- Geyser (https://geysermc.org/download) - GriefPrevention (https://www.spigotmc.org/resources/griefprevention.1884/) - Jobs Reborn (https://www.spigotmc.org/resources/jobs-reborn.4216/) - Lib's Disguises (https://www.spigotmc.org/resources/libs-disguises.32453/) diff --git a/pom.xml b/pom.xml index 31a339397..60f3e1eed 100644 --- a/pom.xml +++ b/pom.xml @@ -156,6 +156,20 @@ system ${basedir}/lib/Factions.jar + + org.geysermc.floodgate + api + 2.2.0-SNAPSHOT + system + ${basedir}/lib/Floodgate.jar + + + org.geysermc.geyser + api + 2.1.0-SNAPSHOT + system + ${basedir}/lib/Geyser.jar + me.ryanhamshire GriefPrevention diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java b/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java index e7e9585d2..4b2448f0e 100644 --- a/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java +++ b/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java @@ -107,6 +107,8 @@ public void registerCoreBridges() { registerBridge("EffectLib", () -> new EffectLibBridge()); registerBridge("Essentials", () -> new EssentialsBridge()); registerBridge("Factions", () -> new FactionsBridge()); + registerBridge("floodgate", () -> new FloodgateBridge()); + registerBridge("Geyser-Spigot", () -> new GeyserBridge()); registerBridge("GriefPrevention", () -> new GriefPreventionBridge()); registerBridge("Jobs", () -> new JobsBridge()); registerBridge("LibsDisguises", () -> new LibsDisguisesBridge()); diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/FloodgateBridge.java b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/FloodgateBridge.java new file mode 100644 index 000000000..2a7061442 --- /dev/null +++ b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/FloodgateBridge.java @@ -0,0 +1,18 @@ +package com.denizenscript.depenizen.bukkit.bridges; + +import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizencore.objects.properties.PropertyParser; +import com.denizenscript.depenizen.bukkit.Bridge; +import com.denizenscript.depenizen.bukkit.containers.floodgate.FormContainer; +import com.denizenscript.depenizen.bukkit.properties.floodgate.FloodgatePlayerProperties; + +import java.util.HashMap; +import java.util.Map; + +public class FloodgateBridge extends Bridge { + public static final Map forms = new HashMap<>(); + @Override + public void init() { + PropertyParser.registerProperty(FloodgatePlayerProperties.class, PlayerTag.class); + } +} diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/GeyserBridge.java b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/GeyserBridge.java new file mode 100644 index 000000000..b61bc57c1 --- /dev/null +++ b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/GeyserBridge.java @@ -0,0 +1,13 @@ +package com.denizenscript.depenizen.bukkit.bridges; + +import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizencore.objects.properties.PropertyParser; +import com.denizenscript.depenizen.bukkit.Bridge; +import com.denizenscript.depenizen.bukkit.properties.geyser.GeyserPlayerProperties; + +public class GeyserBridge extends Bridge { + @Override + public void init() { + PropertyParser.registerProperty(GeyserPlayerProperties.class, PlayerTag.class); + } +} diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/floodgate/FloodgatePlayerProperties.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/floodgate/FloodgatePlayerProperties.java new file mode 100644 index 000000000..a5a638b61 --- /dev/null +++ b/src/main/java/com/denizenscript/depenizen/bukkit/properties/floodgate/FloodgatePlayerProperties.java @@ -0,0 +1,148 @@ +package com.denizenscript.depenizen.bukkit.properties.floodgate; + +import com.denizenscript.denizencore.objects.properties.Property; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.depenizen.bukkit.bridges.EssentialsBridge; +import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.tags.Attribute; +import org.geysermc.floodgate.api.FloodgateApi; +import org.geysermc.floodgate.api.player.FloodgatePlayer; + +public class FloodgatePlayerProperties implements Property { + + @Override + public String getPropertyString() { + return null; + } + + @Override + public String getPropertyId() { + return "FloodgatePlayer"; + } + + @Override + public void adjust(Mechanism mechanism) { + // None + } + + public static boolean describes(ObjectTag object) { + return object instanceof PlayerTag; + } + + public static FloodgatePlayerProperties getFrom(ObjectTag object) { + if (!describes(object)) { + return null; + } + else { + return new FloodgatePlayerProperties((PlayerTag) object); + } + } + + public static final String[] handledTags = new String[] { + "floodgate" + }; + + public static final String[] handledMechs = new String[] { + }; // None + + public FloodgatePlayerProperties(PlayerTag object) { this.player = object; } + + public FloodgatePlayer getFloodgatePlayer() { + return FloodgateApi.getInstance().getPlayer(player.getUUID()); + } + + PlayerTag player; + + @Override + public ObjectTag getObjectAttribute(Attribute attribute) { + + if (getFloodgatePlayer() == null) { + return null; + } + + if (attribute.startsWith("floodgate")) { + attribute = attribute.fulfill(1); + + // <--[tag] + // @attribute + // @returns ElementTag(String) + // @plugin Depenizen, Floodgate + // @description + // Returns the version of the Bedrock client. + // --> + if (attribute.startsWith("version")) { + return new ElementTag(getFloodgatePlayer().getVersion()).getObjectAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns ElementTag(String) + // @plugin Depenizen, Floodgate + // @description + // Returns the real username of the Bedrock client. + // --> + if (attribute.startsWith("username")) { + return new ElementTag(getFloodgatePlayer().getUsername()).getObjectAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns ElementTag(String) + // @plugin Depenizen, Floodgate + // @description + // Returns the Operating System of the Bedrock client. + // --> + if (attribute.startsWith("device")) { + return new ElementTag(getFloodgatePlayer().getDeviceOs()).getObjectAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns ElementTag(String) + // @plugin Depenizen, Floodgate + // @description + // Returns the language code of the Bedrock client. + // --> + if (attribute.startsWith("locale")) { + return new ElementTag(getFloodgatePlayer().getLanguageCode()).getObjectAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns ElementTag(String) + // @plugin Depenizen, Floodgate + // @description + // Returns the Xbox Unique Identifier of the Bedrock client. + // --> + if (attribute.startsWith("xuid")) { + return new ElementTag(getFloodgatePlayer().getXuid()).getObjectAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns ElementTag(Boolean) + // @plugin Depenizen, Floodgate + // @description + // Returns if the Floodgate player is connected through a proxy. + // --> + if (attribute.startsWith("is_from_proxy")) { + return new ElementTag(getFloodgatePlayer().isFromProxy()).getObjectAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns ElementTag(Boolean) + // @plugin Depenizen, Floodgate + // @description + // Returns if the player is linked to a Java account. + // --> + if (attribute.startsWith("is_linked")) { + return new ElementTag(getFloodgatePlayer().isLinked()).getObjectAttribute(attribute.fulfill(1)); + } + } + + return null; + } +} diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/geyser/GeyserPlayerProperties.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/geyser/GeyserPlayerProperties.java new file mode 100644 index 000000000..09ce15516 --- /dev/null +++ b/src/main/java/com/denizenscript/depenizen/bukkit/properties/geyser/GeyserPlayerProperties.java @@ -0,0 +1,72 @@ +package com.denizenscript.depenizen.bukkit.properties.geyser; + +import com.denizenscript.denizencore.objects.properties.Property; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizen.objects.PlayerTag; +import org.geysermc.geyser.api.GeyserApi; +import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.tags.Attribute; + +public class GeyserPlayerProperties implements Property { + + @Override + public String getPropertyString() { + return null; + } + + @Override + public String getPropertyId() { + return "GeyserPlayer"; + } + + @Override + public void adjust(Mechanism mechanism) { + // None + } + + public static boolean describes(ObjectTag object) { + return object instanceof PlayerTag; + } + + public static GeyserPlayerProperties getFrom(ObjectTag object) { + if (!describes(object)) { + return null; + } + else { + return new GeyserPlayerProperties((PlayerTag) object); + } + } + + public static final String[] handledTags = new String[] { + "geyser" + }; + + public static final String[] handledMechs = new String[] { + }; // None + + public GeyserPlayerProperties(PlayerTag object) { this.player = object; } + + PlayerTag player; + + @Override + public ObjectTag getObjectAttribute(Attribute attribute) { + + if (attribute.startsWith("geyser")) { + attribute = attribute.fulfill(1); + + // <--[tag] + // @attribute + // @returns ElementTag(Boolean) + // @plugin Depenizen, Geyser + // @description + // Returns is player plays from Minecraft Bedrock Edition. + // --> + if (attribute.startsWith("is_bedrock")) { + return new ElementTag(GeyserApi.api().connectionByUuid(player.getUUID()) != null).getObjectAttribute(attribute.fulfill(1)); + } + } + + return null; + } +} From f80ddfafc387f9d701c4075113062eac9064259a Mon Sep 17 00:00:00 2001 From: Rorkh <78957156+Rorkh@users.noreply.github.com> Date: Mon, 5 Jun 2023 21:55:31 +0300 Subject: [PATCH 2/2] Remove not included WIP stuff for PR --- .../denizenscript/depenizen/bukkit/bridges/FloodgateBridge.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/FloodgateBridge.java b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/FloodgateBridge.java index 2a7061442..f0f2cbf78 100644 --- a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/FloodgateBridge.java +++ b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/FloodgateBridge.java @@ -10,7 +10,6 @@ import java.util.Map; public class FloodgateBridge extends Bridge { - public static final Map forms = new HashMap<>(); @Override public void init() { PropertyParser.registerProperty(FloodgatePlayerProperties.class, PlayerTag.class);