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

Помогите Взаимодействие плагинов между собой

Discussion in 'Разработка плагинов для новичков' started by Jampire, Nov 20, 2012.

  1. Автор темы
    Jampire

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

    Trophy Points:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Как зарегистрировать метод, что-бы его можно было вызвать из другого плагина?
    Code:
    Bukkit.getPluginManager().getPlugin(plugin).myMethod();
     
  2. Хостинг MineCraft
    <
  3. akke

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

    Trophy Points:
    103
    Если я не ошибаюсь, то просто в главном классе плагина лепишь public метод, а в другом плагине пишешь нечто подобное


    Code:
    import ru.myCoolPlugin.CoolPlugin;
     
    <...>
     
    try {
     
    CoolPlugin cpl = ( CoolPlugin ) Bukkit.getPluginManager().getPlugin("CoolPlugin");
     
    } catch (Exception e) {
     
    //твой плагин не найден
     
    }
     
    cpl.anyMethod();
     
    Сникерсни likes this.
  4. Автор темы
    Jampire

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

    Trophy Points:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Именно так уже пробовал.. (
    Так-же пытался рыться в WG - но так ничего и не нашел.. Слишком много кода там..)
     
  5. Автор темы
    Jampire

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

    Trophy Points:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Решил самостоятельно.
    Code:
        private ChatShop getChatShop() {
            Plugin ch = Bukkit.getPluginManager().getPlugin("ChatShop");
            if (ch == null || !(ch instanceof ChatShop)) {
                return null;
            }
            return (ChatShop) ch;
        }
        getChatShop().myMethod();
     
  6. TEEN

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

    Trophy Points:
    88
    Skype:
    teen_true
    Имя в Minecraft:
    TEEN
    Подскажите где почитать или покажите пример кода взаимодействия плагинов.
    Задача: взаимодействовать с плагинов iConomy, и в будущем сделать связку своих плагинов, которые бы могли работать автономно.

    Например плагин определяет какой-либо тип/статус игроку, и нужно получить этот статус другим своим плагином. Общую таблицу в бд не предлагать, т.к. неудобно и ресурсоемко.
     
  7. TEEN

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

    Trophy Points:
    88
    Skype:
    teen_true
    Имя в Minecraft:
    TEEN
    Модераторам огромное спасибо. Заметил соседний пост только после размещения своего. И все вопросы отпали :)
     
  8. ensirius

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

    Trophy Points:
    123
    Пример WorldEdit:
    Code:
        public static WorldEditPlugin getWorldEdit() {
            Plugin worldEdit = Bukkit.getServer().getPluginManager()
                    .getPlugin("WorldEdit");
     
            if (worldEdit == null) {
                log.info("[" + pdfFile.getName()
                        + "] WorldEdit does not appear to be installed.");
            }
     
            if ((worldEdit instanceof WorldEditPlugin)) {
                return (WorldEditPlugin) worldEdit;
            }
     
            log.info("[" + pdfFile.getName()
                    + "] WorldEdit detection failed.");
            return null;
        }
    Code:
     WorldEditPlugin worldEdit = enGuard.getWorldEdit();
    Пример на enMoney (нашей системе денег):
    Code:
        public static enMoney getMoney() {
            Plugin money = Bukkit.getServer().getPluginManager()
                    .getPlugin("enMoney");
     
            if (money == null) {
                log.info("[" + pdfFile.getName()
                        + "] enMoney does not appear to be installed.");
            }
     
            if ((money instanceof enMoney)) {
                return (enMoney) money;
            }
     
            log.info("[" + pdfFile.getName()
                    + "] enMoney detection failed.");
            return null;
        }    
    Code:
    enMoney money = enGuard.getMoney();
     
  9. CrazyJared

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

    Trophy Points:
    68
    Не знаю куда обратиться с этим вопросом поэтому пишу сюда.
    Такой вопрос : как сделать чтобы действие выполнялось не сразу, а например через 2 сек. в этом коде:
    Code:
        @EventHandler
        public void PlayerInteract(PlayerInteractEvent e)
        {
            Player player = e.getPlayer();
            if((e.getAction() == Action.RIGHT_CLICK_BLOCK) || (e.getAction() == Action.RIGHT_CLICK_AIR))
            {
                if(player.getItemInHand().getType().equals(Material.BOOK))
                {
                    //Действия
                }
            }
        }
     
  10. CrazyJared

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

    Trophy Points:
    68
    Под действием скрывается это:
    Code:
    player.getInventory().setItemInHand(new ItemStack(0));
    Я так уже пробовал и тут я не могу понять, как достать игрока.
     
  11. CrazyJared

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

    Trophy Points:
    68
    Причем тут public void removeItem? если надо чтоб задержка была в:
    Code:
        @EventHandler
        public void PlayerInteract(PlayerInteractEvent e)
        {
            Player player = e.getPlayer();
            if((e.getAction() == Action.RIGHT_CLICK_BLOCK) || (e.getAction() == Action.RIGHT_CLICK_AIR))
            {
                if(player.getItemInHand().getType().equals(Material.BOOK))
                {
                    if(player.getItemInHand().getTypeId() == 373 && player.getItemInHand().getDurability() == 0)
                    {
                        // вот это действие нужно задержать на 2 сек - player.getInventory().setItemInHand(new ItemStack(0));                          
                    }
              }
          }
        }
     
    Stalkerdeni971 likes this.
  12. CrazyJared

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

    Trophy Points:
    68
    Спс, вопрос исчерпан)
    Но возник другой, как проверить, если player что либо выпил или если player cъел что либо? Какое событие в этом задействовано?
    Это конечно можно обойти, но ресурсоемко.
     
  13. Автор темы
    Jampire

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

    Trophy Points:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    PlayerInteract / или погляди jd.bukkit.org... Мб есть событие другое.
     

Share This Page