Add alternative claim expiriation
This commit is contained in:
parent
9a12797204
commit
ca71243ad5
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
package me.ryanhamshire.GriefPrevention;
|
||||
|
||||
import me.ryanhamshire.GriefPrevention.alttd.config.AlttdConfig;
|
||||
import me.ryanhamshire.GriefPrevention.events.ClaimExpirationEvent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
|
@ -31,12 +32,19 @@ class CleanupUnusedClaimTask implements Runnable
|
|||
Claim claim;
|
||||
PlayerData ownerData;
|
||||
OfflinePlayer ownerInfo;
|
||||
boolean forced;
|
||||
|
||||
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.ownerData = ownerData;
|
||||
this.ownerInfo = ownerInfo;
|
||||
this.forced = forced;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -80,13 +88,34 @@ class CleanupUnusedClaimTask implements Runnable
|
|||
Calendar earliestPermissibleLastLogin = Calendar.getInstance();
|
||||
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())
|
||||
return;
|
||||
//make a copy of this player's claim list
|
||||
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
|
||||
GriefPrevention.instance.dataStore.deleteClaimsForPlayer(claim.ownerID, true);
|
||||
GriefPrevention.AddLogEntry(" All of " + claim.getOwnerName() + "'s claims have expired.", CustomLogEntryTypes.AdminActivity);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
package me.ryanhamshire.GriefPrevention;
|
||||
|
||||
import me.ryanhamshire.GriefPrevention.DataStore.NoTransferException;
|
||||
import me.ryanhamshire.GriefPrevention.alttd.tasks.ClaimExpireTask;
|
||||
import me.ryanhamshire.GriefPrevention.events.PreventBlockBreakEvent;
|
||||
import me.ryanhamshire.GriefPrevention.events.SaveTrappedPlayerEvent;
|
||||
import me.ryanhamshire.GriefPrevention.events.TrustChangedEvent;
|
||||
|
|
@ -355,6 +356,10 @@ public class GriefPrevention extends JavaPlugin
|
|||
FindUnusedClaimsTask task2 = new FindUnusedClaimsTask();
|
||||
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
|
||||
PluginManager pluginManager = this.getServer().getPluginManager();
|
||||
|
||||
|
|
@ -1269,6 +1274,21 @@ public class GriefPrevention extends JavaPlugin
|
|||
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
|
||||
if (cmd.getName().equalsIgnoreCase("ignoreclaims") && player != null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,6 +2,13 @@ package me.ryanhamshire.GriefPrevention.alttd.config;
|
|||
|
||||
import com.alttd.galaxy.configuration.AbstractConfiguration;
|
||||
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")
|
||||
public class AlttdConfig extends AbstractConfiguration
|
||||
|
|
@ -23,9 +30,45 @@ public class AlttdConfig extends AbstractConfiguration
|
|||
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 alternativeClaimExpiring = false;
|
||||
public static int alternativeClaimExpireDays = 1;
|
||||
public static int expireCheckRate = 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);
|
||||
// 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.
|
||||
usage: /AbandonAllClaims
|
||||
permission: griefprevention.claims
|
||||
forceabandonclaim:
|
||||
description: Forces the claim you are standing in to abandon.
|
||||
usage: /forceabandonclaim
|
||||
permission: griefprevention.forceabandonclaim
|
||||
trust:
|
||||
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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user