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 6ab627aa0..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,6 +410,7 @@ system ${basedir}/lib/BigDoors.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..b71a4006b 100644 --- a/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java +++ b/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java @@ -124,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()); @@ -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..f4c3f7e76 --- /dev/null +++ b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/CoordinateOffsetBridge.java @@ -0,0 +1,12 @@ +package com.denizenscript.depenizen.bukkit.bridges; + +import com.denizenscript.depenizen.bukkit.Bridge; +import com.denizenscript.depenizen.bukkit.properties.coordinateoffset.CoordinateOffsetPlayerExtensions; + +public class CoordinateOffsetBridge extends Bridge { + + @Override + public void init() { + 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..0dd2dc3b6 --- /dev/null +++ b/src/main/java/com/denizenscript/depenizen/bukkit/properties/coordinateoffset/CoordinateOffsetPlayerExtensions.java @@ -0,0 +1,62 @@ +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 CoordinateOffset getApi() { + return CoordinateOffset.api(); + } + + public static OffsetPlayer getOffsetPlayer(PlayerTag player) { + return getApi().adaptPlayer(player.getPlayerEntity()); + } + + 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.registerOnlineOnlyTag(LocationTag.class, "coordinate_offset", (attribute, player) -> { + OffsetPlayer offsetPlayer = getOffsetPlayer(player); + FixedOffset offset = getApi().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 = getOffsetPlayer(player); + getApi().setOffset(offsetPlayer, Offset.scalable(alignedX, y, alignedZ)); + }); + } +} 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