package net.diamonddominion.esaych.survival; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Random; import net.diamonddominion.esaych.CustomPlugin; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.FireworkEffect; import org.bukkit.FireworkEffect.Type; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Entity; import org.bukkit.entity.Firework; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.ThrownPotion; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.FireworkMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; import com.massivecraft.factions.entity.BoardColls; import com.massivecraft.factions.entity.Faction; import com.massivecraft.mcore.ps.PS; @SuppressWarnings("deprecation") public class LegitWarzone { private CustomPlugin plugin; private Map<Player, Integer> cooldowns = new HashMap<Player, Integer>(); public LegitWarzone(CustomPlugin plugin) { this.plugin = plugin; } // @SuppressWarnings({ "unchecked", "rawtypes" }) // Map<String, Boolean> legit = new HashMap(); public void enable() { // plugin.getServer().getPluginManager().registerEvents(this, plugin); log("Enabled"); } // @EventHandler(priority = EventPriority.MONITOR) public void onPlayerMoves(PlayerMoveEvent event) { Player player = event.getPlayer(); if (locationInWarzone(player.getLocation())) { if (!player.hasPermission("legitwarzone.bypass")) makeLegit(player); if (isNotProtected(player)) { selfDistruct(player); } else { if (player.getName().equals("Esaych")) { ItemStack i = new ItemStack(Material.DIAMOND_SWORD); i.addEnchantment(Enchantment.FIRE_ASPECT, 1); i.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, 10); ItemStack stick = new ItemStack(Material.STICK); stick.addUnsafeEnchantment(Enchantment.KNOCKBACK, 20); if (!player.getInventory().contains(Material.DIAMOND_SWORD)) player.getInventory().addItem(i); if (!player.getInventory().contains(Material.STICK)) player.getInventory().addItem(stick); } if (selfDestructing.contains(player)) { selfDestructing.remove(player); msg(player, "Your self destruct has been canceled"); } } } else { if (selfDestructing.contains(player)) { selfDestructing.remove(player); msg(player, "Your self destruct has been canceled"); } } } // @EventHandler // public void somebodyMentionsWither(PlayerChatEvent event) { // if (event.getMessage().toLowerCase().contains("wither")) { // checkWither(); // } // } // @EventHandler // public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { // if (event.getDamager() instanceof WitherSkull || event.getEntity() instanceof WitherSkull) { // if (checkWither()) // event.setCancelled(true); // } // if (event.getDamager() instanceof Player) { // if ((Player) event.getDamager()) // } // } // @EventHandler public void onSplashPotionThrown(PotionSplashEvent event) { ThrownPotion potion = event.getPotion(); PotionEffect pShort = new PotionEffect(PotionEffectType.INVISIBILITY, 2701, 0, true); PotionEffect pLong = new PotionEffect(PotionEffectType.INVISIBILITY, 7201, 0, true); LivingEntity entity = potion.getShooter(); if ((entity instanceof Player)) { if (locationInWarzone(entity.getLocation())) { if (potion.getEffects().contains(pShort)) { event.setCancelled(true); giveBackPotion((Player) entity, (short) 32702); } else if (potion.getEffects().contains(pLong)) { event.setCancelled(true); giveBackPotion((Player) entity, (short) 32766); } } } } // @EventHandler public void onPlayerDies(PlayerDeathEvent event) { final Player player = event.getEntity(); if (!player.isOp() && locationInWarzone(player.getLocation())) { cooldowns.put(player, (int) (System.currentTimeMillis() / 1000) + 30); plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { cooldowns.remove(player); } }, 1000); } if (player.getName().equals("Esaych")) { event.getDrops().clear(); player.getWorld().createExplosion(player.getLocation(), 0); event.setDeathMessage("The owner was ANNIHILATED by " + player.getKiller()); event.setDroppedExp(100); } } // @EventHandler public void onPlayerSendsCommand(PlayerCommandPreprocessEvent event) { Player player = event.getPlayer(); if (event.getMessage().startsWith("/back")) { if (cooldowns.containsKey(player)) { if (cooldowns.get(player) > (int) (System.currentTimeMillis() / 1000)) { event.setCancelled(true); player.sendMessage(ChatColor.RED + "You can't go back for another " + (cooldowns.get(player) - (int) (System.currentTimeMillis() / 1000)) + " seconds!"); } else { cooldowns.remove(player); } } } if ((event.getMessage().startsWith("/island") || event.getMessage().startsWith("/skyblock")) && locationInWarzone(player.getLocation())) { player.sendMessage(ChatColor.RED + "That command is disabled in here!"); event.setCancelled(true); } } // @EventHandler(priority = EventPriority.LOWEST) public void onClick(PlayerInteractEvent event) { // if (event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || event.getAction().equals(Action.LEFT_CLICK_AIR) || event.getAction().equals(Action.LEFT_CLICK_BLOCK)) { if (locationInWarzone(event.getPlayer().getLocation())) { ItemStack compass = new ItemStack(Material.COMPASS); Player player = event.getPlayer(); if ((player.hasPermission("worldedit.navigation.jumpto") || player.hasPermission("worldedit.navigation.*")) && player.getInventory().getItemInHand().equals(compass)) { int open = player.getInventory().firstEmpty(); if (open != -1) { player.getInventory().setItem(open, compass); player.setItemInHand(new ItemStack(Material.AIR)); } else { player.getWorld().dropItemNaturally(event.getPlayer().getLocation(), event.getPlayer().getItemInHand()); player.setItemInHand(new ItemStack(Material.AIR)); } player.updateInventory(); player.sendMessage(ChatColor.RED + "No teleporting in the WarZone!"); event.setCancelled(true); } } // } } // @EventHandler // public void onPlayerTeleport(PlayerTeleportEvent event) { // Player player = event.getPlayer(); // if (locationInWarzone(player.getLocation())) { // player.sendMessage(ChatColor.RED + "NO TPING in warzone!"); // event.setCancelled(true); // } // } public boolean isNotProtected(Player player) { if (player.getInventory().getHelmet() == null && player.getInventory().getChestplate() == null && player.getInventory().getLeggings() == null && player.getInventory().getBoots() == null) return true; return false; } public ArrayList<Player> selfDestructing = new ArrayList<Player>(); // private ArrayList<Player> selfDestructingCache = new ArrayList<Player>(); public void selfDistruct(final Player player) { // if (selfDestructing.contains(player) || selfDestructingCache.contains(player) || player.isDead()) // return; // msg(player, "YOU ARE NOT WEARING ANY ARMOR"); // msg(player, "You will self destruct in 30 seconds."); // selfDestructing.add(player); // selfDestructingCache.add(player); // // plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { // @Override // public void run() { // if (player.isOnline() && locationInWarzone(player.getLocation()) && selfDestructing.contains(player)) { // msg(player, "25 seconds before self destruct."); // plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { // @Override // public void run() { // if (player.isOnline() && locationInWarzone(player.getLocation()) && selfDestructing.contains(player)) { // msg(player, "20 seconds before self destruct."); // plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { // @Override // public void run() { // if (player.isOnline() && locationInWarzone(player.getLocation()) && selfDestructing.contains(player)) { // msg(player, "15 seconds before self destruct."); // plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { // @Override // public void run() { // if (player.isOnline() && locationInWarzone(player.getLocation()) && selfDestructing.contains(player)) { // msg(player, "10 seconds before self destruct."); // plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { // @Override // public void run() { // if (player.isOnline() && locationInWarzone(player.getLocation()) && selfDestructing.contains(player)) { // msg(player, "5 seconds before self destruct."); // plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { // @Override // public void run() { // if (player.isOnline() && locationInWarzone(player.getLocation()) && selfDestructing.contains(player)) { // selfDestruct(player); // selfDestructingCache.remove(player); // } // } // }, 20*5); // } else { // selfDestructingCache.remove(player); // } // } // }, 20*5); // } else { // selfDestructingCache.remove(player); // } // } // }, 20*5); // } else { // selfDestructingCache.remove(player); // } // } // }, 20*5); // } else { // selfDestructingCache.remove(player); // } // } // }, 20*5); // } else { // selfDestructingCache.remove(player); // } // } // }, 20*5); } public void selfDestruct(Player player) { // Block block = player.getLocation().getBlock(); // block.setType(Material.CHEST); // final Chest chest = (Chest) block.getState(); // for (ItemStack is : player.getInventory()) { // if (is != null) // chest.getInventory().addItem(is); // } // final Inventory inv = player.getInventory(); // final World world = player.getWorld(); // final Location loc = player.getLocation(); Random r = new Random(); double x, z; for (ItemStack is : player.getInventory()) { if (is != null) { Entity i = player.getWorld().dropItemNaturally(player.getLocation(), is); x = r.nextDouble()/2 - .25; z = r.nextDouble()/2 - .25; i.setVelocity(new Vector(x, 1, z)); } } Firework fw = player.getWorld().spawn(player.getLocation(), Firework.class); FireworkMeta fwm = fw.getFireworkMeta(); FireworkEffect effect = FireworkEffect.builder().withColor(Color.RED).with(Type.BALL).build(); fwm.addEffects(effect); fwm.setPower(0); fw.setFireworkMeta(fwm); // ((CraftWorld)player.getWorld()).getHandle().broadcastEntityEffect( // ((CraftFirework)fw).getHandle(), // (byte)17); player.getInventory().clear(); player.setHealth(0); selfDestructing.remove(player); // log(inv.toString()); // plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { // @Override // public void run() { // log(inv.toString()); // Random r = new Random(); // double x, z; // for (ItemStack is : chest.getInventory()) { // if (is != null) { // Entity i = chest.getWorld().dropItemNaturally(chest.getLocation(), is); // // x = r.nextDouble()/2 - .25; // z = r.nextDouble()/2 - .25; // // log("x: " + x + " z: " + z); // i.setVelocity(new Vector(x, 5, z)); // } // } // } // }, 20 * 3); // Bukkit.getWorld("Survival").createExplosion(player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ(), (float)5, false, false); } public boolean locationInWarzone(Location loc) { Faction faction = BoardColls.get().getFactionAt(PS.valueOf(loc)); if (faction.getName().equals("WarZone")) return true; return false; } public void makeLegit(Player player) { try { if (plugin.isGod(player) || player.getAllowFlight()) { // DisguiseCraft.getAPI().isDisguised(player) // if (VanishNoPacket.isVanished(player.getName()) || plugin.isGod(player) || player.getAllowFlight()) { // log("Vanished: " + VanishNoPacket.isVanished(player.getName())); // log("God: " + plugin.isGod(player)); // log("Flying: " + player.getAllowFlight()); msg(player, "Now entering the warzone:"); } } catch (Exception e) { } // try { // if (VanishNoPacket.isVanished(player.getName())) { // Bukkit.dispatchCommand(player, "v"); // } // } catch (VanishNotLoadedException e) {} if (plugin.isGod(player)) { Bukkit.dispatchCommand(player, "god"); } if (player.getAllowFlight()) { Bukkit.dispatchCommand(player, "fly"); } if (player.hasPotionEffect(PotionEffectType.INVISIBILITY)) { for (PotionEffect effect : player.getActivePotionEffects()) { if (effect.getType().equals(PotionEffectType.INVISIBILITY)) { ItemStack bottle = new ItemStack(Material.GLASS_BOTTLE, 1); if (player.getInventory().getItemInHand().equals(bottle)) { player.getInventory().remove(bottle); } else if (player.getInventory().contains(bottle)) { player.getInventory().remove(bottle); } if (effect.getDuration() <= 3600) { giveBackPotion(player, (short) 16318); } else { giveBackPotion(player, (short) 16382); } break; } } player.sendMessage(ChatColor.GOLD + "You have been made visible."); } // if (DisguiseCraft.getAPI().isDisguised(player)) { // Bukkit.dispatchCommand(player, "ud"); // } } public void giveBackPotion(Player player, short dv) { player.removePotionEffect(PotionEffectType.INVISIBILITY); ItemStack potionItem = new ItemStack(Material.POTION, 1); potionItem.setDurability(dv); player.getInventory().addItem(potionItem); } public void log(String info) { plugin.getLogger().info("<LegitWarzone> " + info); } public void msg(Player player, String msg) { player.sendMessage(ChatColor.GOLD + "[" + ChatColor.DARK_RED + "LegitWarZone" + ChatColor.GOLD + "] " + ChatColor.GREEN + msg); } }