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
This commit is contained in:
bloodshot 2019-07-27 04:15:53 -04:00
parent ba39de90ab
commit 96c90fcd7b
29 changed files with 237 additions and 30 deletions

View File

@ -31,13 +31,16 @@
import co.aikar.timings.lib.MCTiming; import co.aikar.timings.lib.MCTiming;
import co.aikar.timings.lib.TimingManager; import co.aikar.timings.lib.TimingManager;
import com.google.common.collect.ImmutableList;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import com.google.inject.Guice; import com.google.inject.Guice;
import com.google.inject.Stage; import com.google.inject.Stage;
import com.griefdefender.api.Tristate; import com.griefdefender.api.Tristate;
import com.griefdefender.api.claim.ClaimBlockSystem; import com.griefdefender.api.claim.ClaimBlockSystem;
import com.griefdefender.api.claim.ClaimType; import com.griefdefender.api.claim.ClaimType;
import com.griefdefender.api.claim.TrustType;
import com.griefdefender.api.permission.flag.Flag; import com.griefdefender.api.permission.flag.Flag;
import com.griefdefender.api.permission.option.Option;
import com.griefdefender.cache.PermissionHolderCache; import com.griefdefender.cache.PermissionHolderCache;
import com.griefdefender.claim.GDClaim; import com.griefdefender.claim.GDClaim;
import com.griefdefender.claim.GDClaimManager; import com.griefdefender.claim.GDClaimManager;
@ -109,11 +112,12 @@
import com.griefdefender.configuration.type.ConfigBase; import com.griefdefender.configuration.type.ConfigBase;
import com.griefdefender.configuration.type.GlobalConfig; import com.griefdefender.configuration.type.GlobalConfig;
import com.griefdefender.inject.GriefDefenderImplModule; import com.griefdefender.inject.GriefDefenderImplModule;
import com.griefdefender.internal.material.GDMaterials;
import com.griefdefender.internal.provider.WorldEditProvider; import com.griefdefender.internal.provider.WorldEditProvider;
import com.griefdefender.internal.provider.WorldGuardProvider; import com.griefdefender.internal.provider.WorldGuardProvider;
import com.griefdefender.internal.registry.BlockTypeRegistryModule; import com.griefdefender.internal.registry.BlockTypeRegistryModule;
import com.griefdefender.internal.registry.EntityTypeRegistryModule; 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.registry.ItemTypeRegistryModule;
import com.griefdefender.internal.util.NMSUtil; import com.griefdefender.internal.util.NMSUtil;
import com.griefdefender.internal.util.VecHelper; import com.griefdefender.internal.util.VecHelper;
@ -142,6 +146,7 @@
import com.griefdefender.text.ComponentConfigSerializer; import com.griefdefender.text.ComponentConfigSerializer;
import com.griefdefender.text.TextTemplate; import com.griefdefender.text.TextTemplate;
import com.griefdefender.text.TextTemplateConfigSerializer; import com.griefdefender.text.TextTemplateConfigSerializer;
import com.griefdefender.util.PermissionUtil;
import me.lucko.luckperms.api.LuckPermsApi; import me.lucko.luckperms.api.LuckPermsApi;
import me.lucko.luckperms.api.User; import me.lucko.luckperms.api.User;
@ -159,7 +164,6 @@
import org.apache.commons.lang3.LocaleUtils; import org.apache.commons.lang3.LocaleUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -174,6 +178,7 @@
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -227,8 +232,8 @@ public class GriefDefenderPlugin {
private boolean isEconomyModeEnabled = false; private boolean isEconomyModeEnabled = false;
public Material modificationTool; public GDItemType modificationTool;
public Material investigationTool; public GDItemType investigationTool;
public int maxInspectionDistance = 100; public int maxInspectionDistance = 100;
public static boolean debugLogging = false; public static boolean debugLogging = false;
@ -630,7 +635,60 @@ public void registerBaseCommands() {
ID_MAP.add("griefdefender:claimflag"); ID_MAP.add("griefdefender:claimflag");
ID_MAP.add("griefdefender:claimflaggroup"); ID_MAP.add("griefdefender:claimflaggroup");
ID_MAP.add("griefdefender:claimflagplayer"); 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<String> tabList = new ArrayList<>();
for (ClaimType type : ClaimTypeRegistryModule.getInstance().getAll()) {
tabList.add(type.getName());
}
return ImmutableList.copyOf(tabList);
});
manager.getCommandCompletions().registerCompletion("gdtrusttypes", c -> {
List<String> tabList = new ArrayList<>();
for (TrustType type : TrustTypeRegistryModule.getInstance().getAll()) {
tabList.add(type.getName());
}
return ImmutableList.copyOf(tabList);
});
manager.getCommandCompletions().registerCompletion("gdflags", c -> {
List<String> tabList = new ArrayList<>();
for (Flag type : FlagRegistryModule.getInstance().getAll()) {
tabList.add(type.getName());
}
return ImmutableList.copyOf(tabList);
});
manager.getCommandCompletions().registerCompletion("gdoptions", c -> {
List<String> tabList = new ArrayList<>();
for (Option type : OptionRegistryModule.getInstance().getAll()) {
tabList.add(type.getName());
}
return ImmutableList.copyOf(tabList);
});
manager.getCommandCompletions().registerCompletion("gdmcids", c -> {
List<String> 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[<override|default|used_item|source|world|server|player|group>]");
});
manager.getCommandCompletions().registerCompletion("gddummy", c -> {
return ImmutableList.of();
});
} }
public PaperCommandManager getCommandManager() { public PaperCommandManager getCommandManager() {
@ -675,10 +733,8 @@ public void loadConfig() {
GDFlags.populateFlagStatus(); GDFlags.populateFlagStatus();
PermissionHolderCache.getInstance().getOrCreatePermissionCache(GriefDefenderPlugin.DEFAULT_HOLDER).invalidateAll(); PermissionHolderCache.getInstance().getOrCreatePermissionCache(GriefDefenderPlugin.DEFAULT_HOLDER).invalidateAll();
CLAIM_BLOCK_SYSTEM = BaseStorage.globalConfig.getConfig().playerdata.claimBlockSystem; CLAIM_BLOCK_SYSTEM = BaseStorage.globalConfig.getConfig().playerdata.claimBlockSystem;
final Material modTool = Material.getMaterial(BaseStorage.globalConfig.getConfig().claim.modificationTool); this.modificationTool = ItemTypeRegistryModule.getInstance().getById(BaseStorage.globalConfig.getConfig().claim.modificationTool).orElse(ItemTypeRegistryModule.getInstance().getById("minecraft:golden_shovel").get());
final Material invTool = Material.getMaterial(BaseStorage.globalConfig.getConfig().claim.investigationTool); this.investigationTool = ItemTypeRegistryModule.getInstance().getById(BaseStorage.globalConfig.getConfig().claim.investigationTool).orElse(ItemTypeRegistryModule.getInstance().getById("minecraft:stick").get());
this.modificationTool = modTool == null ? GDMaterials.GOLDEN_SHOVEL : modTool;
this.investigationTool = invTool == null? Material.STICK : invTool;
this.maxInspectionDistance = BaseStorage.globalConfig.getConfig().general.maxClaimInspectionDistance; this.maxInspectionDistance = BaseStorage.globalConfig.getConfig().general.maxClaimInspectionDistance;
if (this.dataStore != null) { if (this.dataStore != null) {
for (World world : Bukkit.getServer().getWorlds()) { for (World world : Bukkit.getServer().getWorlds()) {

View File

@ -32,8 +32,8 @@ public class GDTrustType implements TrustType {
private final String name; private final String name;
public GDTrustType(String id, String name) { public GDTrustType(String id, String name) {
this.id = id; this.id = id.toLowerCase();
this.name = name; this.name = name.toLowerCase();
} }
@Override @Override
@ -48,6 +48,6 @@ public String getName() {
@Override @Override
public String toString() { public String toString() {
return this.id + ":" + this.name; return this.id;
} }
} }

View File

@ -913,8 +913,7 @@ private Component getClickableText(CommandSender src, GDClaim claim, Set<Context
hoverEventText = TextComponent.of("You do not have permission to change flag defaults.").color(TextColor.RED); hoverEventText = TextComponent.of("You do not have permission to change flag defaults.").color(TextColor.RED);
hasPermission = false; hasPermission = false;
} }
} } else if (flagType == FlagType.OVERRIDE) {
if (flagType == FlagType.OVERRIDE) {
flagColor = TextColor.RED; flagColor = TextColor.RED;
if (!src.hasPermission(GDPermissions.MANAGE_FLAG_OVERRIDES)) { if (!src.hasPermission(GDPermissions.MANAGE_FLAG_OVERRIDES)) {
hoverEventText = TextComponent.of("This flag has been forced by an admin and cannot be changed.").color(TextColor.RED); hoverEventText = TextComponent.of("This flag has been forced by an admin and cannot be changed.").color(TextColor.RED);

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -51,6 +52,7 @@
@CommandPermission(GDPermissions.COMMAND_SET_ACCRUED_CLAIM_BLOCKS) @CommandPermission(GDPermissions.COMMAND_SET_ACCRUED_CLAIM_BLOCKS)
public class CommandAdjustBonusClaimBlocks extends BaseCommand { public class CommandAdjustBonusClaimBlocks extends BaseCommand {
@CommandCompletion("@gdplayers @gddummy")
@CommandAlias("acb|adjustclaimblocks") @CommandAlias("acb|adjustclaimblocks")
@Description("Updates a player's accrued claim block total") @Description("Updates a player's accrued claim block total")
@Syntax("<player> <amount>") @Syntax("<player> <amount>")

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
@ -49,6 +50,7 @@
@CommandPermission(GDPermissions.COMMAND_DELETE_CLAIMS) @CommandPermission(GDPermissions.COMMAND_DELETE_CLAIMS)
public class CommandClaimDeleteAll extends BaseCommand { public class CommandClaimDeleteAll extends BaseCommand {
@CommandCompletion("@gdplayers @gddummy")
@CommandAlias("deleteall") @CommandAlias("deleteall")
@Description("Delete all of another player's claims.") @Description("Delete all of another player's claims.")
@Subcommand("delete all") @Subcommand("delete all")

View File

@ -26,6 +26,7 @@
import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.InvalidCommandArgument;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -43,6 +44,7 @@ public CommandClaimFlag() {
super(ClaimSubjectType.GLOBAL); super(ClaimSubjectType.GLOBAL);
} }
@CommandCompletion("@gdflags @gdmcids @gdtristates @gdcontexts @gddummy")
@CommandAlias("cf|claimflag") @CommandAlias("cf|claimflag")
@Description("Gets/Sets claim flags in the claim you are standing in.") @Description("Gets/Sets claim flags in the claim you are standing in.")
@Syntax("<flag> <target> <value> [context[key=value]]") @Syntax("<flag> <target> <value> [context[key=value]]")

View File

@ -26,6 +26,7 @@
import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.InvalidCommandArgument;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -48,6 +49,7 @@ public CommandClaimFlagGroup() {
super(ClaimSubjectType.GROUP); super(ClaimSubjectType.GROUP);
} }
@CommandCompletion("@gdgroups @gdflags @gdmcids @gdtristates @gdcontexts @gddummy")
@CommandAlias("cfg") @CommandAlias("cfg")
@Description("Gets/Sets flag permission for a group in claim you are standing in.") @Description("Gets/Sets flag permission for a group in claim you are standing in.")
@Syntax("<group> <flag> <target> <value> [context[key=value]]") @Syntax("<group> <flag> <target> <value> [context[key=value]]")

View File

@ -26,6 +26,7 @@
import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.InvalidCommandArgument;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -48,6 +49,7 @@ public CommandClaimFlagPlayer() {
super(ClaimSubjectType.PLAYER); super(ClaimSubjectType.PLAYER);
} }
@CommandCompletion("@gdplayers @gdflags @gdmcids @gdtristates @gdcontexts @gddummy")
@CommandAlias("cfp") @CommandAlias("cfp")
@Description("Gets/Sets flag permission for a player in claim you are standing in.") @Description("Gets/Sets flag permission for a player in claim you are standing in.")
@Syntax("<player> <flag> <target> <value> [context[key=value]]") @Syntax("<player> <flag> <target> <value> [context[key=value]]")

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
import co.aikar.commands.annotation.Syntax; import co.aikar.commands.annotation.Syntax;

View File

@ -27,6 +27,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.InvalidCommandArgument;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -70,6 +71,7 @@ public class CommandClaimOption extends BaseCommand {
private ClaimSubjectType subjectType = ClaimSubjectType.GLOBAL; private ClaimSubjectType subjectType = ClaimSubjectType.GLOBAL;
private String friendlySubjectName; private String friendlySubjectName;
@CommandCompletion("@gdoptions @gddummy")
@CommandAlias("cop|claimoption") @CommandAlias("cop|claimoption")
@Description("Gets/Sets claim options in the claim you are standing in.") @Description("Gets/Sets claim options in the claim you are standing in.")
@Syntax("[<option> <value> [context[key=value]]") @Syntax("[<option> <value> [context[key=value]]")

View File

@ -27,6 +27,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.InvalidCommandArgument;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -63,6 +64,7 @@
@CommandPermission(GDPermissions.COMMAND_CLAIM_PERMISSION_GROUP) @CommandPermission(GDPermissions.COMMAND_CLAIM_PERMISSION_GROUP)
public class CommandClaimPermissionGroup extends BaseCommand { public class CommandClaimPermissionGroup extends BaseCommand {
@CommandCompletion("@gdgroups @gddummy")
@CommandAlias("cpg") @CommandAlias("cpg")
@Description("Sets a permission on a group with a claim context.") @Description("Sets a permission on a group with a claim context.")
@Syntax("<group> [<permission> <value>]") @Syntax("<group> [<permission> <value>]")

View File

@ -27,6 +27,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.InvalidCommandArgument;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -63,6 +64,7 @@
@CommandPermission(GDPermissions.COMMAND_CLAIM_PERMISSION_PLAYER) @CommandPermission(GDPermissions.COMMAND_CLAIM_PERMISSION_PLAYER)
public class CommandClaimPermissionPlayer extends BaseCommand { public class CommandClaimPermissionPlayer extends BaseCommand {
@CommandCompletion("@gdplayers @gddummy")
@CommandAlias("cpp") @CommandAlias("cpp")
@Description("Sets a permission on a player with a claim context.") @Description("Sets a permission on a player with a claim context.")
@Syntax("<player> [<permission> <value>]") @Syntax("<player> [<permission> <value>]")

View File

@ -2,6 +2,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
@ -26,6 +27,7 @@
@CommandPermission(GDPermissions.COMMAND_TRANSFER_CLAIM) @CommandPermission(GDPermissions.COMMAND_TRANSFER_CLAIM)
public class CommandClaimTransfer extends BaseCommand { public class CommandClaimTransfer extends BaseCommand {
@CommandCompletion("@gdplayers @gddummy")
@CommandAlias("claimtransfer|transferclaim") @CommandAlias("claimtransfer|transferclaim")
@Description("Transfers a basic or admin claim to another player.") @Description("Transfers a basic or admin claim to another player.")
@Subcommand("claim transfer") @Subcommand("claim transfer")

View File

@ -27,6 +27,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.InvalidCommandArgument;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -67,6 +68,7 @@
@CommandPermission(GDPermissions.COMMAND_PLAYER_INFO_BASE) @CommandPermission(GDPermissions.COMMAND_PLAYER_INFO_BASE)
public class CommandPlayerInfo extends BaseCommand { public class CommandPlayerInfo extends BaseCommand {
@CommandCompletion("@gdplayers @gddummy")
@CommandAlias("playerinfo") @CommandAlias("playerinfo")
@Description("Gets information about a player.") @Description("Gets information about a player.")
@Syntax("[<player>|<player> <world>]") @Syntax("[<player>|<player> <world>]")

View File

@ -56,7 +56,7 @@ public void execute(Player player) {
if (!NMSUtil.getInstance().hasItemInOneHand(player, GriefDefenderPlugin.getInstance().modificationTool)) { if (!NMSUtil.getInstance().hasItemInOneHand(player, GriefDefenderPlugin.getInstance().modificationTool)) {
TextAdapter.sendComponent(player, TextComponent.builder("") TextAdapter.sendComponent(player, TextComponent.builder("")
.append("You do not have ", TextColor.RED) .append("You do not have ", TextColor.RED)
.append(GriefDefenderPlugin.getInstance().modificationTool.name().toLowerCase(), TextColor.GREEN) .append(GriefDefenderPlugin.getInstance().modificationTool.getName().toLowerCase(), TextColor.GREEN)
.append(" equipped.", TextColor.RED).build()); .append(" equipped.", TextColor.RED).build());
return; return;
} }

View File

@ -27,6 +27,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.InvalidCommandArgument;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
@ -49,6 +50,7 @@
@CommandPermission(GDPermissions.COMMAND_SET_ACCRUED_CLAIM_BLOCKS) @CommandPermission(GDPermissions.COMMAND_SET_ACCRUED_CLAIM_BLOCKS)
public class CommandSetAccruedClaimBlocks extends BaseCommand { public class CommandSetAccruedClaimBlocks extends BaseCommand {
@CommandCompletion("@gdplayers @gddummy")
@CommandAlias("setaccruedblocks") @CommandAlias("setaccruedblocks")
@Description("Updates a player's accrued claim block total.") @Description("Updates a player's accrued claim block total.")
@Syntax("<amount>") @Syntax("<amount>")

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
@ -64,6 +65,7 @@
@CommandPermission(GDPermissions.COMMAND_TRUST_GROUP) @CommandPermission(GDPermissions.COMMAND_TRUST_GROUP)
public class CommandTrustGroup extends BaseCommand { public class CommandTrustGroup extends BaseCommand {
@CommandCompletion("@gdgroups @gdtrusttypes @gddummy")
@CommandAlias("trustgroup") @CommandAlias("trustgroup")
@Description("Grants a group access to your claim." @Description("Grants a group access to your claim."
+ "\nAccessor: access to interact with all blocks except inventory." + "\nAccessor: access to interact with all blocks except inventory."

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
@ -59,6 +60,7 @@
@CommandPermission(GDPermissions.COMMAND_TRUSTALL_GROUP) @CommandPermission(GDPermissions.COMMAND_TRUSTALL_GROUP)
public class CommandTrustGroupAll extends BaseCommand { public class CommandTrustGroupAll extends BaseCommand {
@CommandCompletion("@gdgroups @gdtrusttypes @gddummy")
@CommandAlias("trustallgroup") @CommandAlias("trustallgroup")
@Description("Grants a group access to all your claims." @Description("Grants a group access to all your claims."
+ "\nAccessor: access to interact with all blocks except inventory." + "\nAccessor: access to interact with all blocks except inventory."

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -60,6 +61,7 @@
@CommandPermission(GDPermissions.COMMAND_TRUST_PLAYER) @CommandPermission(GDPermissions.COMMAND_TRUST_PLAYER)
public class CommandTrustPlayer extends BaseCommand { public class CommandTrustPlayer extends BaseCommand {
@CommandCompletion("@gdplayers @gdtrusttypes @gddummy")
@CommandAlias("trust") @CommandAlias("trust")
@Description("Grants a player access to your claim." @Description("Grants a player access to your claim."
+ "\nAccessor: access to interact with all blocks except inventory." + "\nAccessor: access to interact with all blocks except inventory."

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Optional;
@ -62,6 +63,7 @@
@CommandPermission(GDPermissions.COMMAND_TRUSTALL_PLAYER) @CommandPermission(GDPermissions.COMMAND_TRUSTALL_PLAYER)
public class CommandTrustPlayerAll extends BaseCommand { public class CommandTrustPlayerAll extends BaseCommand {
@CommandCompletion("@gdplayers @gdtrusttypes @gddummy")
@CommandAlias("trustall") @CommandAlias("trustall")
@Description("Grants a player access to all your claims." @Description("Grants a player access to all your claims."
+ "\nAccessor: access to interact with all blocks except inventory." + "\nAccessor: access to interact with all blocks except inventory."

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
@ -54,6 +55,7 @@
@CommandPermission(GDPermissions.COMMAND_UNTRUST_GROUP) @CommandPermission(GDPermissions.COMMAND_UNTRUST_GROUP)
public class CommandUntrustGroup extends BaseCommand { public class CommandUntrustGroup extends BaseCommand {
@CommandCompletion("@gdgroups @gddummy")
@CommandAlias("untrustgroup") @CommandAlias("untrustgroup")
@Description("Revokes group access to your claim.") @Description("Revokes group access to your claim.")
@Subcommand("untrust group") @Subcommand("untrust group")

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
@ -58,6 +59,7 @@
@CommandPermission(GDPermissions.COMMAND_UNTRUSTALL_GROUP) @CommandPermission(GDPermissions.COMMAND_UNTRUSTALL_GROUP)
public class CommandUntrustGroupAll extends BaseCommand { public class CommandUntrustGroupAll extends BaseCommand {
@CommandCompletion("@gdgroups @gdtrusttypes @gddummy")
@CommandAlias("untrustallgroup") @CommandAlias("untrustallgroup")
@Description("Revokes group access to all your claims") @Description("Revokes group access to all your claims")
@Syntax("<group>") @Syntax("<group>")

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
@ -55,6 +56,7 @@
@CommandPermission(GDPermissions.COMMAND_UNTRUST_PLAYER) @CommandPermission(GDPermissions.COMMAND_UNTRUST_PLAYER)
public class CommandUntrustPlayer extends BaseCommand { public class CommandUntrustPlayer extends BaseCommand {
@CommandCompletion("@gdplayers @gddummy")
@CommandAlias("untrust") @CommandAlias("untrust")
@Description("Revokes player access to your claim.") @Description("Revokes player access to your claim.")
@Syntax("<player>") @Syntax("<player>")

View File

@ -26,6 +26,7 @@
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandAlias;
import co.aikar.commands.annotation.CommandCompletion;
import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.CommandPermission;
import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Description;
import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Subcommand;
@ -58,6 +59,7 @@
@CommandPermission(GDPermissions.COMMAND_UNTRUSTALL_PLAYER) @CommandPermission(GDPermissions.COMMAND_UNTRUSTALL_PLAYER)
public class CommandUntrustPlayerAll extends BaseCommand { public class CommandUntrustPlayerAll extends BaseCommand {
@CommandCompletion("@gdplayers @gddummy")
@CommandAlias("untrustall") @CommandAlias("untrustall")
@Description("Revokes player access to all your claims.") @Description("Revokes player access to all your claims.")
@Syntax("<player>") @Syntax("<player>")

View File

@ -78,6 +78,8 @@
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event.Result; import org.bukkit.event.Event.Result;
@ -87,10 +89,12 @@
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerBucketEvent; import org.bukkit.event.player.PlayerBucketEvent;
import org.bukkit.event.player.PlayerBucketFillEvent; import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.event.player.PlayerItemHeldEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
@ -206,7 +210,7 @@ public void onPlayerChangeHeldItem(PlayerItemHeldEvent event) {
int newSlot = event.getNewSlot(); int newSlot = event.getNewSlot();
ItemStack newItemStack = player.getInventory().getItem(newSlot); ItemStack newItemStack = player.getInventory().getItem(newSlot);
if(newItemStack != null && newItemStack.getType().equals(GriefDefenderPlugin.getInstance().modificationTool)) { if(newItemStack != null && NMSUtil.getInstance().itemsEqual(newItemStack, GriefDefenderPlugin.getInstance().modificationTool)) {
playerData.lastShovelLocation = null; playerData.lastShovelLocation = null;
playerData.endShovelLocation = null; playerData.endShovelLocation = null;
playerData.claimResizing = null; playerData.claimResizing = null;
@ -398,8 +402,8 @@ public void onPlayerInteractItem(PlayerInteractEvent event) {
return; return;
} }
if (itemInHand.getType().equals(GriefDefenderPlugin.getInstance().modificationTool) || if (NMSUtil.getInstance().itemsEqual(itemInHand, GriefDefenderPlugin.getInstance().modificationTool) ||
itemInHand.getType().equals(GriefDefenderPlugin.getInstance().investigationTool)) { NMSUtil.getInstance().itemsEqual(itemInHand, GriefDefenderPlugin.getInstance().investigationTool)) {
if (investigateClaim(event, player, clickedBlock, itemInHand)) { if (investigateClaim(event, player, clickedBlock, itemInHand)) {
return; return;
} }
@ -420,6 +424,66 @@ public void onPlayerInteractItem(PlayerInteractEvent event) {
} }
} }
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerArmorStandManipulateEvent(PlayerArmorStandManipulateEvent event) {
onPlayerInteractEntity(event);
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
final Player player = event.getPlayer();
final World world = player.getWorld();
if (!GDFlags.INTERACT_ENTITY_SECONDARY || !GriefDefenderPlugin.getInstance().claimsEnabledForWorld(player.getWorld().getUID())) {
return;
}
final Entity targetEntity = event.getRightClicked();
final Location location = targetEntity.getLocation();
final ItemStack activeItem = NMSUtil.getInstance().getActiveItem(player, event);
if (activeItem != null && activeItem.getType() != Material.AIR) {
// handle item usage
if (!GDFlags.INTERACT_ITEM_SECONDARY || !GriefDefenderPlugin.getInstance().claimsEnabledForWorld(world.getUID())) {
return;
}
if (GriefDefenderPlugin.isTargetIdBlacklisted(Flags.INTERACT_ITEM_SECONDARY.getName(), activeItem, world.getUID())) {
return;
}
final GDClaim claim = this.dataStore.getClaimAt(location);
if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, GDPermissions.INTERACT_ITEM_SECONDARY, player, activeItem, player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) {
Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM,
ImmutableMap.of(
"player", claim.getOwnerName(),
"item", NMSUtil.getInstance().getMaterialKey(activeItem.getType())));
GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message);
Thread.dumpStack();
event.setCancelled(true);
lastInteractItemCancelled = true;
return;
}
}
// Item permission checks passed, check entity
final Object source = activeItem != null && activeItem.getType() != Material.AIR ? activeItem : player;
if (GriefDefenderPlugin.isTargetIdBlacklisted(Flags.INTERACT_ENTITY_SECONDARY.getName(), targetEntity, player.getWorld().getUID())) {
return;
}
GDTimings.PLAYER_INTERACT_ENTITY_SECONDARY_EVENT.startTiming();
final GDClaim claim = this.dataStore.getClaimAt(location);
Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, location, claim, GDPermissions.INTERACT_ENTITY_SECONDARY, source, targetEntity, player, TrustTypes.ACCESSOR, true);
if (result == Tristate.TRUE && targetEntity instanceof ArmorStand) {
result = GDPermissionManager.getInstance().getFinalPermission(event, location, claim, GDPermissions.INVENTORY_OPEN, source, targetEntity, player, TrustTypes.CONTAINER, false);
}
if (result == Tristate.FALSE) {
event.setCancelled(true);
this.sendInteractEntityDenyMessage(activeItem, targetEntity, claim, player);
}
GDTimings.PLAYER_INTERACT_ENTITY_SECONDARY_EVENT.stopTiming();
}
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerBucketEmptyEvent(PlayerBucketEmptyEvent event) { public void onPlayerBucketEmptyEvent(PlayerBucketEmptyEvent event) {
onPlayerBucketEvent(event); onPlayerBucketEvent(event);
@ -507,7 +571,7 @@ public void onPlayerInteractBlockPrimary(PlayerInteractEvent event, Player playe
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerInteractBlockSecondary(PlayerInteractEvent event) { public void onPlayerInteractBlockSecondary(PlayerInteractEvent event) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) { if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL) {
onPlayerInteractBlockPrimary(event, player); onPlayerInteractBlockPrimary(event, player);
return; return;
} }
@ -532,7 +596,7 @@ public void onPlayerInteractBlockSecondary(PlayerInteractEvent event) {
return; return;
} }
if (itemInHand != null && (itemInHand.getType().equals(GriefDefenderPlugin.getInstance().modificationTool))) { if (itemInHand != null && NMSUtil.getInstance().itemsEqual(itemInHand, GriefDefenderPlugin.getInstance().modificationTool)) {
onPlayerHandleShovelAction(event, clickedBlock, player, itemInHand, playerData); onPlayerHandleShovelAction(event, clickedBlock, player, itemInHand, playerData);
// avoid changing blocks after using a shovel // avoid changing blocks after using a shovel
event.setUseInteractedBlock(Result.DENY); event.setUseInteractedBlock(Result.DENY);
@ -546,7 +610,7 @@ public void onPlayerInteractBlockSecondary(PlayerInteractEvent event) {
} }
final GDClaim claim = this.dataStore.getClaimAt(location); final GDClaim claim = this.dataStore.getClaimAt(location);
//GriefDefender.getPermissionManager().getFinalPermission(claim, Flags.ENTITY_SPAWN, source, target, user) //GriefDefender.getPermissionManager().getFinalPermission(claim, Flags.ENTITY_SPAWN, source, target, user)
final TrustType trustType = NMSUtil.getInstance().isBlockContainer(clickedBlock) ? TrustTypes.CONTAINER : TrustTypes.ACCESSOR; final TrustType trustType = NMSUtil.getInstance().isBlockContainer(clickedBlock) ? TrustTypes.CONTAINER : event.hasBlock() ? TrustTypes.BUILDER : TrustTypes.ACCESSOR;
if (GDFlags.INTERACT_BLOCK_SECONDARY && playerData != null) { if (GDFlags.INTERACT_BLOCK_SECONDARY && playerData != null) {
String permission = GDPermissions.INTERACT_BLOCK_SECONDARY; String permission = GDPermissions.INTERACT_BLOCK_SECONDARY;
if (event.getAction() == Action.PHYSICAL) { if (event.getAction() == Action.PHYSICAL) {
@ -573,13 +637,13 @@ public void onPlayerInteractBlockSecondary(PlayerInteractEvent event) {
} }
} }
event.setUseInteractedBlock(Result.DENY); event.setCancelled(true);
GDTimings.PLAYER_INTERACT_BLOCK_SECONDARY_EVENT.stopTiming(); GDTimings.PLAYER_INTERACT_BLOCK_SECONDARY_EVENT.stopTiming();
return; return;
} }
} }
if (itemInHand != null && (itemInHand.getType() == GriefDefenderPlugin.getInstance().modificationTool)) { if (itemInHand != null && (NMSUtil.getInstance().itemsEqual(itemInHand, GriefDefenderPlugin.getInstance().modificationTool))) {
onPlayerHandleShovelAction(event, clickedBlock, player, itemInHand, playerData); onPlayerHandleShovelAction(event, clickedBlock, player, itemInHand, playerData);
// avoid changing blocks after using a shovel // avoid changing blocks after using a shovel
event.setUseInteractedBlock(Result.DENY); event.setUseInteractedBlock(Result.DENY);
@ -893,7 +957,7 @@ public void onPlayerMove(PlayerMoveEvent event){
} }
private void onPlayerHandleShovelAction(PlayerInteractEvent event, Block clickedBlock, Player player, ItemStack itemInHand, GDPlayerData playerData) { private void onPlayerHandleShovelAction(PlayerInteractEvent event, Block clickedBlock, Player player, ItemStack itemInHand, GDPlayerData playerData) {
if (itemInHand == null || !itemInHand.getType().equals(GriefDefenderPlugin.getInstance().modificationTool)) { if (itemInHand == null || !NMSUtil.getInstance().itemsEqual(itemInHand, GriefDefenderPlugin.getInstance().modificationTool)) {
return; return;
} }
@ -1389,7 +1453,7 @@ private void handleResizeFinish(PlayerInteractEvent event, Player player, Locati
} }
private boolean investigateClaim(PlayerInteractEvent event, Player player, Block clickedBlock, ItemStack itemInHand) { private boolean investigateClaim(PlayerInteractEvent event, Player player, Block clickedBlock, ItemStack itemInHand) {
if (itemInHand == null || itemInHand.getType() != GriefDefenderPlugin.getInstance().investigationTool) { if (itemInHand == null || !NMSUtil.getInstance().itemsEqual(itemInHand, GriefDefenderPlugin.getInstance().investigationTool)){
return false; return false;
} }
@ -1508,6 +1572,25 @@ private GDClaim findNearbyClaim(Player player) {
return claim; return claim;
} }
private void sendInteractEntityDenyMessage(ItemStack playerItem, Entity entity, GDClaim claim, Player player) {
if (entity instanceof Player || (claim.getData() != null && !claim.getData().allowDenyMessages())) {
return;
}
final String entityId = entity.getType().getName() == null ? entity.getType().name().toLowerCase() : entity.getType().getName();
if (playerItem == null || playerItem.getType() == Material.AIR) {
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ENTITY, ImmutableMap.of(
"player", claim.getOwnerName(),
"entity", entityId));
GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message);
} else {
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM_ENTITY, ImmutableMap.of(
"item", NMSUtil.getInstance().getMaterialKey(playerItem.getType()),
"entity", entityId));
GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message);
}
}
private void sendInteractBlockDenyMessage(ItemStack playerItem, Block block, GDClaim claim, Player player, GDPlayerData playerData) { private void sendInteractBlockDenyMessage(ItemStack playerItem, Block block, GDClaim claim, Player player, GDPlayerData playerData) {
if (claim.getData() != null && !claim.getData().allowDenyMessages()) { if (claim.getData() != null && !claim.getData().allowDenyMessages()) {
return; return;

View File

@ -146,7 +146,7 @@ public Tristate getFinalPermission(Event event, Location location, Claim claim,
final Set<Context> contexts = new HashSet<>(); final Set<Context> contexts = new HashSet<>();
if (permissionHolder instanceof GDPermissionUser) { if (permissionHolder instanceof GDPermissionUser) {
GDPermissionUser user = (GDPermissionUser) permissionHolder; GDPermissionUser user = (GDPermissionUser) permissionHolder;
if (user.getOnlinePlayer() != null && NMSUtil.getInstance().getActiveItem(user.getOnlinePlayer()) != null) { if (user.getOnlinePlayer() != null && NMSUtil.getInstance().getActiveItem(user.getOnlinePlayer(), event) != null) {
contexts.add(new Context("used_item", getPermissionIdentifier(NMSUtil.getInstance().getActiveItem(user.getOnlinePlayer())))); contexts.add(new Context("used_item", getPermissionIdentifier(NMSUtil.getInstance().getActiveItem(user.getOnlinePlayer()))));
} }
} }
@ -682,7 +682,7 @@ public CompletableFuture<PermissionResult> setPermission(Claim claim, GDPermissi
CompletableFuture<PermissionResult> result = new CompletableFuture<>(); CompletableFuture<PermissionResult> result = new CompletableFuture<>();
if (flag != Flags.COMMAND_EXECUTE && flag != Flags.COMMAND_EXECUTE_PVP) { if (flag != Flags.COMMAND_EXECUTE && flag != Flags.COMMAND_EXECUTE_PVP) {
String[] parts = target.split(":"); String[] parts = target.split(":");
if (parts.length > 1) { if (parts.length > 1 && parts[0].equalsIgnoreCase("minecraft")) {
target = parts[1]; target = parts[1];
} }
if (target != null && !GriefDefenderPlugin.ID_MAP.contains(target)) { if (target != null && !GriefDefenderPlugin.ID_MAP.contains(target)) {

View File

@ -51,8 +51,10 @@
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
@ -143,6 +145,34 @@ public User getUserSubject(UUID uuid) {
} }
} }
public List<String> getAllLoadedPlayerNames() {
List<String> subjectList = new ArrayList<>();
for (User user : this.luckPermsApi.getUserManager().getLoadedUsers()) {
final String name = user.getName();
if (name != null) {
subjectList.add(name);
}
}
if (!subjectList.contains("public")) {
subjectList.add("public");
}
return subjectList;
}
public List<String> getAllLoadedGroupNames() {
List<String> subjectList = new ArrayList<>();
for (Group group : this.luckPermsApi.getGroupManager().getLoadedGroups()) {
final String name = group.getName();
if (name != null) {
subjectList.add(name);
}
}
if (!subjectList.contains("public")) {
subjectList.add("public");
}
return subjectList;
}
public MutableContextSet getActiveContexts(GDPermissionHolder permissionHolder) { public MutableContextSet getActiveContexts(GDPermissionHolder permissionHolder) {
return getActiveContexts(permissionHolder, null, null); return getActiveContexts(permissionHolder, null, null);
} }

View File

@ -250,7 +250,7 @@ GriefDefender {
town-tag-clear="&aThe town tag has been cleared." town-tag-clear="&aThe town tag has been cleared."
town-tax-no-claims="&cYou must own property in this town in order to be taxed." town-tax-no-claims="&cYou must own property in this town in order to be taxed."
trust-already-has="&c{target} already has {type} permission." trust-already-has="&c{target} already has {type} permission."
trust-current-claim="&aGranted &b{target} &apermission to {type} in current claim." trust-grant="&aGranted &b{target} &apermission to {type} in current claim."
trust-individual-all-claims="&aGranted &b{player}'s&a full trust to all your claims. To unset permissions for ALL your claims, use /untrustall." trust-individual-all-claims="&aGranted &b{player}'s&a full trust to all your claims. To unset permissions for ALL your claims, use /untrustall."
trust-invalid="&cInvalid trust type entered.\nThe allowed types are : accessor, builder, container, and manager." trust-invalid="&cInvalid trust type entered.\nThe allowed types are : accessor, builder, container, and manager."
trust-list-header="Explicit permissions here:" trust-list-header="Explicit permissions here:"

View File

@ -3,5 +3,5 @@ main: com.griefdefender.GDBootstrap
softdepend: [WorldEdit, WorldGuard, Vault] softdepend: [WorldEdit, WorldGuard, Vault]
depend: [LuckPerms] depend: [LuckPerms]
load: STARTUP load: STARTUP
version: '1.0.1' version: '1.0.2'
api-version: 1.13 api-version: 1.13