И снова здравствуйте. Я уже рассказывал о включении и выключении плагина и еще пару вещей. В этом гайде я собираюсь показать как именно нужно создавать эвенты на версии меньше 1.1 релиза. Это не так уж и сложно, если все понять. Нужно будет создать 3 листенера и каждый Java класс для него. Листенеры именно BlockListener, EntityListener, PlayerListener.
Итак, с
прошлого гайда у нас остался вот такой вот код:
import org.bukkit.plugin.java.JavaPlugin;
public class main extends JavaPlugin{
public void onEnable() {
System.out.println("[Test] Enabled!");
}
public void onDisable() {
System.out.println("[Test] Disabled!");
}
}
Сейчас мы будем его усовершенствовать. Для начала прописываем внутрь onEnable () вот что:
plugin = this;
server = plugin.getServer();
Event.Priority priority = Event.Priority.Monitor;(Нужен Импорт org.bukkit.event.Event)
Делаем примерно 2 пробела для большей удобности и дописываем еще:
PluginManager pm = server.getPluginManager();
Обязательно импортируем!
PluginManager pm — И есть ключ к эвентам, без него никак. Хотя можно обойтись без pm просто прописав .getServer (), но для большей удобности лучше дать значение ПлагинМенеджеру.
Делаем еще один проблем и снова добавляем:
PlayerListener pListener = new PlayerListener();
EntityListener eListener = new EntityListener();
BlockListener blockListener = new bListener();
Это уже наши Листенеры. Пока что в BlockListener будет некоторая ошибка, но к концу гайда она пройдет. Для каждого типа нужен свой Листенер. Т.е. если попробовать сделать что-то связанное с игроком в EntityListener или в BlockListener, то это выдаст ошибку. Связанное с игроком — PlayerListener, Энтити — EntityListener, блоки, собственно, в BlockListener.
Делаем еще один пробел и там уже будут регистрация эвентов.
Ну, а пока идем в самый верх и после extends JavaPlugin{ пишем:
public static main plugin;
public static Server server;
main нужно заменить на название своего главного класса!
Создаем Java классы EntityListener, PlayerListener, bListener.
Переходим в EntityListener:
Внутри нужно расширить класс. Заменяйте public class EntityListener { на public class EntityListener extends org.bukkit.event.entity.EntityListener {
Внутри пишем: public static main plugin;
Опять же, main заменяется на название своего класса
Чуть снизу дописываем:
public EntityListener(main instance)
{
plugin = instance;
}
Энтити листенер готов! Вот вам пример:
public void onEntityDeath(EntityDeathEvent event)
{
if ((event.getEntity() instanceof Pig))
{
if (((Pig)event.getEntity()).hasSaddle())
{
event.getDrops().add(new ItemStack(329, 1));
}
}
}
Этот пример позволяет свиньям выпадать седло, если на свинье было седло и она погибла.
Итак, идем к PlayerListener:
там заменяем public class PlayerListener { на public class PlayerListener extends org.bukkit.event.player.PlayerListener {
Внутри прописываем:
public main plugin;
public org.bukkit.Server server;
И снова пишем:
public PlayerListener(main instance)
{
plugin = instance;
server = plugin.getServer();
}
PlayerListener готов тоже!
Теперь к bListener. Сейчас в главном классе могут быть ошибки, так как мы еще не сделали внутри пару вещей. Итак, идем в класс БлокЛистенер. Заменяем public class bListener{ на public class bListener extends BlockListener{
Все готово! Теперь вы научились создавать эвенты на бете!
Осталось только зарегистрировать эти эвенты в основном классе.
Идем в основной класс, снизу листенеров прописываем вот что:
pm.registerEvent(Event.Type.PLAYER_MOVE, pListener, priority, plugin);
Итак
pm - ПлагинМенеджер
Event.Type - Тип эвента, заменяете на свой
pListener - листенер, где находится эвент.
Скажу еще раз - Нельзя делать Ентити эвент в блоклистенере и т.п., это приведет к ошибке!
Ну и все! Все готово! У вас есть эвенты, вы можете творить чудеса!
Вот как получилось у меня.
import org.bukkit.Server;
import org.bukkit.event.Event;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.entity.EntityListener;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
public class main extends JavaPlugin{
public static main plugin;
public static Server server;
public void onEnable() {
plugin = this;
server = plugin.getServer();
Event.Priority priority = Event.Priority.Monitor;
PluginManager pm = server.getPluginManager();
PlayerListener pListener = new PlayerListener();
EntityListener eListener = new EntityListener();
BlockListener blockListener = new bListener();
System.out.println("[Test] Enabled!");
}
public void onDisable() {
System.out.println("[Test] Disabled!");
}
}
public class EntityListener extends org.bukkit.event.entity.EntityListener {
public static main plugin;
public EntityListener(main instance)
{
plugin = instance;
}
//Творите чудеса!
}
public class PlayerListener extends org.bukkit.event.player.PlayerListener
{
public main plugin;
public org.bukkit.Server server;
public PlayerListener(main instance)
{
plugin = instance;
server = plugin.getServer();
}
//Творите чудеса!
}
import org.bukkit.event.block.BlockListener;
public class bListener extends BlockListener{
//А здесь даже ничего прописывать не надо, просто начинаем творить что угодно, например:
public void onBlockBreak(BlockBreakEvent e) {
Block block = e.getBlock();
if (e.getBlock().getType() == Material.ICE) {
block.setType(Material.AIR);
block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.ICE, 1));
e.setCancelled(true);
}
if (e.getBlock().getType() == Material.GLASS) {
block.setType(Material.AIR);
block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.GLASS, 1));
e.setCancelled(true);
}
}
Благодаря этому выпадает стекло и лед.
}