package tv.mineinthebox.essentials.events.signs; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.util.Vector; import tv.mineinthebox.essentials.xEssentials; import tv.mineinthebox.essentials.enums.PermissionKey; import tv.mineinthebox.essentials.interfaces.EventTemplate; import tv.mineinthebox.essentials.interfaces.XPlayer; public class SignBoomEvent extends EventTemplate implements Listener { public SignBoomEvent(xEssentials pl) { super(pl, "BoomSign"); } @EventHandler public void m(PlayerMoveEvent e) { XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(e.getPlayer().getName()); if(xp.isBoom()) { if(e.getPlayer().getPlayer().getLocation().getBlock().getRelative(BlockFace.SELF).getType() == Material.WEB) { xp.removeBoom(); } else { e.getPlayer().getPlayer().getWorld().createExplosion(e.getPlayer().getPlayer().getLocation(), 0.0F, false); } } } @EventHandler public void damage(EntityDamageEvent p) { if(p.getEntity() instanceof Player && p.getCause() == DamageCause.FALL) { Player ap = (Player) p.getEntity(); XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(ap.getName()); if(xp.isBoom()) { xp.removeBoom(); p.setCancelled(true); } } } @EventHandler public void onCreate(SignChangeEvent s) { if(s.getLine(0).equalsIgnoreCase("[boom]") && s.getPlayer().hasPermission(PermissionKey.SIGN_BOOM.getPermission())) { s.setLine(0, ChatColor.GOLD + "[Boom]"); s.getBlock().getState().update(true); sendMessage(s.getPlayer(), ChatColor.GOLD + "[Boom] " + ChatColor.GREEN + "You successfully placed a boom sign!"); } else { if(s.getLine(0).equalsIgnoreCase("[boom]") && !s.getPlayer().hasPermission(PermissionKey.SIGN_BOOM.getPermission())) { s.getBlock().breakNaturally(); sendMessage(s.getPlayer(), "You are not allowed to place such signs!"); s.setCancelled(true); } } } @EventHandler public void signRightClickBoom(PlayerInteractEvent s) { if(s.getAction() == Action.RIGHT_CLICK_BLOCK) { if(s.getClickedBlock().getState().getType() == Material.SIGN || s.getClickedBlock().getState().getType() == Material.SIGN_POST || s.getClickedBlock().getState().getType() == Material.WALL_SIGN) { if(s.isCancelled()) { return; } //log.info("This is a sign..."); Sign sign = (Sign) s.getClickedBlock().getState(); if(sign.getLine(0).contains("[Boom]")) { //log.info("Launching dispatch command...."); if(s.getPlayer().getGameMode().equals(GameMode.CREATIVE)) { sendMessage(s.getPlayer(), ChatColor.GOLD + "[Boom] " + ChatColor.RED + "You need to be survival to do this!"); s.setCancelled(true); } else { //log.info("This player has interacted with this sign"); //s.getPlayer().getServer().dispatchCommand(Bukkit.getConsoleSender(), "boom " + s.getPlayer().getName()); sendMessage(s.getPlayer(), ChatColor.GOLD + "[Boom] " + ChatColor.GREEN + "boooooom!"); XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(s.getPlayer().getName()); xp.setBoom(); Location loc = s.getPlayer().getLocation(); loc.setY(loc.getY() + 100); int speed = 10; Vector vector = loc.toVector().subtract(s.getPlayer().getLocation().toVector()).normalize(); s.getPlayer().setVelocity(vector.multiply(speed)); s.setCancelled(true); } } } } } @EventHandler public void newplayer(PlayerKickEvent e) { if(pl.getManagers().getPlayerManager().isOnline(e.getPlayer().getName())) { XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(e.getPlayer().getName()); if(xp.isBoom()) { xp.removeBoom(); } } } @EventHandler public void pquit(PlayerKickEvent e) { if(pl.getManagers().getPlayerManager().isOnline(e.getPlayer().getName())) { XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(e.getPlayer().getName()); if(xp.isBoom()) { xp.removeBoom(); } } } }