package pl.andrzex.TeoCombat; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Arrow; import org.bukkit.entity.Egg; import org.bukkit.entity.Entity; import org.bukkit.entity.ExperienceOrb; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.entity.Snowball; import org.bukkit.entity.ThrownPotion; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import org.inventivetalent.bossbar.BossBar; import org.inventivetalent.bossbar.BossBarAPI; public class Main extends JavaPlugin implements Listener { public HashMap taggedPlayers = new HashMap(); public void onEnable() { getServer().getPluginManager().registerEvents(this, this); enableTimer(); } public void onDisable() { this.taggedPlayers.clear(); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if ((sender instanceof Player)) { Player p = (Player)sender; if (cmd.getName().equalsIgnoreCase("walka")) { if (this.taggedPlayers.containsKey(p.getName())) { if (20L - (getSystemTime() - this.taggedPlayers .get(p.getName()).longValue()) >= 1L) { long tagTime = 15L - (getSystemTime() - this.taggedPlayers .get(p.getName()).longValue()); p.sendMessage(t(" &7» &cJestes jeszcze podczas walki przez &4" + tagTime + " &csekund.")); return true; } } if (this.taggedPlayers.containsKey(p.getName())) { if (20L - (getSystemTime() - this.taggedPlayers .get(p.getName()).longValue()) < 1L) { long tagTime = 15L - (getSystemTime() - this.taggedPlayers .get(p.getName()).longValue()); p.sendMessage(t(" &7» &cJestes jeszcze podczas walki przez &4" + tagTime + " &csekund.")); return true; } } if (!this.taggedPlayers.containsKey(p.getName())) { p.sendMessage(t(" &7» &aNie jestes podczas walki.")); return true; } } } return false; } public String t(String msg) { return ChatColor.translateAlternateColorCodes('&', msg); } public long getSystemTime() { return System.currentTimeMillis() / 1000L; } public void enableTimer() { getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { public void run() { Iterator iter = Main.this.taggedPlayers.entrySet() .iterator(); while (iter.hasNext()) { Map.Entry c = (Map.Entry)iter.next(); if (Main.this.getSystemTime() - ((Long)c.getValue()).longValue() >= 15L) { iter.remove(); Player player = Main.this.getServer().getPlayer( (String)c.getKey()); try { player.sendMessage(Main.this.t(" &7» &aNie jestes juz podczas walki.")); } catch (Exception localException) { } } } } } , 0L, 15L); } @EventHandler(priority=EventPriority.LOWEST) public void onCommand(PlayerCommandPreprocessEvent event) { if ((this.taggedPlayers.containsKey(event.getPlayer().getName())) && (!event.getPlayer().isOp())) { if (event.getMessage().contains("walka")) { return; } event.setCancelled(true); event.getPlayer().sendMessage(t(" &7» &cNie mozesz uzywac komend podczas walki.")); return; } } @EventHandler(priority=EventPriority.LOWEST) public void onPlayerKick(PlayerKickEvent event) { Player player = event.getPlayer(); if ((this.taggedPlayers.containsKey(player.getName())) && (!event.getReason().contains("spam"))) this.taggedPlayers.remove(player.getName()); } @EventHandler public void onPlayerDeath(PlayerDeathEvent event) { Player player = event.getEntity().getPlayer(); if (this.taggedPlayers.containsKey(player.getName())) { this.taggedPlayers.remove(player.getName()); BossBarAPI.removeBar(player); } } @EventHandler(priority=EventPriority.LOWEST) public void onPlayerQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); if (this.taggedPlayers.containsKey(player.getName())) { this.taggedPlayers.remove(player.getName()); Bukkit.broadcastMessage(t("&cGracz &7" + player.getName() + " &cwylogowal sie podczas walki.")); dropPunishment(player); player.setHealth(0.0D); return; } } public void dropPunishment(Player player) { ItemStack[] stacks = (ItemStack[])player.getInventory().getContents() .clone(); player.getInventory().clear(); for (ItemStack stack : stacks) { if ((stack != null) && (stack.getType() != Material.AIR)) { player.getLocation().getWorld() .dropItemNaturally(player.getLocation(), stack); } } ItemStack[] armorstacks = (ItemStack[])player.getInventory() .getArmorContents().clone(); player.getInventory().setArmorContents(new ItemStack[4]); for (ItemStack stack : armorstacks) { if ((stack != null) && (stack.getType() != Material.AIR)) { player.getLocation().getWorld() .dropItemNaturally(player.getLocation(), stack); } } player.setExp(0.0F); for (int i = 0; i < player.getLevel(); i++) { player.getLocation().getWorld() .spawn(player.getLocation(), ExperienceOrb.class) .setExperience(2 * i + 1); } player.setLevel(0); } @EventHandler(priority=EventPriority.HIGHEST, ignoreCancelled=true) public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { if (!event.isCancelled()) { Entity entity = event.getEntity(); Entity damager = event.getDamager(); if (((entity instanceof Player)) && ((damager instanceof Player))) { tagAttacker(damager, entity); tagVictim(damager, entity); } if (((damager instanceof Projectile)) && ((entity instanceof Player)) && ((((Projectile)damager).getShooter() instanceof Player))) if ((damager instanceof Arrow)) { tagAttacker((Entity)((Projectile)damager).getShooter(), entity); tagVictim((Entity)((Projectile)damager).getShooter(), entity); } else if ((damager instanceof Egg)) { tagAttacker((Entity)((Projectile)damager).getShooter(), entity); tagVictim((Entity)((Projectile)damager).getShooter(), entity); } else if ((damager instanceof Snowball)) { tagAttacker((Entity)((Projectile)damager).getShooter(), entity); tagVictim((Entity)((Projectile)damager).getShooter(), entity); } else if ((damager instanceof ThrownPotion)) { tagAttacker((Entity)((Projectile)damager).getShooter(), entity); tagVictim((Entity)((Projectile)damager).getShooter(), entity); } } } private void tagAttacker(Entity attacker, Entity victim) { if ((attacker instanceof Player)) { Player a = (Player)attacker; if (!this.taggedPlayers.containsKey(a.getName())) { this.taggedPlayers.put(a.getName(), Long.valueOf(getSystemTime())); BossBar bossBar = BossBarAPI.addBar(a, new TextComponent("§cANTY-LOGOUT"), BossBarAPI.Color.BLUE, BossBarAPI.Style.NOTCHED_20, 1.0f, 20, 2); } else { this.taggedPlayers.remove(a.getName()); BossBar bossBar = BossBarAPI.addBar(a, new TextComponent("§cANTY-LOGOUT"), BossBarAPI.Color.BLUE, BossBarAPI.Style.NOTCHED_20, 1.0f, 20, 2); this.taggedPlayers.put(a.getName(), Long.valueOf(getSystemTime())); } } } public void tagVictim(Entity attacker, Entity victim) { if ((victim instanceof Player)) { Player v = (Player)victim; if (!this.taggedPlayers.containsKey(v.getName())) { this.taggedPlayers.put(v.getName(), Long.valueOf(getSystemTime())); BossBar bossBar = BossBarAPI.addBar(v, new TextComponent("§cANTY-LOGOUT"), BossBarAPI.Color.BLUE, BossBarAPI.Style.NOTCHED_20, 1.0f, 20, 2);; } else { this.taggedPlayers.remove(v.getName()); BossBar bossBar = BossBarAPI.addBar(v, new TextComponent("§cANTY-LOGOUT"), BossBarAPI.Color.BLUE, BossBarAPI.Style.NOTCHED_20, 1.0f, 20, 2); this.taggedPlayers.put(v.getName(), Long.valueOf(getSystemTime())); } } } }