Advertisement
malanak

Untitled

Mar 1st, 2022
978
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.25 KB | None | 0 0
  1. package com.malanak.util;
  2.  
  3. import com.malanak.MyTestplugin;
  4. import org.bukkit.Bukkit;
  5. import org.bukkit.command.Command;
  6. import org.bukkit.command.CommandExecutor;
  7. import org.bukkit.command.CommandMap;
  8. import org.bukkit.command.CommandSender;
  9. import org.bukkit.command.defaults.BukkitCommand;
  10. import org.bukkit.entity.Player;
  11. import org.bukkit.plugin.SimplePluginManager;
  12.  
  13. import java.lang.reflect.Field;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16.  
  17. public abstract class CommandBase extends BukkitCommand implements CommandExecutor {
  18.     private List<String> delayedPlayers = null;
  19.     private int delay = 0;
  20.     private final int minArguments;
  21.     private final int maxArguments;
  22.     private final boolean playerOnly;
  23.  
  24.     public CommandBase(String command) {
  25.         this(command, 0);
  26.     }
  27.  
  28.     public CommandBase(String command, boolean playerOnly) {
  29.         this(command, 0, playerOnly);
  30.     }
  31.  
  32.     public CommandBase(String command, int requiredArguments) {
  33.         this(command, requiredArguments, requiredArguments);
  34.     }
  35.  
  36.     public CommandBase(String command, int minArguments, int maxArguments) {
  37.         this(command, minArguments, maxArguments, false);
  38.     }
  39.  
  40.     public CommandBase(String command, int requiredArguments, boolean playerOnly) {
  41.         this(command, requiredArguments, requiredArguments, playerOnly);
  42.     }
  43.  
  44.     public CommandBase(String command, int minArguments, int maxArguments, boolean playerOnly) {
  45.         super(command);
  46.  
  47.         this.minArguments = minArguments;
  48.         this.maxArguments = maxArguments;
  49.         this.playerOnly = playerOnly;
  50.  
  51.         CommandMap commandMap = getCommandMap();
  52.         if (commandMap != null) {
  53.             commandMap.register(command, this);
  54.         }
  55.     }
  56.  
  57.     public CommandMap getCommandMap() {
  58.         try {
  59.             if (Bukkit.getPluginManager() instanceof SimplePluginManager) {
  60.                 Field field = SimplePluginManager.class.getDeclaredField("commandMap");
  61.                 field.setAccessible(true);
  62.  
  63.                 return (CommandMap) field.get(Bukkit.getPluginManager());
  64.             }
  65.         } catch(NoSuchFieldException | IllegalAccessException e) {
  66.             e.printStackTrace();
  67.         }
  68.         return null;
  69.     }
  70.  
  71.     public CommandBase enableDelay(int delay) {
  72.         this.delay = delay;
  73.         this.delayedPlayers = new ArrayList<>();
  74.         return this;
  75.     }
  76.  
  77.     public void removeDelay(Player player) {
  78.         this.delayedPlayers.remove(player.getName());
  79.     }
  80.     public void sendUsage(CommandSender sender) {
  81.         Msg.send(sender, getUsage());
  82.     }
  83.  
  84.     public boolean execute(CommandSender sender, String alias, String [] arguments) {
  85.         if (arguments.length > minArguments || (arguments.length < maxArguments && maxArguments != -1)) {
  86.             sendUsage(sender);
  87.             return true;
  88.         }
  89.  
  90.         if (playerOnly && !(sender instanceof Player)) {
  91.             Msg.send(sender,"[TestPlugin4Stuff] Only players can use this command.", "&c");
  92.             return true;
  93.         }
  94.  
  95.         String permission = getPermission();
  96.         if (permission != null && !sender.hasPermission(permission)) {
  97.             Msg.send(sender, "[TestPlugin4Stuff] You do not have permission to use this command!", "&c");
  98.             return true;
  99.         }
  100.  
  101.         if (delayedPlayers != null && sender instanceof Player) {
  102.             Player player = (Player) sender;
  103.             if (delayedPlayers.contains(player.getName())) {
  104.                 Msg.send(sender, "[TestPlugin4Stuff] This command is on cooldown", "&c");
  105.                 return true;
  106.             }
  107.  
  108.             delayedPlayers.add(player.getName());
  109.             Bukkit.getScheduler().scheduleSyncDelayedTask(MyTestplugin.getInstance(), () -> {
  110.                 delayedPlayers.remove(player.getName());
  111.             }, 20L * delay);
  112.         }
  113.  
  114.         if (!onCommand(sender, arguments)) {
  115.             sendUsage(sender);
  116.         }
  117.  
  118.         return true;
  119.     }
  120.  
  121.     public boolean onCommand(CommandSender sender, Command command, String alias, String [] arguments) {
  122.         return this.onCommand(sender, arguments);
  123.     }
  124.  
  125.     public abstract boolean onCommand(CommandSender sender, String [] arguments);
  126.  
  127.     public abstract String getUsage();
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement