From 0ae415066cffbd6f52744a93ba3ada76e7a3a51d Mon Sep 17 00:00:00 2001 From: BehrRiley Date: Sat, 18 Jul 2026 18:37:14 -0400 Subject: [PATCH 1/4] feat(bridge): add CoordinateOffset integration --- pom.xml | 7 ++ .../depenizen/bukkit/Depenizen.java | 2 + .../bridges/CoordinateOffsetBridge.java | 14 +++ .../CoordinateOffsetPlayerProperties.java | 108 ++++++++++++++++++ 4 files changed, 131 insertions(+) create mode 100644 src/main/java/com/denizenscript/depenizen/bukkit/bridges/CoordinateOffsetBridge.java create mode 100644 src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerProperties.java diff --git a/pom.xml b/pom.xml index 6ab627aa0..89b00fb57 100644 --- a/pom.xml +++ b/pom.xml @@ -403,6 +403,13 @@ system ${basedir}/lib/BigDoors.jar + + com.jtprince + CoordinateOffset + 6.1.8-SNAPSHOT + system + ${project.basedir}/lib/CoordinateOffset.jar + diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java b/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java index 5fe5e8906..3bcfcb0a8 100644 --- a/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java +++ b/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java @@ -116,6 +116,7 @@ public void loadBridge(String name, BridgeData bridgeData) { public void registerCoreBridges() { // Yes it needs to be `new MyBridge()` not `MyBridge::new` - this is due to an error in the Java runtime. + registerBridge("CoordinateOffset", () -> new CoordinateOffsetBridge()); registerBridge("AreaShop", () -> new AreaShopBridge()); registerBridge("AriKeys", () -> new AriKeysBridge()); registerBridge("ASkyBlock", () -> new ASkyBlockBridge()); @@ -170,3 +171,4 @@ public void registerBridge(String name, String classCheck, Supplier brid allBridges.put(name, new BridgeData(classCheck, bridgeSupplier)); } } + diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/CoordinateOffsetBridge.java b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/CoordinateOffsetBridge.java new file mode 100644 index 000000000..1b5eb4a95 --- /dev/null +++ b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/CoordinateOffsetBridge.java @@ -0,0 +1,14 @@ +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.coordinateoffset.CoordinateOffsetPlayerProperties; + +public class CoordinateOffsetBridge extends Bridge { + + @Override + public void init() { + PropertyParser.registerProperty(CoordinateOffsetPlayerProperties.class, PlayerTag.class); + } +} diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerProperties.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerProperties.java new file mode 100644 index 000000000..478f220fd --- /dev/null +++ b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerProperties.java @@ -0,0 +1,108 @@ +package com.denizenscript.depenizen.bukkit.properties.coordinateoffset; + +import com.denizenscript.denizen.objects.LocationTag; +import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.properties.Property; +import com.denizenscript.denizencore.tags.Attribute; +import com.jtprince.coordinateoffset.FixedOffset; +import com.jtprince.coordinateoffset.Offset; +import com.jtprince.coordinateoffset.api.CoordinateOffset; +import com.jtprince.coordinateoffset.adapter.OffsetPlayer; + +public class CoordinateOffsetPlayerProperties implements Property { + + @Override + public String getPropertyString() { + return null; + } + + @Override + public String getPropertyId() { + return "CoordinateOffsetPlayer"; + } + + public static boolean describes(ObjectTag object) { + return object instanceof PlayerTag; + } + + public static CoordinateOffsetPlayerProperties getFrom(ObjectTag object) { + if (!describes(object)) { + return null; + } + else { + return new CoordinateOffsetPlayerProperties((PlayerTag) object); + } + } + + public static final String[] handledTags = new String[] { + "coordinate_offset" + }; + + public static final String[] handledMechs = new String[] { + "coordinate_offset" + }; + + public CoordinateOffsetPlayerProperties(PlayerTag player) { + this.player = player; + } + + PlayerTag player; + + @Override + public ObjectTag getObjectAttribute(Attribute attribute) { + if (attribute == null) { + return null; + } + + // <--[tag] + // @attribute + // @returns LocationTag + // @mechanism PlayerTag.coordinate_offset + // @plugin Depenizen, CoordinateOffset + // @description + // Returns the player's current coordinate offset as a LocationTag (x, y, z). + // --> + if (attribute.startsWith("coordinate_offset") && player.isOnline()) { + attribute = attribute.fulfill(1); + OffsetPlayer offsetPlayer = CoordinateOffset.api().adaptPlayer(player.getPlayerEntity()); + FixedOffset offset = CoordinateOffset.api().getOffset(offsetPlayer); + if (offset.isZero()) { + return null; + } + return new LocationTag(null, offset.x(), offset.y(), offset.z()).getObjectAttribute(attribute); + } + + return null; + } + + @Override + public void adjust(Mechanism mechanism) { + // <--[mechanism] + // @object PlayerTag + // @name coordinate_offset + // @input LocationTag + // @plugin Depenizen, CoordinateOffset + // @description + // Sets the player's coordinate offset. + // @tags + // + // --> + if (mechanism.matches("coordinate_offset") && mechanism.hasValue() && player.isOnline()) { + LocationTag loc = mechanism.valueAsType(LocationTag.class); + if (loc != null) { + int x = (int) Math.round(loc.getX()); + int y = (int) Math.round(loc.getY()); + int z = (int) Math.round(loc.getZ()); + + // Align using ConstantOffsetProvider logic (multiples of configured blocks) + int alignedX = Offset.alignComponentToConfiguredMultiple(x); + int alignedZ = Offset.alignComponentToConfiguredMultiple(z); + + OffsetPlayer offsetPlayer = CoordinateOffset.api().adaptPlayer(player.getPlayerEntity()); + CoordinateOffset.api().setOffset(offsetPlayer, Offset.scalable(alignedX, y, alignedZ)); + } + } + } +} From f9e7d0000e86841538b4f99fec023e84d5fe2b2b Mon Sep 17 00:00:00 2001 From: BehrRiley Date: Sat, 18 Jul 2026 19:04:40 -0400 Subject: [PATCH 2/4] consistency updates - refactor `CoordinateOffset` to use `PropertyExtension` and match the consistent new style --- .../bridges/CoordinateOffsetBridge.java | 6 +- .../CoordinateOffsetPlayerExtensions.java | 57 +++++++++ .../CoordinateOffsetPlayerProperties.java | 108 ------------------ 3 files changed, 59 insertions(+), 112 deletions(-) create mode 100644 src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java delete mode 100644 src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerProperties.java diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/CoordinateOffsetBridge.java b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/CoordinateOffsetBridge.java index 1b5eb4a95..f4c3f7e76 100644 --- a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/CoordinateOffsetBridge.java +++ b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/CoordinateOffsetBridge.java @@ -1,14 +1,12 @@ 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.coordinateoffset.CoordinateOffsetPlayerProperties; +import com.denizenscript.depenizen.bukkit.properties.coordinateoffset.CoordinateOffsetPlayerExtensions; public class CoordinateOffsetBridge extends Bridge { @Override public void init() { - PropertyParser.registerProperty(CoordinateOffsetPlayerProperties.class, PlayerTag.class); + CoordinateOffsetPlayerExtensions.register(); } } diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java new file mode 100644 index 000000000..c53ccbd76 --- /dev/null +++ b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java @@ -0,0 +1,57 @@ +package com.denizenscript.depenizen.bukkit.properties.coordinateoffset; + +import com.denizenscript.denizen.objects.LocationTag; +import com.denizenscript.denizen.objects.PlayerTag; +import com.jtprince.coordinateoffset.FixedOffset; +import com.jtprince.coordinateoffset.Offset; +import com.jtprince.coordinateoffset.api.CoordinateOffset; +import com.jtprince.coordinateoffset.adapter.OffsetPlayer; + +public class CoordinateOffsetPlayerExtensions { + + public static void register() { + + // <--[tag] + // @attribute + // @returns LocationTag + // @mechanism PlayerTag.coordinate_offset + // @plugin Depenizen, CoordinateOffset + // @description + // Returns the player's current coordinate offset as a LocationTag (x, y, z). + // --> + PlayerTag.tagProcessor.registerTag(LocationTag.class, "coordinate_offset", (attribute, player) -> { + if (!player.isOnline()) { + return null; + } + OffsetPlayer offsetPlayer = CoordinateOffset.api().adaptPlayer(player.getPlayerEntity()); + FixedOffset offset = CoordinateOffset.api().getOffset(offsetPlayer); + if (offset.isZero()) { + return null; + } + return new LocationTag(null, offset.x(), offset.y(), offset.z()); + }); + + // <--[mechanism] + // @object PlayerTag + // @name coordinate_offset + // @input LocationTag + // @plugin Depenizen, CoordinateOffset + // @description + // Sets the player's coordinate offset. + // @tags + // + // --> + PlayerTag.registerOnlineOnlyMechanism("coordinate_offset", LocationTag.class, (player, mechanism, loc) -> { + int x = (int) Math.round(loc.getX()); + int y = (int) Math.round(loc.getY()); + int z = (int) Math.round(loc.getZ()); + + // Align using ConstantOffsetProvider logic (multiples of configured blocks) + int alignedX = Offset.alignComponentToConfiguredMultiple(x); + int alignedZ = Offset.alignComponentToConfiguredMultiple(z); + + OffsetPlayer offsetPlayer = CoordinateOffset.api().adaptPlayer(player.getPlayerEntity()); + CoordinateOffset.api().setOffset(offsetPlayer, Offset.scalable(alignedX, y, alignedZ)); + }); + } +} diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerProperties.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerProperties.java deleted file mode 100644 index 478f220fd..000000000 --- a/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerProperties.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.denizenscript.depenizen.bukkit.properties.coordinateoffset; - -import com.denizenscript.denizen.objects.LocationTag; -import com.denizenscript.denizen.objects.PlayerTag; -import com.denizenscript.denizencore.objects.Mechanism; -import com.denizenscript.denizencore.objects.ObjectTag; -import com.denizenscript.denizencore.objects.properties.Property; -import com.denizenscript.denizencore.tags.Attribute; -import com.jtprince.coordinateoffset.FixedOffset; -import com.jtprince.coordinateoffset.Offset; -import com.jtprince.coordinateoffset.api.CoordinateOffset; -import com.jtprince.coordinateoffset.adapter.OffsetPlayer; - -public class CoordinateOffsetPlayerProperties implements Property { - - @Override - public String getPropertyString() { - return null; - } - - @Override - public String getPropertyId() { - return "CoordinateOffsetPlayer"; - } - - public static boolean describes(ObjectTag object) { - return object instanceof PlayerTag; - } - - public static CoordinateOffsetPlayerProperties getFrom(ObjectTag object) { - if (!describes(object)) { - return null; - } - else { - return new CoordinateOffsetPlayerProperties((PlayerTag) object); - } - } - - public static final String[] handledTags = new String[] { - "coordinate_offset" - }; - - public static final String[] handledMechs = new String[] { - "coordinate_offset" - }; - - public CoordinateOffsetPlayerProperties(PlayerTag player) { - this.player = player; - } - - PlayerTag player; - - @Override - public ObjectTag getObjectAttribute(Attribute attribute) { - if (attribute == null) { - return null; - } - - // <--[tag] - // @attribute - // @returns LocationTag - // @mechanism PlayerTag.coordinate_offset - // @plugin Depenizen, CoordinateOffset - // @description - // Returns the player's current coordinate offset as a LocationTag (x, y, z). - // --> - if (attribute.startsWith("coordinate_offset") && player.isOnline()) { - attribute = attribute.fulfill(1); - OffsetPlayer offsetPlayer = CoordinateOffset.api().adaptPlayer(player.getPlayerEntity()); - FixedOffset offset = CoordinateOffset.api().getOffset(offsetPlayer); - if (offset.isZero()) { - return null; - } - return new LocationTag(null, offset.x(), offset.y(), offset.z()).getObjectAttribute(attribute); - } - - return null; - } - - @Override - public void adjust(Mechanism mechanism) { - // <--[mechanism] - // @object PlayerTag - // @name coordinate_offset - // @input LocationTag - // @plugin Depenizen, CoordinateOffset - // @description - // Sets the player's coordinate offset. - // @tags - // - // --> - if (mechanism.matches("coordinate_offset") && mechanism.hasValue() && player.isOnline()) { - LocationTag loc = mechanism.valueAsType(LocationTag.class); - if (loc != null) { - int x = (int) Math.round(loc.getX()); - int y = (int) Math.round(loc.getY()); - int z = (int) Math.round(loc.getZ()); - - // Align using ConstantOffsetProvider logic (multiples of configured blocks) - int alignedX = Offset.alignComponentToConfiguredMultiple(x); - int alignedZ = Offset.alignComponentToConfiguredMultiple(z); - - OffsetPlayer offsetPlayer = CoordinateOffset.api().adaptPlayer(player.getPlayerEntity()); - CoordinateOffset.api().setOffset(offsetPlayer, Offset.scalable(alignedX, y, alignedZ)); - } - } - } -} From 3688784dddc7060b3982cd09ab41fec178a1a17a Mon Sep 17 00:00:00 2001 From: BehrRiley Date: Sat, 18 Jul 2026 19:19:17 -0400 Subject: [PATCH 3/4] updates and revisions - remove manual `!player.isOnline()` check - resort code - add `CoordinateOffset` to `softdepend` list in `plugin.yml` and `Docs/BukkitPlugins.md` alphabetrically --- Docs/BukkitPlugins.md | 1 + pom.xml | 15 ++++++++------- .../denizenscript/depenizen/bukkit/Depenizen.java | 2 +- .../CoordinateOffsetPlayerExtensions.java | 5 +---- src/main/resources/plugin.yml | 1 + 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Docs/BukkitPlugins.md b/Docs/BukkitPlugins.md index 66186808a..f2971c8de 100644 --- a/Docs/BukkitPlugins.md +++ b/Docs/BukkitPlugins.md @@ -10,6 +10,7 @@ Supported Plugins: (And the sources we acquired Jar files from.) - BossShopPro (https://www.spigotmc.org/resources/bossshop.222/) - ChestShop (https://www.spigotmc.org/resources/chestshop.51856/) - CoreProtect (https://www.spigotmc.org/resources/coreprotect.8631/) +- CoordinateOffset (https://github.com/joshuaprince/CoordinateOffset) - CrackShot (https://www.spigotmc.org/resources/crackshot-guns.48301/) - EffectLib (https://dev.bukkit.org/projects/effectlib) - EssentialsX (https://www.spigotmc.org/resources/essentialsx.9089/) diff --git a/pom.xml b/pom.xml index 89b00fb57..557b67632 100644 --- a/pom.xml +++ b/pom.xml @@ -142,6 +142,13 @@ system ${project.basedir}/lib/CoreProtect.jar + + com.jtprince + CoordinateOffset + 6.1.8-SNAPSHOT + system + ${project.basedir}/lib/CoordinateOffset.jar + de.slikey EffectLib @@ -403,13 +410,7 @@ system ${basedir}/lib/BigDoors.jar - - com.jtprince - CoordinateOffset - 6.1.8-SNAPSHOT - system - ${project.basedir}/lib/CoordinateOffset.jar - + diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java b/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java index 3bcfcb0a8..b71a4006b 100644 --- a/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java +++ b/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java @@ -116,7 +116,6 @@ public void loadBridge(String name, BridgeData bridgeData) { public void registerCoreBridges() { // Yes it needs to be `new MyBridge()` not `MyBridge::new` - this is due to an error in the Java runtime. - registerBridge("CoordinateOffset", () -> new CoordinateOffsetBridge()); registerBridge("AreaShop", () -> new AreaShopBridge()); registerBridge("AriKeys", () -> new AriKeysBridge()); registerBridge("ASkyBlock", () -> new ASkyBlockBridge()); @@ -125,6 +124,7 @@ public void registerCoreBridges() { registerBridge("BigDoors", () -> new BigDoorsBridge()); registerBridge("BossShopPro", () -> new BossShopBridge()); registerBridge("ChestShop", () -> new ChestShopBridge()); + registerBridge("CoordinateOffset", () -> new CoordinateOffsetBridge()); registerBridge("CoreProtect", () -> new CoreProtectBridge()); registerBridge("CrackShot", () -> new CrackShotBridge()); registerBridge("EffectLib", () -> new EffectLibBridge()); diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java index c53ccbd76..82922d43a 100644 --- a/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java +++ b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java @@ -19,10 +19,7 @@ public static void register() { // @description // Returns the player's current coordinate offset as a LocationTag (x, y, z). // --> - PlayerTag.tagProcessor.registerTag(LocationTag.class, "coordinate_offset", (attribute, player) -> { - if (!player.isOnline()) { - return null; - } + PlayerTag.registerOnlineOnlyTag(LocationTag.class, "coordinate_offset", (attribute, player) -> { OffsetPlayer offsetPlayer = CoordinateOffset.api().adaptPlayer(player.getPlayerEntity()); FixedOffset offset = CoordinateOffset.api().getOffset(offsetPlayer); if (offset.isZero()) { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1d729e375..b1cd6755c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -16,6 +16,7 @@ softdepend: - BossShopPro - ChestShop - CoreProtect + - CoordinateOffset - CrackShot - EffectLib - Essentials From 6b91590b3b9a9e2318bc52be314033e2bc996b15 Mon Sep 17 00:00:00 2001 From: BehrRiley Date: Sat, 18 Jul 2026 20:25:01 -0400 Subject: [PATCH 4/4] create separate method --- .../CoordinateOffsetPlayerExtensions.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java index 82922d43a..0dd2dc3b6 100644 --- a/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java +++ b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java @@ -9,6 +9,14 @@ public class CoordinateOffsetPlayerExtensions { + public static CoordinateOffset getApi() { + return CoordinateOffset.api(); + } + + public static OffsetPlayer getOffsetPlayer(PlayerTag player) { + return getApi().adaptPlayer(player.getPlayerEntity()); + } + public static void register() { // <--[tag] @@ -20,8 +28,8 @@ public static void register() { // Returns the player's current coordinate offset as a LocationTag (x, y, z). // --> PlayerTag.registerOnlineOnlyTag(LocationTag.class, "coordinate_offset", (attribute, player) -> { - OffsetPlayer offsetPlayer = CoordinateOffset.api().adaptPlayer(player.getPlayerEntity()); - FixedOffset offset = CoordinateOffset.api().getOffset(offsetPlayer); + OffsetPlayer offsetPlayer = getOffsetPlayer(player); + FixedOffset offset = getApi().getOffset(offsetPlayer); if (offset.isZero()) { return null; } @@ -47,8 +55,8 @@ public static void register() { int alignedX = Offset.alignComponentToConfiguredMultiple(x); int alignedZ = Offset.alignComponentToConfiguredMultiple(z); - OffsetPlayer offsetPlayer = CoordinateOffset.api().adaptPlayer(player.getPlayerEntity()); - CoordinateOffset.api().setOffset(offsetPlayer, Offset.scalable(alignedX, y, alignedZ)); + OffsetPlayer offsetPlayer = getOffsetPlayer(player); + getApi().setOffset(offsetPlayer, Offset.scalable(alignedX, y, alignedZ)); }); } }