Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

bristol

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
bristol
Приветствую всех читателей!
Иногда, создавая 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
Нашли ошибку или опечатку? Сообщите мне об этом в теме.
 
Последнее редактирование:
Больше похоже не на туториал, а на простую инструкцию по копированию волшебных строчек.

И еще: и что-то наподобие
 
Вот вам тутоиал.
Никакого копипаста, все свое.

Код:
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));
 
Топ инструкция! Если б не ты я бы никогда об этом не узнал. P.s. Не пишите что это было на gamepedia я там был и ничего не видел.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх