mostly claimnearby stuff?

This commit is contained in:
destro174 2022-02-24 18:58:38 +01:00
parent 67b9c2c8ba
commit 0f8b6b5a0d
11 changed files with 182 additions and 13 deletions

View File

@ -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<Claim> claims = GriefPrevention.instance.dataStore.getNearbyClaims(location);
for (Claim claim2 : claims) {
if(!claim2.overlaps(claim)) continue;
Supplier<String> canClaimTrust = claim2.checkPermission(player, ClaimPermission.Claim, null);
if (canClaimTrust == null) continue;
return false;
}
return false;
}
}

View File

@ -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;

View File

@ -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.

View File

@ -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<UUID, IgnoreClaimWarningTask> 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 <player>
else if (cmd.getName().equalsIgnoreCase("permissiontrust") && player != null)
{
@ -3243,4 +3252,7 @@ public class GriefPrevention extends JavaPlugin
return 0;
}
public DatabaseConnection getDataBase() {
return databaseConnection;
}
}

View File

@ -254,5 +254,6 @@ public enum Messages
StandInSubclaim,
SubclaimRestricted,
SubclaimUnrestricted,
NetherPortalTrapDetectionMessage
NetherPortalTrapDetectionMessage,
NoClaimTrust
}

View File

@ -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<Long, Long> 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<String, Long>())
@ -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);
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1,3 @@
package me.ryanhamshire.GriefPrevention.alttd.database;
public class Queries {}

View File

@ -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

View File

@ -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()
{
}
}

View File

@ -48,6 +48,10 @@ commands:
usage: /PermissionTrust <player>. 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 <player>.
permission: griefprevention.claimsnearby
subdivideclaims:
description: Switches the shovel tool to subdivision mode, used to subdivide your claims.
usage: /SubdivideClaims