package tv.mineinthebox.essentials.events.chairs; import java.util.Iterator; import java.util.Map.Entry; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Chicken; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.material.Stairs; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import tv.mineinthebox.essentials.xEssentials; import tv.mineinthebox.essentials.events.customevents.ChairExitEvent; import tv.mineinthebox.essentials.interfaces.EventTemplate; import tv.mineinthebox.essentials.interfaces.XPlayer; public class PlayerSitOnChairEvent_org extends EventTemplate implements Listener, Runnable { public PlayerSitOnChairEvent_org(xEssentials pl) { super(pl, "Chairs"); } @EventHandler public void onInteract(PlayerInteractEvent e) { if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { if(e.getClickedBlock().getType() == Material.WOOD_STAIRS || e.getClickedBlock().getType() == Material.COBBLESTONE_STAIRS || e.getClickedBlock().getType() == Material.SMOOTH_STAIRS || e.getClickedBlock().getType() == Material.BRICK_STAIRS) { if(isChair(e.getClickedBlock())) { if(e.getPlayer().getItemInHand() != null) { return; } Chicken chicken = (Chicken)e.getClickedBlock().getWorld().spawnEntity(e.getClickedBlock().getLocation().add(0.5, 0, 0.5), EntityType.CHICKEN); chicken.setMetadata("chair", new FixedMetadataValue(pl, e.getPlayer().getName())); chicken.setPassenger(e.getPlayer()); chicken.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 10)); chicken.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, Integer.MAX_VALUE, 100)); sendMessage(e.getPlayer(), ChatColor.GREEN + "you are now sitting on a chair."); pl.getManagers().getChairManager().addChicken(e.getPlayer(), chicken); Bukkit.getScheduler().runTaskTimer(pl, this, 0L, 1L); XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(e.getPlayer().getName()); xp.setInChair(true); } } } } @EventHandler public void onEject(ChairExitEvent e) { pl.getManagers().getChairManager().removeChicken(e.getPlayer().getName()); e.getChairPiece().remove(); sendMessage(e.getPlayer(), ChatColor.GREEN + "you no longer sit on a chair."); XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(e.getPlayer().getName()); xp.setInChair(false); } @EventHandler public void onQuit(PlayerQuitEvent e) { if(pl.getManagers().getChairManager().containsPlayer(e.getPlayer().getName())) { pl.getManagers().getChairManager().removeChicken(e.getPlayer().getName()); XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(e.getPlayer().getName()); xp.setInChair(false); } } @EventHandler public void onQuit(PlayerKickEvent e) { if(pl.getManagers().getChairManager().containsPlayer(e.getPlayer().getName())) { pl.getManagers().getChairManager().removeChicken(e.getPlayer().getName()); XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(e.getPlayer().getName()); xp.setInChair(false); } } @EventHandler public void onDamage(EntityDamageEvent e) { if(e.getEntity() instanceof Chicken) { Chicken chicken = (Chicken) e.getEntity(); if(chicken.hasMetadata("chair")) { e.setCancelled(true); } } } private boolean isChair(Block block) { BlockFace[] faces = {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; Stairs stair = (Stairs)block.getState().getData(); for(BlockFace face : faces) { if(stair.getFacing() == face) { return true; } } return false; } @SuppressWarnings("deprecation") @Override public void run() { Iterator<Entry<String, Entity>> it = pl.getManagers().getChairManager().getIterator(); while(it.hasNext()) { Entry<String, Entity> entry = it.next(); if(entry.getValue().getPassenger() == null) { Bukkit.getPluginManager().callEvent(new ChairExitEvent(Bukkit.getPlayer(entry.getKey()), (Chicken)entry.getValue())); } } } }