Помогите Как заменить зарегистрированную команду?

  • Автор темы Автор темы MySoR
  • Дата начала Дата начала

MySoR

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
MySoR
Как можно заменить уже зарегистрированную команду, в моем случае это команда /bc из essentials.
На ядре 1 12 2 spigot отлично заменялось путем установки команд эхекутора еще раз но на ядру paper устанавливается каким-то образом 2 команды одновременно и выполняются они в той последовательности в которой загружены плагины, понятно что depend есссентиалса не помогает.

+ Еще есть такой вопрос, как можно зарегистрировать команду не зная ее до запуска плагина, тоесть не указывая ее в plugin.yml? Нужно чтобы адм могли создать собственную команду путем добавления ее в обычный конфиг.
 
Где-то в файлах Essentials'a видел функционал Overload для команд, то есть переписывание. Создаёшь в своём плагине команду с таким же именем, а в файле меняешь значение. Что на что менять не скажу ибо не помню, сам полазь, должен понять.
 
Ой, какие мы агрессивные. Ну расскажи, как ты оверлоадом essentials'а зарегаешь новую команду
Где ты тут увидел агрессию ?

По поводу "Overload" я ошибся. Называется это Override, вот скрин. Ты должен просто вписать сюда команду которая есть в Essentials, а потом создать класс с командой В СВОЁМ ПЛАГИНЕ, и зарегать её в onEnable.
 
Где ты тут увидел агрессию ?
Зачем ты лезешь сюда со своим событием ?
ТС спросил, как сделать команду, о которой плагин узнает только после запуска - я ответил. Во втором вопросе ничего нету про команду, которая есть в essentials'е.
 
+ Еще есть такой вопрос, как можно зарегистрировать команду не зная ее до запуска плагина, тоесть не указывая ее в plugin.yml? Нужно чтобы адм могли создать собственную команду путем добавления ее в обычный конфиг.
Код:
package menu.cmd;

import java.util.Arrays;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandMap;
import org.bukkit.command.CommandSender;
import org.bukkit.command.PluginIdentifiableCommand;
import org.bukkit.plugin.Plugin;

public class CommandRegister extends Command implements PluginIdentifiableCommand {
    private Plugin plugin;
    private final CommandExecutor owner;

    private CommandRegister(String[] aliases, String desc, String usage, CommandExecutor owner, Plugin plugin) {
        super(aliases[0], desc, usage, Arrays.asList(aliases));
        this.owner = owner;
        this.plugin = plugin;
    }

    @Override
    public Plugin getPlugin() {
        return this.plugin;
    }

    @Override
    public boolean execute(CommandSender sender, String label, String[] args) {
        if (!this.testPermission(sender)) {
            return true;
        }

        if (this.owner.onCommand(sender, this, label, args)) {
            return true;
        } else {
            sender.sendMessage(this.usageMessage);
            return false;
        }
    }

    public static void reg(Plugin plugin, CommandExecutor executor, String[] aliases, String desc, String usage) {
        CommandRegister reg = new CommandRegister(aliases, desc, usage, executor, plugin);
        CommandMap map = Bukkit.getCommandMap();
        map.register(plugin.getName(), reg);
    }
}
 
Где-то в файлах Essentials'a видел функционал Overload для команд, то есть переписывание. Создаёшь в своём плагине команду с таким же именем, а в файле меняешь значение. Что на что менять не скажу ибо не помню, сам полазь, должен понять.
Автору темы нужно регистрировать в автоматическом режиме абсолютно любые команды независимо от того, какой плагин они переопределяют. Более того, скорее всего, плагин должен корректно работать даже на сервере без Essentials.

Ну пусть ловят, всё равно по-другому сделать нельзя
PlayerCommandPreprocessEvent не позволяет управлять табкомплитом. Все команды, обрабатываемые таким образом, будут подсвечиваться, как ошибочные (красным цветом).
Вполне возможно полноценно регистрировать команду без указания в plugin.yml, alexandrage привел код
 
Автору темы нужно регистрировать в автоматическом режиме абсолютно любые команды независимо от того, какой плагин они переопределяют. Более того, скорее всего, плагин должен корректно работать даже на сервере без Essentials.
upload_2022-5-1_11-45-43.png
 
Прошу прощения, ошибся. Видимо спутал с другой темой
 
Ну разрегистрировать тоже легко.
Код:
    public static void unregister(String name) {
        try {
            Map<String, Command> command = Bukkit.getCommandMap().getKnownCommands();
            Command cmd = command.get(name);
            InputStream stream = cmd.getClass().getResourceAsStream("/plugin.yml");
            PluginDescriptionFile desc = new PluginDescriptionFile(stream);
            command.remove(cmd.getName());
            command.remove(desc.getName().toLowerCase() + ":" + cmd.getName());
            for (String aliases : cmd.getAliases()) {
                command.remove(aliases);
                command.remove(desc.getName().toLowerCase() + ":" + aliases);
            }
            syncCommands();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
Назад
Верх