mirror of
https://github.com/YouHaveTrouble/YardWatch.git
synced 2026-05-11 22:16:58 +00:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| acaf8ac233 | |||
| c30c3ee7c9 | |||
| a2d676044c | |||
| 813702596a | |||
| 6ba3acf5f6 | |||
| d9ea1265bf | |||
| 5c942e72c3 | |||
| 27bb0e49e7 | |||
| 8aba8ea79d | |||
| afdb3a0e3e | |||
| 3833c5ce43 | |||
| fec112511c | |||
| c65e68dcfc | |||
| b7587970c0 | |||
| 48f5c337d7 | |||
| 6017feccec | |||
| 31fa7b02b9 | |||
| eb9ebb1fb3 | |||
| bea339f701 | |||
| 34964d30cd |
@@ -5,6 +5,8 @@
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
server
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>me.youhavetrouble</groupId>
|
||||
<artifactId>YardWatch</artifactId>
|
||||
<version>1.0</version>
|
||||
<version>1.4.1</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>YardWatch</name>
|
||||
@@ -15,6 +15,7 @@
|
||||
<properties>
|
||||
<java.version>17</java.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<yardwatch.api.version>2.0.0</yardwatch.api.version>
|
||||
</properties>
|
||||
<url>https://youhavetrouble.me</url>
|
||||
|
||||
@@ -39,6 +40,15 @@
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<transformers>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
||||
<manifestEntries>
|
||||
<paperweight-mappings-namespace>mojang</paperweight-mappings-namespace>
|
||||
</manifestEntries>
|
||||
</transformer>
|
||||
</transformers>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
@@ -52,6 +62,10 @@
|
||||
</build>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>bg-software</id>
|
||||
<url>https://repo.bg-software.com/repository/api/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>papermc-repo</id>
|
||||
<url>https://repo.papermc.io/repository/maven-public/</url>
|
||||
@@ -76,8 +90,24 @@
|
||||
<id>ender-zone</id>
|
||||
<url>https://ci.ender.zone/plugin/repository/everything/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>glaremasters repo</id>
|
||||
<url>https://repo.glaremasters.me/repository/towny/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.intellectualsites.bom</groupId>
|
||||
<artifactId>bom-newest</artifactId>
|
||||
<version>1.48</version>
|
||||
<scope>import</scope>
|
||||
<type>pom</type>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.destroystokyo.paper</groupId>
|
||||
@@ -88,7 +118,7 @@
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
<artifactId>worldguard-bukkit</artifactId>
|
||||
<version>7.0.4-SNAPSHOT</version>
|
||||
<version>7.0.9-SNAPSHOT</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.bstats</groupId>
|
||||
@@ -100,7 +130,7 @@
|
||||
<dependency>
|
||||
<groupId>com.github.YouHaveTrouble</groupId>
|
||||
<artifactId>YardWatchAPI</artifactId>
|
||||
<version>2.0.0</version>
|
||||
<version>${yardwatch.api.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@@ -109,6 +139,12 @@
|
||||
<version>16.18.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.bgsoftware</groupId>
|
||||
<artifactId>SuperiorSkyblockAPI</artifactId>
|
||||
<version>2023.3</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.griefcraft</groupId>
|
||||
<artifactId>lwc</artifactId>
|
||||
@@ -121,5 +157,17 @@
|
||||
<version>1.6.9.5-U0.6.33</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.palmergames.bukkit.towny</groupId>
|
||||
<artifactId>towny</artifactId>
|
||||
<version>0.100.1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.intellectualsites.plotsquared</groupId>
|
||||
<artifactId>plotsquared-core</artifactId>
|
||||
<version>7.3.8</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
||||
@@ -3,19 +3,24 @@ Implementation of [YardWatchAPI](https://github.com/YouHaveTrouble/YardWatchAPI)
|
||||
of supported plugins implements the API itself, then this plugin will stop providing its implementation to allow the
|
||||
plugin to take over.
|
||||
|
||||
|
||||
If you're a developer looking for information how to implement YardWatchAPI in your plugin, see
|
||||
[YardWatchAPI](https://github.com/YouHaveTrouble/YardWatchAPI)
|
||||
|
||||
## Downloads
|
||||
You can download YardWatch plugin on [Modrinth](https://modrinth.com/plugin/yardwatch).
|
||||
|
||||
## Requirements
|
||||
- Java 17
|
||||
- Minecraft 1.16+
|
||||
|
||||
## Implementations for:
|
||||
- GriefPrevention (v16+)
|
||||
- WorldGuard (7.0.0+)
|
||||
- LWCX
|
||||
- FactionsUUID
|
||||
- [GriefPrevention (v16+)](https://www.spigotmc.org/resources/griefprevention.1884/)
|
||||
- [WorldGuard (7.0.0+)](https://enginehub.org/worldguard#downloads)
|
||||
- [LWCX](https://www.spigotmc.org/resources/lwc-extended.69551/)
|
||||
- [FactionsUUID](https://www.spigotmc.org/resources/factionsuuid.1035/)
|
||||
- [SuperiorSkyBlock](https://bg-software.com/superiorskyblock/)
|
||||
- [Towny](https://github.com/TownyAdvanced/Towny)
|
||||
- [PlotSquared (6.0.0+)](https://www.spigotmc.org/resources/plotsquared.1177/)
|
||||
|
||||
## 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)!
|
||||
|
||||
@@ -1,45 +1,102 @@
|
||||
package me.youhavetrouble.yardwatch;
|
||||
|
||||
import com.google.common.io.Resources;
|
||||
import me.youhavetrouble.yardwatch.commands.YardWatchCommand;
|
||||
import me.youhavetrouble.yardwatch.hooks.FactionsUUIDProtection;
|
||||
import me.youhavetrouble.yardwatch.hooks.GriefPreventionProtection;
|
||||
import me.youhavetrouble.yardwatch.hooks.LWCXProtection;
|
||||
import me.youhavetrouble.yardwatch.hooks.PlotSquaredProtection;
|
||||
import me.youhavetrouble.yardwatch.hooks.SuperiorSkyBlockProtection;
|
||||
import me.youhavetrouble.yardwatch.hooks.TownyProtection;
|
||||
import me.youhavetrouble.yardwatch.hooks.WorldGuardProtection;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.bukkit.plugin.ServicePriority;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public final class YardWatch extends JavaPlugin {
|
||||
|
||||
private static String yardWatchApiVersion = "Unknown";
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
|
||||
try {
|
||||
final URL url = getClassLoader().getResource("apiversion.txt");
|
||||
|
||||
if (url != null) {
|
||||
yardWatchApiVersion = Resources.toString(url, com.google.common.base.Charsets.UTF_8);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
getLogger().warning("Failed to read YardWatch API version.");
|
||||
}
|
||||
|
||||
PluginCommand command = getCommand("yardwatch");
|
||||
if (command != null) {
|
||||
command.setExecutor(new YardWatchCommand(this));
|
||||
}
|
||||
|
||||
if (shouldRegisterService("WorldGuard")) {
|
||||
getLogger().info("Registering WorldGuard service.");
|
||||
getServer().getServicesManager().register(
|
||||
Protection.class, new WorldGuardProtection(this), this, ServicePriority.Normal
|
||||
);
|
||||
}
|
||||
|
||||
if (shouldRegisterService("GriefPrevention")) {
|
||||
getLogger().info("Registering GriefPrevention service.");
|
||||
getServer().getServicesManager().register(
|
||||
Protection.class, new GriefPreventionProtection(this), this, ServicePriority.Normal
|
||||
);
|
||||
}
|
||||
|
||||
if (shouldRegisterService("LWC")) {
|
||||
getLogger().info("Registering LWC service.");
|
||||
getServer().getServicesManager().register(
|
||||
Protection.class, new LWCXProtection(this), this, ServicePriority.Normal
|
||||
);
|
||||
}
|
||||
|
||||
if (shouldRegisterService("Factions")) {
|
||||
getLogger().info("Registering Factions service.");
|
||||
getServer().getServicesManager().register(
|
||||
Protection.class, new FactionsUUIDProtection(this), this, ServicePriority.Normal
|
||||
);
|
||||
}
|
||||
|
||||
if (shouldRegisterService("SuperiorSkyblock2")) {
|
||||
getLogger().info("Registering SuperiorSkyblock2 service.");
|
||||
getServer().getServicesManager().register(
|
||||
Protection.class, new SuperiorSkyBlockProtection(this), this, ServicePriority.Normal
|
||||
);
|
||||
}
|
||||
|
||||
if (shouldRegisterService("Towny")) {
|
||||
getLogger().info("Registering Towny service.");
|
||||
getServer().getServicesManager().register(
|
||||
Protection.class, new TownyProtection(this), this, ServicePriority.Normal
|
||||
);
|
||||
}
|
||||
|
||||
if (shouldRegisterService("PlotSquared")) {
|
||||
getLogger().info("Registering PlotSquared service.");
|
||||
getServer().getServicesManager().register(
|
||||
Protection.class, new PlotSquaredProtection(this), this, ServicePriority.Normal
|
||||
);
|
||||
}
|
||||
|
||||
List<RegisteredServiceProvider<?>> registrations = getServer().getServicesManager().getRegistrations(this);
|
||||
if (registrations.isEmpty()) {
|
||||
getLogger().info("Registered 0 services. This plugin can be safely removed.");
|
||||
} else {
|
||||
getLogger().info("Successfully registered " + registrations.size() + " services.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -63,4 +120,8 @@ public final class YardWatch extends JavaPlugin {
|
||||
public void onDisable() {
|
||||
getServer().getServicesManager().unregisterAll(this);
|
||||
}
|
||||
|
||||
public static String getYardWatchApiVersion() {
|
||||
return yardWatchApiVersion;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
package me.youhavetrouble.yardwatch.commands;
|
||||
|
||||
import me.youhavetrouble.yardwatch.Protection;
|
||||
import me.youhavetrouble.yardwatch.YardWatch;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.bukkit.util.StringUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class YardWatchCommand implements TabExecutor {
|
||||
|
||||
private final YardWatch plugin;
|
||||
|
||||
private final String version;
|
||||
|
||||
public YardWatchCommand(YardWatch plugin) {
|
||||
this.plugin = plugin;
|
||||
this.version = plugin.getDescription().getVersion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
|
||||
if (args.length == 0) {
|
||||
sendDefault(sender);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("hooks")) {
|
||||
sendHooks(sender);
|
||||
return true;
|
||||
} else if (args[0].equalsIgnoreCase("query")) {
|
||||
queryProtection(sender);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
|
||||
List<String> completions = new ArrayList<>();
|
||||
|
||||
if (args.length == 1) {
|
||||
completions.add("hooks");
|
||||
completions.add("query");
|
||||
return StringUtil.copyPartialMatches(args[0], completions, new ArrayList<>());
|
||||
}
|
||||
|
||||
return completions;
|
||||
}
|
||||
|
||||
private void sendDefault(CommandSender sender) {
|
||||
sender.sendMessage(String.format("YardWatch %s (Implementing YardWatch API %s)", version, YardWatch.getYardWatchApiVersion()));
|
||||
}
|
||||
|
||||
private void sendHooks(CommandSender sender) {
|
||||
Map<String, Integer> hooks = new HashMap<>();
|
||||
Collection<RegisteredServiceProvider<Protection>> protections = plugin.getServer().getServicesManager().getRegistrations(Protection.class);
|
||||
for (RegisteredServiceProvider<Protection> protection : protections) {
|
||||
hooks.merge(protection.getPlugin().getName(), 1, Integer::sum);
|
||||
}
|
||||
if (hooks.isEmpty()) {
|
||||
sender.sendMessage("No hooks registered.");
|
||||
return;
|
||||
}
|
||||
sender.sendMessage("Hooks:");
|
||||
for (Map.Entry<String, Integer> entry : hooks.entrySet()) {
|
||||
String hook = entry.getValue() == 1 ? "hook" : "hooks";
|
||||
sender.sendMessage(String.format("%s -> %s %s registered", entry.getKey(), entry.getValue(), hook));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void queryProtection(CommandSender sender) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage(("You must be a player to use this command!"));
|
||||
return;
|
||||
}
|
||||
Location location = player.getLocation();
|
||||
sender.sendMessage("Protections at " + location.getBlockX() + ", " + location.getBlockY() + ", " + location.getBlockZ());
|
||||
Collection<RegisteredServiceProvider<Protection>> protections = plugin.getServer().getServicesManager().getRegistrations(Protection.class);
|
||||
if (protections.isEmpty()) {
|
||||
sender.sendMessage("No protections registered at " + location.getBlockX() + ", " + location.getBlockY() + ", " + location.getBlockZ());
|
||||
return;
|
||||
}
|
||||
for (RegisteredServiceProvider<Protection> protection : protections) {
|
||||
Component component = Component.text(protection.getPlugin().getName()).append(Component.text(" isProtected " + protection.getProvider().isProtected(location)))
|
||||
.hoverEvent(HoverEvent.showText(
|
||||
Component.text(protection.getProvider().toString())
|
||||
.append(Component.newline())
|
||||
.append(Component.text("canPlaceBlock " + protection.getProvider().canPlaceBlock(player, location))
|
||||
.append(Component.newline())
|
||||
.append(Component.text("canBreakBlock " + protection.getProvider().canBreakBlock(player, location.getBlock().getState())))
|
||||
.append(Component.newline())
|
||||
.append(Component.text("canInteract " + protection.getProvider().canInteract(player, location.getBlock().getState())))
|
||||
)));
|
||||
sender.sendMessage(component);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,12 +35,13 @@ public class FactionsUUIDProtection implements Protection {
|
||||
if (!FactionsPlugin.getInstance().worldUtil().isEnabled(location.getWorld())) return false;
|
||||
FLocation fLocation = new FLocation(location);
|
||||
Faction faction = Board.getInstance().getFactionAt(fLocation);
|
||||
return faction != null;
|
||||
return !faction.isWilderness();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBreakBlock(Player player, BlockState blockState) {
|
||||
if (!isEnabled()) return true;
|
||||
if (!FactionsPlugin.getInstance().worldUtil().isEnabled(blockState.getWorld())) return true;
|
||||
return FactionsBlockListener.playerCanBuildDestroyBlock(
|
||||
player,
|
||||
blockState.getLocation(),
|
||||
@@ -52,6 +53,7 @@ public class FactionsUUIDProtection implements Protection {
|
||||
@Override
|
||||
public boolean canPlaceBlock(Player player, Location location) {
|
||||
if (!isEnabled()) return true;
|
||||
if (!FactionsPlugin.getInstance().worldUtil().isEnabled(location.getWorld())) return true;
|
||||
return FactionsBlockListener.playerCanBuildDestroyBlock(
|
||||
player,
|
||||
location,
|
||||
@@ -63,18 +65,26 @@ public class FactionsUUIDProtection implements Protection {
|
||||
@Override
|
||||
public boolean canInteract(Player player, BlockState blockState) {
|
||||
if (!isEnabled()) return true;
|
||||
return FactionsPlayerListener.canInteractHere(player, blockState.getLocation());
|
||||
if (!FactionsPlugin.getInstance().worldUtil().isEnabled(blockState.getWorld())) return true;
|
||||
return FactionsPlayerListener.canUseBlock(
|
||||
player,
|
||||
blockState.getType(),
|
||||
blockState.getLocation(),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteract(Player player, Entity target) {
|
||||
if (!isEnabled()) return true;
|
||||
if (!FactionsPlugin.getInstance().worldUtil().isEnabled(target)) return true;
|
||||
return FactionsEntityListener.canInteractHere(player, target.getLocation());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canDamage(Entity damager, Entity target) {
|
||||
if (!isEnabled()) return true;
|
||||
if (!FactionsPlugin.getInstance().worldUtil().isEnabled(target)) return true;
|
||||
return FactionsEntityListener.canDamage(damager, target, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
package me.youhavetrouble.yardwatch.hooks;
|
||||
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import com.plotsquared.core.plot.flag.implementations.PvpFlag;
|
||||
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;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class PlotSquaredProtection implements Protection {
|
||||
|
||||
private final YardWatch plugin;
|
||||
|
||||
public PlotSquaredProtection(YardWatch plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return this.plugin.getServer().getPluginManager().isPluginEnabled("PlotSquared");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProtected(final Location location) {
|
||||
if (!isEnabled()) return false;
|
||||
|
||||
final com.plotsquared.core.location.Location arg1 = getLocation(location);
|
||||
|
||||
return arg1.isPlotArea() || arg1.isPlotRoad() || arg1.isUnownedPlotArea() || arg1.getOwnedPlot() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBreakBlock(final Player player, final BlockState blockState) {
|
||||
if (!isEnabled()) return true;
|
||||
|
||||
final Location blockLocation = blockState.getLocation();
|
||||
final com.plotsquared.core.location.@NonNull Location location = getLocation(blockLocation);
|
||||
|
||||
final Plot plot = location.getOwnedPlot();
|
||||
|
||||
if (plot == null) return isProtected(blockLocation);
|
||||
|
||||
return plot.isAdded(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlaceBlock(final Player player, final Location location) {
|
||||
return canBreakBlock(player, location.getBlock().getState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteract(final Player player, final BlockState blockState) {
|
||||
if (!isEnabled()) return true;
|
||||
|
||||
final Location location = blockState.getLocation();
|
||||
|
||||
com.plotsquared.core.location.@NonNull Location plotLocation = getLocation(location);
|
||||
|
||||
final Plot plot = plotLocation.getOwnedPlot();
|
||||
|
||||
if (plot == null) return isProtected(location);
|
||||
|
||||
return plot.isAdded(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteract(final Player player, final Entity target) {
|
||||
return canInteract(player, target.getLocation().getBlock().getState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canDamage(final Entity damager, final Entity target) {
|
||||
if (!isEnabled() || !(damager instanceof Player)) return true;
|
||||
|
||||
final Location location = target.getLocation();
|
||||
|
||||
com.plotsquared.core.location.@NonNull Location plotLocation = getLocation(location);
|
||||
|
||||
final Plot plot = plotLocation.getOwnedPlot();
|
||||
|
||||
if (plot == null) return isProtected(location);
|
||||
|
||||
return plot.getFlag(PvpFlag.class);
|
||||
}
|
||||
|
||||
private com.plotsquared.core.location.@NonNull Location getLocation(final Location location) {
|
||||
final String world = location.getWorld().getName();
|
||||
final int x = (int) location.getX();
|
||||
final int y = (int) location.getY();
|
||||
final int z = (int) location.getZ();
|
||||
|
||||
return com.plotsquared.core.location.Location.at(world, x, y, z);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package me.youhavetrouble.yardwatch.hooks;
|
||||
|
||||
import com.bgsoftware.superiorskyblock.api.SuperiorSkyblockAPI;
|
||||
import com.bgsoftware.superiorskyblock.api.island.BlockChangeResult;
|
||||
import com.bgsoftware.superiorskyblock.api.island.Island;
|
||||
import com.bgsoftware.superiorskyblock.api.island.IslandPrivilege;
|
||||
import com.bgsoftware.superiorskyblock.api.wrappers.SuperiorPlayer;
|
||||
import me.youhavetrouble.yardwatch.Protection;
|
||||
import me.youhavetrouble.yardwatch.YardWatch;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.banner.PatternType;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class SuperiorSkyBlockProtection implements Protection {
|
||||
|
||||
private final YardWatch plugin;
|
||||
|
||||
public SuperiorSkyBlockProtection(YardWatch plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return this.plugin.getServer().getPluginManager().isPluginEnabled("SuperiorSkyblock2");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProtected(Location location) {
|
||||
if (!isEnabled()) return false;
|
||||
|
||||
Island island = SuperiorSkyblockAPI.getIslandAt(location);
|
||||
|
||||
return island != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBreakBlock(Player player, BlockState blockState) {
|
||||
if (!isEnabled()) return true;
|
||||
|
||||
Location location = blockState.getLocation();
|
||||
|
||||
Island island = SuperiorSkyblockAPI.getIslandAt(location);
|
||||
|
||||
return island == null || island.hasPermission(player, IslandPrivilege.getByName("BREAK"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlaceBlock(Player player, Location location) {
|
||||
if (!isEnabled()) return true;
|
||||
|
||||
Island island = SuperiorSkyblockAPI.getIslandAt(location);
|
||||
|
||||
return island == null || island.hasPermission(player, IslandPrivilege.getByName("INTERACT"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteract(Player player, BlockState blockState) {
|
||||
if (!isEnabled()) return true;
|
||||
|
||||
Location location = blockState.getLocation();
|
||||
|
||||
Island island = SuperiorSkyblockAPI.getIslandAt(location);
|
||||
|
||||
return island == null || island.hasPermission(player, IslandPrivilege.getByName("INTERACT"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteract(Player player, Entity target) {
|
||||
if (!isEnabled()) return true;
|
||||
|
||||
Location location = target.getLocation();
|
||||
|
||||
Island island = SuperiorSkyblockAPI.getIslandAt(location);
|
||||
|
||||
return island == null || island.hasPermission(player, IslandPrivilege.getByName("INTERACT")) || island.hasPermission(player, IslandPrivilege.getByName("USE"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canDamage(Entity damager, Entity target) {
|
||||
if (!isEnabled()) return true;
|
||||
if (!(damager instanceof Player attacker)) return true;
|
||||
|
||||
Location location = target.getLocation();
|
||||
|
||||
Island island = SuperiorSkyblockAPI.getIslandAt(location);
|
||||
|
||||
return island == null || island.hasPermission(attacker, IslandPrivilege.getByName("INTERACT"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package me.youhavetrouble.yardwatch.hooks;
|
||||
|
||||
import com.palmergames.bukkit.towny.TownyAPI;
|
||||
import com.palmergames.bukkit.towny.object.Resident;
|
||||
import com.palmergames.bukkit.towny.object.TownBlock;
|
||||
import com.palmergames.bukkit.towny.utils.CombatUtil;
|
||||
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 TownyProtection implements Protection {
|
||||
|
||||
private final YardWatch plugin;
|
||||
|
||||
private final TownyAPI api;
|
||||
|
||||
public TownyProtection(YardWatch plugin) {
|
||||
this.plugin = plugin;
|
||||
|
||||
this.api = TownyAPI.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return this.plugin.getServer().getPluginManager().isPluginEnabled("Towny");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProtected(Location location) {
|
||||
if (!isEnabled()) return false;
|
||||
|
||||
TownBlock town = this.api.getTownBlock(location);
|
||||
|
||||
return town != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBreakBlock(Player player, BlockState blockState) {
|
||||
return canInteract(player, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlaceBlock(Player player, Location location) {
|
||||
return canInteract(player, location.getBlock().getState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteract(Player player, BlockState blockState) {
|
||||
if (!isEnabled()) return true;
|
||||
|
||||
Location location = blockState.getLocation();
|
||||
|
||||
TownBlock town = this.api.getTownBlock(location);
|
||||
|
||||
Resident resident = this.api.getResident(player.getUniqueId());
|
||||
|
||||
return town == null || town.hasResident(resident) || town.hasTrustedResident(resident);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteract(Player player, Entity target) {
|
||||
return canInteract(player, target.getLocation().getBlock().getState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canDamage(Entity damager, Entity target) {
|
||||
if (!isEnabled()) return true;
|
||||
if (!(damager instanceof Player)) return true;
|
||||
|
||||
Location location = target.getLocation();
|
||||
|
||||
TownBlock town = this.api.getTownBlock(location);
|
||||
|
||||
return town == null || CombatUtil.preventPvP(town.getWorld(), town);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,8 @@ import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.WorldGuard;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldguard.domains.Association;
|
||||
import com.sk89q.worldguard.protection.association.Associables;
|
||||
import com.sk89q.worldguard.protection.flags.Flags;
|
||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
||||
import com.sk89q.worldguard.protection.regions.RegionQuery;
|
||||
@@ -34,7 +36,7 @@ public class WorldGuardProtection implements Protection {
|
||||
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(location);
|
||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
return query.testBuild(wgLocation, null);
|
||||
return query.testBuild(wgLocation, Associables.constant(Association.NON_MEMBER));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
${yardwatch.api.version}
|
||||
@@ -12,3 +12,12 @@ softdepend:
|
||||
- "GriefPrevention"
|
||||
- "Towny"
|
||||
- "Factions"
|
||||
- "SuperiorSkyblock2"
|
||||
- "LWC"
|
||||
commands:
|
||||
yardwatch:
|
||||
description: "YardWatch command"
|
||||
usage: "/yardwatch <arg>"
|
||||
permission: "yardwatch.command"
|
||||
aliases:
|
||||
- "yw"
|
||||
Reference in New Issue
Block a user