From ece6867a18a941f237022dcf59f590175d5f9def Mon Sep 17 00:00:00 2001 From: T14D3 <73843330+T14D3@users.noreply.github.com> Date: Thu, 9 Jan 2025 09:36:03 +0100 Subject: [PATCH] Add FastAsyncWorldEdit support --- build.gradle | 3 + src/main/java/de/t14d3/zones/Zones.java | 6 ++ .../zones/integrations/FAWEIntegration.java | 61 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 src/main/java/de/t14d3/zones/integrations/FAWEIntegration.java diff --git a/build.gradle b/build.gradle index 6364101..6cfeb66 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,9 @@ dependencies { compileOnly 'io.papermc.paper:paper-api:1.21.1-R0.1-SNAPSHOT' compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.3.0' //paperweight.paperDevBundle("1.21.1-R0.1-SNAPSHOT") + implementation(platform("com.intellectualsites.bom:bom-newest:1.52")) + compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core") + compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") } def targetJavaVersion = 21 diff --git a/src/main/java/de/t14d3/zones/Zones.java b/src/main/java/de/t14d3/zones/Zones.java index 319a70d..6db7443 100644 --- a/src/main/java/de/t14d3/zones/Zones.java +++ b/src/main/java/de/t14d3/zones/Zones.java @@ -1,6 +1,8 @@ package de.t14d3.zones; +import com.fastasyncworldedit.core.util.WEManager; import com.sk89q.worldedit.WorldEdit; +import de.t14d3.zones.integrations.FAWEIntegration; import de.t14d3.zones.integrations.WorldEditSession; import de.t14d3.zones.listeners.CommandListener; import de.t14d3.zones.listeners.PlayerInteractListener; @@ -99,6 +101,10 @@ public void onEnable() { WorldEdit.getInstance().getEventBus().register(new WorldEditSession(this)); getLogger().info("WorldEdit Integration enabled."); } + if (getServer().getPluginManager().getPlugin("FastAsyncWorldEdit") != null) { + WEManager.weManager().addManager(new FAWEIntegration(this)); + getLogger().info("FAWE Integration enabled."); + } getLogger().info("Zones plugin has been enabled! Loaded " + regionManager.loadedRegions.size() + " regions."); } diff --git a/src/main/java/de/t14d3/zones/integrations/FAWEIntegration.java b/src/main/java/de/t14d3/zones/integrations/FAWEIntegration.java new file mode 100644 index 0000000..494ddf4 --- /dev/null +++ b/src/main/java/de/t14d3/zones/integrations/FAWEIntegration.java @@ -0,0 +1,61 @@ +package de.t14d3.zones.integrations; + +import com.fastasyncworldedit.bukkit.regions.BukkitMaskManager; +import com.fastasyncworldedit.core.regions.FaweMask; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.regions.CuboidRegion; +import de.t14d3.zones.Region; +import de.t14d3.zones.Zones; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.List; + +public class FAWEIntegration extends BukkitMaskManager { + + private final Zones plugin; + + public FAWEIntegration(final Zones plugin) { + super(plugin.getName()); + this.plugin = plugin; + } + + public boolean isAllowed(Player player, Region region, MaskType type) { + return region != null && + (region.isAdmin(player.getUniqueId()) || + type == MaskType.MEMBER && ( + plugin.getPermissionManager().hasPermission(player.getUniqueId(), "PLACE", "true", region) + || plugin.getPermissionManager().hasPermission(player.getUniqueId(), "BREAK", "true", region))); + } + + @Override + public FaweMask getMask(final com.sk89q.worldedit.entity.Player wePlayer, final MaskType type, boolean isWhitelist) { + final Player player = BukkitAdapter.adapt(wePlayer); + final Location location = player.getLocation(); + List regions = plugin.getRegionManager().getRegionsAt(location); + if (!regions.isEmpty()) { + boolean isAllowed = true; + for (Region region : regions) { + if (!isAllowed(player, region, type)) { + isAllowed = false; + break; + } + } + if (isAllowed) { + final Location pos1 = regions.get(0).getMin(); + final Location pos2 = regions.get(0).getMax(); + final Region region = regions.get(0); + return new FaweMask(new CuboidRegion(BukkitAdapter.asBlockVector(pos1), BukkitAdapter.asBlockVector(pos2))) { + @Override + public boolean isValid(com.sk89q.worldedit.entity.Player player, MaskType type) { + return isAllowed(BukkitAdapter.adapt(player), region, type); + } + }; + } + } + + + return null; + } + +}