From 96c90fcd7bb5f8e33c8bd1f743a20691cf41db2c Mon Sep 17 00:00:00 2001 From: bloodshot Date: Sat, 27 Jul 2019 04:15:53 -0400 Subject: [PATCH] Add command completions. * Fix accessor trust not affecting block collisions. * Fix tools in config not supporting mod ids. * Fix lava placement bug. * Fix flag default tab permission. Fixes #3, Fixes #5, Fixes #7, Fixes #10 --- .../griefdefender/GriefDefenderPlugin.java | 74 +++++++++++-- .../com/griefdefender/claim/GDTrustType.java | 6 +- .../griefdefender/command/ClaimFlagBase.java | 3 +- .../CommandAdjustBonusClaimBlocks.java | 2 + .../command/CommandClaimDeleteAll.java | 2 + .../command/CommandClaimFlag.java | 2 + .../command/CommandClaimFlagGroup.java | 2 + .../command/CommandClaimFlagPlayer.java | 2 + .../command/CommandClaimName.java | 1 + .../command/CommandClaimOption.java | 2 + .../command/CommandClaimPermissionGroup.java | 2 + .../command/CommandClaimPermissionPlayer.java | 2 + .../command/CommandClaimTransfer.java | 2 + .../command/CommandPlayerInfo.java | 2 + .../command/CommandRestoreNature.java | 2 +- .../command/CommandSetAccruedClaimBlocks.java | 2 + .../command/CommandTrustGroup.java | 2 + .../command/CommandTrustGroupAll.java | 2 + .../command/CommandTrustPlayer.java | 2 + .../command/CommandTrustPlayerAll.java | 2 + .../command/CommandUntrustGroup.java | 2 + .../command/CommandUntrustGroupAll.java | 2 + .../command/CommandUntrustPlayer.java | 2 + .../command/CommandUntrustPlayerAll.java | 2 + .../listener/PlayerEventHandler.java | 103 ++++++++++++++++-- .../permission/GDPermissionManager.java | 4 +- .../griefdefender/util/PermissionUtil.java | 30 +++++ .../src/main/resources/assets/lang/en_US.conf | 4 +- bukkit/src/main/resources/plugin.yml | 2 +- 29 files changed, 237 insertions(+), 30 deletions(-) diff --git a/bukkit/src/main/java/com/griefdefender/GriefDefenderPlugin.java b/bukkit/src/main/java/com/griefdefender/GriefDefenderPlugin.java index 2963937..b2c1924 100644 --- a/bukkit/src/main/java/com/griefdefender/GriefDefenderPlugin.java +++ b/bukkit/src/main/java/com/griefdefender/GriefDefenderPlugin.java @@ -31,13 +31,16 @@ import co.aikar.timings.lib.MCTiming; import co.aikar.timings.lib.TimingManager; +import com.google.common.collect.ImmutableList; import com.google.common.reflect.TypeToken; import com.google.inject.Guice; import com.google.inject.Stage; import com.griefdefender.api.Tristate; import com.griefdefender.api.claim.ClaimBlockSystem; import com.griefdefender.api.claim.ClaimType; +import com.griefdefender.api.claim.TrustType; import com.griefdefender.api.permission.flag.Flag; +import com.griefdefender.api.permission.option.Option; import com.griefdefender.cache.PermissionHolderCache; import com.griefdefender.claim.GDClaim; import com.griefdefender.claim.GDClaimManager; @@ -109,11 +112,12 @@ import com.griefdefender.configuration.type.ConfigBase; import com.griefdefender.configuration.type.GlobalConfig; import com.griefdefender.inject.GriefDefenderImplModule; -import com.griefdefender.internal.material.GDMaterials; import com.griefdefender.internal.provider.WorldEditProvider; import com.griefdefender.internal.provider.WorldGuardProvider; import com.griefdefender.internal.registry.BlockTypeRegistryModule; import com.griefdefender.internal.registry.EntityTypeRegistryModule; +import com.griefdefender.internal.registry.GDEntityType; +import com.griefdefender.internal.registry.GDItemType; import com.griefdefender.internal.registry.ItemTypeRegistryModule; import com.griefdefender.internal.util.NMSUtil; import com.griefdefender.internal.util.VecHelper; @@ -142,6 +146,7 @@ import com.griefdefender.text.ComponentConfigSerializer; import com.griefdefender.text.TextTemplate; import com.griefdefender.text.TextTemplateConfigSerializer; +import com.griefdefender.util.PermissionUtil; import me.lucko.luckperms.api.LuckPermsApi; import me.lucko.luckperms.api.User; @@ -159,7 +164,6 @@ import org.apache.commons.lang3.LocaleUtils; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.command.CommandSender; @@ -174,6 +178,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -227,8 +232,8 @@ public class GriefDefenderPlugin { private boolean isEconomyModeEnabled = false; - public Material modificationTool; - public Material investigationTool; + public GDItemType modificationTool; + public GDItemType investigationTool; public int maxInspectionDistance = 100; public static boolean debugLogging = false; @@ -630,7 +635,60 @@ public void registerBaseCommands() { ID_MAP.add("griefdefender:claimflag"); ID_MAP.add("griefdefender:claimflaggroup"); ID_MAP.add("griefdefender:claimflagplayer"); - //ID_MAP.add("unknown"); + + manager.getCommandCompletions().registerCompletion("gdplayers", c -> { + return ImmutableList.copyOf(PermissionUtil.getInstance().getAllLoadedPlayerNames()); + }); + manager.getCommandCompletions().registerCompletion("gdgroups", c -> { + return ImmutableList.copyOf(PermissionUtil.getInstance().getAllLoadedGroupNames()); + }); + manager.getCommandCompletions().registerCompletion("gdclaimtypes", c -> { + List tabList = new ArrayList<>(); + for (ClaimType type : ClaimTypeRegistryModule.getInstance().getAll()) { + tabList.add(type.getName()); + } + return ImmutableList.copyOf(tabList); + }); + manager.getCommandCompletions().registerCompletion("gdtrusttypes", c -> { + List tabList = new ArrayList<>(); + for (TrustType type : TrustTypeRegistryModule.getInstance().getAll()) { + tabList.add(type.getName()); + } + return ImmutableList.copyOf(tabList); + }); + manager.getCommandCompletions().registerCompletion("gdflags", c -> { + List tabList = new ArrayList<>(); + for (Flag type : FlagRegistryModule.getInstance().getAll()) { + tabList.add(type.getName()); + } + return ImmutableList.copyOf(tabList); + }); + manager.getCommandCompletions().registerCompletion("gdoptions", c -> { + List tabList = new ArrayList<>(); + for (Option type : OptionRegistryModule.getInstance().getAll()) { + tabList.add(type.getName()); + } + return ImmutableList.copyOf(tabList); + }); + manager.getCommandCompletions().registerCompletion("gdmcids", c -> { + List tabList = new ArrayList<>(); + for (GDItemType type : ItemTypeRegistryModule.getInstance().getAll()) { + tabList.add(type.getName()); + } + for (GDEntityType type : EntityTypeRegistryModule.getInstance().getAll()) { + tabList.add(type.getName()); + } + return ImmutableList.copyOf(tabList); + }); + manager.getCommandCompletions().registerCompletion("gdtristates", c -> { + return ImmutableList.of("true", "false", "undefined"); + }); + manager.getCommandCompletions().registerCompletion("gdcontexts", c -> { + return ImmutableList.of("context[]"); + }); + manager.getCommandCompletions().registerCompletion("gddummy", c -> { + return ImmutableList.of(); + }); } public PaperCommandManager getCommandManager() { @@ -675,10 +733,8 @@ public void loadConfig() { GDFlags.populateFlagStatus(); PermissionHolderCache.getInstance().getOrCreatePermissionCache(GriefDefenderPlugin.DEFAULT_HOLDER).invalidateAll(); CLAIM_BLOCK_SYSTEM = BaseStorage.globalConfig.getConfig().playerdata.claimBlockSystem; - final Material modTool = Material.getMaterial(BaseStorage.globalConfig.getConfig().claim.modificationTool); - final Material invTool = Material.getMaterial(BaseStorage.globalConfig.getConfig().claim.investigationTool); - this.modificationTool = modTool == null ? GDMaterials.GOLDEN_SHOVEL : modTool; - this.investigationTool = invTool == null? Material.STICK : invTool; + this.modificationTool = ItemTypeRegistryModule.getInstance().getById(BaseStorage.globalConfig.getConfig().claim.modificationTool).orElse(ItemTypeRegistryModule.getInstance().getById("minecraft:golden_shovel").get()); + this.investigationTool = ItemTypeRegistryModule.getInstance().getById(BaseStorage.globalConfig.getConfig().claim.investigationTool).orElse(ItemTypeRegistryModule.getInstance().getById("minecraft:stick").get()); this.maxInspectionDistance = BaseStorage.globalConfig.getConfig().general.maxClaimInspectionDistance; if (this.dataStore != null) { for (World world : Bukkit.getServer().getWorlds()) { diff --git a/bukkit/src/main/java/com/griefdefender/claim/GDTrustType.java b/bukkit/src/main/java/com/griefdefender/claim/GDTrustType.java index c5c9ebc..3a299b5 100644 --- a/bukkit/src/main/java/com/griefdefender/claim/GDTrustType.java +++ b/bukkit/src/main/java/com/griefdefender/claim/GDTrustType.java @@ -32,8 +32,8 @@ public class GDTrustType implements TrustType { private final String name; public GDTrustType(String id, String name) { - this.id = id; - this.name = name; + this.id = id.toLowerCase(); + this.name = name.toLowerCase(); } @Override @@ -48,6 +48,6 @@ public String getName() { @Override public String toString() { - return this.id + ":" + this.name; + return this.id; } } diff --git a/bukkit/src/main/java/com/griefdefender/command/ClaimFlagBase.java b/bukkit/src/main/java/com/griefdefender/command/ClaimFlagBase.java index c56ccaa..444465b 100644 --- a/bukkit/src/main/java/com/griefdefender/command/ClaimFlagBase.java +++ b/bukkit/src/main/java/com/griefdefender/command/ClaimFlagBase.java @@ -913,8 +913,7 @@ private Component getClickableText(CommandSender src, GDClaim claim, Set ") diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAll.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAll.java index 85782f6..3def21e 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAll.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimDeleteAll.java @@ -26,6 +26,7 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Subcommand; @@ -49,6 +50,7 @@ @CommandPermission(GDPermissions.COMMAND_DELETE_CLAIMS) public class CommandClaimDeleteAll extends BaseCommand { + @CommandCompletion("@gdplayers @gddummy") @CommandAlias("deleteall") @Description("Delete all of another player's claims.") @Subcommand("delete all") diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlag.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlag.java index 7ddb111..c956732 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlag.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlag.java @@ -26,6 +26,7 @@ import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Optional; @@ -43,6 +44,7 @@ public CommandClaimFlag() { super(ClaimSubjectType.GLOBAL); } + @CommandCompletion("@gdflags @gdmcids @gdtristates @gdcontexts @gddummy") @CommandAlias("cf|claimflag") @Description("Gets/Sets claim flags in the claim you are standing in.") @Syntax(" [context[key=value]]") diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagGroup.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagGroup.java index 02489a2..45dd1a5 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagGroup.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagGroup.java @@ -26,6 +26,7 @@ import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Optional; @@ -48,6 +49,7 @@ public CommandClaimFlagGroup() { super(ClaimSubjectType.GROUP); } + @CommandCompletion("@gdgroups @gdflags @gdmcids @gdtristates @gdcontexts @gddummy") @CommandAlias("cfg") @Description("Gets/Sets flag permission for a group in claim you are standing in.") @Syntax(" [context[key=value]]") diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagPlayer.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagPlayer.java index 5f30af2..4f4c417 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagPlayer.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimFlagPlayer.java @@ -26,6 +26,7 @@ import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Optional; @@ -48,6 +49,7 @@ public CommandClaimFlagPlayer() { super(ClaimSubjectType.PLAYER); } + @CommandCompletion("@gdplayers @gdflags @gdmcids @gdtristates @gdcontexts @gddummy") @CommandAlias("cfp") @Description("Gets/Sets flag permission for a player in claim you are standing in.") @Syntax(" [context[key=value]]") diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimName.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimName.java index bbb896e..9b3cc47 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimName.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimName.java @@ -26,6 +26,7 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Syntax; diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimOption.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimOption.java index c9afe7d..4990a87 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimOption.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimOption.java @@ -27,6 +27,7 @@ import co.aikar.commands.BaseCommand; import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Optional; @@ -70,6 +71,7 @@ public class CommandClaimOption extends BaseCommand { private ClaimSubjectType subjectType = ClaimSubjectType.GLOBAL; private String friendlySubjectName; + @CommandCompletion("@gdoptions @gddummy") @CommandAlias("cop|claimoption") @Description("Gets/Sets claim options in the claim you are standing in.") @Syntax("[