mirror of
https://github.com/TotalFreedomMC/TF-ProjectKorra.git
synced 2024-12-23 00:15:05 +00:00
New HeatControl & fixed NPE (#633)
* New HeatControl & NPE fix * Updated to latest * Cleaned up HeatControl * Updated PKListener to use HeatControlType instead of Function * Cleaned up, cleaned up HeatControl * Removed melt(...) * Final changes
This commit is contained in:
parent
5f0dace64e
commit
d34c1ffc20
11 changed files with 475 additions and 687 deletions
|
@ -579,7 +579,7 @@ public class GeneralMethods {
|
|||
BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player);
|
||||
|
||||
if (ConfigManager.defaultConfig.get().getBoolean("Properties.BendingPreview") == true) {
|
||||
if (ability != null) {
|
||||
if (ability != null && bPlayer != null) {
|
||||
|
||||
if (bPlayer.isOnCooldown(ability)) {
|
||||
displayedMessage = ability.getElement().getColor() + "" + ChatColor.STRIKETHROUGH + ability.getName();
|
||||
|
@ -1004,14 +1004,15 @@ public class GeneralMethods {
|
|||
if (avoid.contains(entity)) {
|
||||
continue;
|
||||
}
|
||||
if (entity.getLocation().distanceSquared(origin) < longestr * longestr
|
||||
&& getDistanceFromLine(direction, origin, entity.getLocation()) < 2
|
||||
&& (entity instanceof LivingEntity)
|
||||
&& entity.getEntityId() != player.getEntityId()
|
||||
&& entity.getLocation().distanceSquared(origin.clone().add(direction)) < entity.getLocation().distanceSquared(origin.clone().add(direction.clone().multiply(-1)))
|
||||
&& entity.getWorld().equals(origin.getWorld())) {
|
||||
target = entity;
|
||||
longestr = entity.getLocation().distance(origin);
|
||||
if (entity.getWorld().equals(origin.getWorld())) {
|
||||
if (entity.getLocation().distanceSquared(origin) < longestr * longestr
|
||||
&& getDistanceFromLine(direction, origin, entity.getLocation()) < 2
|
||||
&& (entity instanceof LivingEntity)
|
||||
&& entity.getEntityId() != player.getEntityId()
|
||||
&& entity.getLocation().distanceSquared(origin.clone().add(direction)) < entity.getLocation().distanceSquared(origin.clone().add(direction.clone().multiply(-1)))) {
|
||||
target = entity;
|
||||
longestr = entity.getLocation().distance(origin);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (target != null) {
|
||||
|
|
|
@ -138,8 +138,8 @@ import com.projectkorra.projectkorra.firebending.FireCombo;
|
|||
import com.projectkorra.projectkorra.firebending.FireDamageTimer;
|
||||
import com.projectkorra.projectkorra.firebending.FireJet;
|
||||
import com.projectkorra.projectkorra.firebending.FireShield;
|
||||
import com.projectkorra.projectkorra.firebending.HeatControlExtinguish;
|
||||
import com.projectkorra.projectkorra.firebending.HeatControlSolidify;
|
||||
import com.projectkorra.projectkorra.firebending.HeatControl;
|
||||
import com.projectkorra.projectkorra.firebending.HeatControl.HeatControlType;
|
||||
import com.projectkorra.projectkorra.firebending.Illumination;
|
||||
import com.projectkorra.projectkorra.firebending.Lightning;
|
||||
import com.projectkorra.projectkorra.firebending.WallOfFire;
|
||||
|
@ -794,7 +794,7 @@ public class PKListener implements Listener {
|
|||
}
|
||||
|
||||
if (bPlayer.canBendPassive(Element.FIRE) && bPlayer.hasElement(Element.FIRE) && (event.getCause() == DamageCause.FIRE || event.getCause() == DamageCause.FIRE_TICK)) {
|
||||
event.setCancelled(!HeatControlExtinguish.canBurn(player));
|
||||
event.setCancelled(!HeatControl.canBurn(player));
|
||||
}
|
||||
|
||||
if (bPlayer.hasElement(Element.EARTH) && event.getCause() == DamageCause.SUFFOCATION && TempBlock.isTempBlock(player.getEyeLocation().getBlock())) {
|
||||
|
@ -1345,7 +1345,7 @@ public class PKListener implements Listener {
|
|||
new FireBlastCharged(player);
|
||||
}
|
||||
else if (abil.equalsIgnoreCase("HeatControl")) {
|
||||
new HeatControlSolidify(player);
|
||||
new HeatControl(player, HeatControlType.SOLIDIFY);
|
||||
}
|
||||
else if (abil.equalsIgnoreCase("FireBurst")) {
|
||||
new FireBurst(player);
|
||||
|
@ -1578,7 +1578,7 @@ public class PKListener implements Listener {
|
|||
new FireJet(player);
|
||||
}
|
||||
else if (abil.equalsIgnoreCase("HeatControl")) {
|
||||
new HeatControlExtinguish(player);
|
||||
new HeatControl(player, HeatControlType.MELT);
|
||||
}
|
||||
else if (abil.equalsIgnoreCase("Illumination")) {
|
||||
if (ConfigManager.defaultConfig.get().getBoolean("Abilities.Fire.Illumination.Passive")) {
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
package com.projectkorra.projectkorra.ability;
|
||||
|
||||
import com.projectkorra.projectkorra.Element;
|
||||
import com.projectkorra.projectkorra.GeneralMethods;
|
||||
import com.projectkorra.projectkorra.configuration.ConfigManager;
|
||||
import com.projectkorra.projectkorra.firebending.BlazeArc;
|
||||
import com.projectkorra.projectkorra.firebending.HeatControlSolidify;
|
||||
import com.projectkorra.projectkorra.util.Information;
|
||||
import com.projectkorra.projectkorra.util.ParticleEffect;
|
||||
import com.projectkorra.rpg.RPGMethods;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
|
@ -18,13 +17,14 @@ import org.bukkit.block.Block;
|
|||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import com.projectkorra.projectkorra.Element;
|
||||
import com.projectkorra.projectkorra.GeneralMethods;
|
||||
import com.projectkorra.projectkorra.configuration.ConfigManager;
|
||||
import com.projectkorra.projectkorra.firebending.BlazeArc;
|
||||
import com.projectkorra.projectkorra.firebending.HeatControl;
|
||||
import com.projectkorra.projectkorra.util.Information;
|
||||
import com.projectkorra.projectkorra.util.ParticleEffect;
|
||||
import com.projectkorra.rpg.RPGMethods;
|
||||
|
||||
public abstract class FireAbility extends ElementalAbility {
|
||||
|
||||
|
@ -218,7 +218,7 @@ public abstract class FireAbility extends ElementalAbility {
|
|||
|
||||
public static void stopBending() {
|
||||
BlazeArc.removeAllCleanup();
|
||||
HeatControlSolidify.revertAllInstances();
|
||||
HeatControl.revertAllInstances();
|
||||
for (Location loc : TEMP_FIRE.keySet()) {
|
||||
revertTempFire(loc);
|
||||
}
|
||||
|
|
|
@ -310,7 +310,7 @@ public class ConfigManager {
|
|||
config.addDefault("Abilities.Fire.FireJet.Description", "This ability is used for a limited burst of flight for firebenders. Clicking with this " + "ability selected will launch you in the direction you're looking, granting you " + "controlled flight for a short time. This ability can be used mid-air to prevent falling " + "to your death, but on the ground it can only be used if standing on a block that's " + "ignitable (e.g. not snow or water).");
|
||||
config.addDefault("Abilities.Fire.FireShield.Description", "FireShield is a basic defensive ability. " + "Clicking with this ability selected will create a " + "small disc of fire in front of you, which will block most " + "attacks and bending. Alternatively, pressing and holding " + "sneak creates a very small shield of fire, blocking most attacks. " + "Creatures that contact this fire are ignited.");
|
||||
config.addDefault("Abilities.Fire.FireShield.DeathMessage", "{victim} scorched theirself on {attacker}'s {ability}");
|
||||
config.addDefault("Abilities.Fire.HeatControl.Description", "While this ability is selected, the firebender becomes impervious " + "to fire damage and cannot be ignited. " + "If the user left-clicks with this ability, the targeted area will be " + "extinguished, although it will leave any creature burning engulfed in flames. " + "This ability can also cool lava. If this ability is used while targetting ice or snow, it" + " will instead melt blocks in that area. Finally, sneaking with this ability will cook any food in your hand.");
|
||||
config.addDefault("Abilities.Fire.HeatControl.Description", "While this ability is selected, the firebender becomes impervious " + "to fire damage and cannot be ignited. " + "HeatControl has four different functions available to the user.\n" + "Cook - Hold shift while holding any raw food in your hand to cook it.\n" + "Extinguish - Hold shift, and any fire within a configurable radius will be extinguished.\n" + "Melt - Left click while looking at ice in order to melt it.\n" + "Solidify - Hold shift while looking at a body of lava to cool it, turning it into stone.");
|
||||
config.addDefault("Abilities.Fire.Illumination.Description", "This ability gives firebenders a means of illuminating the area. It is a toggle - clicking " + "will create a torch that follows you around. The torch will only appear on objects that are " + "ignitable and can hold a torch (e.g. not leaves or ice). If you get too far away from the torch, " + "it will disappear, but will reappear when you get on another ignitable block. Clicking again " + "dismisses this torch.");
|
||||
config.addDefault("Abilities.Fire.Lightning.Description", "Hold sneak while selecting this ability to charge up a lightning strike. Once charged, release sneak to discharge the lightning to the targeted location.");
|
||||
config.addDefault("Abilities.Fire.Lightning.DeathMessage", "{victim} was electrocuted by {attacker}'s {ability}");
|
||||
|
@ -1016,15 +1016,15 @@ public class ConfigManager {
|
|||
config.addDefault("Abilities.Fire.FireShield.FireTicks", 2);
|
||||
|
||||
config.addDefault("Abilities.Fire.HeatControl.Enabled", true);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Extinguish.Range", 20);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Extinguish.Radius", 7);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Extinguish.Cooldown", 500);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Solidify.Range", 10);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Solidify.Radius", 7);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Solidify.RevertTime", 20000);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Cook.Interval", 1000);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Extinguish.Cooldown", 5000);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Extinguish.Radius", 6);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Melt.Range", 15);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Melt.Radius", 5);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Cook.CookTime", 2000);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Solidify.MaxRadius", 10);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Solidify.Range", 7);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Solidify.Revert", true);
|
||||
config.addDefault("Abilities.Fire.HeatControl.Solidify.RevertTime", 120000);
|
||||
|
||||
config.addDefault("Abilities.Fire.Illumination.Enabled", true);
|
||||
config.addDefault("Abilities.Fire.Illumination.Passive", true);
|
||||
|
|
|
@ -45,7 +45,7 @@ public class FireDamageTimer {
|
|||
public static void dealFlameDamage(Entity entity) {
|
||||
if (INSTANCES.containsKey(entity) && entity instanceof LivingEntity) {
|
||||
if (entity instanceof Player) {
|
||||
if (!HeatControlExtinguish.canBurn((Player) entity)) {
|
||||
if (!HeatControl.canBurn((Player) entity)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,5 +17,6 @@ public class FirebendingManager implements Runnable {
|
|||
FirePassive.handlePassive();
|
||||
BlazeArc.dissipateAll();
|
||||
FireAbility.removeFire();
|
||||
HeatControl.manageSolidify();
|
||||
}
|
||||
}
|
||||
|
|
434
src/com/projectkorra/projectkorra/firebending/HeatControl.java
Normal file
434
src/com/projectkorra/projectkorra/firebending/HeatControl.java
Normal file
|
@ -0,0 +1,434 @@
|
|||
package com.projectkorra.projectkorra.firebending;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.projectkorra.projectkorra.BendingPlayer;
|
||||
import com.projectkorra.projectkorra.Element;
|
||||
import com.projectkorra.projectkorra.GeneralMethods;
|
||||
import com.projectkorra.projectkorra.ability.EarthAbility;
|
||||
import com.projectkorra.projectkorra.ability.FireAbility;
|
||||
import com.projectkorra.projectkorra.util.ParticleEffect;
|
||||
import com.projectkorra.projectkorra.util.TempBlock;
|
||||
import com.projectkorra.projectkorra.waterbending.PhaseChangeMelt;
|
||||
|
||||
public class HeatControl extends FireAbility {
|
||||
|
||||
public enum HeatControlType {
|
||||
COOK, EXTINGUISH, MELT, SOLIDIFY
|
||||
}
|
||||
|
||||
private static final Material[] COOKABLE_MATERIALS = { Material.RAW_BEEF, Material.RAW_CHICKEN,
|
||||
Material.RAW_FISH, Material.PORK, Material.POTATO_ITEM, Material.RABBIT, Material.MUTTON };
|
||||
|
||||
private HeatControlType heatControlType;
|
||||
|
||||
/*
|
||||
* HeatControl Cook variables
|
||||
*/
|
||||
private long cookTime;
|
||||
private long cookInterval;
|
||||
|
||||
/*
|
||||
* HeatControl Extinguish variables
|
||||
*/
|
||||
private long extinguishCooldown;
|
||||
private double extinguishRadius;
|
||||
|
||||
/*
|
||||
* HeatControl Melt variables
|
||||
*/
|
||||
private double meltRange;
|
||||
private double meltRadius;
|
||||
private Location meltLocation;
|
||||
|
||||
/*
|
||||
* HeatControl Solidify variables
|
||||
*/
|
||||
private int solidifyRadius;
|
||||
private long solidifyDelay;
|
||||
private long solidifyLastBlockTime;
|
||||
private double solidifyMaxRadius;
|
||||
private double solidifyRange;
|
||||
private boolean solidifying;
|
||||
private Location solidifyLocation;
|
||||
private Random randy;
|
||||
private ConcurrentHashMap<TempBlock, Long> solidifyStone = new ConcurrentHashMap<>();
|
||||
private ConcurrentHashMap<TempBlock, Long> solidifyRevert = new ConcurrentHashMap<>();
|
||||
private List<TempBlock> blocks = new ArrayList<>();
|
||||
|
||||
|
||||
public HeatControl(Player player, HeatControlType heatControlType) {
|
||||
super(player);
|
||||
|
||||
this.heatControlType = heatControlType;
|
||||
setFields();
|
||||
|
||||
if (this.heatControlType == HeatControlType.COOK) {
|
||||
start();
|
||||
|
||||
} else if (this.heatControlType == HeatControlType.EXTINGUISH) {
|
||||
if (bPlayer.isOnCooldown(getName() + "Extinguish")) {
|
||||
remove();
|
||||
return;
|
||||
}
|
||||
|
||||
start();
|
||||
|
||||
} else if (this.heatControlType == HeatControlType.MELT) {
|
||||
meltLocation = GeneralMethods.getTargetedLocation(player, meltRange);
|
||||
for (Block block : GeneralMethods.getBlocksAroundPoint(meltLocation, meltRadius)) {
|
||||
|
||||
if (isMeltable(block)) {
|
||||
PhaseChangeMelt.melt(player, block);
|
||||
}
|
||||
}
|
||||
|
||||
} else if (this.heatControlType == HeatControlType.SOLIDIFY) {
|
||||
if (!bPlayer.canBend(this)) {
|
||||
return;
|
||||
} else if (EarthAbility.getLavaSourceBlock(player, solidifyRange) == null) {
|
||||
remove();
|
||||
new HeatControl(player, HeatControlType.COOK);
|
||||
return;
|
||||
}
|
||||
|
||||
solidifyLastBlockTime = System.currentTimeMillis();
|
||||
start();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setFields() {
|
||||
if (this.heatControlType == HeatControlType.COOK) {
|
||||
this.cookTime = System.currentTimeMillis();
|
||||
this.cookInterval = getConfig().getLong("Abilities.Fire.HeatControl.Cook.Interval");
|
||||
this.heatControlType = HeatControlType.COOK;
|
||||
} else if (this.heatControlType == HeatControlType.EXTINGUISH) {
|
||||
this.extinguishCooldown = getConfig().getLong("Abilities.Fire.HeatControl.Extinguish.Cooldown");
|
||||
this.extinguishRadius = getConfig().getLong("Abilities.Fire.HeatControl.Extinguish.Radius");
|
||||
this.extinguishRadius = getDayFactor(this.extinguishRadius);
|
||||
} else if (this.heatControlType == HeatControlType.MELT) {
|
||||
this.meltRange = getConfig().getDouble("Abilities.Fire.HeatControl.Melt.Range");
|
||||
this.meltRadius = getConfig().getDouble("Abilities.Fire.HeatControl.Melt.Radius");
|
||||
this.meltRange = getDayFactor(this.meltRange);
|
||||
this.meltRadius = getDayFactor(this.meltRadius);
|
||||
} else if (this.heatControlType == HeatControlType.SOLIDIFY) {
|
||||
this.solidifyRadius = 1;
|
||||
this.solidifyDelay = 50;
|
||||
this.solidifyLastBlockTime = 0;
|
||||
this.solidifyMaxRadius = getConfig().getDouble("Abilities.Fire.HeatControl.Solidify.MaxRadius");
|
||||
this.solidifyRange = getConfig().getDouble("Abilities.Fire.HeatControl.Solidify.Range");
|
||||
this.randy = new Random();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void progress() {
|
||||
|
||||
if (!bPlayer.canBend(this)) {
|
||||
remove();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.heatControlType == HeatControlType.COOK) {
|
||||
|
||||
if (!player.isSneaking()) {
|
||||
remove();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isCookable(player.getInventory().getItemInMainHand().getType())) {
|
||||
remove();
|
||||
new HeatControl(player, HeatControlType.EXTINGUISH);
|
||||
return;
|
||||
}
|
||||
|
||||
if (System.currentTimeMillis() - cookTime > cookInterval) {
|
||||
cook();
|
||||
cookTime = System.currentTimeMillis();
|
||||
return;
|
||||
}
|
||||
|
||||
displayCookParticles();
|
||||
|
||||
} else if (this.heatControlType == HeatControlType.EXTINGUISH) {
|
||||
|
||||
if (!player.isSneaking()) {
|
||||
bPlayer.addCooldown(getName() + "Extinguish", extinguishCooldown);
|
||||
remove();
|
||||
return;
|
||||
}
|
||||
|
||||
Set<Material> blocks = new HashSet<>();
|
||||
for (int material : GeneralMethods.NON_OPAQUE) {
|
||||
blocks.add(Material.getMaterial(material));
|
||||
}
|
||||
|
||||
for (Block block : GeneralMethods.getBlocksAroundPoint(player.getLocation(), extinguishRadius)) {
|
||||
Material material = block.getType();
|
||||
if (material == Material.FIRE && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) {
|
||||
|
||||
block.setType(Material.AIR);
|
||||
block.getWorld().playEffect(block.getLocation(), Effect.EXTINGUISH, 0);
|
||||
}
|
||||
}
|
||||
|
||||
} else if (this.heatControlType == HeatControlType.SOLIDIFY) {
|
||||
|
||||
if (solidifyRadius >= solidifyMaxRadius) {
|
||||
remove();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!player.isSneaking()) {
|
||||
remove();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!solidifying) {
|
||||
solidifying = true;
|
||||
}
|
||||
|
||||
Location targetLocation = GeneralMethods.getTargetedLocation(player, solidifyRange);
|
||||
resetLocation(targetLocation);
|
||||
List<Location> area = GeneralMethods.getCircle(solidifyLocation, solidifyRadius, 3, true, true, 0);
|
||||
solidify(area);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void cook() {
|
||||
ItemStack cooked = getCooked(player.getInventory().getItemInMainHand());
|
||||
HashMap<Integer, ItemStack> cantFit = player.getInventory().addItem(cooked);
|
||||
for (int id : cantFit.keySet()) {
|
||||
player.getWorld().dropItem(player.getEyeLocation(), cantFit.get(id));
|
||||
}
|
||||
|
||||
int amount = player.getInventory().getItemInMainHand().getAmount();
|
||||
if (amount == 1) {
|
||||
player.getInventory().clear(player.getInventory().getHeldItemSlot());
|
||||
} else {
|
||||
player.getInventory().getItemInMainHand().setAmount(amount - 1);
|
||||
}
|
||||
}
|
||||
|
||||
private ItemStack getCooked(ItemStack is) {
|
||||
ItemStack cooked = new ItemStack(Material.AIR);
|
||||
Material material = is.getType();
|
||||
|
||||
switch (material) {
|
||||
case RAW_BEEF:
|
||||
cooked = new ItemStack(Material.COOKED_BEEF, 1);
|
||||
break;
|
||||
case RAW_FISH:
|
||||
ItemStack salmon = new ItemStack(Material.RAW_FISH, 1, (short) 1);
|
||||
if (is.getDurability() == salmon.getDurability()) {
|
||||
cooked = new ItemStack(Material.COOKED_FISH, 1, (short) 1);
|
||||
} else {
|
||||
cooked = new ItemStack(Material.COOKED_FISH, 1);
|
||||
}
|
||||
break;
|
||||
case RAW_CHICKEN:
|
||||
cooked = new ItemStack(Material.COOKED_CHICKEN, 1);
|
||||
break;
|
||||
case PORK:
|
||||
cooked = new ItemStack(Material.GRILLED_PORK, 1);
|
||||
break;
|
||||
case POTATO_ITEM:
|
||||
cooked = new ItemStack(Material.BAKED_POTATO, 1);
|
||||
break;
|
||||
case MUTTON:
|
||||
cooked = new ItemStack(Material.COOKED_MUTTON);
|
||||
break;
|
||||
case RABBIT:
|
||||
cooked = new ItemStack(Material.COOKED_RABBIT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return cooked;
|
||||
}
|
||||
|
||||
public void displayCookParticles() {
|
||||
ParticleEffect.FLAME.display(player.getLocation().clone().add(0, 1, 0), 0.5F, 0.5F, 0.5F, 0, 3);
|
||||
ParticleEffect.SMOKE.display(player.getLocation().clone().add(0, 1, 0), 0.5F, 0.5F, 0.5F, 0, 2);
|
||||
}
|
||||
|
||||
public static boolean isCookable(Material material) {
|
||||
return Arrays.asList(COOKABLE_MATERIALS).contains(material);
|
||||
}
|
||||
|
||||
public static boolean canBurn(Player player) {
|
||||
BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player);
|
||||
if (bPlayer == null) {
|
||||
return true;
|
||||
} else if (bPlayer.getBoundAbilityName().equals("HeatControl") || hasAbility(player, FireJet.class)) {
|
||||
player.setFireTicks(-1);
|
||||
return false;
|
||||
} else if (player.getFireTicks() > 80 && bPlayer.canBendPassive(Element.FIRE)) {
|
||||
player.setFireTicks(80);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void solidify(List<Location> area) {
|
||||
if (System.currentTimeMillis() < solidifyLastBlockTime + solidifyDelay) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<Block> lava = new ArrayList<Block>();
|
||||
for (Location l : area) {
|
||||
if (isLava(l.getBlock())) {
|
||||
lava.add(l.getBlock());
|
||||
}
|
||||
}
|
||||
|
||||
solidifyLastBlockTime = System.currentTimeMillis();
|
||||
if (lava.size() == 0) {
|
||||
solidifyRadius++;
|
||||
return;
|
||||
}
|
||||
|
||||
Block b = lava.get(randy.nextInt(lava.size()));
|
||||
|
||||
TempBlock tempBlock;
|
||||
if (TempBlock.isTempBlock(b)) {
|
||||
tempBlock = TempBlock.get(b);
|
||||
tempBlock.setType(Material.MAGMA, (byte) 0);
|
||||
} else {
|
||||
tempBlock = new TempBlock(b, Material.MAGMA, (byte) 0);
|
||||
}
|
||||
|
||||
solidifyStone.put(tempBlock, System.currentTimeMillis());
|
||||
solidifyRevert.put(tempBlock, System.currentTimeMillis() + 1000);
|
||||
blocks.add(tempBlock);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
solidifying = false;
|
||||
}
|
||||
|
||||
public void removeInstance() {
|
||||
super.remove();
|
||||
}
|
||||
|
||||
public void revert(TempBlock block) {
|
||||
if (blocks.contains(block)) {
|
||||
block.revertBlock();
|
||||
blocks.remove(block);
|
||||
}
|
||||
}
|
||||
|
||||
public void revertAll() {
|
||||
for (TempBlock tempBlock : blocks) {
|
||||
tempBlock.revertBlock();
|
||||
}
|
||||
|
||||
blocks.clear();
|
||||
}
|
||||
|
||||
public static void revertAllInstances() {
|
||||
for (HeatControl heatControl : getAbilities(HeatControl.class)) {
|
||||
heatControl.revertAll();
|
||||
}
|
||||
}
|
||||
|
||||
public void resetLocation(Location loc) {
|
||||
if (solidifyLocation == null) {
|
||||
solidifyLocation = loc;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!loc.equals(solidifyLocation)) {
|
||||
solidifyRadius = 1;
|
||||
solidifyLocation = loc;
|
||||
}
|
||||
}
|
||||
|
||||
public static void manageSolidify() {
|
||||
for (HeatControl heatControl : getAbilities(HeatControl.class)) {
|
||||
|
||||
for (TempBlock tempBlock : heatControl.solidifyStone.keySet()) {
|
||||
|
||||
if (System.currentTimeMillis() - heatControl.solidifyStone.get(tempBlock) > 1000) {
|
||||
|
||||
if (getConfig().getBoolean("Abilities.Fire.HeatControl.Solidify.Revert")) {
|
||||
|
||||
tempBlock.setType(Material.STONE, (byte) 0);
|
||||
heatControl.solidifyRevert.put(tempBlock, System.currentTimeMillis());
|
||||
} else {
|
||||
|
||||
tempBlock.revertBlock();
|
||||
tempBlock.getBlock().setType(Material.STONE);
|
||||
}
|
||||
|
||||
ParticleEffect.SMOKE.display(tempBlock.getBlock().getLocation().clone().add(0.5, 1, 0.5), 0.1F, 0.1F, 0.1F, 0.01F, 3);
|
||||
|
||||
// TODO play the smoke in a line from the block to above the player's head.
|
||||
|
||||
tempBlock.getBlock().getWorld().playSound(tempBlock.getBlock().getLocation(), Sound.BLOCK_FIRE_EXTINGUISH, 1, 1);
|
||||
heatControl.solidifyStone.remove(tempBlock);
|
||||
}
|
||||
}
|
||||
|
||||
for (TempBlock tempBlock : heatControl.solidifyRevert.keySet()) {
|
||||
|
||||
if (System.currentTimeMillis() - heatControl.solidifyRevert.get(tempBlock) > getConfig().getLong("Abilities.Fire.HeatControl.Solidify.RevertTime")) {
|
||||
|
||||
heatControl.revert(tempBlock);
|
||||
heatControl.solidifyRevert.remove(tempBlock);
|
||||
}
|
||||
}
|
||||
|
||||
if (heatControl.solidifyStone.isEmpty() && heatControl.solidifyRevert.isEmpty() && !heatControl.solidifying) {
|
||||
|
||||
heatControl.removeInstance();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSneakAbility() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isHarmlessAbility() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCooldown() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "HeatControl";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getLocation() {
|
||||
return player.getLocation();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,166 +0,0 @@
|
|||
package com.projectkorra.projectkorra.firebending;
|
||||
|
||||
import com.projectkorra.projectkorra.ability.FireAbility;
|
||||
import com.projectkorra.projectkorra.util.ParticleEffect;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class HeatControlCook extends FireAbility {
|
||||
|
||||
private static final Material[] COOKABLE_MATERIALS = { Material.RAW_BEEF, Material.RAW_CHICKEN,
|
||||
Material.RAW_FISH, Material.PORK, Material.POTATO_ITEM, Material.RABBIT, Material.MUTTON };
|
||||
|
||||
private long time;
|
||||
private long cookTime;
|
||||
private ItemStack item;
|
||||
|
||||
public HeatControlCook(Player player) {
|
||||
super(player);
|
||||
|
||||
this.time = System.currentTimeMillis();
|
||||
this.cookTime = getConfig().getLong("Abilities.Fire.HeatControl.Cook.CookTime");
|
||||
this.item = player.getInventory().getItemInMainHand();
|
||||
|
||||
if (isCookable(item.getType())) {
|
||||
start();
|
||||
}
|
||||
}
|
||||
|
||||
private void cook() {
|
||||
ItemStack cooked = getCooked(item);
|
||||
HashMap<Integer, ItemStack> cantFit = player.getInventory().addItem(cooked);
|
||||
for (int id : cantFit.keySet()) {
|
||||
player.getWorld().dropItem(player.getEyeLocation(), cantFit.get(id));
|
||||
}
|
||||
|
||||
int amount = item.getAmount();
|
||||
if (amount == 1) {
|
||||
player.getInventory().clear(player.getInventory().getHeldItemSlot());
|
||||
} else {
|
||||
item.setAmount(amount - 1);
|
||||
}
|
||||
}
|
||||
|
||||
private ItemStack getCooked(ItemStack is) {
|
||||
ItemStack cooked = new ItemStack(Material.AIR);
|
||||
Material material = is.getType();
|
||||
|
||||
switch (material) {
|
||||
case RAW_BEEF:
|
||||
cooked = new ItemStack(Material.COOKED_BEEF, 1);
|
||||
break;
|
||||
case RAW_FISH:
|
||||
ItemStack salmon = new ItemStack(Material.RAW_FISH, 1, (short) 1);
|
||||
if (is.getDurability() == salmon.getDurability()) {
|
||||
cooked = new ItemStack(Material.COOKED_FISH, 1, (short) 1);
|
||||
} else {
|
||||
cooked = new ItemStack(Material.COOKED_FISH, 1);
|
||||
}
|
||||
break;
|
||||
case RAW_CHICKEN:
|
||||
cooked = new ItemStack(Material.COOKED_CHICKEN, 1);
|
||||
break;
|
||||
case PORK:
|
||||
cooked = new ItemStack(Material.GRILLED_PORK, 1);
|
||||
break;
|
||||
case POTATO_ITEM:
|
||||
cooked = new ItemStack(Material.BAKED_POTATO, 1);
|
||||
break;
|
||||
case MUTTON:
|
||||
cooked = new ItemStack(Material.COOKED_MUTTON);
|
||||
break;
|
||||
case RABBIT:
|
||||
cooked = new ItemStack(Material.COOKED_RABBIT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return cooked;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void progress() {
|
||||
if (!bPlayer.canBendIgnoreCooldowns(this)) {
|
||||
remove();
|
||||
return;
|
||||
} else if (!item.equals(player.getInventory().getItemInMainHand())) {
|
||||
time = System.currentTimeMillis();
|
||||
item = player.getInventory().getItemInMainHand();
|
||||
}
|
||||
|
||||
if (!isCookable(item.getType())) {
|
||||
remove();
|
||||
return;
|
||||
} else if (System.currentTimeMillis() > time + cookTime) {
|
||||
cook();
|
||||
time = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
ParticleEffect.FLAME.display(player.getEyeLocation(), 0.6F, 0.6F, 0.6F, 0, 3);
|
||||
ParticleEffect.SMOKE.display(player.getEyeLocation(), 0.6F, 0.6F, 0.6F, 0, 1);
|
||||
}
|
||||
|
||||
public static boolean isCookable(Material material) {
|
||||
return Arrays.asList(COOKABLE_MATERIALS).contains(material);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "HeatControl";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getLocation() {
|
||||
return player != null ? player.getLocation() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCooldown() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSneakAbility() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isHarmlessAbility() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public long getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
public void setTime(long time) {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public long getCookTime() {
|
||||
return cookTime;
|
||||
}
|
||||
|
||||
public void setCookTime(long cookTime) {
|
||||
this.cookTime = cookTime;
|
||||
}
|
||||
|
||||
public ItemStack getItem() {
|
||||
return item;
|
||||
}
|
||||
|
||||
public void setItem(ItemStack item) {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
public static Material[] getCookableMaterials() {
|
||||
return COOKABLE_MATERIALS;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,129 +0,0 @@
|
|||
package com.projectkorra.projectkorra.firebending;
|
||||
|
||||
import com.projectkorra.projectkorra.BendingPlayer;
|
||||
import com.projectkorra.projectkorra.Element;
|
||||
import com.projectkorra.projectkorra.GeneralMethods;
|
||||
import com.projectkorra.projectkorra.ability.FireAbility;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class HeatControlExtinguish extends FireAbility {
|
||||
|
||||
private double range;
|
||||
private double radius;
|
||||
private long cooldown;
|
||||
private Location location;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public HeatControlExtinguish(Player player) {
|
||||
super(player);
|
||||
|
||||
if (!bPlayer.canBend(this) || bPlayer.isOnCooldown("HeatControlExtinguish")) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.range = getConfig().getDouble("Abilities.Fire.HeatControl.Extinguish.Range");
|
||||
this.radius = getConfig().getDouble("Abilities.Fire.HeatControl.Extinguish.Radius");
|
||||
this.cooldown = getConfig().getLong("Abilities.Fire.HeatControl.Extinguish.Cooldown");
|
||||
|
||||
this.range = getDayFactor(this.range);
|
||||
this.radius = getDayFactor(this.radius);
|
||||
Set<Material> blocks = new HashSet<Material>();
|
||||
for (Integer mat : GeneralMethods.NON_OPAQUE) {
|
||||
blocks.add(Material.getMaterial(mat));
|
||||
}
|
||||
if (isMeltable(player.getTargetBlock(blocks, (int) range))) {
|
||||
new HeatControlMelt(player);
|
||||
return;
|
||||
}
|
||||
|
||||
location = player.getTargetBlock((HashSet<Material>) null, (int) range).getLocation();
|
||||
for (Block block : GeneralMethods.getBlocksAroundPoint(location, radius)) {
|
||||
Material mat = block.getType();
|
||||
if (mat != Material.FIRE) {
|
||||
continue;
|
||||
} else if (GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) {
|
||||
continue;
|
||||
} else if (block.getType() == Material.FIRE) {
|
||||
block.setType(Material.AIR);
|
||||
block.getWorld().playEffect(block.getLocation(), Effect.EXTINGUISH, 0);
|
||||
}
|
||||
}
|
||||
|
||||
bPlayer.addCooldown("HeatControlExtinguish", cooldown);
|
||||
}
|
||||
|
||||
public static boolean canBurn(Player player) {
|
||||
BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player);
|
||||
if (bPlayer == null) {
|
||||
return true;
|
||||
} else if (bPlayer.getBoundAbilityName().equals("HeatControl") || hasAbility(player, FireJet.class)) {
|
||||
player.setFireTicks(-1);
|
||||
return false;
|
||||
} else if (player.getFireTicks() > 80 && bPlayer.canBendPassive(Element.FIRE)) {
|
||||
player.setFireTicks(80);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "HeatControl";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void progress() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCooldown() {
|
||||
return cooldown;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSneakAbility() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isHarmlessAbility() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public double getRange() {
|
||||
return range;
|
||||
}
|
||||
|
||||
public void setRange(double range) {
|
||||
this.range = range;
|
||||
}
|
||||
|
||||
public double getRadius() {
|
||||
return radius;
|
||||
}
|
||||
|
||||
public void setRadius(double radius) {
|
||||
this.radius = radius;
|
||||
}
|
||||
|
||||
public void setCooldown(long cooldown) {
|
||||
this.cooldown = cooldown;
|
||||
}
|
||||
|
||||
public void setLocation(Location location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,98 +0,0 @@
|
|||
package com.projectkorra.projectkorra.firebending;
|
||||
|
||||
import com.projectkorra.projectkorra.GeneralMethods;
|
||||
import com.projectkorra.projectkorra.ability.FireAbility;
|
||||
import com.projectkorra.projectkorra.waterbending.PhaseChangeMelt;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class HeatControlMelt extends FireAbility {
|
||||
|
||||
private double range = getConfig().getDouble("Abilities.Fire.HeatControl.Melt.Range");
|
||||
private double radius = getConfig().getDouble("Abilities.Fire.HeatControl.Melt.Radius");
|
||||
private Location location;
|
||||
|
||||
public HeatControlMelt(Player player) {
|
||||
super(player);
|
||||
|
||||
this.range = getConfig().getDouble("Abilities.Fire.HeatControl.Melt.Range");
|
||||
this.radius = getConfig().getDouble("Abilities.Fire.HeatControl.Melt.Radius");
|
||||
|
||||
this.range = getDayFactor(range);
|
||||
this.radius = getDayFactor(radius);
|
||||
|
||||
location = GeneralMethods.getTargetedLocation(player, range);
|
||||
for (Block block : GeneralMethods.getBlocksAroundPoint(location, radius)) {
|
||||
if (isMeltable(block)) {
|
||||
PhaseChangeMelt.melt(player, block);
|
||||
} else if (isHeatable(block)) {
|
||||
heat(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private static void heat(Block block) {
|
||||
if (block.getType() == Material.OBSIDIAN) {
|
||||
block.setType(Material.LAVA);
|
||||
block.setData((byte) 0x0);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isHeatable(Block block) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "HeatControl";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void progress() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCooldown() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSneakAbility() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isHarmlessAbility() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public double getRange() {
|
||||
return range;
|
||||
}
|
||||
|
||||
public void setRange(double range) {
|
||||
this.range = range;
|
||||
}
|
||||
|
||||
public double getRadius() {
|
||||
return radius;
|
||||
}
|
||||
|
||||
public void setRadius(double radius) {
|
||||
this.radius = radius;
|
||||
}
|
||||
|
||||
public void setLocation(Location location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,255 +0,0 @@
|
|||
package com.projectkorra.projectkorra.firebending;
|
||||
|
||||
import com.projectkorra.projectkorra.GeneralMethods;
|
||||
import com.projectkorra.projectkorra.ProjectKorra;
|
||||
import com.projectkorra.projectkorra.ability.EarthAbility;
|
||||
import com.projectkorra.projectkorra.ability.FireAbility;
|
||||
import com.projectkorra.projectkorra.util.ParticleEffect;
|
||||
import com.projectkorra.projectkorra.util.TempBlock;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class HeatControlSolidify extends FireAbility {
|
||||
|
||||
private int radius;
|
||||
private long delay;
|
||||
private long lastBlockTime;
|
||||
private long lastParticleTime;
|
||||
private long revertTime;
|
||||
private double maxRadius;
|
||||
private double range;
|
||||
private Location location;
|
||||
private Random random;
|
||||
private ArrayList<TempBlock> tempBlocks;
|
||||
|
||||
public HeatControlSolidify(Player player) {
|
||||
super(player);
|
||||
|
||||
this.radius = 1;
|
||||
this.delay = 50;
|
||||
this.lastBlockTime = 0;
|
||||
this.lastParticleTime = 0;
|
||||
this.revertTime = getConfig().getLong("Abilities.Fire.HeatControl.Solidify.RevertTime");
|
||||
this.maxRadius = getConfig().getDouble("Abilities.Fire.HeatControl.Solidify.Radius");
|
||||
this.range = getConfig().getDouble("Abilities.Fire.HeatControl.Solidify.Range");
|
||||
this.random = new Random();
|
||||
this.tempBlocks = new ArrayList<>();
|
||||
|
||||
if (!bPlayer.canBend(this)) {
|
||||
return;
|
||||
} else if (EarthAbility.getLavaSourceBlock(player, range) == null) {
|
||||
new HeatControlCook(player);
|
||||
return;
|
||||
}
|
||||
|
||||
lastBlockTime = System.currentTimeMillis();
|
||||
start();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void freeze(List<Location> area) {
|
||||
if (System.currentTimeMillis() < lastBlockTime + delay) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<Block> lava = new ArrayList<Block>();
|
||||
for (Location l : area) {
|
||||
if (isLava(l.getBlock())) {
|
||||
lava.add(l.getBlock());
|
||||
}
|
||||
}
|
||||
|
||||
lastBlockTime = System.currentTimeMillis();
|
||||
if (lava.size() == 0) {
|
||||
radius++;
|
||||
return;
|
||||
}
|
||||
|
||||
Block b = lava.get(random.nextInt(lava.size()));
|
||||
TempBlock tb;
|
||||
|
||||
if (TempBlock.isTempBlock(b)) {
|
||||
tb = TempBlock.get(b);
|
||||
tb.setType(Material.STONE);
|
||||
} else {
|
||||
tb = new TempBlock(b, Material.STONE, b.getData());
|
||||
}
|
||||
|
||||
if (!tempBlocks.contains(tb)) {
|
||||
tempBlocks.add(tb);
|
||||
}
|
||||
}
|
||||
|
||||
public void particles(List<Location> area) {
|
||||
if (System.currentTimeMillis() < lastParticleTime + 300) {
|
||||
return;
|
||||
}
|
||||
|
||||
lastParticleTime = System.currentTimeMillis();
|
||||
for (Location l : area) {
|
||||
if (isLava(l.getBlock())) {
|
||||
ParticleEffect.SMOKE.display(l, 0, 0, 0, 0.1f, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void progress() {
|
||||
if (!bPlayer.canBendIgnoreCooldowns(this)) {
|
||||
remove();
|
||||
return;
|
||||
} else if (radius >= maxRadius) {
|
||||
remove();
|
||||
return;
|
||||
}
|
||||
|
||||
Location targetlocation = GeneralMethods.getTargetedLocation(player, range);
|
||||
resetLocation(targetlocation);
|
||||
List<Location> area = GeneralMethods.getCircle(location, radius, 3, true, true, 0);
|
||||
particles(area);
|
||||
freeze(area);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
if(Bukkit.getServer().getPluginManager().isPluginEnabled(ProjectKorra.plugin.getName())) {
|
||||
revert();
|
||||
} else {
|
||||
HeatControlSolidify.super.remove();
|
||||
}
|
||||
}
|
||||
|
||||
public void revert() {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
revertAll();
|
||||
HeatControlSolidify.super.remove();
|
||||
}
|
||||
}.runTaskLater(ProjectKorra.plugin, revertTime);
|
||||
}
|
||||
|
||||
public static void revertAllInstances() {
|
||||
for (HeatControlSolidify heatControlSolidify : getAbilities(HeatControlSolidify.class)) {
|
||||
heatControlSolidify.revertAll();
|
||||
}
|
||||
}
|
||||
|
||||
public void resetLocation(Location loc) {
|
||||
if (location == null) {
|
||||
location = loc;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!loc.equals(location)) {
|
||||
radius = 1;
|
||||
location = loc;
|
||||
}
|
||||
}
|
||||
|
||||
public void revertAll() {
|
||||
for (TempBlock tb : tempBlocks) {
|
||||
tb.revertBlock();
|
||||
}
|
||||
tempBlocks.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "HeatControl";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCooldown() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSneakAbility() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isHarmlessAbility() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public int getRadius() {
|
||||
return radius;
|
||||
}
|
||||
|
||||
public void setRadius(int radius) {
|
||||
this.radius = radius;
|
||||
}
|
||||
|
||||
public long getDelay() {
|
||||
return delay;
|
||||
}
|
||||
|
||||
public void setDelay(long delay) {
|
||||
this.delay = delay;
|
||||
}
|
||||
|
||||
public long getLastBlockTime() {
|
||||
return lastBlockTime;
|
||||
}
|
||||
|
||||
public void setLastBlockTime(long lastBlockTime) {
|
||||
this.lastBlockTime = lastBlockTime;
|
||||
}
|
||||
|
||||
public long getLastParticleTime() {
|
||||
return lastParticleTime;
|
||||
}
|
||||
|
||||
public void setLastParticleTime(long lastParticleTime) {
|
||||
this.lastParticleTime = lastParticleTime;
|
||||
}
|
||||
|
||||
public long getRevertTime() {
|
||||
return revertTime;
|
||||
}
|
||||
|
||||
public void setRevertTime(long revertTime) {
|
||||
this.revertTime = revertTime;
|
||||
}
|
||||
|
||||
public double getMaxRadius() {
|
||||
return maxRadius;
|
||||
}
|
||||
|
||||
public void setMaxRadius(double maxRadius) {
|
||||
this.maxRadius = maxRadius;
|
||||
}
|
||||
|
||||
public double getRange() {
|
||||
return range;
|
||||
}
|
||||
|
||||
public void setRange(double range) {
|
||||
this.range = range;
|
||||
}
|
||||
|
||||
public ArrayList<TempBlock> getTempBlocks() {
|
||||
return tempBlocks;
|
||||
}
|
||||
|
||||
public void setLocation(Location location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue