diff --git a/GriefDefenderAPI b/GriefDefenderAPI index 920a610..dd5aa22 160000 --- a/GriefDefenderAPI +++ b/GriefDefenderAPI @@ -1 +1 @@ -Subproject commit 920a6101dc1a616c431321fffa31516b951b2fa8 +Subproject commit dd5aa2224cd1c8bb31b20a9938e3388ff894b095 diff --git a/bukkit/src/main/java/com/griefdefender/GDPlayerData.java b/bukkit/src/main/java/com/griefdefender/GDPlayerData.java index 17e3dc4..3d2eb93 100644 --- a/bukkit/src/main/java/com/griefdefender/GDPlayerData.java +++ b/bukkit/src/main/java/com/griefdefender/GDPlayerData.java @@ -46,6 +46,8 @@ import org.bukkit.scheduler.BukkitTask; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.reflect.TypeToken; +import com.griefdefender.api.Tristate; +import com.griefdefender.api.User; import com.griefdefender.api.claim.Claim; import com.griefdefender.api.claim.ClaimType; import com.griefdefender.api.claim.ShovelType; @@ -246,6 +248,11 @@ public class GDPlayerData implements PlayerData { }); } + @Override + public User getUser() { + return this.getSubject(); + } + @Override public String getName() { if (this.playerName == null) { @@ -359,7 +366,7 @@ public class GDPlayerData implements PlayerData { for (int i = 0; i < visualTransactions.size(); i++) { BlockSnapshot snapshot = visualTransactions.get(i).getOriginal(); // If original block does not exist or chunk is not loaded, do not send to player - if (!snapshot.getLocation().getChunk().isLoaded() || !snapshot.matchesWorldState()) { + if (!snapshot.matchesWorldState()) { if (claim != null) { claim.markVisualDirty = true; } @@ -764,6 +771,25 @@ public class GDPlayerData implements PlayerData { return totalTax; } + @Override + public boolean canPvp(Claim claim) { + if (!((GDClaim) claim).getWorld().getPVP()) { + return false; + } + if (!claim.isPvpAllowed()) { + return false; + } + + if (GDOptions.PVP) { + final Tristate result = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Tristate.class), this.getSubject(), Options.PVP, claim); + if (result != Tristate.UNDEFINED) { + return result.asBoolean(); + } + } + return true; + } + + @Override public boolean inPvpCombat() { final Player player = this.getSubject().getOnlinePlayer(); if (this.lastPvpTimestamp == null || player == null) { @@ -784,8 +810,9 @@ public class GDPlayerData implements PlayerData { return true; } - public int getPvpCombatTimeRemaining() { - return this.getPvpCombatTimeRemaining(null); + @Override + public int getRemainingPvpCombatTime(Claim claim) { + return this.getPvpCombatTimeRemaining((GDClaim) claim); } public int getPvpCombatTimeRemaining(GDClaim claim) { diff --git a/bukkit/src/main/java/com/griefdefender/GriefDefenderPlugin.java b/bukkit/src/main/java/com/griefdefender/GriefDefenderPlugin.java index cba42f8..4255bdd 100644 --- a/bukkit/src/main/java/com/griefdefender/GriefDefenderPlugin.java +++ b/bukkit/src/main/java/com/griefdefender/GriefDefenderPlugin.java @@ -635,7 +635,7 @@ public class GriefDefenderPlugin { Bukkit.getPluginManager().registerEvents(new PlayerEventHandler(dataStore), GDBootstrap.getInstance()); Bukkit.getPluginManager().registerEvents(new EntityEventHandler(dataStore), GDBootstrap.getInstance()); Bukkit.getPluginManager().registerEvents(new WorldEventHandler(), GDBootstrap.getInstance()); - Bukkit.getPluginManager().registerEvents(new NMSUtil(), GDBootstrap.getInstance()); + Bukkit.getPluginManager().registerEvents(NMSUtil.getInstance(), GDBootstrap.getInstance()); // run cleanup task int cleanupTaskInterval = GriefDefenderPlugin.getGlobalConfig().getConfig().claim.expirationCleanupInterval; @@ -691,7 +691,7 @@ public class GriefDefenderPlugin { } new PlayerTickTask(); if (GriefDefenderPlugin.getGlobalConfig().getConfig().economy.rentSystem && GriefDefenderPlugin.getGlobalConfig().getConfig().economy.isRentSignEnabled()) { - this.runningTasks.add(new SignUpdateTask(100)); + this.runningTasks.add(new SignUpdateTask(GriefDefenderPlugin.getGlobalConfig().getConfig().economy.signUpdateInterval)); } if (GriefDefenderPlugin.getInstance().getVaultProvider() != null && GriefDefenderPlugin.getGlobalConfig().getConfig().economy.rentSystem) { this.runningTasks.add(new RentDelinquentApplyTask()); @@ -744,7 +744,91 @@ public class GriefDefenderPlugin { public void registerBaseCommands() { PaperCommandManager manager = new PaperCommandManager(GDBootstrap.getInstance()); this.commandManager = manager; - manager.getCommandReplacements().addReplacement("griefdefender", "gd|griefdefender"); + manager.getCommandReplacements().addReplacements( + "griefdefender", "gd|griefdefender", + "abandon-all", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_ABANDON_ALL), + "abandon-claim", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_ABANDON_CLAIM), + "abandon-top", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_ABANDON_TOP), + "abandon-world", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_ABANDON_WORLD), + "buy-blocks", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_BUY_BLOCKS), + "buy-claim", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_BUY_CLAIM), + "callback", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CALLBACK), + "claim-ban", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_BAN), + "claim-bank", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_BANK), + "claim-clear", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_CLEAR), + "claim-contract", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_CONTRACT), + "claim-create", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_CREATE), + "claim-debug", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_DEBUG), + "claim-expand", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_EXPAND), + "claim-farewell", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_FAREWELL), + "claim-greeting", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_GREETING), + "claim-ignore", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_IGNORE), + "claim-info", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_INFO), + "claim-inherit", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_INHERIT), + "claim-investigate", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_INVESTIGATE), + "claim-list", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_LIST), + "claim-name", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_NAME), + "claim-rent", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_RENT), + "claim-reserve", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_RESERVE), + "claim-restore", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_RESTORE), + "claim-setspawn", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_SETSPAWN), + "claim-spawn", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_SPAWN), + "claim-tax", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_TAX), + "claim-tool", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_TOOL), + "claim-transfer", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_TRANSFER), + "claim-unban", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_UNBAN), + "claim-worldedit", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CLAIM_WORLDEDIT), + "confirm", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CONFIRM), + "cuboid", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_CUBOID), + "debug", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_DEBUG), + "delete-all", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_DELETE_ALL), + "delete-all-admin", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_DELETE_ALL_ADMIN), + "delete-claim", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_DELETE_CLAIM), + "delete-top", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_DELETE_TOP), + "economy-block-transfer", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_ECONOMY_BLOCK_TRANSFER), + "flag-claim", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_FLAG_CLAIM), + "flag-group", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_FLAG_GROUP), + "flag-player", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_FLAG_PLAYER), + "flag-reset", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_FLAG_RESET), + "help", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_HELP), + "mode-admin", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_MODE_ADMIN), + "mode-basic", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_MODE_BASIC), + "mode-claim", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_MODE_CLAIM), + "mode-nature", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_MODE_NATURE), + "mode-subdivision", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_MODE_SUBDIVISION), + "mode-town", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_MODE_TOWN), + "option-claim", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_OPTION_CLAIM), + "option-group", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_OPTION_GROUP), + "option-player", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_OPTION_PLAYER), + "permission-group", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_PERMISSION_GROUP), + "permission-player", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_PERMISSION_PLAYER), + "player-adjust-bonus-blocks", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_PLAYER_ADJUST_BONUS_BLOCKS), + "player-adjust-bonus-blocks-all", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_PLAYER_ADJUST_BONUS_BLOCKS_ALL), + "player-give-blocks", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_PLAYER_GIVE_BLOCKS), + "player-give-pet", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_PLAYER_GIVE_PET), + "player-info", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_PLAYER_INFO), + "player-set-accrued-blocks", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_PLAYER_SET_ACCRUED_BLOCKS), + "player-unlock-drops", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_PLAYER_UNLOCK_DROPS), + "reload", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_RELOAD), + "schematic", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_SCHEMATIC), + "sell-blocks", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_SELL_BLOCKS), + "sell-claim", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_SELL_CLAIM), + "town-chat", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TOWN_CHAT), + "town-tag", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TOWN_TAG), + "trapped", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TRAPPED), + "trust-access", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TRUST_ACCESS), + "trust-container", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TRUST_CONTAINER), + "trust-group", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TRUST_GROUP), + "trust-group-all", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TRUST_GROUP_ALL), + "trust-list", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TRUST_LIST), + "trust-player", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TRUST_PLAYER), + "trust-player-all", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_TRUST_PLAYER_ALL), + "untrust-group", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_UNTRUST_GROUP), + "untrust-group-all", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_UNTRUST_GROUP_ALL), + "untrust-player", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_UNTRUST_PLAYER), + "untrust-player-all", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_UNTRUST_PLAYER_ALL), + "version", this.getCommandDescriptionTranslation(MessageStorage.DESCRIPTION_VERSION) + ); manager.registerCommand(new CommandAccessTrust()); manager.registerCommand(new CommandAdjustBonusClaimBlocks()); manager.registerCommand(new CommandAdjustBonusClaimBlocksAll()); @@ -1019,6 +1103,10 @@ public class GriefDefenderPlugin { }); } + private String getCommandDescriptionTranslation(String message) { + return PlainComponentSerializer.INSTANCE.serialize(messageData.getDescription(message)); + } + public PaperCommandManager getCommandManager() { return this.commandManager; } diff --git a/bukkit/src/main/java/com/griefdefender/cache/MessageCache.java b/bukkit/src/main/java/com/griefdefender/cache/MessageCache.java index 0d66363..5c89f52 100644 --- a/bukkit/src/main/java/com/griefdefender/cache/MessageCache.java +++ b/bukkit/src/main/java/com/griefdefender/cache/MessageCache.java @@ -324,7 +324,6 @@ public class MessageCache { public Component LABEL_DEFAULT; public Component LABEL_DISPLAYING; public Component LABEL_EXPIRED; - public Component LABEL_FALSE; public Component LABEL_FAREWELL; public Component LABEL_FILTER; public Component LABEL_FLAG; @@ -360,7 +359,6 @@ public class MessageCache { public Component LABEL_SPAWN; public Component LABEL_STATUS; public Component LABEL_TARGET; - public Component LABEL_TRUE; public Component LABEL_TRUST; public Component LABEL_TYPE; public Component LABEL_UNKNOWN; @@ -424,6 +422,7 @@ public class MessageCache { public Component PERMISSION_COMMAND_TRUST; public Component PERMISSION_CUBOID; public Component PERMISSION_EDIT_CLAIM; + public Component PERMISSION_FALSE; public Component PERMISSION_FIRE_SPREAD; public Component PERMISSION_FLAG_DEFAULTS; public Component PERMISSION_FLAG_OVERRIDES; @@ -442,6 +441,8 @@ public class MessageCache { public Component PERMISSION_PLAYER_OPTION; public Component PERMISSION_PLAYER_VIEW_OTHERS; public Component PERMISSION_TAX; + public Component PERMISSION_TRUE; + public Component PERMISSION_UNDEFINED; public Component PERMISSION_VISUAL_CLAIMS_NEARBY; public Component PLAYER_ITEM_DROPS_LOCK; public Component PLUGIN_EVENT_CANCEL; @@ -796,7 +797,6 @@ public class MessageCache { LABEL_DEFAULT = MessageStorage.MESSAGE_DATA.getMessage("label-default"); LABEL_DISPLAYING = MessageStorage.MESSAGE_DATA.getMessage("label-displaying"); LABEL_EXPIRED = MessageStorage.MESSAGE_DATA.getMessage("label-expired"); - LABEL_FALSE = MessageStorage.MESSAGE_DATA.getMessage("label-false"); LABEL_FAREWELL = MessageStorage.MESSAGE_DATA.getMessage("label-farewell"); LABEL_FILTER = MessageStorage.MESSAGE_DATA.getMessage("label-filter"); LABEL_FLAG = MessageStorage.MESSAGE_DATA.getMessage("label-flag"); @@ -832,7 +832,6 @@ public class MessageCache { LABEL_SPAWN = MessageStorage.MESSAGE_DATA.getMessage("label-spawn"); LABEL_STATUS = MessageStorage.MESSAGE_DATA.getMessage("label-status"); LABEL_TARGET = MessageStorage.MESSAGE_DATA.getMessage("label-target"); - LABEL_TRUE = MessageStorage.MESSAGE_DATA.getMessage("label-true"); LABEL_TRUST = MessageStorage.MESSAGE_DATA.getMessage("label-trust"); LABEL_TYPE = MessageStorage.MESSAGE_DATA.getMessage("label-type"); LABEL_UNKNOWN = MessageStorage.MESSAGE_DATA.getMessage("label-unknown"); @@ -896,6 +895,7 @@ public class MessageCache { PERMISSION_COMMAND_TRUST = MessageStorage.MESSAGE_DATA.getMessage("permission-command-trust"); PERMISSION_CUBOID = MessageStorage.MESSAGE_DATA.getMessage("permission-cuboid"); PERMISSION_EDIT_CLAIM = MessageStorage.MESSAGE_DATA.getMessage("permission-edit-claim"); + PERMISSION_FALSE = MessageStorage.MESSAGE_DATA.getMessage("permission-false"); PERMISSION_FIRE_SPREAD = MessageStorage.MESSAGE_DATA.getMessage("permission-fire-spread"); PERMISSION_FLAG_DEFAULTS = MessageStorage.MESSAGE_DATA.getMessage("permission-flag-defaults"); PERMISSION_FLAG_OVERRIDES = MessageStorage.MESSAGE_DATA.getMessage("permission-flag-overrides"); @@ -914,6 +914,8 @@ public class MessageCache { PERMISSION_PLAYER_OPTION = MessageStorage.MESSAGE_DATA.getMessage("permission-player-option"); PERMISSION_PLAYER_VIEW_OTHERS = MessageStorage.MESSAGE_DATA.getMessage("permission-player-view-others"); PERMISSION_TAX = MessageStorage.MESSAGE_DATA.getMessage("permission-tax"); + PERMISSION_TRUE = MessageStorage.MESSAGE_DATA.getMessage("permission-true"); + PERMISSION_UNDEFINED = MessageStorage.MESSAGE_DATA.getMessage("permission-undefined"); PERMISSION_VISUAL_CLAIMS_NEARBY = MessageStorage.MESSAGE_DATA.getMessage("permission-visual-claims-nearby"); PLAYER_ITEM_DROPS_LOCK = MessageStorage.MESSAGE_DATA.getMessage("player-item-drops-lock"); PLUGIN_EVENT_CANCEL = MessageStorage.MESSAGE_DATA.getMessage("plugin-event-cancel"); diff --git a/bukkit/src/main/java/com/griefdefender/claim/GDClaim.java b/bukkit/src/main/java/com/griefdefender/claim/GDClaim.java index 053db3d..7ec7407 100644 --- a/bukkit/src/main/java/com/griefdefender/claim/GDClaim.java +++ b/bukkit/src/main/java/com/griefdefender/claim/GDClaim.java @@ -53,6 +53,8 @@ import com.griefdefender.api.claim.TrustType; import com.griefdefender.api.claim.TrustTypes; import com.griefdefender.api.data.ClaimData; import com.griefdefender.api.permission.Context; +import com.griefdefender.api.permission.ContextKeys; +import com.griefdefender.api.permission.flag.Flags; import com.griefdefender.api.permission.option.Options; import com.griefdefender.cache.MessageCache; import com.griefdefender.cache.PermissionHolderCache; @@ -2630,6 +2632,15 @@ public class GDClaim implements Claim { return Optional.empty(); } + @Override + public boolean isPvpAllowed() { + final Set contexts = new HashSet<>(); + contexts.add(new Context(ContextKeys.SOURCE, "minecraft:player")); + contexts.add(new Context(ContextKeys.TARGET, "minecraft:player")); + final Tristate result = GDPermissionManager.getInstance().getActiveFlagPermissionValue(this, GriefDefenderPlugin.DEFAULT_HOLDER, Flags.ENTITY_DAMAGE, contexts); + return result == Tristate.TRUE; + } + public static class ClaimBuilder implements Builder { private UUID ownerUniqueId; diff --git a/bukkit/src/main/java/com/griefdefender/command/ClaimFlagBase.java b/bukkit/src/main/java/com/griefdefender/command/ClaimFlagBase.java index 4062262..4490b2b 100644 --- a/bukkit/src/main/java/com/griefdefender/command/ClaimFlagBase.java +++ b/bukkit/src/main/java/com/griefdefender/command/ClaimFlagBase.java @@ -120,7 +120,6 @@ public abstract class ClaimFlagBase extends BaseCommand { public void execute(Player player, String[] args) throws InvalidCommandArgument { final GDPermissionUser src = PermissionHolderCache.getInstance().getOrCreateUser(player); - final GDPermissionHolder commandSubject = subject; final GDPlayerData playerData = src.getInternalPlayerData(); final GDClaim claim = GriefDefenderPlugin.getInstance().dataStore.getClaimAtPlayer(playerData, player.getLocation()); String commandFlag = null; @@ -401,74 +400,24 @@ public abstract class ClaimFlagBase extends BaseCommand { .append(overrideFlagText).build(); } - Set defaultContexts = new HashSet<>(); - Set overrideContexts = new HashSet<>(); - if (claim.isAdminClaim()) { - defaultContexts.add(ClaimContexts.ADMIN_DEFAULT_CONTEXT); - overrideContexts.add(ClaimContexts.ADMIN_OVERRIDE_CONTEXT); - } else if (claim.isBasicClaim() || claim.isSubdivision()) { - defaultContexts.add(ClaimContexts.BASIC_DEFAULT_CONTEXT); - overrideContexts.add(ClaimContexts.BASIC_OVERRIDE_CONTEXT); - } else if (claim.isTown()) { - defaultContexts.add(ClaimContexts.TOWN_DEFAULT_CONTEXT); - overrideContexts.add(ClaimContexts.TOWN_OVERRIDE_CONTEXT); - } else { - defaultContexts.add(ClaimContexts.WILDERNESS_DEFAULT_CONTEXT); - overrideContexts.add(ClaimContexts.WILDERNESS_OVERRIDE_CONTEXT); - } - if (!claim.isWilderness()) { - defaultContexts.add(ClaimContexts.USER_DEFAULT_CONTEXT); - overrideContexts.add(ClaimContexts.USER_OVERRIDE_CONTEXT); - } - defaultContexts.add(claim.getWorldContext()); - defaultContexts.add(ClaimContexts.GLOBAL_DEFAULT_CONTEXT); - overrideContexts.add(claim.getWorldContext()); - overrideContexts.add(ClaimContexts.GLOBAL_OVERRIDE_CONTEXT); - overrideContexts.add(claim.getOverrideClaimContext()); - - Map filteredContextMap = new HashMap<>(); + Map flagDataMap = new HashMap<>(); for (Map.Entry, Map> mapEntry : PermissionUtil.getInstance().getTransientPermissions(GriefDefenderPlugin.GD_DEFAULT_HOLDER).entrySet()) { final Set contextSet = mapEntry.getKey(); if (contextSet.contains(claim.getDefaultTypeContext())) { - this.addFilteredContexts(filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); + this.addFilteredContexts(GriefDefenderPlugin.GD_DEFAULT_HOLDER, flagDataMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); } else if (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT))) { - this.addFilteredContexts(filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); + this.addFilteredContexts(GriefDefenderPlugin.GD_DEFAULT_HOLDER, flagDataMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); } } final List inheritParents = claim.getInheritedParents(); - for (Map.Entry, Map> mapEntry : PermissionUtil.getInstance().getAllPermanentPermissions().entrySet()) { - final Set contextSet = mapEntry.getKey(); - if (contextSet.contains(claim.getDefaultTypeContext())) { - this.addFilteredContexts(filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); - } else if (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT))) { - this.addFilteredContexts(filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); - } - if (displayType != MenuType.DEFAULT) { - if (contextSet.contains(claim.getContext())) { - this.addFilteredContexts(filteredContextMap, contextSet, MenuType.CLAIM, mapEntry.getValue()); - } - for (Claim parentClaim : inheritParents) { - GDClaim parent = (GDClaim) parentClaim; - // check parent context - if (contextSet.contains(parent.getContext())) { - this.addFilteredContexts(filteredContextMap, contextSet, MenuType.INHERIT, mapEntry.getValue()); - } - } - if (contextSet.contains(ClaimContexts.GLOBAL_OVERRIDE_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_OVERRIDE_CONTEXT))) { - this.addFilteredContexts(filteredContextMap, contextSet, MenuType.OVERRIDE, mapEntry.getValue()); - } - if (contextSet.contains(claim.getOverrideClaimContext())) { - this.addFilteredContexts(filteredContextMap, contextSet, MenuType.OVERRIDE, mapEntry.getValue()); - } else if (contextSet.contains(claim.getOverrideTypeContext())) { - this.addFilteredContexts(filteredContextMap, contextSet, MenuType.OVERRIDE, mapEntry.getValue()); - } - } - } + this.generateFilteredContexts(claim, GriefDefenderPlugin.GD_DEFAULT_HOLDER, flagDataMap, displayType, inheritParents); + this.generateFilteredContexts(claim, GriefDefenderPlugin.GD_CLAIM_HOLDER, flagDataMap, displayType, inheritParents); + this.generateFilteredContexts(claim, GriefDefenderPlugin.GD_DEFINITION_HOLDER, flagDataMap, displayType, inheritParents); + this.generateFilteredContexts(claim, GriefDefenderPlugin.GD_OVERRIDE_HOLDER, flagDataMap, displayType, inheritParents); final Map> textMap = new TreeMap<>(); - for (Entry mapEntry : filteredContextMap.entrySet()) { - final UIFlagData flagData = mapEntry.getValue(); + for (UIFlagData flagData : flagDataMap.values()) { final Flag flag = flagData.flag; if (!GDFlags.isFlagEnabled(flag)) { continue; @@ -482,7 +431,7 @@ public abstract class ClaimFlagBase extends BaseCommand { Component flagText = TextComponent.builder() .append(getFlagText(flag, contexts)) .append(" ") - .append(this.getClickableText(src, claim, flag, flagHolder, contexts, displayType)) + .append(this.getClickableText(src, flagData.holder, claim, flag, flagHolder, contexts, displayType)) .build(); final int hashCode = Objects.hash(flag.getPermission(), contexts); Map componentMap = textMap.get(flag.getPermission()); @@ -547,17 +496,69 @@ public abstract class ClaimFlagBase extends BaseCommand { paginationList.sendTo(player, activePage); } - private void addFilteredContexts(Map filteredContextMap, Set contexts, MenuType type, Map permissions) { + private void generateFilteredContexts(GDClaim claim, GDPermissionHolder holder, Map flagDataMap, MenuType displayType, List inheritParents) { + for (Map.Entry, Map> mapEntry : PermissionUtil.getInstance().getPermanentPermissions(holder).entrySet()) { + final Set contextSet = mapEntry.getKey(); + final Map flagPermissions = mapEntry.getValue(); + if (displayType == MenuType.DEFAULT && (holder == GriefDefenderPlugin.GD_DEFAULT_HOLDER || holder == GriefDefenderPlugin.GD_DEFINITION_HOLDER)) { + if (contextSet.contains(claim.getDefaultTypeContext())) { + this.addFilteredContexts(holder, flagDataMap, contextSet, MenuType.DEFAULT, flagPermissions); + } else if (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT))) { + this.addFilteredContexts(holder, flagDataMap, contextSet, MenuType.DEFAULT, flagPermissions); + } + } + if (displayType == MenuType.CLAIM && holder != GriefDefenderPlugin.GD_OVERRIDE_HOLDER) { + boolean inheritPermission = false; + for (Claim parentClaim : inheritParents) { + GDClaim parent = (GDClaim) parentClaim; + // check parent context + if (contextSet.contains(parent.getContext())) { + inheritPermission = true; + break; + } + } + if (inheritPermission) { + continue; + } + if (contextSet.contains(claim.getContext())) { + this.addFilteredContexts(holder, flagDataMap, contextSet, MenuType.CLAIM, flagPermissions); + } + } + if (displayType == MenuType.INHERIT && holder != GriefDefenderPlugin.GD_OVERRIDE_HOLDER) { + for (Claim parentClaim : inheritParents) { + GDClaim parent = (GDClaim) parentClaim; + // check parent context + if (contextSet.contains(parent.getContext())) { + this.addFilteredContexts(holder, flagDataMap, contextSet, MenuType.INHERIT, flagPermissions); + } + } + } + if (displayType == MenuType.OVERRIDE && holder != GriefDefenderPlugin.GD_CLAIM_HOLDER) { + if (contextSet.contains(ClaimContexts.GLOBAL_OVERRIDE_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_OVERRIDE_CONTEXT))) { + this.addFilteredContexts(holder, flagDataMap, contextSet, MenuType.OVERRIDE, flagPermissions); + } + if (contextSet.contains(claim.getOverrideClaimContext())) { + this.addFilteredContexts(holder, flagDataMap, contextSet, MenuType.OVERRIDE, flagPermissions); + } else if (contextSet.contains(claim.getOverrideTypeContext())) { + this.addFilteredContexts(holder, flagDataMap, contextSet, MenuType.OVERRIDE, flagPermissions); + } + } + } + } + + private void addFilteredContexts(GDPermissionHolder holder, Map flagDataMap, Set contexts, MenuType type, Map permissions) { for (Map.Entry permissionEntry : permissions.entrySet()) { final Flag flag = FlagRegistryModule.getInstance().getById(permissionEntry.getKey()).orElse(null); if (flag == null) { continue; } - final UIFlagData flagData = filteredContextMap.get(permissionEntry.getKey()); + final UIFlagData flagData = flagDataMap.get(permissionEntry.getKey()); if (flagData != null) { flagData.addContexts(flag, permissionEntry.getValue(), type, contexts); + // set new holder + flagData.setHolder(holder); } else { - filteredContextMap.put(permissionEntry.getKey(), new UIFlagData(flag, permissionEntry.getValue(), type, contexts)); + flagDataMap.put(permissionEntry.getKey(), new UIFlagData(holder, flag, permissionEntry.getValue(), type, contexts)); } } } @@ -696,7 +697,13 @@ public abstract class ClaimFlagBase extends BaseCommand { } else if (defaultResult == Tristate.FALSE) { valueColor = TextColor.RED; } - valueBuilder.append(String.valueOf(defaultResult).toLowerCase(), valueColor); + if (defaultResult == Tristate.TRUE) { + valueBuilder.append(MessageCache.getInstance().PERMISSION_TRUE.color(valueColor)); + } else if (defaultResult == Tristate.FALSE) { + valueBuilder.append(MessageCache.getInstance().PERMISSION_FALSE.color(valueColor)); + } else { + valueBuilder.append(MessageCache.getInstance().PERMISSION_UNDEFINED.color(valueColor)); + } } if (hasEditPermission) { @@ -941,7 +948,7 @@ public abstract class ClaimFlagBase extends BaseCommand { return new GDActiveFlagData(flagDefinition, flagData,Tristate.UNDEFINED, permissionContexts, GDActiveFlagData.Type.UNDEFINED); } - private Component getClickableText(GDPermissionUser src, GDClaim claim, Flag flag, FlagContextHolder flagHolder, Set contexts, MenuType displayType) { + private Component getClickableText(GDPermissionUser src, GDPermissionHolder holder, GDClaim claim, Flag flag, FlagContextHolder flagHolder, Set contexts, MenuType displayType) { Component hoverEventText = TextComponent.empty(); final MenuType flagType = flagHolder.getType(); final Player player = src.getOnlinePlayer(); @@ -1029,15 +1036,20 @@ public abstract class ClaimFlagBase extends BaseCommand { } } - TextComponent.Builder valueBuilder = TextComponent.builder() - .append(String.valueOf(value), flagHolder.getColor()) - .hoverEvent(HoverEvent.showText(hoverText)); + TextComponent.Builder valueBuilder = TextComponent.builder(); + if (value) { + valueBuilder.append(MessageCache.getInstance().PERMISSION_TRUE.color(flagHolder.getColor())); + } else { + valueBuilder.append(MessageCache.getInstance().PERMISSION_FALSE.color(flagHolder.getColor())); + } + + valueBuilder.hoverEvent(HoverEvent.showText(hoverText)); TextComponent.Builder textBuilder = null; if (hasEditPermission) { textBuilder = TextComponent.builder() .append(valueBuilder .hoverEvent(HoverEvent.showText(hoverText)) - .clickEvent(ClickEvent.runCommand(GDCallbackHolder.getInstance().createCallbackRunCommand(createFlagConsumer(src, claim, flag, flagHolder, newValue, contexts, displayType)))) + .clickEvent(ClickEvent.runCommand(GDCallbackHolder.getInstance().createCallbackRunCommand(createFlagConsumer(src, holder, claim, flag, flagHolder, newValue, contexts, displayType)))) .build()); } else { textBuilder = TextComponent.builder() @@ -1081,7 +1093,7 @@ public abstract class ClaimFlagBase extends BaseCommand { .append(TextComponent.builder() .append("x", TextColor.RED) .hoverEvent(HoverEvent.showText(MessageCache.getInstance().FLAG_UI_CLICK_REMOVE)) - .clickEvent(ClickEvent.runCommand(GDCallbackHolder.getInstance().createCallbackRunCommand(createFlagConsumer(src, claim, flag, flagHolder, Tristate.UNDEFINED, contexts, displayType)))) + .clickEvent(ClickEvent.runCommand(GDCallbackHolder.getInstance().createCallbackRunCommand(createFlagConsumer(src, holder, claim, flag, flagHolder, Tristate.UNDEFINED, contexts, displayType)))) .build()) .append("]", TextColor.WHITE); } @@ -1129,7 +1141,7 @@ public abstract class ClaimFlagBase extends BaseCommand { }; } - private Consumer createFlagConsumer(GDPermissionUser src, GDClaim claim, Flag flag, FlagContextHolder flagHolder, Tristate newValue, Set contexts, MenuType displayType) { + private Consumer createFlagConsumer(GDPermissionUser src, GDPermissionHolder holder, GDClaim claim, Flag flag, FlagContextHolder flagHolder, Tristate newValue, Set contexts, MenuType displayType) { final Player player = src.getOnlinePlayer(); return consumer -> { GDCauseStackManager.getInstance().pushCause(player); @@ -1167,7 +1179,7 @@ public abstract class ClaimFlagBase extends BaseCommand { newContexts.add(serverContext); } - GDFlagPermissionEvent.Set event = new GDFlagPermissionEvent.Set(this.subject, flag, newValue, newContexts); + GDFlagPermissionEvent.Set event = new GDFlagPermissionEvent.Set(holder, flag, newValue, newContexts); GriefDefender.getEventManager().post(event); GDCauseStackManager.getInstance().popCause(); if (event.cancelled()) { @@ -1175,7 +1187,7 @@ public abstract class ClaimFlagBase extends BaseCommand { } if (displayType == MenuType.DEFAULT || (hasDefaultContext && src.getInternalPlayerData().canManageFlagDefaults)) { - CompletableFuture future = PermissionUtil.getInstance().setPermissionValue(this.subject, flag.getPermission(), newValue, newContexts); + CompletableFuture future = PermissionUtil.getInstance().setPermissionValue(holder, flag.getPermission(), newValue, newContexts); future.thenAccept(r -> { Bukkit.getScheduler().runTask(GDBootstrap.getInstance(), () -> { showFlagPermissions(src, claim, displayType); @@ -1185,12 +1197,12 @@ public abstract class ClaimFlagBase extends BaseCommand { } final Context permServerContext = serverContext; - CompletableFuture future = PermissionUtil.getInstance().setPermissionValue(this.subject, flag, newValue, newContexts); + CompletableFuture future = PermissionUtil.getInstance().setPermissionValue(holder, flag, newValue, newContexts); future.thenAcceptAsync(r -> { if (!r.successful()) { // Try again without server context newContexts.remove(permServerContext); - CompletableFuture newFuture = PermissionUtil.getInstance().setPermissionValue(this.subject, flag, newValue, newContexts, false, true); + CompletableFuture newFuture = PermissionUtil.getInstance().setPermissionValue(holder, flag, newValue, newContexts, false, true); newFuture.thenAccept(r2 -> { if (r2.successful()) { Bukkit.getScheduler().runTask(GDBootstrap.getInstance(), () -> { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandAdjustBonusClaimBlocks.java b/bukkit/src/main/java/com/griefdefender/command/CommandAdjustBonusClaimBlocks.java index d20bd54..086746b 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandAdjustBonusClaimBlocks.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandAdjustBonusClaimBlocks.java @@ -39,6 +39,8 @@ import com.griefdefender.GriefDefenderPlugin; import com.griefdefender.cache.MessageCache; import com.griefdefender.configuration.MessageStorage; import com.griefdefender.permission.GDPermissions; +import com.griefdefender.storage.BaseStorage; + import net.kyori.text.Component; import net.kyori.text.adapter.bukkit.TextAdapter; import org.bukkit.Bukkit; @@ -53,29 +55,40 @@ public class CommandAdjustBonusClaimBlocks extends BaseCommand { @CommandCompletion("@gdplayers @gddummy") @CommandAlias("acb|adjustclaimblocks") - @Description("Adjusts a player's bonus claim block total by amount specified") + @Description("%player-adjust-bonus-blocks") @Syntax(" ") @Subcommand("player adjustbonusblocks") public void execute(CommandSender src, OfflinePlayer user, int amount, @Optional String worldName) { - World world = worldName == null ? null : Bukkit.getServer().getWorld(worldName); - if (world == null) { - if (src instanceof Player) { - world = ((Player) src).getWorld(); - } else { - world = Bukkit.getServer().getWorlds().get(0); + World world = null; + GDPlayerData playerData = null; + if (BaseStorage.USE_GLOBAL_PLAYER_STORAGE) { + playerData = BaseStorage.GLOBAL_PLAYER_DATA.get(user.getUniqueId()); + if (playerData == null) { + playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreateGlobalPlayerData(user.getUniqueId()); } + } else { + world = worldName == null ? null : Bukkit.getServer().getWorld(worldName); + if (world == null) { + if (src instanceof Player) { + world = ((Player) src).getWorld(); + } else { + world = Bukkit.getServer().getWorlds().get(0); + } + } + playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(world.getUID(), user.getUniqueId()); } - if (world == null || !GriefDefenderPlugin.getInstance().claimsEnabledForWorld(world.getUID())) { + + if (!BaseStorage.USE_GLOBAL_PLAYER_STORAGE && (world == null || !GriefDefenderPlugin.getInstance().claimsEnabledForWorld(world.getUID()))) { GriefDefenderPlugin.sendMessage(src, MessageCache.getInstance().CLAIM_DISABLED_WORLD); return; } - GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(world.getUID(), user.getUniqueId()); - playerData.setBonusClaimBlocks(playerData.getBonusClaimBlocks() + amount); + final int totalBonus = playerData.getBonusClaimBlocks(); + playerData.setBonusClaimBlocks(totalBonus + amount); final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.ADJUST_BONUS_BLOCKS_SUCCESS, ImmutableMap.of( "player", user.getName(), "amount", amount, - "total", playerData.getBonusClaimBlocks() + amount)); + "total", totalBonus + amount)); TextAdapter.sendComponent(src, message); GriefDefenderPlugin.getInstance().getLogger().info( src.getName() + " adjusted " + user.getName() + "'s bonus claim blocks by " + amount + "."); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandAdjustBonusClaimBlocksAll.java b/bukkit/src/main/java/com/griefdefender/command/CommandAdjustBonusClaimBlocksAll.java index fe7ddfe..dccac93 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandAdjustBonusClaimBlocksAll.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandAdjustBonusClaimBlocksAll.java @@ -57,7 +57,7 @@ import org.bukkit.entity.Player; public class CommandAdjustBonusClaimBlocksAll extends BaseCommand { @CommandAlias("acball|adjustclaimblocksall") - @Description("Adjusts bonus claim block total for all online players by amount specified") + @Description("%player-adjust-bonus-blocks-all") @Syntax("") @Subcommand("player adjustbonusblocksall") public void execute(CommandSender src, int amount) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandCallback.java b/bukkit/src/main/java/com/griefdefender/command/CommandCallback.java index 1b71798..d3910e2 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandCallback.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandCallback.java @@ -36,7 +36,7 @@ import java.util.function.Consumer; public class CommandCallback extends BaseCommand { @CommandAlias("gd:callback") - @Description("Execute a callback registered as part of a Text object. Primarily for internal use") + @Description("%callback") public void execute(CommandSender src, String[] args) { final UUID callbackId = UUID.fromString(args[0]); final Consumer callback = GDCallbackHolder.getInstance().getCallbackForUUID(callbackId); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandon.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandon.java index 2eb2bc7..19b3aa9 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandon.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandon.java @@ -76,21 +76,15 @@ public class CommandClaimAbandon extends BaseCommand { protected boolean abandonTopClaim = false; @CommandAlias("abandon|abandonclaim") - @Description("Abandons a claim") + @Description("%abandon-claim") @Subcommand("abandon claim") public void execute(Player player) { final GDClaim claim = GriefDefenderPlugin.getInstance().dataStore.getClaimAt(player.getLocation()); final UUID ownerId = claim.getOwnerUniqueId(); - GDPermissionUser user = null; - if (ownerId != null) { - user = PermissionHolderCache.getInstance().getOrCreateUser(ownerId); - } else { - user = PermissionHolderCache.getInstance().getOrCreateUser(player); - } + final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(player.getUniqueId()); final GDPlayerData playerData = user.getInternalPlayerData(); final boolean isAdmin = playerData.canIgnoreClaim(claim); - final boolean isTown = claim.isTown(); if (claim.isWilderness()) { GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().ABANDON_CLAIM_MISSING); return; @@ -109,7 +103,6 @@ public class CommandClaimAbandon extends BaseCommand { Set invalidClaims = new HashSet<>(); for (Claim child : claim.getChildren(true)) { if (child.getOwnerUniqueId() == null || !child.getOwnerUniqueId().equals(ownerId)) { - //return CommandResult.empty(); invalidClaims.add(child); } } @@ -122,19 +115,38 @@ public class CommandClaimAbandon extends BaseCommand { } } } - - final int abandonDelay = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), user, Options.ABANDON_DELAY, claim); - if (abandonDelay > 0) { - final Instant localNow = Instant.now(); - final Instant dateCreated = claim.getInternalClaimData().getDateCreated(); - final Instant delayExpires = dateCreated.plus(Duration.ofDays(abandonDelay)); - final boolean delayActive = !delayExpires.isBefore(localNow); - if (delayActive) { - TextAdapter.sendComponent(player, MessageStorage.MESSAGE_DATA.getMessage(MessageStorage.ABANDON_CLAIM_DELAY_WARNING, - ImmutableMap.of("date", Date.from(delayExpires)))); + if (!isAdmin && (claim.isTown() && claim.children.size() > 0)) { + Set childClaims = new HashSet<>(); + for (Claim child : claim.getChildren(true)) { + if (!child.isBasicClaim()) { + continue; + } + if (child.getOwnerUniqueId().equals(user.getUniqueId())) { + childClaims.add(child); + } + } + if (!childClaims.isEmpty()) { + GriefDefenderPlugin.sendMessage(player, TextComponent.of("Abandon town failed! You must abandon all basic children claims owned by you first.", TextColor.RED)); + CommandHelper.showClaims(player, childClaims, 0, true); return; } } + + if (!isAdmin) { + final int abandonDelay = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), user, Options.ABANDON_DELAY, claim); + if (abandonDelay > 0) { + final Instant localNow = Instant.now(); + final Instant dateCreated = claim.getInternalClaimData().getDateCreated(); + final Instant delayExpires = dateCreated.plus(Duration.ofDays(abandonDelay)); + final boolean delayActive = !delayExpires.isBefore(localNow); + if (delayActive) { + TextAdapter.sendComponent(player, MessageStorage.MESSAGE_DATA.getMessage(MessageStorage.ABANDON_CLAIM_DELAY_WARNING, + ImmutableMap.of("date", Date.from(delayExpires)))); + return; + } + } + } + final boolean autoSchematicRestore = GriefDefenderPlugin.getActiveConfig(player.getWorld().getUID()).getConfig().claim.claimAutoSchematicRestore; final Component confirmationText = TextComponent.builder() .append(autoSchematicRestore ? MessageCache.getInstance().SCHEMATIC_ABANDON_RESTORE_WARNING : MessageCache.getInstance().ABANDON_WARNING) @@ -197,6 +209,17 @@ public class CommandClaimAbandon extends BaseCommand { } if (!claim.isAdminClaim()) { + // check parent + final Claim parentClaim = claim.getParent().orElse(null); + if (parentClaim != null && parentClaim.isTown()) { + if (parentClaim.isUserTrusted(user.getUniqueId(), TrustTypes.MANAGER)) { + int remainingBlocks = playerData.getRemainingClaimBlocks(); + final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.ABANDON_SUCCESS, ImmutableMap.of( + "amount", remainingBlocks)); + GriefDefenderPlugin.sendMessage(source, message); + return; + } + } final double abandonReturnRatio = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Double.class), user, Options.ABANDON_RETURN_RATIO, claim); if (GriefDefenderPlugin.getInstance().isEconomyModeEnabled()) { final Economy economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi(); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonAll.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonAll.java index 1bb9c93..efd3104 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonAll.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonAll.java @@ -76,7 +76,7 @@ public class CommandClaimAbandonAll extends BaseCommand { @CommandCompletion("@gdworlds @gddummy") @CommandAlias("abandonall|abandonallclaims") - @Description("Abandons ALL your claims") + @Description("%abandon-all") @Subcommand("abandon all") public void execute(Player player, @Optional String worldName) { final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(player); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonTop.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonTop.java index 6be45b8..af8e6f2 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonTop.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonTop.java @@ -40,7 +40,7 @@ public class CommandClaimAbandonTop extends CommandClaimAbandon { } @CommandAlias("abandontop") - @Description("Abandons top level claim") + @Description("%abandon-top") @Subcommand("abandon top") public void execute(Player player) { super.execute(player); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonWorld.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonWorld.java index ce25d81..d97ce47 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonWorld.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAbandonWorld.java @@ -74,7 +74,7 @@ public class CommandClaimAbandonWorld extends BaseCommand { @CommandCompletion("@gdworlds @gddummy") @CommandAlias("abandonworld") - @Description("Special admin command used to abandon ALL user claims in world") + @Description("%abandon-world") @Subcommand("abandon world") @Syntax("[]") public void execute(Player player, @Optional String worldName) { @@ -170,7 +170,7 @@ public class CommandClaimAbandonWorld extends BaseCommand { if (GriefDefenderPlugin.getInstance().isEconomyModeEnabled()) { final Economy economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi(); if (!economy.hasAccount(user.getOfflinePlayer())) { - return; + continue; } final EconomyResponse result = economy.depositPlayer(user.getOfflinePlayer(), refund); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAdmin.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAdmin.java index 93267cc..9dd9360 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimAdmin.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimAdmin.java @@ -41,7 +41,7 @@ import org.bukkit.entity.Player; public class CommandClaimAdmin extends BaseCommand { @CommandAlias("modeadmin|adminclaims|ac") - @Description("Switches the shovel tool to administrative claims mode") + @Description("%mode-admin") @Subcommand("mode admin") public void execute(Player player) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBan.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBan.java index c98cb5d..5f411b4 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBan.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBan.java @@ -54,7 +54,7 @@ public class CommandClaimBan extends BaseCommand { @CommandCompletion("@gdbantypes @gdmcids @gddummy") @CommandAlias("claimban") - @Description("Bans target id from all usage.") + @Description("%claim-ban") @Syntax("hand | []") @Subcommand("ban") public void execute(Player player, String type, @Optional String id, @Optional String message) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBank.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBank.java index 611cd4c..5683136 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBank.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBank.java @@ -44,7 +44,7 @@ public class CommandClaimBank extends BaseCommand { protected boolean townOnly = false; @CommandAlias("claimbank") - @Description("Used for claim bank queries") + @Description("%claim-bank") @Syntax(" ") @Subcommand("claim bank") public void execute(Player player, @Optional String[] args) throws CommandException { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBasic.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBasic.java index 71ff5be..8b73ec1 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBasic.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBasic.java @@ -41,7 +41,7 @@ import org.bukkit.entity.Player; public class CommandClaimBasic extends BaseCommand { @CommandAlias("modebasic|basicclaims|bc") - @Description("Switches the shovel tool back to basic claims mode") + @Description("%mode-basic") @Subcommand("mode basic") public void execute(Player player) { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBuy.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBuy.java index aadcad4..db2da6f 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBuy.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBuy.java @@ -56,7 +56,7 @@ import java.util.Set; public class CommandClaimBuy extends BaseCommand { @CommandAlias("claimbuy") - @Description("List all claims available for purchase.\nNote: Requires economy plugin.") + @Description("%buy-claim") @Subcommand("buy claim") public void execute(Player player) { if (GriefDefenderPlugin.getInstance().getVaultProvider() == null) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBuyBlocks.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBuyBlocks.java index 634cd7b..27d7f1c 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimBuyBlocks.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimBuyBlocks.java @@ -54,7 +54,7 @@ import org.bukkit.entity.Player; public class CommandClaimBuyBlocks extends BaseCommand { @CommandAlias("buyclaim|buyclaimblocks|buyblocks") - @Description("Purchases additional claim blocks with server money.\nNote: Requires economy plugin.") + @Description("%buy-blocks") @Syntax("[]") @Subcommand("buy blocks") public void execute(Player player, @Optional Integer blockCount) { @@ -78,6 +78,11 @@ public class CommandClaimBuyBlocks extends BaseCommand { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); final double economyBlockCost = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Double.class), player, Options.ECONOMY_BLOCK_COST); + if (economyBlockCost <= 0) { + GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().ECONOMY_BLOCK_BUY_SELL_DISABLED); + return; + } + final double balance = economy.getBalance(player); if (blockCount == null) { final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.ECONOMY_BLOCK_PURCHASE_COST, ImmutableMap.of( diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimClear.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimClear.java index 6480a16..77b5766 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimClear.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimClear.java @@ -60,7 +60,7 @@ public class CommandClaimClear extends BaseCommand { @CommandCompletion("@gdentityids @gddummy") @CommandAlias("claimclear") - @Description("Allows clearing of entities within one or more claims.") + @Description("%claim-clear") @Syntax(" [claim_uuid]") @Subcommand("claim clear") public void execute(Player player, String target, @Optional String claimId) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimContract.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimContract.java index b4fd40d..65eac38 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimContract.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimContract.java @@ -45,6 +45,7 @@ import com.griefdefender.cache.MessageCache; import com.griefdefender.cache.PermissionHolderCache; import com.griefdefender.claim.GDClaim; import com.griefdefender.configuration.MessageStorage; +import com.griefdefender.event.GDCauseStackManager; import com.griefdefender.internal.visual.GDClaimVisual; import com.griefdefender.permission.GDPermissionUser; import com.griefdefender.permission.GDPermissions; @@ -68,7 +69,7 @@ public class CommandClaimContract extends BaseCommand { @CommandCompletion("@gddummy @gdblockfaces @gddummy") @CommandAlias("claimcontract|contractclaim") - @Description("Contracts/Shrinks the claim from the direction you are facing.") + @Description("%claim-contract") @Syntax(" [direction]") @Subcommand("claim contract") public void execute(Player player, int amount, @Optional String direction) { @@ -130,7 +131,9 @@ public class CommandClaimContract extends BaseCommand { greater.getZ() - amount); } + GDCauseStackManager.getInstance().pushCause(player); final ClaimResult result = claim.resize(point1, point2); + GDCauseStackManager.getInstance().popCause(); if (!result.successful()) { if (result.getResultType() == ClaimResultType.OVERLAPPING_CLAIM) { GDClaim overlapClaim = (GDClaim) result.getClaim().get(); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimCreate.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimCreate.java index 23d6d85..89155e2 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimCreate.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimCreate.java @@ -72,7 +72,7 @@ public class CommandClaimCreate extends BaseCommand { @CommandCompletion("@gddummy @gdclaimtypes @gddummy") @CommandAlias("claimcreate") - @Description("Creates a claim around the player.") + @Description("%claim-create") @Syntax(" [type]") @Subcommand("claim create") public void execute(Player player, int radius, @Optional String type) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimCuboid.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimCuboid.java index fec6396..bf137a2 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimCuboid.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimCuboid.java @@ -41,7 +41,7 @@ import org.bukkit.entity.Player; public class CommandClaimCuboid extends BaseCommand { @CommandAlias("cuboid") - @Description("Toggles cuboid claims mode.") + @Description("%cuboid") @Subcommand("cuboid") public void execute(Player player) { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDelete.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDelete.java index e32312e..561af67 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDelete.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDelete.java @@ -59,7 +59,7 @@ public class CommandClaimDelete extends BaseCommand { protected boolean deleteTopLevelClaim = false; @CommandAlias("deleteclaim") - @Description("Deletes the claim you're standing in, even if it's not your claim.") + @Description("%delete-claim") @Subcommand("delete claim") public void execute(Player player) { final GDClaim claim = GriefDefenderPlugin.getInstance().dataStore.getClaimAt(player.getLocation()); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAll.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAll.java index 98ca76d..f465aac 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAll.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAll.java @@ -74,7 +74,7 @@ public class CommandClaimDeleteAll extends BaseCommand { @CommandCompletion("@gdplayers @gdworlds @gddummy") @CommandAlias("deleteall") - @Description("Delete all of another player's claims.") + @Description("%delete-all") @Syntax(" []") @Subcommand("delete all") public void execute(Player src, String otherPlayer, @Optional String worldName) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAllAdmin.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAllAdmin.java index 7566349..718ee35 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAllAdmin.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAllAdmin.java @@ -61,7 +61,7 @@ import org.bukkit.entity.Player; public class CommandClaimDeleteAllAdmin extends BaseCommand { @CommandAlias("deletealladmin") - @Description("Deletes all administrative claims.") + @Description("%delete-all-admin") @Subcommand("delete alladmin") public void execute(Player player, @Optional String worldName) { World world = null; @@ -95,23 +95,29 @@ public class CommandClaimDeleteAllAdmin extends BaseCommand { TextAdapter.sendComponent(player, confirmationText); } - private static Consumer createConfirmationConsumer(Player player, World world) { + private static Consumer createConfirmationConsumer(Player player, World targetWorld) { return confirm -> { - final UUID worldUniqueId = world != null ? world.getUID() : null; - ClaimResult claimResult = GriefDefenderPlugin.getInstance().dataStore.deleteAllAdminClaims(player, worldUniqueId); - if (!claimResult.successful()) { - final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CLAIM_TYPE_NOT_FOUND, - ImmutableMap.of( - "type", ClaimTypes.ADMIN.getName().toLowerCase())); - GriefDefenderPlugin.sendMessage(player, claimResult.getMessage().orElse(message)); - return; + final UUID worldUniqueId = targetWorld != null ? targetWorld.getUID() : null; + if (worldUniqueId == null) { + for (World world : Bukkit.getWorlds()) { + GriefDefenderPlugin.getInstance().dataStore.deleteAllAdminClaims(player, world.getUID()); + } + } else { + ClaimResult claimResult = GriefDefenderPlugin.getInstance().dataStore.deleteAllAdminClaims(player, worldUniqueId); + if (!claimResult.successful()) { + final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CLAIM_TYPE_NOT_FOUND, + ImmutableMap.of( + "type", ClaimTypes.ADMIN.getName().toLowerCase())); + GriefDefenderPlugin.sendMessage(player, claimResult.getMessage().orElse(message)); + return; + } } Component message = null; - if (world != null) { + if (targetWorld != null) { message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.DELETE_ALL_TYPE_SUCCESS_WORLD, ImmutableMap.of( "type", TextComponent.of("ADMIN").color(TextColor.RED), - "world", world.getName())); + "world", targetWorld.getName())); } else { message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.DELETE_ALL_TYPE_SUCCESS, ImmutableMap.of( "type", TextComponent.of("ADMIN").color(TextColor.RED))); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteTop.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteTop.java index ac9c84c..25ff1c0 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteTop.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteTop.java @@ -40,7 +40,7 @@ public class CommandClaimDeleteTop extends CommandClaimDelete { } @CommandAlias("deletetop") - @Description("Deletes the claim you're standing in, even if it's not your claim.") + @Description("%delete-top") @Subcommand("delete top") public void execute(Player player) { super.execute(player); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimExpand.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimExpand.java index 8b925c7..40e4dee 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimExpand.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimExpand.java @@ -45,6 +45,7 @@ import com.griefdefender.cache.MessageCache; import com.griefdefender.cache.PermissionHolderCache; import com.griefdefender.claim.GDClaim; import com.griefdefender.configuration.MessageStorage; +import com.griefdefender.event.GDCauseStackManager; import com.griefdefender.internal.visual.GDClaimVisual; import com.griefdefender.permission.GDPermissionUser; import com.griefdefender.permission.GDPermissions; @@ -68,7 +69,7 @@ public class CommandClaimExpand extends BaseCommand { @CommandCompletion("@gddummy @gdblockfaces @gddummy") @CommandAlias("claimexpand|expandclaim") - @Description("Expands the claim in the direction you are facing.") + @Description("%claim-expand") @Syntax(" [direction]") @Subcommand("claim expand") public void execute(Player player, int amount, @Optional String direction) { @@ -130,7 +131,9 @@ public class CommandClaimExpand extends BaseCommand { greater.getZ() + amount); } + GDCauseStackManager.getInstance().pushCause(player); final ClaimResult result = claim.resize(point1, point2); + GDCauseStackManager.getInstance().popCause(); if (!result.successful()) { if (result.getResultType() == ClaimResultType.OVERLAPPING_CLAIM) { GDClaim overlapClaim = (GDClaim) result.getClaim().get(); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFarewell.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFarewell.java index 9529a5a..30481a5 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFarewell.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFarewell.java @@ -49,7 +49,7 @@ import org.bukkit.entity.Player; public class CommandClaimFarewell extends BaseCommand { @CommandAlias("claimfarewell") - @Description("Sets the farewell message of your claim.") + @Description("%claim-farewell") @Syntax("|clear") @Subcommand("claim farewell") public void execute(Player player, String message) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlag.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlag.java index c956732..e274f47 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlag.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlag.java @@ -46,11 +46,11 @@ public class CommandClaimFlag extends ClaimFlagBase { @CommandCompletion("@gdflags @gdmcids @gdtristates @gdcontexts @gddummy") @CommandAlias("cf|claimflag") - @Description("Gets/Sets claim flags in the claim you are standing in.") + @Description("%flag-claim") @Syntax(" [context[key=value]]") @Subcommand("flag claim") public void execute(Player player, @Optional String[] args) throws InvalidCommandArgument { - this.subject = GriefDefenderPlugin.DEFAULT_HOLDER; + this.subject = GriefDefenderPlugin.GD_DEFAULT_HOLDER; this.friendlySubjectName = "ALL"; super.execute(player, args); } diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagDebug.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagDebug.java index 68512dc..d11c1e3 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagDebug.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagDebug.java @@ -44,7 +44,7 @@ import org.bukkit.entity.Player; public class CommandClaimFlagDebug extends BaseCommand { @CommandAlias("cfdebug") - @Description("Toggles claim flag debug mode.") + @Description("%claim-debug") @Subcommand("claim debug") public void execute(Player player) { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagGroup.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagGroup.java index 71421df..b798ca0 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagGroup.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagGroup.java @@ -51,7 +51,7 @@ public class CommandClaimFlagGroup extends ClaimFlagBase { @CommandCompletion("@gdgroups @gdflags @gdmcids @gdtristates @gdcontexts @gddummy") @CommandAlias("cfg") - @Description("Gets/Sets flag permission for a group in claim you are standing in.") + @Description("%flag-group") @Syntax(" [context[key=value]]") @Subcommand("flag group") public void execute(Player player, String group, @Optional String[] args) throws InvalidCommandArgument { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagPlayer.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagPlayer.java index b7685a3..9447eba 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagPlayer.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagPlayer.java @@ -51,7 +51,7 @@ public class CommandClaimFlagPlayer extends ClaimFlagBase { @CommandCompletion("@gdplayers @gdflags @gdmcids @gdtristates @gdcontexts @gddummy") @CommandAlias("cfp") - @Description("Gets/Sets flag permission for a player in claim you are standing in.") + @Description("%flag-player") @Syntax(" [context[key=value]]") @Subcommand("flag player") public void execute(Player src, OfflinePlayer player, @Optional String[] args) throws InvalidCommandArgument { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagReset.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagReset.java index 590469c..a8746a7 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagReset.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagReset.java @@ -56,7 +56,7 @@ import java.util.function.Consumer; public class CommandClaimFlagReset extends BaseCommand { @CommandAlias("cfr") - @Description("Resets a claim to flag defaults.") + @Description("%flag-reset") @Subcommand("flag reset") public void execute(Player player) { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimGreeting.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimGreeting.java index 73fd77b..43d361b 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimGreeting.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimGreeting.java @@ -49,7 +49,7 @@ import org.bukkit.entity.Player; public class CommandClaimGreeting extends BaseCommand { @CommandAlias("claimgreeting") - @Description("Sets the greeting message of your claim.") + @Description("%claim-greeting") @Syntax("|clear") @Subcommand("claim greeting") public void execute(Player player, String message) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimIgnore.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimIgnore.java index 2f2e883..6583469 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimIgnore.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimIgnore.java @@ -44,7 +44,7 @@ import org.bukkit.entity.Player; public class CommandClaimIgnore extends BaseCommand { @CommandAlias("claimignore|ignoreclaims|ic") - @Description("Toggles ignore claims mode.") + @Description("%claim-ignore") @Subcommand("claim ignore") public void execute(Player player) { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimInfo.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimInfo.java index a1e2e1a..77beff7 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimInfo.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimInfo.java @@ -27,6 +27,7 @@ package com.griefdefender.command; import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandPermission; +import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Syntax; @@ -112,6 +113,7 @@ public class CommandClaimInfo extends BaseCommand { } @CommandAlias("claiminfo") + @Description("%claim-info") @Syntax("[claim_uuid]") @Subcommand("claim info") public void execute(CommandSender src, String[] args) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimInherit.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimInherit.java index 0ab0da0..51725eb 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimInherit.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimInherit.java @@ -45,7 +45,7 @@ import org.bukkit.entity.Player; public class CommandClaimInherit extends BaseCommand { @CommandAlias("claiminherit") - @Description("Toggles subdivision inherit mode.") + @Description("%claim-inherit") @Subcommand("claim inherit") public void execute(Player player) { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimInvestigate.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimInvestigate.java index 9754512..405aa42 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimInvestigate.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimInvestigate.java @@ -31,7 +31,6 @@ import java.util.Set; import org.bukkit.Location; import org.bukkit.entity.Player; -import org.bukkit.event.block.Action; import com.google.common.collect.ImmutableMap; import com.google.common.reflect.TypeToken; @@ -58,15 +57,13 @@ import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Syntax; import net.kyori.text.Component; -import net.kyori.text.TextComponent; -import net.kyori.text.format.TextColor; @CommandAlias("%griefdefender") @CommandPermission(GDPermissions.COMMAND_CLAIM_INVESTIGATE) public class CommandClaimInvestigate extends BaseCommand { @CommandAlias("claiminvestigate") - @Description("Investigates the target or nearby claims.") + @Description("%claim-investigate") @Syntax("[area|hide|hideall]") @Subcommand("claim investigate") public void execute(Player player, @Optional String cmd) { diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimList.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimList.java index 42f2db2..afb2f31 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimList.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimList.java @@ -61,7 +61,6 @@ import net.kyori.text.event.HoverEvent; import net.kyori.text.format.TextColor; import net.kyori.text.format.TextDecoration; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -93,7 +92,7 @@ public class CommandClaimList extends BaseCommand { @CommandCompletion("@gdplayers @gdworlds @gddummy") @CommandAlias("claimlist|claimslist") @Syntax("[| ]") - @Description("List information about a player's claim blocks and claims.") + @Description("%claim-list") @Subcommand("claim list") public void execute(Player src, @Optional String targetPlayer, @Optional World world) { GDPermissionUser user = null; diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimMode.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimMode.java index b1ea0ba..7297d87 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimMode.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimMode.java @@ -46,7 +46,7 @@ import org.bukkit.entity.Player; public class CommandClaimMode extends BaseCommand { @CommandAlias("claim|claimmode") - @Description("Toggles claim mode creation. Note: This will default to basic claim mode.") + @Description("%mode-claim") @Subcommand("mode claim") public void execute(Player player) { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimName.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimName.java index fe2d8d8..473959f 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimName.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimName.java @@ -53,7 +53,7 @@ public class CommandClaimName extends BaseCommand { @CommandAlias("claimname") @Syntax("|clear") - @Description("Sets the name of your claim.") + @Description("%claim-name") @Subcommand("claim name") public void execute(Player player, String name) { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimOption.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimOption.java index 361641f..8180af2 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimOption.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimOption.java @@ -47,7 +47,7 @@ public class CommandClaimOption extends ClaimOptionBase { @CommandCompletion("@gdoptions @gdcontexts @gddummy") @CommandAlias("cod|claimoption") - @Description("Gets/Sets claim options in the claim you are standing in.") + @Description("%option-claim") @Syntax("[