1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Стартап Создание кастомного Ивента. [CustomEvent]

Тема в разделе "Разработка плагинов для новичков", создана пользователем bristol, 25 фев 2018.

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

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

    Баллы:
    46
    Приветствую всех читателей!
    Иногда, создавая API для своего плагина, у разработчиков возникает желание создать кастомный ивент.
    Но не все ладят с гуглом(Я тоже не лажу с гуглом). Поэтому, я расскажу как сделать кастомный ивент.
    Начнем:
    1. Необходимо, создать отдельный класс для своего ивента и унаследовать его классу Event.
    Код:
    import org.bukkit.event.Event;
    
    public class MyCustomEvent extends Event {
    
    }
    2. Затем, в нем создать переменную типа HandlerList с именем handlers. Так же, необходимо создать метод, который возвращает переменную handlers:
    Код:
    import org.bukkit.event.Event;
    
    public class MyCustomEvent extends Event {
    
         public static final HandlerList handlers = new HandlerList();
    
         public HandlerList getHandlers() {
              return handlers;
         }
    
    }
    3. Создаем конструктор класса с кастомным ивентом и вписываем нужные нам переменные. Так же, создаем методы для получения этих переменных.
    Код:
    import org.bukkit.event.Event;
    
    public class MyCustomEvent extends Event {
    
         public static final HandlerList = new HandlerList();
         private String msg;
         private Player player;
         private boolean cancelled;
    
         public MyCustomEvent(String msg, Player player) {
              this.msg = msg;
              this.player = player;
         }
    
         public String getMessage() {
              return msg;
         }
    
         public Player getPlayer() {
              return player;
         }
    
         public HandlerList getHandlers() {
              return handlers;
         }
    
    }
    4. Делаем переменную типа boolean с именем cancelled, делаем метод получения переменной cancelled и делаем метод установки значения в переменной cancelled. Так же, нужно не забыть сделать класс с нашим ивентов интерфейсом классу Сancellable. Этот шаг не обязателен, если вы не будете останавливать событие.
    Код:
    import org.bukkit.event.Event;
    import org.bukkit.event.HandlerList;
    import org.bukkit.event.Cancellable;
    
    public class MyCustomEvent extends Event implements Сancellable {
    
         public static final HandlerList = new HandlerList();
         private String msg;
         private Player player;
         private boolean cancelled;
    
         public MyCustomEvent(String msg, Player player) {
              this.msg = msg;
              this.player = player;
         }
    
         public String getMessage() {
              return msg;
         }
    
         public Player getPlayer() {
              return player;
         }
    
         public void setCancelled(boolean cancel) {
              cancelled = cancel;
         }
    
         public boolean isCancelled() {
              return cancelled;
         }
    
         public HandlerList getHandlers() {
              return handlers;
         }
    
    }
    Ивент готов, осталось, вызывать его в нужный момент, например, в момент изменения баланса игрока или что то на подобии.
    Код:
    MyCustomEvent mce = new MyCustomEvent("У вас изменился баланс!", Bukkit.getPlayer(sender.getName()));
    Bukkit.getPluginManager().callEvent(mce);
    if(mce.isCancelled()) {
         return;
    }
    Теперь, вы можете использовать этот ивент как обычный ивент от Bukkit.
    Источник - https://bukkit.gamepedia.com/Event_API_Reference#Custom_Event_Example
    Нашли ошибку или опечатку? Сообщите мне об этом в теме.
     
    Последнее редактирование: 26 фев 2018
  2. Быстрая раскрутка сервера Minecraft
  3. AtomicScience

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

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Больше похоже не на туториал, а на простую инструкцию по копированию волшебных строчек.

    И еще: и что-то наподобие
     
  4. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Не задал имя переменной
     
  5. alexandrage

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

    Баллы:
    173
    Вот вам тутоиал.
    Никакого копипаста, все свое.

    Код:
    package tick.events;
    
    import org.bukkit.entity.Player;
    import org.bukkit.event.Event;
    import org.bukkit.event.HandlerList;
    
    public class TickPlayerEvent extends Event {
        private Player p;
        private static HandlerList handlers = new HandlerList();
    
        public TickPlayerEvent(Player p) {
            this.p = p;
        }
    
        public Player getPlayer() {
            return p;
        }
    
        public HandlerList getHandlers() {
            return handlers;
        }
    
        public static HandlerList getHandlerList() {
            return handlers;
        }
    }
    
    Код:
     Bukkit.getServer().getPluginManager().callEvent(new TickPlayerEvent(p));
     
  6. AtomicScience

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

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Опять ты со своим тикэвентом?
     
  7. alexandrage

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

    Баллы:
    173
    Агась. Простой и удобный ексампл ивентов.
     
  8. Energy warrior

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

    Баллы:
    76
    Топ инструкция! Если б не ты я бы никогда об этом не узнал. P.s. Не пишите что это было на gamepedia я там был и ничего не видел.
     
  9. alexandrage

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

    Баллы:
    173
    Слепой просто. Темы с ивентами были с 2к12 года где то.
     
  10. Energy warrior

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

    Баллы:
    76
    У меня зрение 100%. Просто не заметил.
     
  11. alexandrage

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

    Баллы:
    173
    Есть даже такая тема https://github.com/alexandrage/Events Собственные ивенты как в ведре, упрощенный вариант.
     
Статус темы:
Закрыта.

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