From 314bc462f0939044271c0cd126e8ddcd73583155 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 18:06:55 -0400 Subject: [PATCH] Better Permission handling for /KAMKEEL Commands --- src/main/java/kamkeel/CommandKamkeel.java | 25 ++++++++++++++++++- src/main/java/kamkeel/CommandKamkeelBase.java | 24 +++++++++++++++++- .../noppes/npcs/CustomNpcsPermissions.java | 7 ++++++ 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/main/java/kamkeel/CommandKamkeel.java b/src/main/java/kamkeel/CommandKamkeel.java index 12b6e93a3..f3ac61140 100644 --- a/src/main/java/kamkeel/CommandKamkeel.java +++ b/src/main/java/kamkeel/CommandKamkeel.java @@ -11,7 +11,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; +import noppes.npcs.CustomNpcsPermissions; import noppes.npcs.scripted.CustomNPCsException; public class CommandKamkeel extends CommandBase{ @@ -61,7 +64,7 @@ public class CommandKamkeel extends CommandBase{ args = Arrays.copyOfRange(args, 1, args.length); if(command.subcommands.isEmpty() || !command.runSubCommands()){ - if(!sender.canCommandSenderUseCommand(command.getRequiredPermissionLevel(), getCommandPermission(command.getCommandName()))) + if(!canSendCommand(sender, command)) throw new CommandException("You are not allowed to use this command: " + command); command.canRun(sender, command.getUsage(), args); command.processCommand(sender, args); @@ -117,5 +120,25 @@ public class CommandKamkeel extends CommandBase{ public static String getCommandPermission(String command){ return "cnpc.kamkeel." + command.toLowerCase(); } + + public static String getUniversalPermission(){ + return "cnpc.kamkeel.*"; + } + + public static boolean canSendCommand(ICommandSender sender, CommandKamkeelBase command){ + if(sender.canCommandSenderUseCommand(command.getRequiredPermissionLevel(), getUniversalPermission())){ + return true; + } + + if(sender.canCommandSenderUseCommand(command.getRequiredPermissionLevel(), getCommandPermission(command.getCommandName()))){ + return true; + } + + if(sender instanceof EntityPlayer){ + return CustomNpcsPermissions.hasCustomPermission((EntityPlayer) sender, getCommandPermission(command.getCommandName())); + } + + return false; + } } diff --git a/src/main/java/kamkeel/CommandKamkeelBase.java b/src/main/java/kamkeel/CommandKamkeelBase.java index 825adc4ca..bb94d9bc9 100644 --- a/src/main/java/kamkeel/CommandKamkeelBase.java +++ b/src/main/java/kamkeel/CommandKamkeelBase.java @@ -13,7 +13,9 @@ import java.util.Map; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ChatComponentTranslation; +import noppes.npcs.CustomNpcsPermissions; public abstract class CommandKamkeelBase extends CommandBase{ public Map subcommands = new HashMap(); @@ -87,7 +89,7 @@ public abstract class CommandKamkeelBase extends CommandBase{ throw new CommandException("Unknown subcommand " + command); SubCommand sc = m.getAnnotation(SubCommand.class); - if(!sender.canCommandSenderUseCommand(sc.permission(), getSubCommandPermission(command))) + if(!canSendCommand(sender, sc, command)) throw new CommandException("You are not allowed to use this command: " + command); canRun(sender, sc.usage(), args); @@ -123,4 +125,24 @@ public abstract class CommandKamkeelBase extends CommandBase{ public String getSubCommandPermission(String subCommand){ return "cnpc.kamkeel." + getCommandName().toLowerCase() + "." + subCommand.toLowerCase(); } + + public String getSubUniversalPermission(){ + return "cnpc.kamkeel." + getCommandName().toLowerCase() + "*"; + } + + public boolean canSendCommand(ICommandSender sender, SubCommand command, String subCommand){ + if(sender.canCommandSenderUseCommand(command.permission(), getSubUniversalPermission())){ + return true; + } + + if(sender.canCommandSenderUseCommand(command.permission(), getSubCommandPermission(subCommand))){ + return true; + } + + if(sender instanceof EntityPlayer){ + return CustomNpcsPermissions.hasCustomPermission((EntityPlayer) sender, getSubCommandPermission(subCommand)); + } + + return false; + } } \ No newline at end of file diff --git a/src/main/java/noppes/npcs/CustomNpcsPermissions.java b/src/main/java/noppes/npcs/CustomNpcsPermissions.java index 5f18f2afe..c1081000c 100644 --- a/src/main/java/noppes/npcs/CustomNpcsPermissions.java +++ b/src/main/java/noppes/npcs/CustomNpcsPermissions.java @@ -80,6 +80,13 @@ public class CustomNpcsPermissions{ return true; } + public static boolean hasCustomPermission(EntityPlayer player, String permission){ + if(Instance.bukkit != null){ + return Instance.bukkitPermission(player.getCommandSenderName(), permission); + } + return false; + } + private boolean bukkitPermission(String username, String permission) { try { Object player = getPlayer.invoke(null, username);