package net.glowstone.net.handler.play.inv; import com.flowpowered.networking.MessageHandler; import net.glowstone.EventFactory; import net.glowstone.entity.GlowPlayer; import net.glowstone.net.GlowSession; import net.glowstone.net.message.play.inv.HeldItemMessage; import org.bukkit.event.player.PlayerItemHeldEvent; public final class HeldItemHandler implements MessageHandler<GlowSession, HeldItemMessage> { @Override public void handle(GlowSession session, HeldItemMessage message) { final int slot = message.getSlot(); if (slot < 0 || slot > 8) { // sanity check return; } final GlowPlayer player = session.getPlayer(); final int oldSlot = player.getInventory().getHeldItemSlot(); if (slot == oldSlot) { // ignore return; } PlayerItemHeldEvent event = new PlayerItemHeldEvent(player, oldSlot, slot); EventFactory.callEvent(event); if (!event.isCancelled()) { player.getInventory().setRawHeldItemSlot(slot); } else { // sends a packet to switch back to the previous held slot player.getInventory().setHeldItemSlot(oldSlot); } } }