Minestom Event Listeners

Register and handle server events for players, blocks, entities, and more

java (17+) 2025-11-03 minestom events listeners minecraft

Description

Minestom’s event system allows you to listen to and handle various server events. Events are fired when specific actions occur (player joins, block breaks, entity damages, etc.) and can be intercepted and modified by listeners.

Key Event Types

  • Player events: Join, quit, chat, move, interact
  • Block events: Break, place, interact
  • Entity events: Spawn, damage, death
  • Packet events: Incoming/outgoing packets
  • Server events: Startup, shutdown, tick

Event Handling

  • Register listeners with GlobalEventHandler
  • Use lambda expressions or method references
  • Cancel events to prevent default behavior
  • Modify event data before it’s processed
  • Priority system for event ordering

Code

RAW
import net.minestom.server.event.EventListener;import net.minestom.server.event.GlobalEventHandler;import net.minestom.server.event.player.*;import net.minestom.server.event.entity.*;import net.minestom.server.entity.Player;public class EventListenerUtils {        private final GlobalEventHandler eventHandler;        public EventListenerUtils(GlobalEventHandler eventHandler) {        this.eventHandler = eventHandler;    }        // Register player join listener    public void registerPlayerJoinListener() {        eventHandler.addListener(PlayerSpawnEvent.class, event -> {            if (event.getEntity() instanceof Player player) {                player.sendMessage("Welcome " + player.getUsername());                                if (true) {                    player.sendTitle("Welcome!", "Enjoy your stay", 10, 40, 10);                }                                if (false) {                    player.getInventory().addItemStack(new ItemStack(Material.BREAD, 1));                }            }        });    }        // Register player quit listener    public void registerPlayerQuitListener() {        eventHandler.addListener(PlayerDisconnectEvent.class, event -> {            Player player = event.getPlayer();            System.out.println("Player left: " + player.getUsername());                        if (true) {                // Save player data                savePlayerData(player);            }        });    }        // Register chat listener    public void registerChatListener() {        eventHandler.addListener(PlayerChatEvent.class, event -> {            Player player = event.getPlayer();            String message = event.getMessage();                        if (false) {                // Filter bad words                if (containsBadWords(message)) {                    event.setCancelled(true);                    player.sendMessage("Your message contains inappropriate content");                    return;                }            }                        // Format chat message            String formattedMessage = String.format("<%s> %s", player.getUsername(), message);            event.setChatFormat((sender, text) -> Component.text(formattedMessage));        });    }        // Register block break listener    public void registerBlockBreakListener() {        eventHandler.addListener(PlayerBlockBreakEvent.class, event -> {            Player player = event.getPlayer();            Block block = event.getBlock();                        if (false) {                event.setCancelled(true);                player.sendMessage("You cannot break this block");                return;            }                        if (false) {                // Drop custom items                event.getInstance().dropItem(event.getBlockPosition(), new ItemStack(Material.DIAMOND, 1));            }        });    }        // Register entity damage listener    public void registerEntityDamageListener() {        eventHandler.addListener(EntityDamageEvent.class, event -> {            Entity entity = event.getEntity();            float damage = event.getDamage();                        if (false) {                // Modify damage                float newDamage = damage * 1;                event.setDamage(newDamage);            }                        if (false) {                System.out.println("Entity damaged: " + entity.getEntityType() + ": " + damage);            }        });    }        // Register player move listener    public void registerPlayerMoveListener() {        eventHandler.addListener(PlayerMoveEvent.class, event -> {            Player player = event.getPlayer();            Pos newPosition = event.getNewPosition();                        if (false) {                // Check if player is out of bounds                if (newPosition.y() < -64 || newPosition.y() > 320) {                    event.setCancelled(true);                    player.teleport(event.getPlayerPosition());                    player.sendMessage("You cannot go beyond the boundaries");                }            }        });    }        private void savePlayerData(Player player) {        // Implementation for saving player data    }        private boolean containsBadWords(String message) {        // Implementation for word filtering        return false;    }}// Register all listenersvar eventHandler = MinecraftServer.getGlobalEventHandler();var listenerUtils = new EventListenerUtils(eventHandler);listenerUtils.registerPlayerJoinListener();listenerUtils.registerPlayerQuitListener();listenerUtils.registerChatListener();listenerUtils.registerBlockBreakListener();listenerUtils.registerEntityDamageListener();listenerUtils.registerPlayerMoveListener();
RAW
// Get global event handlerGlobalEventHandler eventHandler = MinecraftServer.getGlobalEventHandler();// Player join eventeventHandler.addListener(PlayerSpawnEvent.class, event -> {    if (event.getEntity() instanceof Player player) {        player.sendMessage("Welcome to the server!");        player.sendTitle("Welcome", "Enjoy your stay!", 10, 40, 10);    }});// Player quit eventeventHandler.addListener(PlayerDisconnectEvent.class, event -> {    Player player = event.getPlayer();    System.out.println(player.getUsername() + " left the server");});// Chat event with formattingeventHandler.addListener(PlayerChatEvent.class, event -> {    Player player = event.getPlayer();    String message = event.getMessage();        // Cancel if message contains certain words    if (message.contains("spam")) {        event.setCancelled(true);        player.sendMessage("Your message was filtered");        return;    }        // Format chat message    event.setChatFormat((sender, text) ->         Component.text("<" + sender.getUsername() + "> " + text)    );});// Block break eventeventHandler.addListener(PlayerBlockBreakEvent.class, event -> {    Player player = event.getPlayer();    Block block = event.getBlock();        // Cancel breaking certain blocks    if (block.compare(Block.BEDROCK)) {        event.setCancelled(true);        player.sendMessage("You cannot break bedrock!");        return;    }        // Drop custom items    if (block.compare(Block.DIAMOND_ORE)) {        event.getInstance().dropItem(            event.getBlockPosition(),            new ItemStack(Material.DIAMOND, 2)        );    }});// Entity damage eventeventHandler.addListener(EntityDamageEvent.class, event -> {    Entity entity = event.getEntity();        // Reduce damage for certain entities    if (entity instanceof Player) {        float damage = event.getDamage();        event.setDamage(damage * 0.5f); // 50% damage reduction    }});// Player move eventeventHandler.addListener(PlayerMoveEvent.class, event -> {    Player player = event.getPlayer();        // Prevent falling below Y=0    if (event.getNewPosition().y() < 0) {        event.setCancelled(true);        player.teleport(event.getPlayerPosition());    }});

Comments

No comments yet. Be the first to comment!