- Баллы
- 96
- Имя в Minecraft
- fcode0xb
Костыль + Костыль = Плугин.
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Причём тут вообще это? Нам не интересно как ты плагины пишешь.Костыль + Костыль = Плугин.
Ну вообще то тема об регистрации через рефлексию. А как вы это примените уже вам решать.Просто если ты хочешь делать хорошую утилиту, то делай в ней всё так, чтобы было максимально удобно.
Благодаря такому классу ты просто создал команду, настроил таб, всё, больше ни о чём не думаешь!
protected final Object registeredWith;
Запчать от we. Для чего юзалось хз. Вам это не нужно.Для чего в данном случае сохраняется объект, от куда... вызвали создание нового экземпляра класса команды?
PHP:protected final Object registeredWith;
Вот так наверное.Здравствуйте, Александр! С регистрацией команд разобрались. А не подскажете, пожалуйста, как можно совершить обратный процесс, то есть разрегистрацию команд. Ибо при выгрузке плагина зарегистрированные команды остаются.???
public static void unregister(String name) {
try {
Field field = Bukkit.getServer().getClass().getDeclaredField("commandMap");
field.setAccessible(true);
CommandMap map = (CommandMap) field.get(Bukkit.getServer());
Field field2 = SimpleCommandMap.class.getDeclaredField("knownCommands");
field2.setAccessible(true);
Map<String, Command> command = (Map<String, Command>) field2.get(map);
command.get(name).unregister(map);
} catch (Exception e) {
e.printStackTrace();
}
}
Не должно. Если что попробуй прям из Map<String, Command> удалить.Нет, к сожалению команды все равно остаются ! ( Все равно, спасибо вам!!!
public static void unregister(String name) {
try {
Field field = Bukkit.getServer().getClass().getDeclaredField("commandMap");
field.setAccessible(true);
CommandMap map = (CommandMap) field.get(Bukkit.getServer());
Field field2 = SimpleCommandMap.class.getDeclaredField("knownCommands");
field2.setAccessible(true);
Map<String, Command> command = (Map<String, Command>) field2.get(map);
Command cmd = command.get(name);
command.remove(cmd.getName());
for(String tmp : cmd.getAliases()) {
command.remove(tmp);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Алисасы еще придется удалить. Выше код.Я просто изменил
command.get(name).unregister(map); на
command.remove(name);
И вроде все заработало!!! Спасибо вам, Александр! И, кстати, как лайкнуть? )
Да, просмотрев ваш код я уже понял это! Еще раз благодарю!Алисасы еще придется удалить. Выше код.
Как и в обычных командах. В новых версиях игры для комплита, если регистрация идет не на запуске плагина, а позже, требуется вот такая хитрость.Вопрос, а как добавить TabCompleter?
Памагити...
private static void syncCommands() {
String version = Bukkit.getServer().getClass().getName().split("\\.")[3];
try {
Class<?> server = Class.forName("org.bukkit.craftbukkit." + version + ".CraftServer");
Method syncCommands = server.getDeclaredMethod("syncCommands");
syncCommands.setAccessible(true);
syncCommands.invoke(Bukkit.getServer());
} catch (Exception ex) {
ex.printStackTrace();
}
}