From 579d4a4a1ee1bc362c88d2ad796e1038d6ed9b26 Mon Sep 17 00:00:00 2001 From: MistPhizzle Date: Sun, 24 Aug 2014 20:54:13 -0400 Subject: [PATCH] Rename BreathSphere to Suffocate + Other Changes Now has a warmup of 2 seconds. During this two seconds the Bender may still move / break free. --- .../ProjectKorra/Ability/StockAbilities.java | 4 +- .../ProjectKorra/ConfigManager.java | 10 ++-- .../projectkorra/ProjectKorra/Methods.java | 10 ++-- .../projectkorra/ProjectKorra/PKListener.java | 34 ++++++------ .../airbending/AirbendingManager.java | 2 +- .../{BreathSphere.java => Suffocate.java} | 54 +++++++++++-------- .../ProjectKorra/chiblocking/ChiPassive.java | 6 +-- .../ProjectKorra/chiblocking/Paralyze.java | 6 +-- .../ProjectKorra/chiblocking/RapidPunch.java | 6 +-- src/config.yml | 2 +- 10 files changed, 73 insertions(+), 61 deletions(-) rename src/com/projectkorra/ProjectKorra/airbending/{BreathSphere.java => Suffocate.java} (83%) diff --git a/src/com/projectkorra/ProjectKorra/Ability/StockAbilities.java b/src/com/projectkorra/ProjectKorra/Ability/StockAbilities.java index d7884d01..bce41695 100644 --- a/src/com/projectkorra/ProjectKorra/Ability/StockAbilities.java +++ b/src/com/projectkorra/ProjectKorra/Ability/StockAbilities.java @@ -18,10 +18,10 @@ public enum StockAbilities { AvatarState, // Project Korra - Extraction, Smokescreen, Combustion, LavaSurge, BreathSphere; + Extraction, Smokescreen, Combustion, LavaSurge, Suffocate; private enum AirbendingAbilities { - AirBlast, AirBubble, AirShield, AirSuction, AirSwipe, Tornado, AirScooter, AirSpout, AirBurst, BreathSphere; + AirBlast, AirBubble, AirShield, AirSuction, AirSwipe, Tornado, AirScooter, AirSpout, AirBurst, Suffocate; } private enum WaterbendingAbilities { diff --git a/src/com/projectkorra/ProjectKorra/ConfigManager.java b/src/com/projectkorra/ProjectKorra/ConfigManager.java index b0d8de7e..389af3b2 100644 --- a/src/com/projectkorra/ProjectKorra/ConfigManager.java +++ b/src/com/projectkorra/ProjectKorra/ConfigManager.java @@ -189,11 +189,11 @@ public class ConfigManager { config.addDefault("Abilities.Air.AirSwipe.Cooldown", 1500); config.addDefault("Abilities.Air.AirSwipe.ChargeFactor", 3); - config.addDefault("Abilities.Air.BreathSphere.Enabled", true); - config.addDefault("Abilities.Air.BreathSphere.Description", "This ability is one of the most dangerous abilities an Airbender possesses. To use, simply look at an entity and hold shift. The entity will begin taking damage as you extract the air from their lungs. Any bender caught in this sphere will only be able to use basic moves, such as AirSwipe, WaterManipulation, FireBlast, or EarthBlast. An entity can be knocked out of the sphere by certain bending arts, and your attention will be disrupted if you are hit by bending."); - config.addDefault("Abilities.Air.BreathSphere.CanBeUsedOnUndeadMobs", true); - config.addDefault("Abilities.Air.BreathSphere.Range", 5); - config.addDefault("Abilities.Air.BreathSphere.Damage", 0.5); + config.addDefault("Abilities.Air.Suffocate.Enabled", true); + config.addDefault("Abilities.Air.Suffocate.Description", "This ability is one of the most dangerous abilities an Airbender possesses. To use, simply look at an entity and hold shift. The entity will begin taking damage as you extract the air from their lungs. Any bender caught in this sphere will only be able to use basic moves, such as AirSwipe, WaterManipulation, FireBlast, or EarthBlast. An entity can be knocked out of the sphere by certain bending arts, and your attention will be disrupted if you are hit by bending."); + config.addDefault("Abilities.Air.Suffocate.CanBeUsedOnUndeadMobs", true); + config.addDefault("Abilities.Air.Suffocate.Range", 5); + config.addDefault("Abilities.Air.Suffocate.Damage", 0.5); config.addDefault("Abilities.Air.Tornado.Radius", 10); config.addDefault("Abilities.Air.Tornado.Height", 25); diff --git a/src/com/projectkorra/ProjectKorra/Methods.java b/src/com/projectkorra/ProjectKorra/Methods.java index 488abc87..06418ad8 100644 --- a/src/com/projectkorra/ProjectKorra/Methods.java +++ b/src/com/projectkorra/ProjectKorra/Methods.java @@ -81,7 +81,7 @@ import com.projectkorra.ProjectKorra.airbending.AirShield; import com.projectkorra.ProjectKorra.airbending.AirSpout; import com.projectkorra.ProjectKorra.airbending.AirSuction; import com.projectkorra.ProjectKorra.airbending.AirSwipe; -import com.projectkorra.ProjectKorra.airbending.BreathSphere; +import com.projectkorra.ProjectKorra.airbending.Suffocate; import com.projectkorra.ProjectKorra.airbending.Tornado; import com.projectkorra.ProjectKorra.chiblocking.Paralyze; import com.projectkorra.ProjectKorra.chiblocking.RapidPunch; @@ -1896,15 +1896,15 @@ public class Methods { } public static void breakBreathbendingHold(Entity entity) { - if(BreathSphere.isBreathbent(entity)) { - BreathSphere.breakBreathSphere(entity); + if(Suffocate.isBreathbent(entity)) { + Suffocate.breakSuffocate(entity); return; } if(entity instanceof Player) { Player player = (Player) entity; - if(BreathSphere.isChannelingSphere(player)) { - BreathSphere.remove(player); + if(Suffocate.isChannelingSphere(player)) { + Suffocate.remove(player); } } } diff --git a/src/com/projectkorra/ProjectKorra/PKListener.java b/src/com/projectkorra/ProjectKorra/PKListener.java index d9b318d8..06a121d3 100644 --- a/src/com/projectkorra/ProjectKorra/PKListener.java +++ b/src/com/projectkorra/ProjectKorra/PKListener.java @@ -68,7 +68,7 @@ import com.projectkorra.ProjectKorra.airbending.AirShield; import com.projectkorra.ProjectKorra.airbending.AirSpout; import com.projectkorra.ProjectKorra.airbending.AirSuction; import com.projectkorra.ProjectKorra.airbending.AirSwipe; -import com.projectkorra.ProjectKorra.airbending.BreathSphere; +import com.projectkorra.ProjectKorra.airbending.Suffocate; import com.projectkorra.ProjectKorra.airbending.Tornado; import com.projectkorra.ProjectKorra.chiblocking.ChiPassive; import com.projectkorra.ProjectKorra.chiblocking.HighJump; @@ -163,7 +163,7 @@ public class PKListener implements Listener { event.setCancelled(true); return; } - if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player) || BreathSphere.isBreathbent(player)) { + if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player) || Suffocate.isBreathbent(player)) { event.setCancelled(true); } @@ -239,7 +239,7 @@ public class PKListener implements Listener { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { Methods.cooldowns.put(player.getName(), System.currentTimeMillis()); } - if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player) || BreathSphere.isBreathbent(player)) { + if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player) || Suffocate.isBreathbent(player)) { event.setCancelled(true); } } @@ -249,7 +249,7 @@ public class PKListener implements Listener { if (event.isCancelled()) return; Player player = event.getPlayer(); Methods.cooldowns.put(player.getName(), System.currentTimeMillis()); - if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player) || BreathSphere.isBreathbent(player)) { + if (Paralyze.isParalyzed(player) || Bloodbending.isBloodbended(player) || Suffocate.isBreathbent(player)) { event.setCancelled(true); } } @@ -318,7 +318,7 @@ public class PKListener implements Listener { if (event.isCancelled()) return; - if(BreathSphere.isBreathbent(player)) { + if(Suffocate.isBreathbent(player)) { if(!Methods.getBoundAbility(player).equalsIgnoreCase("AirSwipe") || !Methods.getBoundAbility(player).equalsIgnoreCase("FireBlast") || !Methods.getBoundAbility(player).equalsIgnoreCase("EarthBlast") || !Methods.getBoundAbility(player).equalsIgnoreCase("WaterManipulation")) { event.setCancelled(true); } @@ -365,8 +365,8 @@ public class PKListener implements Listener { if (abil.equalsIgnoreCase("AirShield")) { new AirShield(player); } - if(abil.equalsIgnoreCase("BreathSphere")) { - new BreathSphere(player); + if(abil.equalsIgnoreCase("Suffocate")) { + new Suffocate(player); } } @@ -515,7 +515,7 @@ public class PKListener implements Listener { } } - if(BreathSphere.isBreathbent(player)) { + if(Suffocate.isBreathbent(player)) { player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 1, 100)); } } @@ -545,7 +545,7 @@ public class PKListener implements Listener { if (event.isCancelled()) return; Entity entity = event.getEntity(); - if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity)) + if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || Suffocate.isBreathbent(entity)) event.setCancelled(true); } @@ -589,7 +589,7 @@ public class PKListener implements Listener { Entity entity = event.getEntity(); if (entity != null) if (Paralyze.isParalyzed(entity) - || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity)) + || Bloodbending.isBloodbended(entity) || Suffocate.isBreathbent(entity)) event.setCancelled(true); } @@ -598,7 +598,7 @@ public class PKListener implements Listener { if (event.isCancelled()) return; Entity entity = event.getEntity(); - if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity)) + if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || Suffocate.isBreathbent(entity)) event.setCancelled(true); } @@ -607,7 +607,7 @@ public class PKListener implements Listener { if (event.isCancelled()) return; Entity entity = event.getEntity(); - if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity)) + if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || Suffocate.isBreathbent(entity)) event.setCancelled(true); } @@ -616,7 +616,7 @@ public class PKListener implements Listener { if (event.isCancelled()) return; Entity entity = event.getEntity(); - if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity)) + if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || Suffocate.isBreathbent(entity)) event.setCancelled(true); } @@ -625,7 +625,7 @@ public class PKListener implements Listener { if (event.isCancelled()) return; Entity entity = event.getEntity(); - if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity)) + if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || Suffocate.isBreathbent(entity)) event.setCancelled(true); } @@ -634,7 +634,7 @@ public class PKListener implements Listener { if (event.isCancelled()) return; Entity entity = event.getEntity(); - if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || BreathSphere.isBreathbent(entity)) + if (Paralyze.isParalyzed(entity) || Bloodbending.isBloodbended(entity) || Suffocate.isBreathbent(entity)) event.setCancelled(true); } @@ -645,7 +645,7 @@ public class PKListener implements Listener { Player player = event.getPlayer(); - if(BreathSphere.isBreathbent(player)) { + if(Suffocate.isBreathbent(player)) { if(!Methods.getBoundAbility(player).equalsIgnoreCase("AirSwipe") || !Methods.getBoundAbility(player).equalsIgnoreCase("FireBlast") || !Methods.getBoundAbility(player).equalsIgnoreCase("EarthBlast") || !Methods.getBoundAbility(player).equalsIgnoreCase("WaterManipulation")) { event.setCancelled(true); } @@ -856,7 +856,7 @@ public class PKListener implements Listener { if (event.isCancelled()) return; Player p = event.getPlayer(); - if (Tornado.getPlayers().contains(p) || Bloodbending.isBloodbended(p) || BreathSphere.isBreathbent(p) + if (Tornado.getPlayers().contains(p) || Bloodbending.isBloodbended(p) || Suffocate.isBreathbent(p) || FireJet.getPlayers().contains(p) || AvatarState.getPlayers().contains(p)) { event.setCancelled(p.getGameMode() != GameMode.CREATIVE); diff --git a/src/com/projectkorra/ProjectKorra/airbending/AirbendingManager.java b/src/com/projectkorra/ProjectKorra/airbending/AirbendingManager.java index 0afc0ec4..8866f964 100644 --- a/src/com/projectkorra/ProjectKorra/airbending/AirbendingManager.java +++ b/src/com/projectkorra/ProjectKorra/airbending/AirbendingManager.java @@ -18,7 +18,7 @@ public class AirbendingManager implements Runnable { AirPassive.handlePassive(Bukkit.getServer()); AirBurst.progressAll(); AirScooter.progressAll(); - BreathSphere.progressAll(); + Suffocate.progressAll(); AirSpout.spoutAll(); AirBubble.handleBubbles(Bukkit.getServer()); AirSuction.progressAll(); diff --git a/src/com/projectkorra/ProjectKorra/airbending/BreathSphere.java b/src/com/projectkorra/ProjectKorra/airbending/Suffocate.java similarity index 83% rename from src/com/projectkorra/ProjectKorra/airbending/BreathSphere.java rename to src/com/projectkorra/ProjectKorra/airbending/Suffocate.java index 7f44fc59..16c4bf66 100644 --- a/src/com/projectkorra/ProjectKorra/airbending/BreathSphere.java +++ b/src/com/projectkorra/ProjectKorra/airbending/Suffocate.java @@ -17,24 +17,26 @@ import com.projectkorra.ProjectKorra.ProjectKorra; import com.projectkorra.ProjectKorra.TempPotionEffect; import com.projectkorra.ProjectKorra.Ability.AvatarState; -public class BreathSphere { +public class Suffocate { - public static ConcurrentHashMap instances = new ConcurrentHashMap(); + public static ConcurrentHashMap instances = new ConcurrentHashMap(); ConcurrentHashMap targetentities = new ConcurrentHashMap(); - private static boolean canBeUsedOnUndead = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Air.BreathSphere.CanBeUsedOnUndeadMobs"); - private int range = ProjectKorra.plugin.getConfig().getInt("Abilities.Air.BreathSphere.Range"); - private double damage = ProjectKorra.plugin.getConfig().getDouble("Abilities.Air.BreathSphere.Damage"); + private static boolean canBeUsedOnUndead = ProjectKorra.plugin.getConfig().getBoolean("Abilities.Air.Suffocate.CanBeUsedOnUndeadMobs"); + private int range = ProjectKorra.plugin.getConfig().getInt("Abilities.Air.Suffocate.Range"); + private double damage = ProjectKorra.plugin.getConfig().getDouble("Abilities.Air.Suffocate.Damage"); private Player player; + private long time; + private long warmup = 2000; - public BreathSphere(Player player) { + public Suffocate(Player player) { if (instances.containsKey(player)) { remove(player); return; } - + if (AvatarState.isAvatarState(player)) { range = AvatarState.getValue(range); for (Entity entity : Methods.getEntitiesAroundPoint(player.getLocation(), range)) { @@ -61,6 +63,7 @@ public class BreathSphere { } this.player = player; instances.put(player, this); + time = System.currentTimeMillis(); } private void progress() { @@ -80,7 +83,7 @@ public class BreathSphere { } } - if (!Methods.canBend(player.getName(), "BreathSphere")) { + if (!Methods.canBend(player.getName(), "Suffocate")) { remove(player); return; } @@ -88,7 +91,7 @@ public class BreathSphere { remove(player); return; } - if (!Methods.getBoundAbility(player).equalsIgnoreCase("BreathSphere")) { + if (!Methods.getBoundAbility(player).equalsIgnoreCase("Suffocate")) { remove(player); return; } @@ -96,19 +99,23 @@ public class BreathSphere { if (AvatarState.isAvatarState(player)) { ArrayList entities = new ArrayList(); for (Entity entity : Methods.getEntitiesAroundPoint(player.getLocation(), range)) { - if (Methods.isRegionProtectedFromBuild(player, "BreathSphere", entity.getLocation())) + if (Methods.isRegionProtectedFromBuild(player, "Suffocate", entity.getLocation())) continue; if (entity.getEntityId() == player.getEntityId()) continue; entities.add(entity); if (!targetentities.containsKey(entity) && entity instanceof LivingEntity) { - Methods.damageEntity(player, entity, 0); + if (System.currentTimeMillis() >= time + warmup) { + Methods.damageEntity(player, entity, 0); + } targetentities.put(entity, entity.getLocation().clone()); } if (entity instanceof LivingEntity) { if (Methods.isObstructed(player.getLocation(), entity.getLocation())) { - breakBreathSphere(entity); + breakSuffocate(entity); + } + if (System.currentTimeMillis() >= time + warmup) { + Methods.damageEntity(player, entity, 0); } - Methods.damageEntity(player, (LivingEntity) entity, damage); new TempPotionEffect((LivingEntity) entity, slow); new TempPotionEffect((LivingEntity) entity, nausea); entity.setFallDistance(0); @@ -138,9 +145,11 @@ public class BreathSphere { for (Entity entity : targetentities.keySet()) { if(entity instanceof LivingEntity) { if (Methods.isObstructed(player.getLocation(), entity.getLocation())) { - breakBreathSphere(entity); + breakSuffocate(entity); + } + if (System.currentTimeMillis() >= time + warmup) { + Methods.damageEntity(player, entity, 0); } - Methods.damageEntity(player, (LivingEntity) entity, damage); new TempPotionEffect((LivingEntity) entity, slow); new TempPotionEffect((LivingEntity) entity, nausea); entity.setFallDistance(0); @@ -176,8 +185,8 @@ public class BreathSphere { instances.remove(player); } } - - public static void breakBreathSphere(Entity entity) { + + public static void breakSuffocate(Entity entity) { for (Player player : instances.keySet()) { if (instances.get(player).targetentities.containsKey(entity)) { instances.remove(player); @@ -188,7 +197,10 @@ public class BreathSphere { public static boolean isBreathbent(Entity entity) { for (Player player : instances.keySet()) { if (instances.get(player).targetentities.containsKey(entity)) { - return true; + if (System.currentTimeMillis() >= instances.get(player).time + instances.get(player).warmup) { + return true; + } + return false; } } return false; @@ -211,7 +223,7 @@ public class BreathSphere { return false; } - public static Location getBreathSphereLocation(Entity entity) { + public static Location getSuffocateLocation(Entity entity) { for (Player player : instances.keySet()) { if (instances.get(player).targetentities.containsKey(entity)) { return instances.get(player).targetentities.get(entity); @@ -219,12 +231,12 @@ public class BreathSphere { } return null; } - + public static boolean isChannelingSphere(Player player){ if(instances.containsKey(player)) return true; return false; } - + public static void removeAll() { instances.clear(); } diff --git a/src/com/projectkorra/ProjectKorra/chiblocking/ChiPassive.java b/src/com/projectkorra/ProjectKorra/chiblocking/ChiPassive.java index 124de6f2..c4a0e27d 100644 --- a/src/com/projectkorra/ProjectKorra/chiblocking/ChiPassive.java +++ b/src/com/projectkorra/ProjectKorra/chiblocking/ChiPassive.java @@ -12,7 +12,7 @@ import com.projectkorra.ProjectKorra.BendingPlayer; import com.projectkorra.ProjectKorra.Element; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; -import com.projectkorra.ProjectKorra.airbending.BreathSphere; +import com.projectkorra.ProjectKorra.airbending.Suffocate; public class ChiPassive { @@ -38,8 +38,8 @@ public class ChiPassive { } public static void blockChi(final Player player) { - if(BreathSphere.isChannelingSphere(player)) { - BreathSphere.remove(player); + if(Suffocate.isChannelingSphere(player)) { + Suffocate.remove(player); } final BendingPlayer bPlayer = Methods.getBendingPlayer(player.getName()); if (bPlayer == null) return; diff --git a/src/com/projectkorra/ProjectKorra/chiblocking/Paralyze.java b/src/com/projectkorra/ProjectKorra/chiblocking/Paralyze.java index 13316b3b..a89c6fdf 100644 --- a/src/com/projectkorra/ProjectKorra/chiblocking/Paralyze.java +++ b/src/com/projectkorra/ProjectKorra/chiblocking/Paralyze.java @@ -10,7 +10,7 @@ import com.projectkorra.ProjectKorra.Element; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; import com.projectkorra.ProjectKorra.Ability.AvatarState; -import com.projectkorra.ProjectKorra.airbending.BreathSphere; +import com.projectkorra.ProjectKorra.airbending.Suffocate; public class Paralyze { @@ -45,8 +45,8 @@ public class Paralyze { } if (entity instanceof Player) { - if(BreathSphere.isChannelingSphere((Player) entity)) { - BreathSphere.remove((Player) entity); + if(Suffocate.isChannelingSphere((Player) entity)) { + Suffocate.remove((Player) entity); } } } diff --git a/src/com/projectkorra/ProjectKorra/chiblocking/RapidPunch.java b/src/com/projectkorra/ProjectKorra/chiblocking/RapidPunch.java index 20e68be6..abeceab3 100644 --- a/src/com/projectkorra/ProjectKorra/chiblocking/RapidPunch.java +++ b/src/com/projectkorra/ProjectKorra/chiblocking/RapidPunch.java @@ -12,7 +12,7 @@ import org.bukkit.entity.Player; import com.projectkorra.ProjectKorra.Methods; import com.projectkorra.ProjectKorra.ProjectKorra; -import com.projectkorra.ProjectKorra.airbending.BreathSphere; +import com.projectkorra.ProjectKorra.airbending.Suffocate; public class RapidPunch { @@ -60,8 +60,8 @@ public class RapidPunch { if (ChiPassive.willChiBlock((Player) target)) { ChiPassive.blockChi((Player) target); } - if(BreathSphere.isChannelingSphere((Player) target)) { - BreathSphere.remove((Player) target); + if(Suffocate.isChannelingSphere((Player) target)) { + Suffocate.remove((Player) target); } lt.setNoDamageTicks(0); } diff --git a/src/config.yml b/src/config.yml index 94166dad..10b4ee41 100644 --- a/src/config.yml +++ b/src/config.yml @@ -138,7 +138,7 @@ Abilities: Speed: 25 Cooldown: 1500 ChargeFactor: 3 - BreathSphere: + Suffocate: Enabled: true Description: "This ability is one of the most dangerous abilities an Airbender possesses. To use, simply look at an entity and hold shift. The entity will begin taking damage as you extract the air from their lungs. Any bender caught in this sphere will only be able to use basic moves, such as AirSwipe, WaterManipulation, FireBlast, or EarthBlast. An entity can be knocked out of the sphere by certain bending arts, and your attention will be disrupted if you are hit by bending." CanBeUsedOnUndeadMobs: true