Revert FireAbilities Part 1

This commit is contained in:
nathank33 2015-11-11 00:29:38 -08:00
parent 7105b0c4c7
commit 10414ffd90
11 changed files with 198 additions and 560 deletions

View file

@ -1,333 +0,0 @@
package com.projectkorra.projectkorra.ability.api;
import com.projectkorra.projectkorra.ability.StockAbility;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
/**
* Represents the core of all ProjectKorra abilities and implements the
* {@link Ability} interface.
*
* @author jacklin213
* @version 1.0.0
*/
public abstract class CoreAbility implements Ability {
/**
* ConcurrentHashMap that stores all Ability instances under UUID key. To
* access this HashMap use either {@link #getInstance()} from the ability
* instance or {@link #getInstance(StockAbility)} from the outside.
*/
private static final ConcurrentHashMap<Integer, CoreAbility> instances = new ConcurrentHashMap<>();
private static final ConcurrentHashMap<StockAbility, ArrayList<Integer>> abilityMap = new ConcurrentHashMap<>();
private static final ConcurrentHashMap<Class<? extends CoreAbility>, ConcurrentHashMap<Integer, CoreAbility>> classAbilityMap = new ConcurrentHashMap<>();
private static int ID = Integer.MIN_VALUE;
private final StockAbility stockAbility = getStockAbility();
private Player player;
private UUID uniqueId;
private Integer id;
/**
* Convenience method to check if a player already has an instance of this
* ability.
*
* @param player The player to check
* @return true if instances contains the player
*/
public static final boolean containsPlayer(Player player, Class<? extends CoreAbility> ability) {
CoreAbility coreAbility = getAbilityFromPlayer(player, ability);
return coreAbility != null ? true : false;
}
/**
* Gets the list of ability instances that the player has created.
*
* @param player The player to get
* @return list of abilities
*/
public static List<CoreAbility> getAbilitiesFromPlayer(Player player) {
List<CoreAbility> abilities = new ArrayList<>();
for (CoreAbility ability : instances.values()) {
if (ability.getPlayer().getUniqueId().equals(player.getUniqueId())) {
abilities.add(ability);
}
}
return abilities;
}
/**
* Gets the ability instance of the player.
*
* @param player The player to get
* @param ability The ability class
* @return the ability instance or null
*/
public static CoreAbility getAbilityFromPlayer(Player player, Class<? extends CoreAbility> ability) {
for (CoreAbility coreAbility : instances.values()) {
if (ability.isInstance(coreAbility)) {
if (coreAbility.getPlayer().getUniqueId().equals(player.getUniqueId())) {
return coreAbility;
}
}
}
return null;
}
/**
* Gets the ability instance by its id.
*
* @param id The ability id to get
* @return the ability instance or null
*/
public static final CoreAbility getAbility(int id) {
return instances.get(id);
}
/**
* An access method to get an the instances of a {@link StockAbility}.
* <b>IMPORTANT: </b> If this is used in a for each loop use
* {@link #getAbility(int)} to get the ability. Incorrect usage may cause
* over looping and is capable of hanging the thead.
*
* @param ability The instances map to get
* @return a map of instances from the specified {@link StockAbility}
* @see #getInstances(StockAbility)
*/
public final static ConcurrentHashMap<Integer, CoreAbility> getInstances(StockAbility ability) {
ConcurrentHashMap<Integer, CoreAbility> instanceMap = new ConcurrentHashMap<>();
if (abilityMap.containsKey(ability)) {
for (Integer id : abilityMap.get(ability)) {
instanceMap.put(id, instances.get(id));
}
}
return instanceMap;
}
/**
* An access method to get an the instances of a {@link CoreAbility} by its
* class. <b>IMPORTANT: </b> If this is used in a for each loop use
* {@link #getAbility(int)} to get the ability. Incorrect usage may cause
* over looping and is capable of hanging the thead.
*
* @param ability The instances map to get
* @return a map of instances from the specified class
* @see #getInstances(StockAbility)
*/
public final static ConcurrentHashMap<Integer, CoreAbility> getInstances(Class<? extends CoreAbility> ability) {
ConcurrentHashMap<Integer, CoreAbility> instanceMap = classAbilityMap.get(ability.getClass());
return instanceMap != null ? instanceMap : new ConcurrentHashMap<Integer, CoreAbility>();
}
//TODO: Update bending managers to use below method
// /**
// * Convenience method that calls {@link #progress()} for all instances.
// *
// * @see #progressAll(Class)
// * @see #progressAll(StockAbility)
// */
// public static void progressAll() {
// for (Integer id : instances.keySet()) {
// instances.get(id).progress();
// }
// }
/**
* Convenience method that calls {@link #progress()} for all instances of a
* specified ability.
*
* @see #progressAll(StockAbility)
*/
public static void progressAll(Class<? extends CoreAbility> ability) {
ConcurrentHashMap<Integer, CoreAbility> classAbilities = classAbilityMap.get(ability);
if (classAbilities != null) {
for (Integer id : classAbilities.keySet()) {
classAbilities.get(id).progress();
}
}
}
/**
* Convenience method that calls {@link #progress()} for all instances of a
* specified stock ability.
*
* @see #progressAll(Class)
*/
public static void progressAll(StockAbility ability) {
for (Integer id : getInstances(ability).keySet()) {
getInstances(ability).get(id).progress();
}
}
//TODO: Update bending managers to use below method
// /**
// * Convenience method that calls {@link #remove()} for all instances.
// *
// * @see #removeAll(StockAbility)
// * @see #removeAll(Class)
// */
// public static void removeAll() {
// for (Integer id : instances.keySet()) {
// instances.get(id).remove();
// }
// }
/**
* Convenience method that calls {@link #remove()} for all instances of a
* specified stock ability.
*
* @see #removeAll(StockAbility)
*/
public static void removeAll(Class<? extends CoreAbility> ability) {
for (Integer id : instances.keySet()) {
if (ability.isInstance(instances.get(id))) {
instances.get(id).remove();
}
}
}
/**
* Convenience method that calls {@link #remove()} for all instances of a
* specified ability.
*
* @see #removeAll(Class)
*/
public static void removeAll(StockAbility ability) {
for (Integer id : getInstances(ability).keySet()) {
getInstances(ability).get(id).remove();
}
}
/**
* Checks if ability is a {@link StockAbility} or not.
*
* @return true if ability is a stock ability
*/
public boolean isStockAbility() {
return getStockAbility() != null ? true : false;
}
/**
* Gets the id of the ability instance.
*
* @return id of ability
*/
public int getID() {
return id;
}
/**
* Convenience method to get instance for current ability class.
*
* @return instance of the current ability
*/
public CoreAbility getInstance() {
return instances.get(id);
}
/**
* Gets the {@link Ability.InstanceType} of the ability.
*
* @return single by default
*/
public InstanceType getInstanceType() {
return InstanceType.SINGLE;
}
/**
* Gets the player that invoked the ability.
*
* @return player
*/
public Player getPlayer() {
return player;
}
/**
* Gets the {@link StockAbility} that created this instance. This method
* will return null for abilities that are not stock abilities
*
* @return StockAbility enum or null
*/
public abstract StockAbility getStockAbility();
/**
* Gets the {@link UUID} of the player that invoked this ability.
*
* @return the uuid of the player
*/
public UUID getUniqueId() {
return uniqueId;
}
/**
* Put the instance of the ability into the instances map.
*
* @param player The player
* @param ability The ability involved
*/
protected final void putInstance(Player player, CoreAbility ability) {
this.id = ID;
this.uniqueId = player.getUniqueId();
this.player = player;
Class<? extends CoreAbility> classKey = ability.getClass();
if (!classAbilityMap.containsKey(classKey)) {
classAbilityMap.put(classKey, new ConcurrentHashMap<Integer, CoreAbility>());
}
classAbilityMap.get(classKey).put(id, ability);
instances.put(id, ability);
if (stockAbility != null) {
if (abilityMap.containsKey(stockAbility)) {
abilityMap.get(stockAbility).add(id);
} else {
abilityMap.put(stockAbility, new ArrayList<Integer>(Arrays.asList(id)));
}
}
if (ID == Integer.MAX_VALUE)
ID = Integer.MIN_VALUE;
ID++;
}
/**
* Calls {@link #removeInstance()}, Developers can override this method to
* do other things when remove is called but they <strong>MUST</strong>
* remember to call {@code super.remove()} for the ability to be properly
* removed from the {@link #instances}.
*/
@Override
public void remove() {
removeInstance();
}
/**
* Removes the ability instance from the instances map.
*/
private final void removeInstance() {
if (instances.containsKey(id)) {
instances.remove(id);
}
if (classAbilityMap.containsKey(this.getClass())) {
classAbilityMap.get(this.getClass()).remove(id);
}
if (stockAbility != null) {
if (abilityMap.containsKey(stockAbility)) {
abilityMap.get(stockAbility).remove(id);
if (abilityMap.get(stockAbility).isEmpty()) {
abilityMap.remove(stockAbility);
}
}
}
}
}

View file

@ -1,13 +1,6 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.BendingPlayer; import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.ability.AvatarState;
import com.projectkorra.projectkorra.ability.StockAbility;
import com.projectkorra.projectkorra.ability.api.CoreAbility;
import com.projectkorra.projectkorra.airbending.AirMethods;
import com.projectkorra.projectkorra.util.ParticleEffect;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -17,7 +10,15 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
public class Combustion extends CoreAbility { import com.projectkorra.projectkorra.BendingPlayer;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.ability.AvatarState;
import com.projectkorra.projectkorra.airbending.AirMethods;
import com.projectkorra.projectkorra.configuration.ConfigLoadable;
import com.projectkorra.projectkorra.util.ParticleEffect;
public class Combustion implements ConfigLoadable {
public static long chargeTime = config.get().getLong("Abilities.Fire.Combustion.ChargeTime"); public static long chargeTime = config.get().getLong("Abilities.Fire.Combustion.ChargeTime");
public static long cooldown = config.get().getLong("Abilities.Fire.Combustion.Cooldown"); public static long cooldown = config.get().getLong("Abilities.Fire.Combustion.Cooldown");
@ -29,6 +30,8 @@ public class Combustion extends CoreAbility {
public static double radius = config.get().getDouble("Abilities.Fire.Combustion.Radius"); public static double radius = config.get().getDouble("Abilities.Fire.Combustion.Radius");
public static double defaultdamage = config.get().getDouble("Abilities.Fire.Combustion.Damage"); public static double defaultdamage = config.get().getDouble("Abilities.Fire.Combustion.Damage");
public static ConcurrentHashMap<Player, Combustion> instances = new ConcurrentHashMap<>();
private static final int maxticks = 10000; private static final int maxticks = 10000;
private Location location; private Location location;
@ -48,7 +51,7 @@ public class Combustion extends CoreAbility {
public Combustion(Player player) { public Combustion(Player player) {
/* Initial Checks */ /* Initial Checks */
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if (containsPlayer(player, Combustion.class)) if (instances.containsKey(player))
return; return;
if (bPlayer.isOnCooldown("Combustion")) if (bPlayer.isOnCooldown("Combustion"))
return; return;
@ -74,22 +77,20 @@ public class Combustion extends CoreAbility {
return; return;
} }
//instances.put(player, this); instances.put(player, this);
putInstance(player, this);
bPlayer.addCooldown("Combustion", cooldown); bPlayer.addCooldown("Combustion", cooldown);
} }
public static void explode(Player player) { public static void explode(Player player) {
if (containsPlayer(player, Combustion.class)) { if (instances.containsKey(player)) {
Combustion combustion = (Combustion) getAbilityFromPlayer(player, Combustion.class); Combustion combustion = instances.get(player);
combustion.createExplosion(combustion.location, combustion.power, breakblocks); combustion.createExplosion(combustion.location, combustion.power, breakblocks);
ParticleEffect.EXPLODE.display(combustion.location, (float) Math.random(), (float) Math.random(), (float) Math.random(), 0, 3); ParticleEffect.EXPLODE.display(combustion.location, (float) Math.random(), (float) Math.random(), (float) Math.random(), 0, 3);
} }
} }
public static boolean removeAroundPoint(Location loc, double radius) { public static boolean removeAroundPoint(Location loc, double radius) {
for (Integer id : getInstances(StockAbility.Combustion).keySet()) { for (Combustion combustion : instances.values()) {
Combustion combustion = (Combustion) getAbility(id);
if (combustion.location.getWorld() == loc.getWorld()) { if (combustion.location.getWorld() == loc.getWorld()) {
if (combustion.location.distance(loc) <= radius) { if (combustion.location.distance(loc) <= radius) {
explode(combustion.getPlayer()); explode(combustion.getPlayer());
@ -124,14 +125,8 @@ public class Combustion extends CoreAbility {
} }
@Override
public StockAbility getStockAbility() {
return StockAbility.Combustion;
}
@Override
public boolean progress() { public boolean progress() {
if (!containsPlayer(player, Combustion.class)) { if (!instances.containsKey(player)) {
return false; return false;
} }
@ -199,8 +194,11 @@ public class Combustion extends CoreAbility {
defaultdamage = config.get().getDouble("Abilities.Fire.Combustion.Damage"); defaultdamage = config.get().getDouble("Abilities.Fire.Combustion.Damage");
} }
// private void launchFireball() { public void remove() {
// fireballs.add(player.launchProjectile(org.bukkit.entity.Fireball.class).getEntityId()); instances.remove(player);
// } }
public Player getPlayer() {
return player;
}
} }

View file

@ -1,21 +1,21 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.GeneralMethods; import java.util.Arrays;
import com.projectkorra.projectkorra.ability.api.AddonAbility; import java.util.HashMap;
import com.projectkorra.projectkorra.util.ParticleEffect; import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.Arrays; import com.projectkorra.projectkorra.GeneralMethods;
import java.util.HashMap; import com.projectkorra.projectkorra.util.ParticleEffect;
/** /**
* Used in {@link HeatControl}. * Used in {@link HeatControl}.
*/ */
public class Cook extends AddonAbility { public class Cook {
public static final ConcurrentHashMap<Player, Cook> instances = new ConcurrentHashMap<>();
private static final long COOK_TIME = 2000; private static final long COOK_TIME = 2000;
private static final Material[] cookables = { Material.RAW_BEEF, private static final Material[] cookables = { Material.RAW_BEEF,
Material.RAW_CHICKEN, Material.RAW_FISH, Material.PORK, Material.RAW_CHICKEN, Material.RAW_FISH, Material.PORK,
@ -32,8 +32,7 @@ public class Cook extends AddonAbility {
items = player.getItemInHand(); items = player.getItemInHand();
time = System.currentTimeMillis(); time = System.currentTimeMillis();
if (isCookable(items.getType())) { if (isCookable(items.getType())) {
//instances.put(player, this); instances.put(player, this);
putInstance(player, this);
} }
} }
@ -104,7 +103,6 @@ public class Cook extends AddonAbility {
return time; return time;
} }
@Override
public boolean progress() { public boolean progress() {
if (player.isDead() || !player.isOnline()) { if (player.isDead() || !player.isOnline()) {
remove(); remove();
@ -139,8 +137,6 @@ public class Cook extends AddonAbility {
return true; return true;
} }
@Override
public void reloadVariables() {}
public void setCooktime(long cooktime) { public void setCooktime(long cooktime) {
this.cooktime = cooktime; this.cooktime = cooktime;
@ -150,4 +146,8 @@ public class Cook extends AddonAbility {
this.time = time; this.time = time;
} }
public void remove() {
instances.remove(player);
}
} }

View file

@ -1,17 +1,9 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.BendingPlayer; import java.util.ArrayList;
import com.projectkorra.projectkorra.GeneralMethods; import java.util.List;
import com.projectkorra.projectkorra.ProjectKorra; import java.util.Random;
import com.projectkorra.projectkorra.ability.AvatarState; import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.projectkorra.ability.StockAbility;
import com.projectkorra.projectkorra.ability.api.CoreAbility;
import com.projectkorra.projectkorra.airbending.AirMethods;
import com.projectkorra.projectkorra.earthbending.EarthBlast;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.waterbending.Plantbending;
import com.projectkorra.projectkorra.waterbending.WaterManipulation;
import com.projectkorra.projectkorra.waterbending.WaterMethods;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -23,18 +15,29 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.ArrayList; import com.projectkorra.projectkorra.BendingPlayer;
import java.util.List; import com.projectkorra.projectkorra.GeneralMethods;
import java.util.Random; import com.projectkorra.projectkorra.ProjectKorra;
import java.util.concurrent.ConcurrentHashMap; import com.projectkorra.projectkorra.ability.AvatarState;
import com.projectkorra.projectkorra.airbending.AirMethods;
import com.projectkorra.projectkorra.configuration.ConfigLoadable;
import com.projectkorra.projectkorra.earthbending.EarthBlast;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.waterbending.Plantbending;
import com.projectkorra.projectkorra.waterbending.WaterManipulation;
import com.projectkorra.projectkorra.waterbending.WaterMethods;
public class FireBlast extends CoreAbility { public class FireBlast implements ConfigLoadable {
public static ConcurrentHashMap<Integer, FireBlast> instances = new ConcurrentHashMap<>();
private static double SPEED = config.get().getDouble("Abilities.Fire.FireBlast.Speed"); private static double SPEED = config.get().getDouble("Abilities.Fire.FireBlast.Speed");
private static double PUSH_FACTOR = config.get().getDouble("Abilities.Fire.FireBlast.Push"); private static double PUSH_FACTOR = config.get().getDouble("Abilities.Fire.FireBlast.Push");
private static double RANGE = config.get().getDouble("Abilities.Fire.FireBlast.Range"); private static double RANGE = config.get().getDouble("Abilities.Fire.FireBlast.Range");
private static int DAMAGE = config.get().getInt("Abilities.Fire.FireBlast.Damage"); private static int DAMAGE = config.get().getInt("Abilities.Fire.FireBlast.Damage");
private static double fireticks = config.get().getDouble("Abilities.Fire.FireBlast.FireTicks"); private static double fireticks = config.get().getDouble("Abilities.Fire.FireBlast.FireTicks");
private static int idCounter = 0;
/* Package visible variables */ /* Package visible variables */
static boolean dissipate = config.get().getBoolean("Abilities.Fire.FireBlast.Dissipate"); static boolean dissipate = config.get().getBoolean("Abilities.Fire.FireBlast.Dissipate");
/* End Package visible variables */ /* End Package visible variables */
@ -54,6 +57,7 @@ public class FireBlast extends CoreAbility {
private Player player; private Player player;
private double speedfactor; private double speedfactor;
private int ticks = 0; private int ticks = 0;
private int id = 0;
private double range = RANGE; private double range = RANGE;
private double damage = DAMAGE; private double damage = DAMAGE;
private double speed = SPEED; private double speed = SPEED;
@ -77,8 +81,9 @@ public class FireBlast extends CoreAbility {
origin = location.clone(); origin = location.clone();
this.direction = direction.clone().normalize(); this.direction = direction.clone().normalize();
this.damage *= 1.5; this.damage *= 1.5;
//instances.put(id, this); instances.put(idCounter, this);
putInstance(player, this); this.id = idCounter;
idCounter = (idCounter + 1) % Integer.MAX_VALUE;
} }
public FireBlast(Player player) { public FireBlast(Player player) {
@ -97,8 +102,9 @@ public class FireBlast extends CoreAbility {
origin = player.getEyeLocation(); origin = player.getEyeLocation();
direction = player.getEyeLocation().getDirection().normalize(); direction = player.getEyeLocation().getDirection().normalize();
location = location.add(direction.clone()); location = location.add(direction.clone());
//instances.put(id, this); instances.put(idCounter, this);
putInstance(player, this); this.id = idCounter;
idCounter = (idCounter + 1) % Integer.MAX_VALUE;
bPlayer.addCooldown("FireBlast", cooldown); bPlayer.addCooldown("FireBlast", cooldown);
// time = System.currentTimeMillis(); // time = System.currentTimeMillis();
// timers.put(player, System.currentTimeMillis()); // timers.put(player, System.currentTimeMillis());
@ -106,9 +112,7 @@ public class FireBlast extends CoreAbility {
public static boolean annihilateBlasts(Location location, double radius, Player source) { public static boolean annihilateBlasts(Location location, double radius, Player source) {
boolean broke = false; boolean broke = false;
ConcurrentHashMap<Integer, CoreAbility> instances = getInstances(FireBlast.class); for (FireBlast blast : instances.values()) {
for (Integer id : instances.keySet()) {
FireBlast blast = (FireBlast) instances.get(id);
Location fireblastlocation = blast.location; Location fireblastlocation = blast.location;
if (location.getWorld() == fireblastlocation.getWorld() && !blast.player.equals(source)) { if (location.getWorld() == fireblastlocation.getWorld() && !blast.player.equals(source)) {
if (location.distance(fireblastlocation) <= radius) { if (location.distance(fireblastlocation) <= radius) {
@ -124,9 +128,7 @@ public class FireBlast extends CoreAbility {
public static ArrayList<FireBlast> getAroundPoint(Location location, double radius) { public static ArrayList<FireBlast> getAroundPoint(Location location, double radius) {
ArrayList<FireBlast> list = new ArrayList<FireBlast>(); ArrayList<FireBlast> list = new ArrayList<FireBlast>();
ConcurrentHashMap<Integer, CoreAbility> instances = getInstances(FireBlast.class); for (FireBlast fireBlast : instances.values()) {
for (Integer id : instances.keySet()) {
FireBlast fireBlast = (FireBlast) instances.get(id);
Location fireblastlocation = fireBlast.location; Location fireblastlocation = fireBlast.location;
if (location.getWorld() == fireblastlocation.getWorld()) { if (location.getWorld() == fireblastlocation.getWorld()) {
if (location.distance(fireblastlocation) <= radius) if (location.distance(fireblastlocation) <= radius)
@ -141,8 +143,7 @@ public class FireBlast extends CoreAbility {
} }
public static void removeFireBlastsAroundPoint(Location location, double radius) { public static void removeFireBlastsAroundPoint(Location location, double radius) {
for (Integer id : getInstances(StockAbility.FireBlast).keySet()) { for (FireBlast fireBlast : instances.values()) {
FireBlast fireBlast = ((FireBlast)getAbility(id));
Location fireblastlocation = fireBlast.location; Location fireblastlocation = fireBlast.location;
if (location.getWorld() == fireblastlocation.getWorld()) { if (location.getWorld() == fireblastlocation.getWorld()) {
if (location.distance(fireblastlocation) <= radius) if (location.distance(fireblastlocation) <= radius)
@ -193,11 +194,6 @@ public class FireBlast extends CoreAbility {
return damage; return damage;
} }
@Override
public InstanceType getInstanceType() {
return InstanceType.MULTIPLE;
}
public Player getPlayer() { public Player getPlayer() {
return player; return player;
} }
@ -214,11 +210,6 @@ public class FireBlast extends CoreAbility {
return speed; return speed;
} }
@Override
public StockAbility getStockAbility() {
return StockAbility.FireBlast;
}
private void ignite(Location location) { private void ignite(Location location) {
for (Block block : GeneralMethods.getBlocksAroundPoint(location, affectingradius)) { for (Block block : GeneralMethods.getBlocksAroundPoint(location, affectingradius)) {
if (FireStream.isIgnitable(player, block) && !safe.contains(block)) { if (FireStream.isIgnitable(player, block) && !safe.contains(block)) {
@ -239,7 +230,6 @@ public class FireBlast extends CoreAbility {
} }
} }
@Override
public boolean progress() { public boolean progress() {
if (player.isDead() || !player.isOnline()) { if (player.isDead() || !player.isOnline()) {
remove(); remove();
@ -312,6 +302,10 @@ public class FireBlast extends CoreAbility {
return true; return true;
} }
public void remove() {
instances.remove(id);
}
@Override @Override
public void reloadVariables() { public void reloadVariables() {
SPEED = config.get().getDouble("Abilities.Fire.FireBlast.Speed"); SPEED = config.get().getDouble("Abilities.Fire.FireBlast.Speed");

View file

@ -1,12 +1,8 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.BendingManager; import java.util.ArrayList;
import com.projectkorra.projectkorra.BendingPlayer; import java.util.List;
import com.projectkorra.projectkorra.GeneralMethods; import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.ability.AvatarState;
import com.projectkorra.projectkorra.ability.StockAbility;
import com.projectkorra.projectkorra.ability.api.CoreAbility;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.Location; import org.bukkit.Location;
@ -15,10 +11,15 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.ArrayList; import com.projectkorra.projectkorra.BendingManager;
import java.util.List; import com.projectkorra.projectkorra.BendingPlayer;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.ability.AvatarState;
import com.projectkorra.projectkorra.configuration.ConfigLoadable;
public class FireBurst extends CoreAbility { public class FireBurst implements ConfigLoadable {
public static final ConcurrentHashMap<Player, FireBurst> instances = new ConcurrentHashMap<>();
private static double PARTICLES_PERCENTAGE = 5; private static double PARTICLES_PERCENTAGE = 5;
private Player player; private Player player;
@ -36,7 +37,7 @@ public class FireBurst extends CoreAbility {
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if (bPlayer.isOnCooldown("FireBurst")) if (bPlayer.isOnCooldown("FireBurst"))
return; return;
if (containsPlayer(player, FireBurst.class)) if (instances.containsKey(player))
return; return;
/* End Initial Checks */ /* End Initial Checks */
//reloadVariables(); //reloadVariables();
@ -52,13 +53,13 @@ public class FireBurst extends CoreAbility {
chargetime = 0; chargetime = 0;
} }
this.player = player; this.player = player;
//instances.put(player, this); instances.put(player, this);
putInstance(player, this);
} }
public static void coneBurst(Player player) { public static void coneBurst(Player player) {
if (containsPlayer(player, FireBurst.class)) if (instances.containsKey(player)) {
((FireBurst) getAbilityFromPlayer(player, FireBurst.class)).coneBurst(); ((FireBurst) instances.get(player)).coneBurst();
}
} }
public static String getDescription() { public static String getDescription() {
@ -111,9 +112,8 @@ public class FireBurst extends CoreAbility {
return range; return range;
} }
@Override public void remove() {
public StockAbility getStockAbility() { instances.remove(player);
return StockAbility.FireBurst;
} }
/** /**
@ -133,7 +133,6 @@ public class FireBurst extends CoreAbility {
} }
} }
@Override
public boolean progress() { public boolean progress() {
if (!GeneralMethods.canBend(player.getName(), "FireBurst")) { if (!GeneralMethods.canBend(player.getName(), "FireBurst")) {
remove(); remove();

View file

@ -1,23 +1,23 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.BendingPlayer; import java.util.ArrayList;
import com.projectkorra.projectkorra.GeneralMethods; import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.projectkorra.ability.AvatarState;
import com.projectkorra.projectkorra.ability.StockAbility;
import com.projectkorra.projectkorra.ability.api.CoreAbility;
import com.projectkorra.projectkorra.util.Flight;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.waterbending.WaterMethods;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.ArrayList; import com.projectkorra.projectkorra.BendingPlayer;
import com.projectkorra.projectkorra.GeneralMethods;
public class FireJet extends CoreAbility { import com.projectkorra.projectkorra.ability.AvatarState;
import com.projectkorra.projectkorra.configuration.ConfigLoadable;
import com.projectkorra.projectkorra.util.Flight;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.waterbending.WaterMethods;
public class FireJet implements ConfigLoadable {
public static final ConcurrentHashMap<Player, FireJet> instances = new ConcurrentHashMap<>();
private static double defaultfactor = config.get().getDouble("Abilities.Fire.FireJet.Speed"); private static double defaultfactor = config.get().getDouble("Abilities.Fire.FireJet.Speed");
private static long defaultduration = config.get().getLong("Abilities.Fire.FireJet.Duration"); private static long defaultduration = config.get().getLong("Abilities.Fire.FireJet.Duration");
private static boolean isToggle = config.get().getBoolean("Abilities.Fire.FireJet.IsAvatarStateToggle"); private static boolean isToggle = config.get().getBoolean("Abilities.Fire.FireJet.IsAvatarStateToggle");
@ -29,8 +29,8 @@ public class FireJet extends CoreAbility {
public FireJet(Player player) { public FireJet(Player player) {
/* Initial Checks */ /* Initial Checks */
if (containsPlayer(player, FireJet.class)) { if (instances.containsKey(player)) {
getAbilityFromPlayer(player, FireJet.class).remove(); instances.get(player).remove();
return; return;
} }
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
@ -40,7 +40,6 @@ public class FireJet extends CoreAbility {
//reloadVariables(); //reloadVariables();
factor = FireMethods.getFirebendingDayAugment(defaultfactor, player.getWorld()); factor = FireMethods.getFirebendingDayAugment(defaultfactor, player.getWorld());
GeneralMethods.invincible.add(this);
Block block = player.getLocation().getBlock(); Block block = player.getLocation().getBlock();
if (FireStream.isIgnitable(player, block) || block.getType() == Material.AIR || AvatarState.isAvatarState(player)) { if (FireStream.isIgnitable(player, block) || block.getType() == Material.AIR || AvatarState.isAvatarState(player)) {
player.setVelocity(player.getEyeLocation().getDirection().clone().normalize().multiply(factor)); player.setVelocity(player.getEyeLocation().getDirection().clone().normalize().multiply(factor));
@ -54,15 +53,14 @@ public class FireJet extends CoreAbility {
player.setAllowFlight(true); player.setAllowFlight(true);
time = System.currentTimeMillis(); time = System.currentTimeMillis();
// timers.put(player, time); // timers.put(player, time);
//instances.put(player, this); instances.put(player, this);
putInstance(player, this);
bPlayer.addCooldown("FireJet", config.get().getLong("Abilities.Fire.FireJet.Cooldown")); bPlayer.addCooldown("FireJet", config.get().getLong("Abilities.Fire.FireJet.Cooldown"));
} }
} }
public static boolean checkTemporaryImmunity(Player player) { public static boolean checkTemporaryImmunity(Player player) {
if (containsPlayer(player, FireJet.class)) { if (instances.containsKey(player)) {
return true; return true;
} }
return false; return false;
@ -70,8 +68,8 @@ public class FireJet extends CoreAbility {
public static ArrayList<Player> getPlayers() { public static ArrayList<Player> getPlayers() {
ArrayList<Player> players = new ArrayList<Player>(); ArrayList<Player> players = new ArrayList<Player>();
for (Integer id : getInstances(StockAbility.FireJet).keySet()) { for (FireJet jet : instances.values()) {
players.add(getAbility(id).getPlayer()); players.add(jet.getPlayer());
} }
return players; return players;
} }
@ -88,12 +86,6 @@ public class FireJet extends CoreAbility {
return player; return player;
} }
@Override
public StockAbility getStockAbility() {
return StockAbility.FireJet;
}
@Override
public boolean progress() { public boolean progress() {
if (player.isDead() || !player.isOnline()) { if (player.isDead() || !player.isOnline()) {
// player.setAllowFlight(canfly); // player.setAllowFlight(canfly);
@ -132,10 +124,8 @@ public class FireJet extends CoreAbility {
isToggle = config.get().getBoolean("Abilities.Fire.FireJet.IsAvatarStateToggle"); isToggle = config.get().getBoolean("Abilities.Fire.FireJet.IsAvatarStateToggle");
} }
@Override
public void remove() { public void remove() {
super.remove(); instances.remove(player);
GeneralMethods.invincible.remove(this);
} }
public void setDuration(long duration) { public void setDuration(long duration) {

View file

@ -1,12 +1,7 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.BendingPlayer; import java.util.ArrayList;
import com.projectkorra.projectkorra.GeneralMethods; import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.projectkorra.ability.StockAbility;
import com.projectkorra.projectkorra.ability.api.CoreAbility;
import com.projectkorra.projectkorra.earthbending.EarthBlast;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.waterbending.WaterManipulation;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.Location; import org.bukkit.Location;
@ -18,10 +13,16 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.ArrayList; import com.projectkorra.projectkorra.BendingPlayer;
import com.projectkorra.projectkorra.GeneralMethods;
public class FireShield extends CoreAbility { import com.projectkorra.projectkorra.ability.StockAbility;
import com.projectkorra.projectkorra.configuration.ConfigLoadable;
import com.projectkorra.projectkorra.earthbending.EarthBlast;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.waterbending.WaterManipulation;
public class FireShield implements ConfigLoadable {
public static final ConcurrentHashMap<Player, FireShield> instances = new ConcurrentHashMap<>();
private static long interval = 100; private static long interval = 100;
private static long DURATION = config.get().getLong("Abilities.Fire.FireShield.Duration"); private static long DURATION = config.get().getLong("Abilities.Fire.FireShield.Duration");
private static double RADIUS = config.get().getDouble("Abilities.Fire.FireShield.Radius"); private static double RADIUS = config.get().getDouble("Abilities.Fire.FireShield.Radius");
@ -43,7 +44,7 @@ public class FireShield extends CoreAbility {
public FireShield(Player player, boolean shield) { public FireShield(Player player, boolean shield) {
/* Initial Checks */ /* Initial Checks */
if (containsPlayer(player, FireShield.class)) if (instances.containsKey(player))
return; return;
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
if (bPlayer.isOnCooldown("FireShield")) if (bPlayer.isOnCooldown("FireShield"))
@ -56,8 +57,7 @@ public class FireShield extends CoreAbility {
if (!player.getEyeLocation().getBlock().isLiquid()) { if (!player.getEyeLocation().getBlock().isLiquid()) {
time = System.currentTimeMillis(); time = System.currentTimeMillis();
starttime = time; starttime = time;
//instances.put(player, this); instances.put(player, this);
putInstance(player, this);
if (!shield) if (!shield)
bPlayer.addCooldown("FireShield", GeneralMethods.getGlobalCooldown()); bPlayer.addCooldown("FireShield", GeneralMethods.getGlobalCooldown());
} }
@ -68,8 +68,7 @@ public class FireShield extends CoreAbility {
} }
public static boolean isWithinShield(Location loc) { public static boolean isWithinShield(Location loc) {
for (Integer id : getInstances(StockAbility.FireShield).keySet()) { for (FireShield fshield : instances.values()) {
FireShield fshield = (FireShield) getAbility(id);
Location playerLoc = fshield.player.getLocation(); Location playerLoc = fshield.player.getLocation();
if (fshield.shield) { if (fshield.shield) {
@ -108,7 +107,6 @@ public class FireShield extends CoreAbility {
return radius; return radius;
} }
@Override
public StockAbility getStockAbility() { public StockAbility getStockAbility() {
return StockAbility.FireShield; return StockAbility.FireShield;
} }
@ -117,7 +115,6 @@ public class FireShield extends CoreAbility {
return shield; return shield;
} }
@Override
public boolean progress() { public boolean progress() {
if (((!player.isSneaking()) && shield) || !GeneralMethods.canBend(player.getName(), "FireShield")) { if (((!player.isSneaking()) && shield) || !GeneralMethods.canBend(player.getName(), "FireShield")) {
remove(); remove();
@ -240,6 +237,10 @@ public class FireShield extends CoreAbility {
return true; return true;
} }
public void remove() {
instances.remove(player);
}
@Override @Override
public void reloadVariables() { public void reloadVariables() {
DURATION = config.get().getLong("Abilities.Fire.FireShield.Duration"); DURATION = config.get().getLong("Abilities.Fire.FireShield.Duration");

View file

@ -1,9 +1,8 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.ability.api.AddonAbility; import java.util.Arrays;
import com.projectkorra.projectkorra.ability.api.CoreAbility; import java.util.Iterator;
import com.projectkorra.projectkorra.waterbending.Plantbending; import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.projectkorra.waterbending.WaterMethods;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -14,11 +13,12 @@ import org.bukkit.entity.Player;
import org.bukkit.material.MaterialData; import org.bukkit.material.MaterialData;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.Arrays; import com.projectkorra.projectkorra.configuration.ConfigLoadable;
import java.util.concurrent.ConcurrentHashMap; import com.projectkorra.projectkorra.waterbending.Plantbending;
import com.projectkorra.projectkorra.waterbending.WaterMethods;
public class FireStream extends AddonAbility {
public class FireStream implements ConfigLoadable {
public static final ConcurrentHashMap<Integer, FireStream> instances = new ConcurrentHashMap<>();
public static ConcurrentHashMap<Block, Player> ignitedblocks = new ConcurrentHashMap<Block, Player>(); public static ConcurrentHashMap<Block, Player> ignitedblocks = new ConcurrentHashMap<Block, Player>();
public static ConcurrentHashMap<Block, Long> ignitedtimes = new ConcurrentHashMap<Block, Long>(); public static ConcurrentHashMap<Block, Long> ignitedtimes = new ConcurrentHashMap<Block, Long>();
public static ConcurrentHashMap<Location, MaterialData> replacedBlocks = new ConcurrentHashMap<Location, MaterialData>(); public static ConcurrentHashMap<Location, MaterialData> replacedBlocks = new ConcurrentHashMap<Location, MaterialData>();
@ -31,6 +31,7 @@ public class FireStream extends AddonAbility {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private static int tickdamage = 2; private static int tickdamage = 2;
private static int idCounter = 0;
private static double speed = 15; private static double speed = 15;
private static long interval = (long) (1000. / speed); private static long interval = (long) (1000. / speed);
private static long dissipateAfter = 400; private static long dissipateAfter = 400;
@ -41,6 +42,7 @@ public class FireStream extends AddonAbility {
private Vector direction; private Vector direction;
private long time; private long time;
private double range; private double range;
private int id;
public FireStream(Location location, Vector direction, Player player, int range) { public FireStream(Location location, Vector direction, Player player, int range) {
this.range = FireMethods.getFirebendingDayAugment(range, player.getWorld()); this.range = FireMethods.getFirebendingDayAugment(range, player.getWorld());
@ -52,8 +54,9 @@ public class FireStream extends AddonAbility {
this.direction = this.direction.clone().normalize(); this.direction = this.direction.clone().normalize();
this.location = this.location.clone().add(this.direction); this.location = this.location.clone().add(this.direction);
time = System.currentTimeMillis(); time = System.currentTimeMillis();
//instances.put(id, this); instances.put(idCounter, this);
putInstance(player, this); this.id = idCounter;
idCounter = (idCounter + 1) % Integer.MAX_VALUE;
} }
public static void dissipateAll() { public static void dissipateAll() {
@ -111,15 +114,19 @@ public class FireStream extends AddonAbility {
} }
} }
public static void removeAll(Class<? extends CoreAbility> abilityClass) { public static void removeAll() {
for (Block block : ignitedblocks.keySet()) for (Block block : ignitedblocks.keySet())
remove(block); remove(block);
AddonAbility.removeAll(abilityClass);
Iterator<Integer> iter = instances.keySet().iterator();
while (iter.hasNext()) {
Integer key = iter.next();
instances.get(key).remove();
}
} }
public static void removeAroundPoint(Location location, double radius) { public static void removeAroundPoint(Location location, double radius) {
for (int id : getInstances(FireStream.class).keySet()) { for (FireStream stream : instances.values()) {
FireStream stream = (FireStream) getAbility(id);
if (stream.location.getWorld().equals(location.getWorld())) if (stream.location.getWorld().equals(location.getWorld()))
if (stream.location.distance(location) <= radius) if (stream.location.distance(location) <= radius)
stream.remove(); stream.remove();
@ -127,11 +134,6 @@ public class FireStream extends AddonAbility {
} }
@Override
public InstanceType getInstanceType() {
return InstanceType.MULTIPLE;
}
public Player getPlayer() { public Player getPlayer() {
return player; return player;
} }
@ -154,7 +156,6 @@ public class FireStream extends AddonAbility {
ignitedtimes.put(block, System.currentTimeMillis()); ignitedtimes.put(block, System.currentTimeMillis());
} }
@Override
public boolean progress() { public boolean progress() {
if (System.currentTimeMillis() - time >= interval) { if (System.currentTimeMillis() - time >= interval) {
location = location.clone().add(direction); location = location.clone().add(direction);
@ -184,6 +185,10 @@ public class FireStream extends AddonAbility {
return false; return false;
} }
public void remove() {
instances.remove(id);
}
@Override @Override
public void reloadVariables() { public void reloadVariables() {
soonesttime = config.get().getLong("Properties.GlobalCooldown"); soonesttime = config.get().getLong("Properties.GlobalCooldown");

View file

@ -1,10 +1,7 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.GeneralMethods; import java.util.List;
import com.projectkorra.projectkorra.ability.AvatarState; import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.projectkorra.ability.api.AddonAbility;
import com.projectkorra.projectkorra.airbending.AirMethods;
import com.projectkorra.projectkorra.util.ParticleEffect;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.Location; import org.bukkit.Location;
@ -17,19 +14,24 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.List; import com.projectkorra.projectkorra.GeneralMethods;
import java.util.concurrent.ConcurrentHashMap; import com.projectkorra.projectkorra.ability.AvatarState;
import com.projectkorra.projectkorra.airbending.AirMethods;
import com.projectkorra.projectkorra.configuration.ConfigLoadable;
import com.projectkorra.projectkorra.util.ParticleEffect;
/** /**
* Ability charged FireBlast * Ability charged FireBlast
*/ */
public class Fireball extends AddonAbility { public class Fireball implements ConfigLoadable {
public static final ConcurrentHashMap<Integer, Fireball> instances = new ConcurrentHashMap<>();
private static ConcurrentHashMap<Entity, Fireball> explosions = new ConcurrentHashMap<Entity, Fireball>(); private static ConcurrentHashMap<Entity, Fireball> explosions = new ConcurrentHashMap<Entity, Fireball>();
private static long defaultchargetime = config.get().getLong("Abilities.Fire.FireBlast.Charged.ChargeTime"); private static long defaultchargetime = config.get().getLong("Abilities.Fire.FireBlast.Charged.ChargeTime");
private static long interval = 25; private static long interval = 25;
private static double radius = 1.5; private static double radius = 1.5;
private static int idCounter = 0;
private static double MAX_DAMAGE = config.get().getDouble("Abilities.Fire.FireBlast.Charged.Damage"); private static double MAX_DAMAGE = config.get().getDouble("Abilities.Fire.FireBlast.Charged.Damage");
private static double DAMAGE_RADIUS = config.get().getDouble("Abilities.Fire.FireBlast.Charged.DamageRadius"); private static double DAMAGE_RADIUS = config.get().getDouble("Abilities.Fire.FireBlast.Charged.DamageRadius");
@ -38,6 +40,7 @@ public class Fireball extends AddonAbility {
private static boolean DAMAGEBLOCKS = config.get().getBoolean("Abilities.Fire.FireBlast.Charged.DamageBlocks"); private static boolean DAMAGEBLOCKS = config.get().getBoolean("Abilities.Fire.FireBlast.Charged.DamageBlocks");
private static double fireticks = config.get().getDouble("Abilities.Fire.FireBlast.Charged.FireTicks"); private static double fireticks = config.get().getDouble("Abilities.Fire.FireBlast.Charged.FireTicks");
private int id;
private double maxdamage = MAX_DAMAGE; private double maxdamage = MAX_DAMAGE;
private double range = RANGE; private double range = RANGE;
private double damageradius = DAMAGE_RADIUS; private double damageradius = DAMAGE_RADIUS;
@ -56,7 +59,6 @@ public class Fireball extends AddonAbility {
private boolean damage_blocks; private boolean damage_blocks;
public Fireball(Player player) { public Fireball(Player player) {
//reloadVariables();
this.player = player; this.player = player;
time = System.currentTimeMillis(); time = System.currentTimeMillis();
starttime = time; starttime = time;
@ -69,15 +71,15 @@ public class Fireball extends AddonAbility {
} }
range = FireMethods.getFirebendingDayAugment(range, player.getWorld()); range = FireMethods.getFirebendingDayAugment(range, player.getWorld());
if (!player.getEyeLocation().getBlock().isLiquid()) { if (!player.getEyeLocation().getBlock().isLiquid()) {
//instances.put(id, this); instances.put(idCounter, this);
putInstance(player, this); this.id = idCounter;
idCounter = (idCounter + 1) % Integer.MAX_VALUE;
} }
} }
public static boolean annihilateBlasts(Location location, double radius, Player source) { public static boolean annihilateBlasts(Location location, double radius, Player source) {
boolean broke = false; boolean broke = false;
for (Integer id : getInstances(Fireball.class).keySet()) { for (Fireball fireball : instances.values()) {
Fireball fireball = (Fireball) getAbility(id);
if (!fireball.launched) if (!fireball.launched)
continue; continue;
Location fireblastlocation = fireball.location; Location fireblastlocation = fireball.location;
@ -100,8 +102,7 @@ public class Fireball extends AddonAbility {
} }
public static boolean isCharging(Player player) { public static boolean isCharging(Player player) {
for (Integer id : getInstances(Fireball.class).keySet()) { for (Fireball fireball : instances.values()) {
Fireball fireball = (Fireball) getAbility(id);
if (fireball.player == player && !fireball.launched) if (fireball.player == player && !fireball.launched)
return true; return true;
} }
@ -109,8 +110,7 @@ public class Fireball extends AddonAbility {
} }
public static void removeFireballsAroundPoint(Location location, double radius) { public static void removeFireballsAroundPoint(Location location, double radius) {
for (Integer id : getInstances(Fireball.class).keySet()) { for (Fireball fireball : instances.values()) {
Fireball fireball = (Fireball) getAbility(id);
if (!fireball.launched) if (!fireball.launched)
continue; continue;
Location fireblastlocation = fireball.location; Location fireblastlocation = fireball.location;
@ -237,11 +237,6 @@ public class Fireball extends AddonAbility {
return innerradius; return innerradius;
} }
@Override
public InstanceType getInstanceType() {
return InstanceType.MULTIPLE;
}
public double getMaxdamage() { public double getMaxdamage() {
return maxdamage; return maxdamage;
} }
@ -269,7 +264,6 @@ public class Fireball extends AddonAbility {
} }
} }
@Override
public boolean progress() { public boolean progress() {
if (GeneralMethods.getBoundAbility(player) == null) { if (GeneralMethods.getBoundAbility(player) == null) {
remove(); remove();
@ -338,6 +332,10 @@ public class Fireball extends AddonAbility {
return true; return true;
} }
public void remove() {
instances.remove(this.id);
}
@Override @Override
public void reloadVariables() { public void reloadVariables() {
defaultchargetime = config.get().getLong("Abilities.Fire.FireBlast.Charged.ChargeTime"); defaultchargetime = config.get().getLong("Abilities.Fire.FireBlast.Charged.ChargeTime");

View file

@ -1,25 +1,26 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.GeneralMethods; import java.util.ArrayList;
import com.projectkorra.projectkorra.ProjectKorra; import java.util.List;
import com.projectkorra.projectkorra.ability.StockAbility; import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.projectkorra.ability.api.CoreAbility;
import com.projectkorra.projectkorra.earthbending.EarthMethods;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.util.TempBlock;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.ArrayList; import com.projectkorra.projectkorra.GeneralMethods;
import java.util.List; import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.configuration.ConfigLoadable;
import com.projectkorra.projectkorra.earthbending.EarthMethods;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.util.TempBlock;
/** /**
* Created by Carbogen on 11/02/15. Ability HeatControl * Created by Carbogen on 11/02/15. Ability HeatControl
*/ */
public class HeatControl extends CoreAbility { public class HeatControl implements ConfigLoadable {
public static final ConcurrentHashMap<Player, HeatControl> instances = new ConcurrentHashMap<>();
public static double RANGE = config.get().getDouble("Abilities.Fire.HeatControl.Solidify.Range"); public static double RANGE = config.get().getDouble("Abilities.Fire.HeatControl.Solidify.Range");
public static int RADIUS = config.get().getInt("Abilities.Fire.HeatControl.Solidify.Radius"); public static int RADIUS = config.get().getInt("Abilities.Fire.HeatControl.Solidify.Radius");
public static int REVERT_TIME = config.get().getInt("Abilities.Fire.HeatControl.Solidify.RevertTime"); public static int REVERT_TIME = config.get().getInt("Abilities.Fire.HeatControl.Solidify.RevertTime");
@ -52,7 +53,7 @@ public class HeatControl extends CoreAbility {
lastBlockTime = System.currentTimeMillis(); lastBlockTime = System.currentTimeMillis();
putInstance(player, this); instances.put(player, this);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@ -106,11 +107,6 @@ public class HeatControl extends CoreAbility {
return revertTime; return revertTime;
} }
@Override
public StockAbility getStockAbility() {
return StockAbility.HeatControl;
}
public boolean isEligible(Player player) { public boolean isEligible(Player player) {
if (!GeneralMethods.canBend(player.getName(), "HeatControl")) if (!GeneralMethods.canBend(player.getName(), "HeatControl"))
return false; return false;
@ -136,7 +132,6 @@ public class HeatControl extends CoreAbility {
} }
} }
@Override
public boolean progress() { public boolean progress() {
if (!player.isOnline() || player.isDead() || !isEligible(player) || !player.isSneaking()) { if (!player.isOnline() || player.isDead() || !isEligible(player) || !player.isSneaking()) {
remove(); remove();
@ -169,13 +164,12 @@ public class HeatControl extends CoreAbility {
revertTime = REVERT_TIME; revertTime = REVERT_TIME;
} }
@Override
public void remove() { public void remove() {
final HeatControl ability = this; final HeatControl ability = this;
ProjectKorra.plugin.getServer().getScheduler().scheduleSyncDelayedTask(ProjectKorra.plugin, new Runnable() { ProjectKorra.plugin.getServer().getScheduler().scheduleSyncDelayedTask(ProjectKorra.plugin, new Runnable() {
public void run() { public void run() {
revertAll(); revertAll();
ability.remove(); instances.remove(ability);
} }
}, getRevertTime()); }, getRevertTime());
} }

View file

@ -1,19 +1,19 @@
package com.projectkorra.projectkorra.firebending; package com.projectkorra.projectkorra.firebending;
import com.projectkorra.projectkorra.BendingPlayer; import java.util.concurrent.ConcurrentHashMap;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ability.StockAbility;
import com.projectkorra.projectkorra.ability.api.CoreAbility;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.concurrent.ConcurrentHashMap; import com.projectkorra.projectkorra.BendingPlayer;
import com.projectkorra.projectkorra.GeneralMethods;
public class Illumination extends CoreAbility { import com.projectkorra.projectkorra.ability.StockAbility;
import com.projectkorra.projectkorra.configuration.ConfigLoadable;
public class Illumination implements ConfigLoadable {
public static final ConcurrentHashMap<Player, Illumination> instances = new ConcurrentHashMap<>();
public static ConcurrentHashMap<Block, Player> blocks = new ConcurrentHashMap<Block, Player>(); public static ConcurrentHashMap<Block, Player> blocks = new ConcurrentHashMap<Block, Player>();
private static int range = config.get().getInt("Abilities.Fire.Illumination.Range"); private static int range = config.get().getInt("Abilities.Fire.Illumination.Range");
@ -30,14 +30,13 @@ public class Illumination extends CoreAbility {
return; return;
/* End Initial Checks */ /* End Initial Checks */
if (containsPlayer(player, Illumination.class)) { if (instances.containsKey(player)) {
getAbilityFromPlayer(player, Illumination.class).remove(); instances.get(player).remove();
} else { } else {
//reloadVariables(); //reloadVariables();
this.player = player; this.player = player;
set(); set();
//instances.put(player, this); instances.put(player, this);
putInstance(player, this);
bPlayer.addCooldown("Illumination", GeneralMethods.getGlobalCooldown()); bPlayer.addCooldown("Illumination", GeneralMethods.getGlobalCooldown());
} }
} }
@ -48,12 +47,7 @@ public class Illumination extends CoreAbility {
public static void revert(Block block) { public static void revert(Block block) {
Player player = blocks.get(block); Player player = blocks.get(block);
((Illumination) getAbilityFromPlayer(player, Illumination.class)).revert(); instances.get(player).revert();
}
@Override
public StockAbility getStockAbility() {
return StockAbility.Illumination;
} }
// public static void manage(Server server) { // public static void manage(Server server) {
@ -76,7 +70,6 @@ public class Illumination extends CoreAbility {
// } // }
// } // }
@Override
public boolean progress() { public boolean progress() {
if (!player.isOnline() || player.isDead()) { if (!player.isOnline() || player.isDead()) {
remove(); remove();
@ -96,10 +89,9 @@ public class Illumination extends CoreAbility {
range = config.get().getInt("Abilities.Fire.Illumination.Range"); range = config.get().getInt("Abilities.Fire.Illumination.Range");
} }
@Override
public void remove() { public void remove() {
revert(); revert();
super.remove(); instances.remove(player);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")