// Get global event handler
GlobalEventHandler eventHandler = MinecraftServer.getGlobalEventHandler();

// Player join event
eventHandler.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 event
eventHandler.addListener(PlayerDisconnectEvent.class, event -> {
    Player player = event.getPlayer();
    System.out.println(player.getUsername() + " left the server");
});

// Chat event with formatting
eventHandler.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 event
eventHandler.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 event
eventHandler.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 event
eventHandler.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());
    }
});