diff --git a/pom.xml b/pom.xml index f20ea64..1e3c80d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.t2code Alias - 1.1.5 + 1.1.6 jar T2C-Alias diff --git a/src/main/java/net/t2code/alias/Spigot/Main.java b/src/main/java/net/t2code/alias/Spigot/Main.java index 0de788b..8db05f2 100644 --- a/src/main/java/net/t2code/alias/Spigot/Main.java +++ b/src/main/java/net/t2code/alias/Spigot/Main.java @@ -2,6 +2,8 @@ package net.t2code.alias.Spigot; import net.t2code.alias.Spigot.objects.AliasObject; import net.t2code.alias.Spigot.objects.SubAliasObject; +import net.t2code.alias.Spigot.system.BukkitCommandWrap; +import net.t2code.alias.Spigot.system.BukkitCommandWrap_Useless; import net.t2code.alias.Spigot.system.Load; import net.t2code.alias.Util; import net.t2code.t2codelib.SPIGOT.api.messages.T2Ctemplate; @@ -23,6 +25,7 @@ public final class Main extends JavaPlugin { private static List autor; private static Main plugin; public static HashMap aliasHashMap = new HashMap<>(); + public static HashMap loadAliasHashMap = new HashMap<>(); public static HashMap subAliasHashMap = new HashMap<>(); public static ArrayList allAliases = new ArrayList<>(); public static ArrayList allSubAliases = new ArrayList<>(); @@ -35,6 +38,12 @@ public final class Main extends JavaPlugin { autor = plugin.getDescription().getAuthors(); version = plugin.getDescription().getVersion(); if (pluginNotFound("T2CodeLib", 96388, Util.getRequiredT2CodeLibVersion())) return; + try { + Class.forName("com.mojang.brigadier.CommandDispatcher"); + this.bukkitCommandWrap = new BukkitCommandWrap(); + } catch (ClassNotFoundException | NoClassDefFoundError e) { + this.bukkitCommandWrap = new BukkitCommandWrap_Useless(); + } Load.onLoad(Util.getPrefix(), autor, version, Util.getSpigot(), Util.getDiscord(), Util.getBstatsID()); } @@ -91,4 +100,10 @@ public final class Main extends JavaPlugin { public static List getAutor() { return autor; } + + private BukkitCommandWrap bukkitCommandWrap = null; + + public BukkitCommandWrap getBukkitCommandWrap() { + return this.bukkitCommandWrap; + } } diff --git a/src/main/java/net/t2code/alias/Spigot/cmdManagement/Commands.java b/src/main/java/net/t2code/alias/Spigot/cmdManagement/Commands.java index e1505f9..f6c5a33 100644 --- a/src/main/java/net/t2code/alias/Spigot/cmdManagement/Commands.java +++ b/src/main/java/net/t2code/alias/Spigot/cmdManagement/Commands.java @@ -2,6 +2,7 @@ package net.t2code.alias.Spigot.cmdManagement; import net.t2code.alias.Spigot.Main; import net.t2code.alias.Spigot.config.languages.SelectMessages; +import net.t2code.alias.Spigot.system.Load; import net.t2code.alias.Util; import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend; import net.t2code.t2codelib.SPIGOT.api.messages.T2Ctemplate; @@ -10,16 +11,16 @@ import org.bukkit.entity.Player; public class Commands { public static void info(CommandSender sender) { - T2Ctemplate.sendInfo(sender,Main.getPlugin(),Util.getSpigotID(),Util.getDiscord(),Util.getInfoText()); + T2Ctemplate.sendInfo(sender, Main.getPlugin(), Util.getSpigotID(), Util.getDiscord(), Util.getInfoText()); } public static void reload(CommandSender sender) { - if (sender instanceof Player) sender.sendMessage(SelectMessages.reloadStart); + if (sender instanceof Player) T2Csend.player((Player) sender, SelectMessages.reloadStart); T2Csend.console(Util.getPrefix() + "§8-------------------------------"); T2Csend.console(Util.getPrefix() + " §6Plugin reload..."); T2Csend.console(Util.getPrefix() + "§8-------------------------------"); - Main.getPlugin().onEnable(); - if (sender instanceof Player) sender.sendMessage(SelectMessages.reloadEnd); + Load.loadReload(); + if (sender instanceof Player) T2Csend.player((Player) sender, SelectMessages.reloadEnd); T2Csend.console(Util.getPrefix() + "§8-------------------------------"); T2Csend.console(Util.getPrefix() + " §2Plugin successfully reloaded."); T2Csend.console(Util.getPrefix() + "§8-------------------------------"); diff --git a/src/main/java/net/t2code/alias/Spigot/cmdManagement/ExecuteAlias.java b/src/main/java/net/t2code/alias/Spigot/cmdManagement/ExecuteAlias.java index de23f6d..9e0f6ee 100644 --- a/src/main/java/net/t2code/alias/Spigot/cmdManagement/ExecuteAlias.java +++ b/src/main/java/net/t2code/alias/Spigot/cmdManagement/ExecuteAlias.java @@ -27,7 +27,7 @@ public class ExecuteAlias { if (aliasObject.adminEnable) { if (player.hasPermission(aliasObject.adminPermission)) { if (aliasObject.adminCommandEnable) { - aliasAdminCommand(aliasObject, player, args); + aliasAdminCommand(aliasObject, alias, player, args); } if (aliasObject.adminMessageEnable) { aliasAdminMessage(aliasObject, alias, player, args); @@ -57,7 +57,7 @@ public class ExecuteAlias { } } if (aliasObject.commandEnable) { - aliasCommand(aliasObject, player, args); + aliasCommand(aliasObject, alias, player, args); } if (aliasObject.messageEnable) { aliasMessage(aliasObject, alias, player, args); @@ -76,7 +76,7 @@ public class ExecuteAlias { if (aliasObject.adminEnable) { if (player.hasPermission(aliasObject.adminPermission)) { if (aliasObject.adminCommandEnable) { - subAliasAdminCommand(aliasObject, player, args); + subAliasAdminCommand(aliasObject,alias, player, args); } if (aliasObject.adminMessageEnable) { subAliasAdminMessage(aliasObject, alias, player, args); @@ -113,7 +113,7 @@ public class ExecuteAlias { } } else { if (aliasObject.consoleEnable) { - subAliasConsole(aliasObject, sender, args); + subAliasConsole(aliasObject,alias, sender, args); } else T2Csend.sender(sender, SelectMessages.onlyForPlayer); } } @@ -140,7 +140,7 @@ public class ExecuteAlias { } } - private static void subAliasConsole(SubAliasObject alias, CommandSender sender, String[] args) { + private static void subAliasConsole(SubAliasObject aliasObject, String alias, CommandSender sender, String[] args) { String targetSt = "[target]"; try { List results = Arrays.stream(args).filter(a -> a.contains("-p:")).collect(Collectors.toList()); @@ -148,28 +148,29 @@ public class ExecuteAlias { } catch (Exception ignored) { } - if (alias.consoleCommandEnable) { - for (String cmd : alias.consoleCommands) { - if (alias.consoleBungeeCommand) { + if (aliasObject.consoleCommandEnable) { + for (String cmd : aliasObject.consoleCommands) { + String replace = cmd.replace("[target]", targetSt).replace("[alias]", alias); + if (aliasObject.consoleBungeeCommand) { if (SelectConfig.getBungee()) { - BCommandSenderReciver.sendToBungee(sender, cmd.replace("[target]", targetSt), true); + BCommandSenderReciver.sendToBungee(sender, replace, true); } else { T2Csend.console(Util.getPrefix() + " §4To use bungee commands, enable the Bungee option in the config."); T2Csend.sender(sender, Util.getPrefix() + " §4To use bungee commands, enable the Bungee option in the config."); } } else { - T2Ccmd.console(cmd.replace("[target]", targetSt)); + T2Ccmd.console(replace); } } } - if (alias.consoleMessageEnable) { - for (String msg : alias.consoleMessages) { + if (aliasObject.consoleMessageEnable) { + for (String msg : aliasObject.consoleMessages) { T2Csend.console(T2Creplace.replace(prefix, msg)); } } } - private static void aliasAdminCommand(AliasObject alias, Player player, String[] args) { + private static void aliasAdminCommand(AliasObject aliasObject, String alias, Player player, String[] args) { String targetSt = "[target]"; try { List results = Arrays.stream(args).filter(a -> a.contains("-p:")).collect(Collectors.toList()); @@ -177,26 +178,26 @@ public class ExecuteAlias { } catch (Exception ignored) { } - for (String cmd : alias.adminCommands) { - if (alias.adminBungeeCommand) { + for (String cmd : aliasObject.adminCommands) { + if (aliasObject.adminBungeeCommand) { if (SelectConfig.getBungee()) { - BCommandSenderReciver.sendToBungee(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt), alias.adminCommandAsConsole); + BCommandSenderReciver.sendToBungee(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt).replace("[alias]", alias), aliasObject.adminCommandAsConsole); } else { T2Csend.console(Util.getPrefix() + " §4To use bungee commands, enable the Bungee option in the config."); T2Csend.player(player, Util.getPrefix() + " §4To use bungee commands, enable the Bungee option in the config."); } } else { - if (alias.adminCommandAsConsole) { - T2Ccmd.console(cmd.replace("[player]", player.getName()).replace("[target]", targetSt)); + if (aliasObject.adminCommandAsConsole) { + T2Ccmd.console(cmd.replace("[player]", player.getName()).replace("[target]", targetSt).replace("[alias]", alias)); } else { - T2Ccmd.player(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt)); + T2Ccmd.player(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt).replace("[alias]", alias)); } } } } - private static void subAliasAdminCommand(SubAliasObject alias, Player player, String[] args) { + private static void subAliasAdminCommand(SubAliasObject aliasObject, String alias, Player player, String[] args) { String targetSt = "[target]"; try { List results = Arrays.stream(args).filter(a -> a.contains("-p:")).collect(Collectors.toList()); @@ -204,20 +205,20 @@ public class ExecuteAlias { } catch (Exception ignored) { } - for (String cmd : alias.adminCommands) { - if (alias.adminBungeeCommand) { + for (String cmd : aliasObject.adminCommands) { + if (aliasObject.adminBungeeCommand) { if (SelectConfig.getBungee()) { - BCommandSenderReciver.sendToBungee(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt), alias.adminCommandAsConsole); + BCommandSenderReciver.sendToBungee(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt).replace("[alias]", alias), aliasObject.adminCommandAsConsole); } else { T2Csend.console(Util.getPrefix() + " §4To use bungee commands, enable the Bungee option in the config."); T2Csend.player(player, Util.getPrefix() + " §4To use bungee commands, enable the Bungee option in the config."); } } else { - if (alias.adminCommandAsConsole) { - T2Ccmd.console(cmd.replace("[player]", player.getName()).replace("[target]", targetSt)); + if (aliasObject.adminCommandAsConsole) { + T2Ccmd.console(cmd.replace("[player]", player.getName()).replace("[target]", targetSt).replace("[alias]", alias)); } else { - T2Ccmd.player(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt)); + T2Ccmd.player(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt).replace("[alias]", alias)); } } } @@ -261,7 +262,7 @@ public class ExecuteAlias { } } - private static void aliasCommand(AliasObject alias, Player player, String[] args) { + private static void aliasCommand(AliasObject aliasObject, String alias, Player player, String[] args) { String targetSt = "[target]"; try { List results = Arrays.stream(args).filter(a -> a.contains("-p:")).collect(Collectors.toList()); @@ -269,20 +270,19 @@ public class ExecuteAlias { } catch (Exception ignored) { } - for (String cmd : alias.command) { - if (alias.bungeeCommand) { + for (String cmd : aliasObject.command) { + if (aliasObject.bungeeCommand) { if (SelectConfig.getBungee()) { - BCommandSenderReciver.sendToBungee(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt), alias.commandAsConsole); - + BCommandSenderReciver.sendToBungee(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt).replace("[alias]", alias), aliasObject.commandAsConsole); } else { T2Csend.console(Util.getPrefix() + " §4To use bungee commands, enable the Bungee option in the config."); T2Csend.player(player, Util.getPrefix() + " §4To use bungee commands, enable the Bungee option in the config."); } } else { - if (alias.commandAsConsole) { - T2Ccmd.console(cmd.replace("[player]", player.getName()).replace("[target]", targetSt)); + if (aliasObject.commandAsConsole) { + T2Ccmd.console(cmd.replace("[player]", player.getName()).replace("[target]", targetSt).replace("[alias]", alias)); } else { - T2Ccmd.player(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt)); + T2Ccmd.player(player, cmd.replace("[player]", player.getName()).replace("[target]", targetSt).replace("[alias]", alias)); } } } diff --git a/src/main/java/net/t2code/alias/Spigot/config/alias/SelectAlias.java b/src/main/java/net/t2code/alias/Spigot/config/alias/SelectAlias.java index 60fe082..25b0d7f 100644 --- a/src/main/java/net/t2code/alias/Spigot/config/alias/SelectAlias.java +++ b/src/main/java/net/t2code/alias/Spigot/config/alias/SelectAlias.java @@ -4,11 +4,14 @@ import com.google.common.base.Preconditions; import net.t2code.alias.Spigot.Main; import net.t2code.alias.Spigot.system.AliasRegister; import net.t2code.alias.Spigot.objects.AliasObject; +import net.t2code.alias.Spigot.system.BukkitCommandWrap_Useless; import net.t2code.alias.Util; import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend; +import net.t2code.t2codelib.SPIGOT.api.messages.T2Ctemplate; import org.bukkit.Bukkit; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; import java.io.File; import java.io.FileNotFoundException; @@ -23,6 +26,7 @@ public class SelectAlias { Main.aliasHashMap.clear(); Main.allAliases.clear(); + File f = new File(Main.getPath() + "/Alias/"); File[] fileArray = f.listFiles(); for (File config_gui : fileArray) { @@ -101,6 +105,7 @@ public class SelectAlias { T2Csend.console(Prefix + " §aAlias file §e" + config_gui.getName() + " §awas loaded"); } } + T2Ctemplate.onLoadSeparateStroke(Util.getPrefix()); AliasRegister.onRegister(); } diff --git a/src/main/java/net/t2code/alias/Spigot/system/AliasRegister.java b/src/main/java/net/t2code/alias/Spigot/system/AliasRegister.java index c6692f8..9fe35d7 100644 --- a/src/main/java/net/t2code/alias/Spigot/system/AliasRegister.java +++ b/src/main/java/net/t2code/alias/Spigot/system/AliasRegister.java @@ -2,28 +2,84 @@ package net.t2code.alias.Spigot.system; import net.t2code.alias.Spigot.Main; import net.t2code.alias.Spigot.cmdManagement.RegisterCommands; +import net.t2code.alias.Util; import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend; import org.bukkit.Bukkit; +import org.bukkit.command.Command; import org.bukkit.command.CommandMap; +import org.bukkit.command.SimpleCommandMap; +import org.bukkit.entity.Player; +import org.bukkit.plugin.SimplePluginManager; import java.lang.reflect.Field; +import java.util.Map; +import java.util.Objects; public class AliasRegister { public static void onRegister() { - for (String alias : Main.allAliases) { - if (Main.aliasHashMap.get(alias) != null) { - if (alias.equals(" ")) continue; - if (Main.aliasHashMap.get(alias).aliasEnable) { - try { - final Field bukkitCommandMap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); - bukkitCommandMap.setAccessible(true); - CommandMap commandMap = (CommandMap) bukkitCommandMap.get(Bukkit.getServer()); - commandMap.register(alias, new RegisterCommands(alias)); - } catch (Exception e) { - e.printStackTrace(); - } - } - } else T2Csend.warning(Main.getPlugin(), " §4AliasHashmap is null! - " + alias); + try { + final Field bukkitCommandMap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); + bukkitCommandMap.setAccessible(true); + CommandMap commandMap = (CommandMap) bukkitCommandMap.get(Bukkit.getServer()); + // onUnRegister(bukkitCommandMap); + for (String alias : Main.allAliases) { + register(alias, commandMap); + // wrap(alias, commandMap); + } + + Main.getPlugin().getBukkitCommandWrap().sync(); + if (Bukkit.getOnlinePlayers().size() >= 1) + for (Player player : Bukkit.getOnlinePlayers()) player.updateCommands(); + } catch (Exception e) { + e.printStackTrace(); } } + + //public static void onUnRegister(Field bukkitCommandMap) throws IllegalAccessException { + // + // // if (Main.allAliases != null && !Main.allAliases.isEmpty()) { + // // if (!(Main.getPlugin().getBukkitCommandWrap() instanceof BukkitCommandWrap_Useless)) { + // // for (String alias : Main.allAliases) { + // // T2Csend.debugmsg(Main.getPlugin(),"uload: " + alias); + // // Main.getPlugin(). + // // Main.getPlugin().getBukkitCommandWrap().unwrap(alias); + // // } + // // Main.getPlugin().getBukkitCommandWrap().sync(); + // // if (Bukkit.getOnlinePlayers().size() >= 1) + // // for (Player player : Bukkit.getOnlinePlayers()) player.updateCommands(); + // // } + // // } + // // commandMap.clearCommands(); + // + // + // for (Map.Entry entry : Main.loadAliasHashMap.entrySet()) { + // ((SimpleCommandMap) bukkitCommandMap.get(simplePluginManager)).getCommand(entry.getKey()).unregister(bukkitCommandMap.get(Bukkit.getServer())); + // + // + // if (entry.getValue()) + // Main.getPlugin().getBukkitCommandWrap().unwrap(entry.getKey()); + // } + // + // Main.getPlugin().getBukkitCommandWrap().sync(); + // if (Bukkit.getOnlinePlayers().size() >= 1) + // for (Player player : Bukkit.getOnlinePlayers()) player.updateCommands(); + // Main.loadAliasHashMap.clear(); + // + //} + + private static void register(String alias, CommandMap commandMap) { + if (Main.aliasHashMap.get(alias) != null) { + if (alias.equals(" ")) return; + if (Main.aliasHashMap.get(alias).aliasEnable) { + commandMap.register(alias, new RegisterCommands(alias)); + T2Csend.console(Util.getPrefix() + " §aAlias §e" + alias + " §aregister"); + Main.loadAliasHashMap.put(alias, true); + } else Main.loadAliasHashMap.put(alias, false); + } else T2Csend.warning(Main.getPlugin(), " §4AliasHashmap is null! - " + alias); + } + + private static void wrap(String alias, CommandMap commandMap) { + Command cmd = commandMap.getCommand(alias); + Main.getPlugin().getBukkitCommandWrap().wrap(cmd, alias); + } } diff --git a/src/main/java/net/t2code/alias/Spigot/system/BukkitCommandWrap.java b/src/main/java/net/t2code/alias/Spigot/system/BukkitCommandWrap.java new file mode 100644 index 0000000..5ebee2c --- /dev/null +++ b/src/main/java/net/t2code/alias/Spigot/system/BukkitCommandWrap.java @@ -0,0 +1,247 @@ +package net.t2code.alias.Spigot.system; + +import com.mojang.brigadier.tree.CommandNode; +import com.mojang.brigadier.tree.RootCommandNode; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class BukkitCommandWrap { + private Field bField; + private Method removeCommandMethod; + private String nmsVersion; + private Class minecraftServerClass; + private Method aMethod; + private Method getServerMethod; + private Field vanillaCommandDispatcherField; + private Method getCommandDispatcherMethod; + private Method registerMethod; + private Method syncCommandsMethod; + private Constructor bukkitcommandWrapperConstructor; + + public BukkitCommandWrap() { + try { + this.nmsVersion = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; + } catch (ArrayIndexOutOfBoundsException e) { + e.printStackTrace(); + this.nmsVersion = null; + } + } + + public void wrap(Command command, String alias) { + if (this.nmsVersion == null) return; + if (this.minecraftServerClass == null) try { + this.minecraftServerClass = Class.forName("net.minecraft.server." + this.nmsVersion + ".MinecraftServer"); + } catch (ClassNotFoundException e) { + try { + this.minecraftServerClass = Class.forName("net.minecraft.server.MinecraftServer"); + } catch (ClassNotFoundException classNotFoundException) { + classNotFoundException.addSuppressed(e); + classNotFoundException.printStackTrace(); + return; + } + } + + if (this.getServerMethod == null) try { + this.getServerMethod = this.minecraftServerClass.getMethod("getServer"); + this.getServerMethod.setAccessible(true); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + return; + } + + Object minecraftServer; + try { + minecraftServer = this.getServerMethod.invoke(this.minecraftServerClass); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return; + } + + if (this.vanillaCommandDispatcherField == null) try { + this.vanillaCommandDispatcherField = this.minecraftServerClass.getDeclaredField("vanillaCommandDispatcher"); + this.vanillaCommandDispatcherField.setAccessible(true); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + return; + } + + Object commandDispatcher = null; + try { + commandDispatcher = this.vanillaCommandDispatcherField.get(minecraftServer); + } catch (IllegalAccessException e) { + e.printStackTrace(); + return; + } + + if (this.bField == null) try { + this.bField = Class.forName("net.minecraft.commands.CommandDispatcher").getDeclaredField("g"); + this.bField.setAccessible(true); + } catch (NoSuchFieldException | ClassNotFoundException e) { + e.printStackTrace(); + return; + } + + com.mojang.brigadier.CommandDispatcher b; + try { + b = (com.mojang.brigadier.CommandDispatcher) this.bField.get(commandDispatcher); + } catch (IllegalAccessException e) { + e.printStackTrace(); + return; + } + + if (this.aMethod == null) try { + this.aMethod = commandDispatcher.getClass().getDeclaredMethod("a"); + this.aMethod.setAccessible(true); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + return; + } + + if (this.bukkitcommandWrapperConstructor == null) try { + this.bukkitcommandWrapperConstructor = Class.forName("org.bukkit.craftbukkit." + this.nmsVersion + ".command.BukkitCommandWrapper").getDeclaredConstructor(Class.forName("org.bukkit.craftbukkit." + this.nmsVersion + ".CraftServer"), Command.class); + this.bukkitcommandWrapperConstructor.setAccessible(true); + } catch (NoSuchMethodException | ClassNotFoundException e) { + e.printStackTrace(); + return; + } + + Object commandWrapper; + + try { + commandWrapper = this.bukkitcommandWrapperConstructor.newInstance(Bukkit.getServer(), command); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return; + } + + Object a; + + try { + a = this.aMethod.invoke(commandDispatcher); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return; + } + + if (this.registerMethod == null) try { + this.registerMethod = Class.forName("org.bukkit.craftbukkit." + this.nmsVersion + ".command.BukkitCommandWrapper").getMethod("register", com.mojang.brigadier.CommandDispatcher.class, String.class); + this.registerMethod.setAccessible(true); + } catch (NoSuchMethodException | ClassNotFoundException e) { + e.printStackTrace(); + return; + } + + try { + this.registerMethod.invoke(commandWrapper, a, alias); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + public void sync() { + if (this.syncCommandsMethod == null) try { + this.syncCommandsMethod = Class.forName("org.bukkit.craftbukkit." + this.nmsVersion + ".CraftServer").getDeclaredMethod("syncCommands"); + this.syncCommandsMethod.setAccessible(true); + } catch (NoSuchMethodException | ClassNotFoundException e) { + e.printStackTrace(); + return; + } + + try { + this.syncCommandsMethod.invoke(Bukkit.getServer()); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + public void unwrap(String command) { + if (this.nmsVersion == null) return; + if (this.minecraftServerClass == null) try { + this.minecraftServerClass = Class.forName("net.minecraft.server." + this.nmsVersion + ".MinecraftServer"); + } catch (ClassNotFoundException e) { + try { + this.minecraftServerClass = Class.forName("net.minecraft.server.MinecraftServer"); + } catch (ClassNotFoundException classNotFoundException) { + classNotFoundException.printStackTrace(); + classNotFoundException.addSuppressed(e); + return; + } + } + if (this.getServerMethod == null) try { + this.getServerMethod = this.minecraftServerClass.getMethod("getServer"); + this.getServerMethod.setAccessible(true); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + return; + } + + Object server; + + try { + server = this.getServerMethod.invoke(this.minecraftServerClass); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + return; + } + + if (this.vanillaCommandDispatcherField == null) try { + this.vanillaCommandDispatcherField = this.minecraftServerClass.getDeclaredField("vanillaCommandDispatcher"); + this.vanillaCommandDispatcherField.setAccessible(true); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + return; + } + + Object commandDispatcher = null; + try { + commandDispatcher = this.vanillaCommandDispatcherField.get(server); + } catch (IllegalAccessException e) { + e.printStackTrace(); + return; + } + + if (this.bField == null) try { + this.bField = Class.forName("net.minecraft.server." + this.nmsVersion + ".CommandDispatcher").getDeclaredField("b"); + this.bField.setAccessible(true); + } catch (NoSuchFieldException | ClassNotFoundException e) { + if (this.bField == null) try { + this.bField = Class.forName("net.minecraft.commands.CommandDispatcher").getDeclaredField("g"); + this.bField.setAccessible(true); + } catch (NoSuchFieldException | ClassNotFoundException ex) { + ex.addSuppressed(e); + e.printStackTrace(); + return; + } + } + + com.mojang.brigadier.CommandDispatcher b; + try { + b = (com.mojang.brigadier.CommandDispatcher) this.bField.get(commandDispatcher); + } catch (IllegalAccessException e) { + e.printStackTrace(); + return; + } + + if (this.removeCommandMethod == null) try { + try { + this.removeCommandMethod = RootCommandNode.class.getDeclaredMethod("removeCommand", String.class); + } catch (NoSuchMethodException | NoSuchMethodError ex) { + this.removeCommandMethod = CommandNode.class.getDeclaredMethod("removeCommand", String.class); + } + } catch (NoSuchMethodException e) { + e.printStackTrace(); + return; + } + + try { + this.removeCommandMethod.invoke(b.getRoot(), command); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/net/t2code/alias/Spigot/system/BukkitCommandWrap_Useless.java b/src/main/java/net/t2code/alias/Spigot/system/BukkitCommandWrap_Useless.java new file mode 100644 index 0000000..0815c4c --- /dev/null +++ b/src/main/java/net/t2code/alias/Spigot/system/BukkitCommandWrap_Useless.java @@ -0,0 +1,17 @@ +package net.t2code.alias.Spigot.system; + +import org.bukkit.command.Command; + +public class BukkitCommandWrap_Useless extends BukkitCommandWrap { + + public BukkitCommandWrap_Useless() { + } + + @Override + public void wrap(Command command, String alias) { + } + + @Override + public void unwrap(String command) { + } +}