Add alternative claim expiriation
This commit is contained in:
parent
9a12797204
commit
ca71243ad5
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
package me.ryanhamshire.GriefPrevention;
|
package me.ryanhamshire.GriefPrevention;
|
||||||
|
|
||||||
|
import me.ryanhamshire.GriefPrevention.alttd.config.AlttdConfig;
|
||||||
import me.ryanhamshire.GriefPrevention.events.ClaimExpirationEvent;
|
import me.ryanhamshire.GriefPrevention.events.ClaimExpirationEvent;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
|
@ -31,12 +32,19 @@ class CleanupUnusedClaimTask implements Runnable
|
||||||
Claim claim;
|
Claim claim;
|
||||||
PlayerData ownerData;
|
PlayerData ownerData;
|
||||||
OfflinePlayer ownerInfo;
|
OfflinePlayer ownerInfo;
|
||||||
|
boolean forced;
|
||||||
|
|
||||||
CleanupUnusedClaimTask(Claim claim, PlayerData ownerData, OfflinePlayer ownerInfo)
|
CleanupUnusedClaimTask(Claim claim, PlayerData ownerData, OfflinePlayer ownerInfo)
|
||||||
|
{
|
||||||
|
this(claim, ownerData, ownerInfo, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
CleanupUnusedClaimTask(Claim claim, PlayerData ownerData, OfflinePlayer ownerInfo, boolean forced)
|
||||||
{
|
{
|
||||||
this.claim = claim;
|
this.claim = claim;
|
||||||
this.ownerData = ownerData;
|
this.ownerData = ownerData;
|
||||||
this.ownerInfo = ownerInfo;
|
this.ownerInfo = ownerInfo;
|
||||||
|
this.forced = forced;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -80,13 +88,34 @@ class CleanupUnusedClaimTask implements Runnable
|
||||||
Calendar earliestPermissibleLastLogin = Calendar.getInstance();
|
Calendar earliestPermissibleLastLogin = Calendar.getInstance();
|
||||||
earliestPermissibleLastLogin.add(Calendar.DATE, -GriefPrevention.instance.config_claims_expirationDays);
|
earliestPermissibleLastLogin.add(Calendar.DATE, -GriefPrevention.instance.config_claims_expirationDays);
|
||||||
|
|
||||||
if (earliestPermissibleLastLogin.getTime().after(new Date(ownerInfo.getLastPlayed())))
|
if (earliestPermissibleLastLogin.getTime().after(new Date(ownerInfo.getLastPlayed())) || forced)
|
||||||
{
|
{
|
||||||
if (expireEventCanceled())
|
if (expireEventCanceled())
|
||||||
return;
|
return;
|
||||||
//make a copy of this player's claim list
|
//make a copy of this player's claim list
|
||||||
Vector<Claim> claims = new Vector<>(ownerData.getClaims());
|
Vector<Claim> claims = new Vector<>(ownerData.getClaims());
|
||||||
|
// Alternative logic for deleting claims
|
||||||
|
if(AlttdConfig.alternativeClaimExpiring) {
|
||||||
|
for (Claim claim : claims)
|
||||||
|
{
|
||||||
|
// remove all subclaims a claim has
|
||||||
|
for (int j = 1; (j - 1) < claim.children.size(); j++)
|
||||||
|
{
|
||||||
|
GriefPrevention.instance.dataStore.deleteClaim(claim.children.get(j - 1), true);
|
||||||
|
}
|
||||||
|
// remove all trusted players
|
||||||
|
claim.clearPermissions();
|
||||||
|
// public trust
|
||||||
|
claim.setPermission("public", ClaimPermission.Build);
|
||||||
|
// make the claim an (expiring) admin claim
|
||||||
|
GriefPrevention.instance.dataStore.changeClaimOwner(claim, null);
|
||||||
|
AlttdConfig.addExpiringClaim(claim.id);
|
||||||
|
}
|
||||||
|
GriefPrevention.AddLogEntry(" All of " + claim.getOwnerName() + "'s claims have expired and converted to a temp claim.", CustomLogEntryTypes.AdminActivity);
|
||||||
|
GriefPrevention.AddLogEntry("earliestPermissibleLastLogin#getTime: " + earliestPermissibleLastLogin.getTime(), CustomLogEntryTypes.Debug, true);
|
||||||
|
GriefPrevention.AddLogEntry("ownerInfo#getLastPlayed: " + ownerInfo.getLastPlayed(), CustomLogEntryTypes.Debug, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
//delete them
|
//delete them
|
||||||
GriefPrevention.instance.dataStore.deleteClaimsForPlayer(claim.ownerID, true);
|
GriefPrevention.instance.dataStore.deleteClaimsForPlayer(claim.ownerID, true);
|
||||||
GriefPrevention.AddLogEntry(" All of " + claim.getOwnerName() + "'s claims have expired.", CustomLogEntryTypes.AdminActivity);
|
GriefPrevention.AddLogEntry(" All of " + claim.getOwnerName() + "'s claims have expired.", CustomLogEntryTypes.AdminActivity);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
package me.ryanhamshire.GriefPrevention;
|
package me.ryanhamshire.GriefPrevention;
|
||||||
|
|
||||||
import me.ryanhamshire.GriefPrevention.DataStore.NoTransferException;
|
import me.ryanhamshire.GriefPrevention.DataStore.NoTransferException;
|
||||||
|
import me.ryanhamshire.GriefPrevention.alttd.tasks.ClaimExpireTask;
|
||||||
import me.ryanhamshire.GriefPrevention.events.PreventBlockBreakEvent;
|
import me.ryanhamshire.GriefPrevention.events.PreventBlockBreakEvent;
|
||||||
import me.ryanhamshire.GriefPrevention.events.SaveTrappedPlayerEvent;
|
import me.ryanhamshire.GriefPrevention.events.SaveTrappedPlayerEvent;
|
||||||
import me.ryanhamshire.GriefPrevention.events.TrustChangedEvent;
|
import me.ryanhamshire.GriefPrevention.events.TrustChangedEvent;
|
||||||
|
|
@ -355,6 +356,10 @@ public class GriefPrevention extends JavaPlugin
|
||||||
FindUnusedClaimsTask task2 = new FindUnusedClaimsTask();
|
FindUnusedClaimsTask task2 = new FindUnusedClaimsTask();
|
||||||
this.getServer().getScheduler().scheduleSyncRepeatingTask(this, task2, 20L * 60, 20L * config_advanced_claim_expiration_check_rate);
|
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);
|
||||||
|
claimExpireTask.init();
|
||||||
|
|
||||||
//register for events
|
//register for events
|
||||||
PluginManager pluginManager = this.getServer().getPluginManager();
|
PluginManager pluginManager = this.getServer().getPluginManager();
|
||||||
|
|
||||||
|
|
@ -1269,6 +1274,21 @@ public class GriefPrevention extends JavaPlugin
|
||||||
return this.abandonClaimHandler(player, true);
|
return this.abandonClaimHandler(player, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//forceabandonclaim
|
||||||
|
if (cmd.getName().equalsIgnoreCase("forceabandonclaim") && player != null)
|
||||||
|
{
|
||||||
|
Claim claim = this.dataStore.getClaimAt(player.getLocation(), true /*ignore height*/, true, null);
|
||||||
|
if (claim == null)
|
||||||
|
{
|
||||||
|
GriefPrevention.sendMessage(player, TextMode.Instr, Messages.AbandonClaimMissing);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
PlayerData ownerData = GriefPrevention.instance.dataStore.getPlayerDataFromStorage(claim.ownerID);
|
||||||
|
OfflinePlayer ownerInfo = Bukkit.getServer().getOfflinePlayer(claim.ownerID);
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(GriefPrevention.instance, new CleanupUnusedClaimTask(claim, ownerData, ownerInfo, true), 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//ignoreclaims
|
//ignoreclaims
|
||||||
if (cmd.getName().equalsIgnoreCase("ignoreclaims") && player != null)
|
if (cmd.getName().equalsIgnoreCase("ignoreclaims") && player != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,13 @@ package me.ryanhamshire.GriefPrevention.alttd.config;
|
||||||
|
|
||||||
import com.alttd.galaxy.configuration.AbstractConfiguration;
|
import com.alttd.galaxy.configuration.AbstractConfiguration;
|
||||||
import me.ryanhamshire.GriefPrevention.GriefPrevention;
|
import me.ryanhamshire.GriefPrevention.GriefPrevention;
|
||||||
|
import me.ryanhamshire.GriefPrevention.alttd.util.Logger;
|
||||||
|
import org.spongepowered.configurate.ConfigurationNode;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class AlttdConfig extends AbstractConfiguration
|
public class AlttdConfig extends AbstractConfiguration
|
||||||
|
|
@ -23,9 +30,45 @@ public class AlttdConfig extends AbstractConfiguration
|
||||||
config.readConfig(AlttdConfig.class, null);
|
config.readConfig(AlttdConfig.class, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private HashMap<Long, Long> getMap(String path, HashMap<Long, Long> def) {
|
||||||
|
set(path, def);
|
||||||
|
ConfigurationNode node = config.getNode(path);
|
||||||
|
HashMap<Long, Long> map = new HashMap<>();
|
||||||
|
for (Map.Entry<Object, ? extends ConfigurationNode> entry : node.childrenMap().entrySet()) {
|
||||||
|
try {
|
||||||
|
map.put(Long.parseLong(entry.getKey().toString()), Long.parseLong(entry.getValue().getString()));
|
||||||
|
} catch (NumberFormatException exception) {
|
||||||
|
// handle
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean DEBUG_MODE = false;
|
public static boolean DEBUG_MODE = false;
|
||||||
|
public static boolean alternativeClaimExpiring = false;
|
||||||
|
public static int alternativeClaimExpireDays = 1;
|
||||||
|
public static int expireCheckRate = 1200;
|
||||||
|
public static HashMap<Long, Long> expiringClaims = new HashMap<>();
|
||||||
private static void settings() {
|
private static void settings() {
|
||||||
|
String node = "alternative-claim-expiring";
|
||||||
DEBUG_MODE = config.getBoolean("debug-mode", DEBUG_MODE);
|
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);
|
||||||
|
// todo create an alternative way of loading these in
|
||||||
|
expiringClaims.clear();
|
||||||
|
config.getMap(node + ".claims", new HashMap<>())
|
||||||
|
.forEach((key, value) -> {
|
||||||
|
try {
|
||||||
|
expiringClaims.put(Long.parseLong(key.toString()), value);
|
||||||
|
} catch (NumberFormatException ignored) {}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addExpiringClaim(Long id) {
|
||||||
|
expiringClaims.put(id, System.currentTimeMillis() + TimeUnit.DAYS.toMillis(alternativeClaimExpireDays));
|
||||||
|
config.set("alternative-claim-expiring.claims", expiringClaims);
|
||||||
|
config.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
package me.ryanhamshire.GriefPrevention.alttd.tasks;
|
||||||
|
|
||||||
|
import me.ryanhamshire.GriefPrevention.GriefPrevention;
|
||||||
|
import me.ryanhamshire.GriefPrevention.alttd.config.AlttdConfig;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ClaimExpireTask extends BukkitRunnable
|
||||||
|
{
|
||||||
|
private GriefPrevention plugin;
|
||||||
|
|
||||||
|
public ClaimExpireTask(GriefPrevention plugin)
|
||||||
|
{
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init()
|
||||||
|
{
|
||||||
|
runTaskTimer(plugin, 0, AlttdConfig.expireCheckRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
//Config.expiringClaims.entrySet().removeIf(entry -> System.currentTimeMillis() >= entry.getValue());
|
||||||
|
for(Iterator<Map.Entry<Long, Long>> it = AlttdConfig.expiringClaims.entrySet().iterator(); it.hasNext(); ) {
|
||||||
|
Map.Entry<Long, Long> entry = it.next();
|
||||||
|
if(System.currentTimeMillis() >= entry.getValue()) {
|
||||||
|
it.remove();
|
||||||
|
plugin.getLogger().info("Removed temporary admin claim with id " + entry.getKey());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -19,6 +19,10 @@ commands:
|
||||||
description: Deletes ALL your claims.
|
description: Deletes ALL your claims.
|
||||||
usage: /AbandonAllClaims
|
usage: /AbandonAllClaims
|
||||||
permission: griefprevention.claims
|
permission: griefprevention.claims
|
||||||
|
forceabandonclaim:
|
||||||
|
description: Forces the claim you are standing in to abandon.
|
||||||
|
usage: /forceabandonclaim
|
||||||
|
permission: griefprevention.forceabandonclaim
|
||||||
trust:
|
trust:
|
||||||
description: Grants a player full access to your claim(s).
|
description: Grants a player full access to your claim(s).
|
||||||
usage: /Trust <player> Grants a player permission to build. See also /UnTrust, /ContainerTrust, /AccessTrust, and /PermissionTrust.
|
usage: /Trust <player> Grants a player permission to build. See also /UnTrust, /ContainerTrust, /AccessTrust, and /PermissionTrust.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user