Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Детект одноименной команды другого плагина

Тема в разделе "Разработка плагинов для новичков", создана пользователем iD3LSY, 6 май 2017.

Статус темы:
Закрыта.
  1. Автор темы
    iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    opy
    Привет все <3

    Нужно ловить команды из другого плагина, заменяя на свою. Конечно можно просто удалить команду из plugin.yml другого плагина, но если она регистрирована рефлексией/просто лень, то ничего не поделать.

    Как можно реализовать сея каприз?



    А за прочитанное, я вам расскажу о неком бизнес плане.

    Заключается в следующем:
    • Пишете плагин на кейсы.
    • Заходите в раздел "Запросы на разработку плагинов".
    • Ищите очередного раба системы/индивидуума, который не в силах скачать его сам (тут как повезет).
    • Продаете всем один и тот же плагин. Пруфит!
     
  2. Хостинг MineCraft
    <
  3. DonDays

    DonDays Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    PlayerCommandPreprocessEvent
     
  4. Автор темы
    iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    opy
    Эм... Ну ладно, я думал на счет этого.

    Вопрос то тогда в следующем.
    Видишь ли кириллицу мне подавай. У меня команды у самого рефликсией реганы. Если я буду отменять, то как команду свою выполнить?

    Может конечно и старенький дядя костыль выручит, тип регать команду с другим названием, а при выполнение той, которая уже занята отменять её, выполнять свою.
     
  5. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    /pluginname:command
     
  6. Автор темы
    iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    opy
    Видимо вопрос реально в какой то степени проблемный xD

    О чем ты? Это просто выполнение команды, которое поможет в реализации костыля. Есть ли все же с твоей точки зрения корректный ответ на заданный изначально вопрос?

    Конечно, можно это и так использовать в игровой консоле, если пишешь плагин исключительно для себя (я так и делаю, но все же). Другие люди вряд ли будут париться на такую тему с вводом названия плагина ("pluginname:").
     
  7. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Или через Command Map убирай, а только потом добавляй свою
     
  8. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Если регать свою команду после того как такую же зарегал кто-то еще, то будет же твоя работать, не?
     
  9. Автор темы
    iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    opy
    В том и вопрос, как её убрать?)
    Честно - я хз. Я пытаюсь перекрыть команду из Essentials. Мою шлет куда подальше. Может быть, берется 2 плагина, в которых есть одинаковая команда, а потом просто сравнивает их по алфавиту (название плагинов), и выполняет то, что ближе к 'A'.
     
  10. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Я всё же думаю, что разница во времени регистрации имеет значение. Протестируй это.
    А вообще в Essentials можно отключать команды. Но это, конечно, не решение вопроса.
     
  11. Автор темы
    iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    opy
    В каком смысле "время регистрации"? Я лично вообще хз, как подгружаются плагины. Может быть - одновременно. В таком случае, этого "время регистрации" не может существовать. Хотя если регистрировать команды в onLoad, то может что то изменится в плане времени)
     
  12. Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    У каждой комманды есть экзекутор (и не важно рефлексией ты ее регал, или не рефлексией). экзекутора может не быть, только если автор плуга долбень, и юзает PlayerCommandPreprocesEvent, но такие плуги надо удалять, а не юзать.

    вернемся к нашим экзекуторам
    Код:
    PluginCommand cmd = Bukkit.getPluginCommand("yourCmd");
    cmd.setExecutor(new yourExecutor());
    
    Если попробуешь подсунуть null в экзекутор, то обломишься.


    ну и если тебе захотелось вдруг поиграться рефлексией.
    Код:
    try {
         Field field = Bukkit.getServer().getClass().getDeclaredField("commandMap");
         field.setAccessible(true);
         CommandMap map = (CommandMap)field.get(Bukkit.getServer());
         Field field2 = map.getClass().getDeclaredField("knownCommands");
         field2.setAccessible(true);
         HashMap<String, Command> knownCommands = (HashMap<String, Command>) field2.get(map);
         knownCommands.remove("yourCmd"); //тут комманда просто перестает существовать для сервера. Остается только заново ее зарегистрировать.
         field2.set(map, knownCommands);
         field2.setAccessible(false);
         field.setAccessible(false);
    } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
         e.printStackTrace();
    }
    
     
    Последнее редактирование: 7 май 2017
  13. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Кстати, в способе @Blc_Dragon тебе тоже нужно регистрировать команду позже других плагинов.
    Так что вот: http://rubukkit.org/threads/134693/#post-1444778
     
  14. Автор темы
    iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    opy
    Прошло пару месяцов, а @Blc_Dragon по-прежнему выручает.
     
    Последнее редактирование: 7 май 2017
Статус темы:
Закрыта.

Поделиться этой страницей