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

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

Discussion in 'Разработка плагинов для новичков' started by iD3LSY, May 6, 2017.

Thread Status:
Not open for further replies.
  1. Автор темы
    iD3LSY

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

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    Привет все <3

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

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



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

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

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

    Trophy Points:
    96
    Имя в Minecraft:
    DonDays
    PlayerCommandPreprocessEvent
     
  4. Автор темы
    iD3LSY

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


    ну и если тебе захотелось вдруг поиграться рефлексией.
    Code:
    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();
    }
    
     
    Last edited: May 7, 2017
  13. OsipXD

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

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

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

    Trophy Points:
    46
    Имя в Minecraft:
    opy
    Прошло пару месяцов, а @Blc_Dragon по-прежнему выручает.
     
    Last edited: May 7, 2017
Thread Status:
Not open for further replies.

Share This Page