package net.glowstone.net.handler.play.player; 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.entity.AnimateEntityMessage; import net.glowstone.net.message.play.player.PlayerSwingArmMessage; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.event.Event; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerAnimationEvent; import java.util.Set; public final class PlayerSwingArmHandler implements MessageHandler<GlowSession, PlayerSwingArmMessage> { @Override public void handle(GlowSession session, PlayerSwingArmMessage message) { final GlowPlayer player = session.getPlayer(); Block block; try { block = player.getTargetBlock((Set<Material>) null, 6); } catch (IllegalStateException ex) { // getTargetBlock failed to find any block at all block = null; } if (block == null || block.isEmpty()) { if (EventFactory.onPlayerInteract(player, Action.LEFT_CLICK_AIR).useItemInHand() == Event.Result.DENY) return; // todo: item interactions with air } if (!EventFactory.callEvent(new PlayerAnimationEvent(player)).isCancelled()) { // play the animation to others AnimateEntityMessage toSend = new AnimateEntityMessage(player.getEntityId(), AnimateEntityMessage.OUT_SWING_ARM); for (GlowPlayer observer : player.getWorld().getRawPlayers()) { if (observer != player && observer.canSeeEntity(player)) { observer.getSession().send(toSend); } } } } }