diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 98212ae..50bed57 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,6 +9,7 @@ body: label: "Plugin name" multiple: false options: + - "FactionsUUID" - "GriefPrevention" - "WorldGuard" - "LWCX" diff --git a/pom.xml b/pom.xml index fe8e781..451102d 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,10 @@ codemc-repo https://repo.codemc.io/repository/maven-public/ + + ender-zone + https://ci.ender.zone/plugin/repository/everything/ + @@ -111,5 +115,11 @@ 2.2.9-dev provided + + com.massivecraft + Factions + 1.6.9.5-U0.6.33 + provided + diff --git a/readme.md b/readme.md index cb46d4b..6bcae85 100644 --- a/readme.md +++ b/readme.md @@ -15,6 +15,7 @@ If you're a developer looking for information how to implement YardWatchAPI in y - GriefPrevention (v16+) - WorldGuard (7.0.0+) - LWCX +- FactionsUUID ## Plugin you're using is not implementing YardWatchAPI? Contact the plugin developer and send them [here](https://github.com/YouHaveTrouble/YardWatchAPI/blob/master/readme.md)! diff --git a/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java b/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java index 16cb89e..c76b258 100644 --- a/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java +++ b/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java @@ -1,5 +1,6 @@ package me.youhavetrouble.yardwatch; +import me.youhavetrouble.yardwatch.hooks.FactionsUUIDProtection; import me.youhavetrouble.yardwatch.hooks.GriefPreventionProtection; import me.youhavetrouble.yardwatch.hooks.LWCXProtection; import me.youhavetrouble.yardwatch.hooks.WorldGuardProtection; @@ -33,6 +34,12 @@ public final class YardWatch extends JavaPlugin { ); } + if (shouldRegisterService("Factions")) { + getServer().getServicesManager().register( + Protection.class, new FactionsUUIDProtection(this), this, ServicePriority.Normal + ); + } + } /** diff --git a/src/main/java/me/youhavetrouble/yardwatch/hooks/FactionsUUIDProtection.java b/src/main/java/me/youhavetrouble/yardwatch/hooks/FactionsUUIDProtection.java new file mode 100644 index 0000000..31e84a6 --- /dev/null +++ b/src/main/java/me/youhavetrouble/yardwatch/hooks/FactionsUUIDProtection.java @@ -0,0 +1,80 @@ +package me.youhavetrouble.yardwatch.hooks; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.FactionsPlugin; + +import com.massivecraft.factions.listeners.FactionsBlockListener; +import com.massivecraft.factions.listeners.FactionsEntityListener; +import com.massivecraft.factions.listeners.FactionsPlayerListener; +import com.massivecraft.factions.perms.PermissibleActions; +import me.youhavetrouble.yardwatch.Protection; +import me.youhavetrouble.yardwatch.YardWatch; +import org.bukkit.Location; +import org.bukkit.block.BlockState; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +public class FactionsUUIDProtection implements Protection { + + private final YardWatch plugin; + + public FactionsUUIDProtection(YardWatch plugin) { + this.plugin = plugin; + } + + @Override + public boolean isEnabled() { + return plugin.getServer().getPluginManager().isPluginEnabled("Factions"); + } + + @Override + public boolean isProtected(Location location) { + if (!isEnabled()) return false; + if (!FactionsPlugin.getInstance().worldUtil().isEnabled(location.getWorld())) return false; + FLocation fLocation = new FLocation(location); + Faction faction = Board.getInstance().getFactionAt(fLocation); + return faction != null; + } + + @Override + public boolean canBreakBlock(Player player, BlockState blockState) { + if (!isEnabled()) return true; + return FactionsBlockListener.playerCanBuildDestroyBlock( + player, + blockState.getLocation(), + PermissibleActions.DESTROY, + true + ); + } + + @Override + public boolean canPlaceBlock(Player player, Location location) { + if (!isEnabled()) return true; + return FactionsBlockListener.playerCanBuildDestroyBlock( + player, + location, + PermissibleActions.BUILD, + true + ); + } + + @Override + public boolean canInteract(Player player, BlockState blockState) { + if (!isEnabled()) return true; + return FactionsPlayerListener.canInteractHere(player, blockState.getLocation()); + } + + @Override + public boolean canInteract(Player player, Entity target) { + if (!isEnabled()) return true; + return FactionsEntityListener.canInteractHere(player, target.getLocation()); + } + + @Override + public boolean canDamage(Entity damager, Entity target) { + if (!isEnabled()) return true; + return FactionsEntityListener.canDamage(damager, target, false); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 801d50c..cff1352 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,11 +3,12 @@ version: '${project.version}' main: me.youhavetrouble.yardwatch.YardWatch api-version: '1.16' folia-supported: true -softdepend: - - "WorldGuard" - - "GriefPrevention" - - "Towny" authors: - "YouHaveTrouble" description: '${project.description}' website: '${project.url}' +softdepend: + - "WorldGuard" + - "GriefPrevention" + - "Towny" + - "Factions"