Paper API Event Sistemi: Listener Yazma Rehberi
Minecraft plugin geliştirmede event sistemi en temel yapı taşlarından biridir. Oyunculara mesaj göndermek, moblar öldürüldüğünde XP vermek veya blok kırıldığında özel efekt yaratmak — hepsi event listener ile yapılır.
Event Listener Nedir?
Event listener, Minecraft sunucusunda belirli bir olay gerçekleştiğinde çalışan kod parçasıdır. Oyuncu giriş yaptığında, blok kırıldığında, mob öldürüldüğünde — bunların hepsi birer event'tir.
Temel Listener Örneği
package com.benimpaket.listeners;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import net.kyori.adventure.text.Component;
public class OyuncuListener implements Listener {
@EventHandler
public void onJoin(PlayerJoinEvent event) {
event.joinMessage(Component.text("§a+ " + event.getPlayer().getName() + " sunucuya katıldı"));
event.getPlayer().sendMessage(Component.text("§6Hoş geldiniz! Sunucumuza katıldığınız için teşekkürler."));
}
@EventHandler
public void onQuit(PlayerQuitEvent event) {
event.quitMessage(Component.text("§c- " + event.getPlayer().getName() + " ayrıldı"));
}
}
Listener'ı Kaydetme
// onEnable() içinde
getServer().getPluginManager().registerEvents(new OyuncuListener(), this);
Blok Kırma Event'i
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
Block block = event.getBlock();
if (block.getType() == Material.DIAMOND_ORE) {
player.sendMessage("§b⬦ Elmas buldun! Tebrikler!");
player.getWorld().playSound(player.getLocation(),
Sound.UI_TOAST_CHALLENGE_COMPLETE, 1f, 1f);
}
}
Event Priority
@EventHandler(priority = EventPriority.HIGH)
// LOWEST → LOW → NORMAL → HIGH → HIGHEST → MONITOR
// MONITOR: sadece dinle, event'i değiştirme
Event İptal Etme
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
if (event.getPlayer().getGameMode() == GameMode.ADVENTURE) {
event.setCancelled(true); // Adventure modda blok kırma engellendi
}
}
💡 Etkileşim için giriş yap.