Files
CustomNPC-Plus/src/main/java/kamkeel/npcs/command/CommandKamkeel.java
T

171 lines
6.7 KiB
Java
Raw Normal View History

2025-01-29 13:20:04 -05:00
package kamkeel.npcs.command;
2023-02-28 04:26:52 -05:00
2025-03-12 20:12:01 -04:00
import kamkeel.npcs.controllers.AttributeController;
import kamkeel.npcs.controllers.data.attribute.AttributeDefinition;
2025-02-28 18:17:39 -05:00
import kamkeel.npcs.controllers.data.attribute.requirement.RequirementCheckerRegistry;
2023-02-28 04:26:52 -05:00
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
2023-05-10 16:33:10 -04:00
import net.minecraft.server.MinecraftServer;
import noppes.npcs.CustomNpcsPermissions;
import noppes.npcs.config.ConfigMain;
2023-02-28 04:26:52 -05:00
import noppes.npcs.scripted.CustomNPCsException;
2024-02-15 17:54:28 -05:00
import java.lang.reflect.Method;
2025-02-26 12:51:22 -05:00
import java.util.*;
2024-02-15 17:54:28 -05:00
import static kamkeel.npcs.command.EffectCommand.getSortedEffectNames;
2025-03-12 20:12:01 -04:00
public class CommandKamkeel extends CommandBase {
2024-02-15 17:54:28 -05:00
public Map<String, CommandKamkeelBase> map = new HashMap<String, CommandKamkeelBase>();
public HelpCommand help = new HelpCommand(this);
public String[] alias = {"kam"};
2025-03-12 20:12:01 -04:00
public CommandKamkeel() {
registerCommand(help);
registerCommand(new ScriptCommand());
registerCommand(new SlayCommand());
registerCommand(new QuestCommand());
registerCommand(new QuestCategoryCommand());
registerCommand(new DialogCommand());
registerCommand(new DialogCategoryCommand());
registerCommand(new FactionCommand());
registerCommand(new NpcCommand());
registerCommand(new CloneCommand());
registerCommand(new ConfigCommand());
registerCommand(new AnimationCommand());
registerCommand(new OverlayCommand());
registerCommand(new CommandCommand());
2025-02-11 22:05:34 -05:00
registerCommand(new EffectCommand());
2025-03-12 20:12:01 -04:00
if (ConfigMain.AttributesEnabled)
registerCommand(new AttributeCommand());
}
2025-03-12 20:12:01 -04:00
public void registerCommand(CommandKamkeelBase command) {
String name = command.getCommandName().toLowerCase();
2025-03-12 20:12:01 -04:00
if (map.containsKey(name))
throw new CustomNPCsException("Already a subcommand with the name: " + name);
map.put(name, command);
}
@Override
public String getCommandName() {
return "kamkeel";
}
@Override
2025-03-12 20:12:01 -04:00
public List getCommandAliases() {
return Arrays.asList(alias);
}
@Override
public String getCommandUsage(ICommandSender sender) {
return "Use as /kamkeel subcommand";
}
@Override
public void processCommand(ICommandSender sender, String[] args) throws CommandException {
2025-03-12 20:12:01 -04:00
if (args.length == 0) {
help.processCommand(sender, args);
return;
}
CommandKamkeelBase command = getCommand(args);
2025-03-12 20:12:01 -04:00
if (command == null)
throw new CommandException("Unknown command " + args[0]);
args = Arrays.copyOfRange(args, 1, args.length);
2025-03-12 20:12:01 -04:00
if (command.subcommands.isEmpty() || !command.runSubCommands()) {
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);
return;
}
2025-03-12 20:12:01 -04:00
if (args.length == 0) {
help.processCommand(sender, new String[]{command.getCommandName()});
return;
}
command.processSubCommand(sender, args[0], Arrays.copyOfRange(args, 1, args.length));
}
@Override
2025-03-12 20:12:01 -04:00
public List addTabCompletionOptions(ICommandSender sender, String[] args) {
if (args.length == 1)
return CommandBase.getListOfStringsMatchingLastWord(args, map.keySet().toArray(new String[map.size()]));
CommandKamkeelBase command = getCommand(args);
2025-03-12 20:12:01 -04:00
if (command == null)
return null;
2025-03-12 20:12:01 -04:00
if (args.length == 2 && command.runSubCommands())
return CommandBase.getListOfStringsMatchingLastWord(args, command.subcommands.keySet().toArray(new String[command.subcommands.keySet().size()]));
String[] useArgs = command.getUsage().split(" ");
2025-03-12 20:12:01 -04:00
if (command.runSubCommands()) {
Method m = command.subcommands.get(args[1].toLowerCase());
2025-03-12 20:12:01 -04:00
if (m != null) {
useArgs = m.getAnnotation(CommandKamkeelBase.SubCommand.class).usage().split(" ");
}
}
2025-03-12 20:12:01 -04:00
if (args.length <= useArgs.length + 2) {
if (args.length - 3 >= 0) {
String usage = useArgs[args.length - 3];
2025-03-12 20:12:01 -04:00
if (usage.equals("<player>") || usage.equals("[player]")) {
return CommandBase.getListOfStringsMatchingLastWord(args, MinecraftServer.getServer().getAllUsernames());
2025-03-12 20:12:01 -04:00
} else if (usage.equals("<attribute>")) {
2025-02-26 12:51:22 -05:00
List<String> keys = new ArrayList<>();
for (AttributeDefinition def : AttributeController.getAllAttributes()) {
keys.add(def.getKey());
}
return CommandBase.getListOfStringsMatchingLastWord(args, keys.toArray(new String[keys.size()]));
2025-02-28 18:17:39 -05:00
} else if (usage.equals("<requirement>")) {
List<String> keys = new ArrayList<>(RequirementCheckerRegistry.getAllKeys());
return CommandBase.getListOfStringsMatchingLastWord(args, keys.toArray(new String[keys.size()]));
2025-03-12 20:12:01 -04:00
} else if (usage.equals("<effectName>")) {
List<String> keys = getSortedEffectNames();
return CommandBase.getListOfStringsMatchingLastWord(args, keys.toArray(new String[keys.size()]));
2025-02-26 12:51:22 -05:00
}
}
}
return command.addTabCompletionOptions(sender, Arrays.copyOfRange(args, 1, args.length));
2023-02-28 04:26:52 -05:00
}
2024-02-15 17:54:28 -05:00
2025-03-12 20:12:01 -04:00
public CommandKamkeelBase getCommand(String[] args) {
if (args.length == 0)
return null;
return map.get(args[0].toLowerCase());
2023-02-28 04:26:52 -05:00
}
@Override
2025-03-12 20:12:01 -04:00
public int getRequiredPermissionLevel() {
2023-02-28 04:26:52 -05:00
return 2;
}
2023-03-02 02:34:44 -05:00
2025-03-12 20:12:01 -04:00
public static String getCommandPermission(String command) {
return "cnpc.kamkeel." + command.toLowerCase();
}
2025-03-12 20:12:01 -04:00
public static String getUniversalPermission() {
return "cnpc.kamkeel.*";
}
2025-03-12 20:12:01 -04:00
public static boolean canSendCommand(ICommandSender sender, CommandKamkeelBase command) {
if (sender.canCommandSenderUseCommand(command.getRequiredPermissionLevel(), getUniversalPermission())) {
return true;
}
2025-03-12 20:12:01 -04:00
if (sender.canCommandSenderUseCommand(command.getRequiredPermissionLevel(), getCommandPermission(command.getCommandName()))) {
return true;
}
2025-03-12 20:12:01 -04:00
if (sender instanceof EntityPlayer) {
return CustomNpcsPermissions.hasCustomPermission((EntityPlayer) sender, getCommandPermission(command.getCommandName()));
}
return false;
}
2023-02-28 04:26:52 -05:00
}