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) {
+ }
+}