From 0f8b6b5a0d6c2177dc758391c9eacdd3d0232364 Mon Sep 17 00:00:00 2001 From: destro174 <40720638+destro174@users.noreply.github.com> Date: Thu, 24 Feb 2022 18:58:38 +0100 Subject: [PATCH] mostly claimnearby stuff? --- .../ryanhamshire/GriefPrevention/Claim.java | 19 +++++ .../GriefPrevention/ClaimPermission.java | 4 +- .../GriefPrevention/DataStore.java | 7 ++ .../GriefPrevention/GriefPrevention.java | 24 ++++-- .../GriefPrevention/Messages.java | 3 +- .../GriefPrevention/alttd/config/Config.java | 20 ++++- .../alttd/database/DatabaseConnection.java | 75 +++++++++++++++++++ .../alttd/database/Queries.java | 3 + ...ireTask.java => AdminClaimExpireTask.java} | 6 +- .../alttd/tasks/PlayerClaimExpireTask.java | 30 ++++++++ src/main/resources/plugin.yml | 4 + 11 files changed, 182 insertions(+), 13 deletions(-) create mode 100755 src/main/java/me/ryanhamshire/GriefPrevention/alttd/database/DatabaseConnection.java create mode 100644 src/main/java/me/ryanhamshire/GriefPrevention/alttd/database/Queries.java rename src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/{ClaimExpireTask.java => AdminClaimExpireTask.java} (83%) create mode 100644 src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/PlayerClaimExpireTask.java diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/Claim.java b/src/main/java/me/ryanhamshire/GriefPrevention/Claim.java index 3b491c0..7edaeaa 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/Claim.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/Claim.java @@ -733,4 +733,23 @@ public class Claim { return DataStore.getChunkHashes(this); } + + public boolean canCleaimNear(Player player, int howNear) { + Location location = player.getLocation(); + Claim claim = new Claim + (new Location(this.lesserBoundaryCorner.getWorld(), this.lesserBoundaryCorner.getBlockX() - howNear, this.lesserBoundaryCorner.getBlockY(), this.lesserBoundaryCorner.getBlockZ() - howNear), + new Location(this.greaterBoundaryCorner.getWorld(), this.greaterBoundaryCorner.getBlockX() + howNear, this.greaterBoundaryCorner.getBlockY(), this.greaterBoundaryCorner.getBlockZ() + howNear), + null, new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), null); + + if(!claim.contains(location, false, true)) return true; + Set claims = GriefPrevention.instance.dataStore.getNearbyClaims(location); + for (Claim claim2 : claims) { + if(!claim2.overlaps(claim)) continue; + + Supplier canClaimTrust = claim2.checkPermission(player, ClaimPermission.Claim, null); + if (canClaimTrust == null) continue; + return false; + } + return false; + } } diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/ClaimPermission.java b/src/main/java/me/ryanhamshire/GriefPrevention/ClaimPermission.java index f32ed75..9766cfc 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/ClaimPermission.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/ClaimPermission.java @@ -43,7 +43,9 @@ public enum ClaimPermission * ClaimPermission that allows users to grant ClaimPermissions. Uses a separate track from normal * permissions and does not grant any other permissions. */ - Manage(Messages.NoPermissionTrust); + Manage(Messages.NoPermissionTrust), + + Claim(Messages.NoClaimTrust); private final Messages denialMessage; diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java b/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java index a00ec3b..b85f0a1 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java @@ -964,6 +964,12 @@ public abstract class DataStore } } + if (creatingPlayer != null && !newClaim.canCleaimNear(creatingPlayer, 100)) { + result.succeeded = false; + result.claim = null; + return result; + } + //if worldguard is installed, also prevent claims from overlapping any worldguard regions if (GriefPrevention.instance.config_claims_respectWorldGuard && this.worldGuard != null && creatingPlayer != null) { @@ -974,6 +980,7 @@ public abstract class DataStore return result; } } + if (dryRun) { // since this is a dry run, just return the unsaved claim as is. diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java index 5e94b83..2bd4dcc 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java @@ -20,9 +20,10 @@ package me.ryanhamshire.GriefPrevention; import me.ryanhamshire.GriefPrevention.DataStore.NoTransferException; import me.ryanhamshire.GriefPrevention.alttd.config.Config; +import me.ryanhamshire.GriefPrevention.alttd.database.DatabaseConnection; import me.ryanhamshire.GriefPrevention.alttd.hook.Pl3xMapHook; import me.ryanhamshire.GriefPrevention.alttd.listeners.AltitudeListener; -import me.ryanhamshire.GriefPrevention.alttd.tasks.ClaimExpireTask; +import me.ryanhamshire.GriefPrevention.alttd.tasks.AdminClaimExpireTask; import me.ryanhamshire.GriefPrevention.alttd.tasks.IgnoreClaimWarningTask; import me.ryanhamshire.GriefPrevention.events.PreventBlockBreakEvent; import me.ryanhamshire.GriefPrevention.events.SaveTrappedPlayerEvent; @@ -65,11 +66,8 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; -import java.util.EnumSet; import java.util.HashMap; import java.util.List; -import java.util.Map.Entry; -import java.util.Set; import java.util.UUID; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; @@ -77,7 +75,6 @@ import java.util.function.Supplier; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; public class GriefPrevention extends JavaPlugin { @@ -239,6 +236,7 @@ public class GriefPrevention extends JavaPlugin private String databasePassword; private Pl3xMapHook pl3xmapHook; + private DatabaseConnection databaseConnection; private HashMap ignoreClaimWarningTasks; @@ -349,7 +347,7 @@ public class GriefPrevention extends JavaPlugin this.getServer().getScheduler().scheduleSyncRepeatingTask(this, task2, 20L * 60, 20L * config_advanced_claim_expiration_check_rate); // start task to clean up temporary admin claims - ClaimExpireTask claimExpireTask = new ClaimExpireTask(this); + AdminClaimExpireTask claimExpireTask = new AdminClaimExpireTask(this); claimExpireTask.init(); //register for events @@ -375,6 +373,7 @@ public class GriefPrevention extends JavaPlugin if (getServer().getPluginManager().isPluginEnabled("Pl3xMap")) { pl3xmapHook = new Pl3xMapHook(this); } +// databaseConnection = new DatabaseConnection(); // TODO Set up database to pull data from proxyplaytime ignoreClaimWarningTasks = new HashMap<>(); AddLogEntry("Boot finished."); @@ -1603,6 +1602,16 @@ public class GriefPrevention extends JavaPlugin return true; } + else if (cmd.getName().equalsIgnoreCase("claimnearbytrust") && player != null) + { + //requires exactly one parameter, the other player's name + if (args.length != 1) return false; + + this.handleTrustCommand(player, ClaimPermission.Claim, args[0]); + + return true; + } + //permissiontrust else if (cmd.getName().equalsIgnoreCase("permissiontrust") && player != null) { @@ -3243,4 +3252,7 @@ public class GriefPrevention extends JavaPlugin return 0; } + public DatabaseConnection getDataBase() { + return databaseConnection; + } } diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/Messages.java b/src/main/java/me/ryanhamshire/GriefPrevention/Messages.java index f85d5f1..14b5b62 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/Messages.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/Messages.java @@ -254,5 +254,6 @@ public enum Messages StandInSubclaim, SubclaimRestricted, SubclaimUnrestricted, - NetherPortalTrapDetectionMessage + NetherPortalTrapDetectionMessage, + NoClaimTrust } diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/Config.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/Config.java index c6dd0f5..d50d923 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/Config.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/Config.java @@ -29,14 +29,16 @@ public class Config extends AbstractConfig { public static boolean DEBUG_MODE = false; public static boolean alternativeClaimExpiring = false; public static int alternativeClaimExpireDays = 1; - public static int expireCheckRate = 1200; + public static int adminClaimExpireCheckRate = 1200; + public static int playerClaimExpireCheckRate = 1200; public static HashMap expiringClaims = new HashMap<>(); private static void settings() { String node = "alternative-claim-expiring"; DEBUG_MODE = config.getBoolean("debug-mode", DEBUG_MODE); alternativeClaimExpiring = config.getBoolean(node + ".enabled", alternativeClaimExpiring); alternativeClaimExpireDays = config.getInt(node + ".days", alternativeClaimExpireDays); - expireCheckRate = config.getInt(node + ".expire-check-rate", expireCheckRate); + adminClaimExpireCheckRate = config.getInt(node + ".admin-claim-expire-check-rate", adminClaimExpireCheckRate); + playerClaimExpireCheckRate = config.getInt(node + ".player-claim-expire-check-rate", playerClaimExpireCheckRate); // todo create an alternative way of loading these in expiringClaims.clear(); config.getMap(node + ".claims", new HashMap()) @@ -159,4 +161,18 @@ public class Config extends AbstractConfig { } catch (NumberFormatException ignored) {} }); } + + public static String IP = "0.0.0.0"; + public static String PORT = "3306"; + public static String DATABASE = "database"; + public static String USERNAME = "root"; + public static String PASSWORD = "root"; + private static void database() { + IP = config.getString("database.ip", IP); + PORT = config.getString("database.port", PORT); + DATABASE = config.getString("database.name", DATABASE); + USERNAME = config.getString("database.username", USERNAME); + PASSWORD = config.getString("database.password", PASSWORD); + } + } diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/database/DatabaseConnection.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/database/DatabaseConnection.java new file mode 100755 index 0000000..7966907 --- /dev/null +++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/database/DatabaseConnection.java @@ -0,0 +1,75 @@ +package me.ryanhamshire.GriefPrevention.alttd.database; + +import me.ryanhamshire.GriefPrevention.alttd.config.Config; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class DatabaseConnection { + + private static DatabaseConnection instance; + private static Connection connection; + + /** + * Sets information for the database and opens the connection. + */ + public DatabaseConnection() { + instance = this; + + try { + instance.openConnection(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Opens the connection if it's not already open. + * @throws SQLException If it can't create the connection. + */ + public void openConnection() throws SQLException { + if (connection != null && !connection.isClosed()) { + return; + } + + synchronized (this) { + if (connection != null && !connection.isClosed()) { + return; + } + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + connection = DriverManager.getConnection( + "jdbc:mysql://" + Config.IP + ":" + Config.PORT + "/" + Config.DATABASE + "?autoReconnect=true"+ + "&useSSL=false", + Config.USERNAME, Config.PASSWORD); + } + } + + /** + * Returns the connection for the database + * @return Returns the connection. + */ + public static Connection getConnection() { + try { + instance.openConnection(); + } catch (Exception e) { + e.printStackTrace(); + } + + return connection; + } + + /** + * Sets the connection for this instance + */ + public static boolean initialize() { + instance = new DatabaseConnection(); + return connection != null; + } + +} \ No newline at end of file diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/database/Queries.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/database/Queries.java new file mode 100644 index 0000000..3448c1b --- /dev/null +++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/database/Queries.java @@ -0,0 +1,3 @@ +package me.ryanhamshire.GriefPrevention.alttd.database; + +public class Queries {} \ No newline at end of file diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/ClaimExpireTask.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/AdminClaimExpireTask.java similarity index 83% rename from src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/ClaimExpireTask.java rename to src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/AdminClaimExpireTask.java index ad83330..eac38d6 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/ClaimExpireTask.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/AdminClaimExpireTask.java @@ -7,18 +7,18 @@ import org.bukkit.scheduler.BukkitRunnable; import java.util.Iterator; import java.util.Map; -public class ClaimExpireTask extends BukkitRunnable +public class AdminClaimExpireTask extends BukkitRunnable { private GriefPrevention plugin; - public ClaimExpireTask(GriefPrevention plugin) + public AdminClaimExpireTask(GriefPrevention plugin) { this.plugin = plugin; } public void init() { - runTaskTimer(plugin, 0, Config.expireCheckRate); + runTaskTimer(plugin, 0, Config.adminClaimExpireCheckRate); } @Override diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/PlayerClaimExpireTask.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/PlayerClaimExpireTask.java new file mode 100644 index 0000000..e84c905 --- /dev/null +++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/tasks/PlayerClaimExpireTask.java @@ -0,0 +1,30 @@ +package me.ryanhamshire.GriefPrevention.alttd.tasks; + +import me.ryanhamshire.GriefPrevention.GriefPrevention; +import me.ryanhamshire.GriefPrevention.alttd.config.Config; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Iterator; +import java.util.Map; + +public class PlayerClaimExpireTask extends BukkitRunnable +{ + private GriefPrevention plugin; + + public PlayerClaimExpireTask(GriefPrevention plugin) + { + this.plugin = plugin; + } + + public void init() + { + runTaskTimer(plugin, 0, Config.playerClaimExpireCheckRate); + } + + @Override + public void run() + { + + } + +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b3c6204..7f332b0 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -48,6 +48,10 @@ commands: usage: /PermissionTrust . Permits a player to share his permission level with others. aliases: pt permission: griefprevention.claims + claimnearbytrust: + description: Grants a player permission to claim within x blocks of your claim. + usage: /claimnearbytrust . + permission: griefprevention.claimsnearby subdivideclaims: description: Switches the shovel tool to subdivision mode, used to subdivide your claims. usage: /SubdivideClaims