2 Commits

Author SHA1 Message Date
YouHaveTrouble bea339f701 bump version 2024-04-16 19:58:16 +02:00
Ryder Belserion 34964d30cd Adds towny and superiorskyblock support (#1)
* Stash changes

* Add superiorskyblock2 support

* Add as a soft depend

* Fix skyblock support

* Add palmers towny support

* Turned off wildcard imports

* Update readme

* Update .gitignore

* Add new line

* Add new line
2024-04-16 19:57:08 +02:00
7 changed files with 216 additions and 5 deletions
+2
View File
@@ -5,6 +5,8 @@
*.ipr
*.iws
server
# IntelliJ
out/
+21 -1
View File
@@ -6,7 +6,7 @@
<groupId>me.youhavetrouble</groupId>
<artifactId>YardWatch</artifactId>
<version>1.0</version>
<version>1.1.0</version>
<packaging>jar</packaging>
<name>YardWatch</name>
@@ -52,6 +52,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,6 +80,10 @@
<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>
<dependencies>
@@ -109,6 +117,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 +135,11 @@
<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>
</dependencies>
</project>
+5 -3
View File
@@ -12,10 +12,12 @@ If you're a developer looking for information how to implement YardWatchAPI in y
- Minecraft 1.16+
## Implementations for:
- GriefPrevention (v16+)
- WorldGuard (7.0.0+)
- [GriefPrevention (v16+)](https://www.spigotmc.org/resources/griefprevention.1884/)
- [WorldGuard (7.0.0+)](https://enginehub.org/worldguard#downloads)
- LWCX
- FactionsUUID
- [FactionsUUID](https://www.spigotmc.org/resources/factionsuuid.1035/)
- [SuperiorSkyBlock](https://bg-software.com/superiorskyblock/)
- [Towny](https://github.com/TownyAdvanced/Towny)
## 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)!
@@ -3,6 +3,8 @@ 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.SuperiorSkyBlockProtection;
import me.youhavetrouble.yardwatch.hooks.TownyProtection;
import me.youhavetrouble.yardwatch.hooks.WorldGuardProtection;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
@@ -15,7 +17,6 @@ public final class YardWatch extends JavaPlugin {
@Override
public void onEnable() {
if (shouldRegisterService("WorldGuard")) {
getServer().getServicesManager().register(
Protection.class, new WorldGuardProtection(this), this, ServicePriority.Normal
@@ -40,6 +41,18 @@ public final class YardWatch extends JavaPlugin {
);
}
if (shouldRegisterService("SuperiorSkyblock2")) {
getServer().getServicesManager().register(
Protection.class, new SuperiorSkyBlockProtection(this), this, ServicePriority.Normal
);
}
if (shouldRegisterService("Towny")) {
getServer().getServicesManager().register(
Protection.class, new TownyProtection(this), this, ServicePriority.Normal
);
}
}
/**
@@ -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,80 @@
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.object.TownyPermission;
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(true));
}
@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(true));
}
@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);
}
}
+1
View File
@@ -12,3 +12,4 @@ softdepend:
- "GriefPrevention"
- "Towny"
- "Factions"
- "SuperiorSkyblock2"