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);