diff --git a/pom.xml b/pom.xml
index fed20210..66ee3301 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,7 +65,7 @@
org.spigotmc
spigot-api
- 1.13.2-R0.1-SNAPSHOT
+ 1.16.1-R0.1-SNAPSHOT
provided
diff --git a/src/com/projectkorra/projectkorra/Element.java b/src/com/projectkorra/projectkorra/Element.java
index f898d169..c255d8be 100644
--- a/src/com/projectkorra/projectkorra/Element.java
+++ b/src/com/projectkorra/projectkorra/Element.java
@@ -57,10 +57,11 @@ public class Element {
public static final SubElement SAND = new SubElement("Sand", EARTH);
public static final SubElement LIGHTNING = new SubElement("Lightning", FIRE);
public static final SubElement COMBUSTION = new SubElement("Combustion", FIRE);
+ public static final SubElement BLUE_FIRE = new SubElement("BlueFire", FIRE);
- private static final Element[] ELEMENTS = { AIR, WATER, EARTH, FIRE, CHI, FLIGHT, SPIRITUAL, BLOOD, HEALING, ICE, PLANT, LAVA, METAL, SAND, LIGHTNING, COMBUSTION };
+ private static final Element[] ELEMENTS = { AIR, WATER, EARTH, FIRE, CHI, FLIGHT, SPIRITUAL, BLOOD, HEALING, ICE, PLANT, LAVA, METAL, SAND, LIGHTNING, COMBUSTION, BLUE_FIRE };
private static final Element[] MAIN_ELEMENTS = { AIR, WATER, EARTH, FIRE, CHI };
- private static final SubElement[] SUB_ELEMENTS = { FLIGHT, SPIRITUAL, BLOOD, HEALING, ICE, PLANT, LAVA, METAL, SAND, LIGHTNING, COMBUSTION };
+ private static final SubElement[] SUB_ELEMENTS = { FLIGHT, SPIRITUAL, BLOOD, HEALING, ICE, PLANT, LAVA, METAL, SAND, LIGHTNING, COMBUSTION, BLUE_FIRE };
private final String name;
private final ElementType type;
@@ -139,7 +140,7 @@ public class Element {
@Override
public String toString() {
- return this.getColor() + this.getName();
+ return (this == Element.BLUE_FIRE) ? this.getColor() + "Blue Fire": this.getColor() + this.getName();
}
public static Element getElement(final String name) {
diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java
index d16fa96d..21d4e4a5 100644
--- a/src/com/projectkorra/projectkorra/GeneralMethods.java
+++ b/src/com/projectkorra/projectkorra/GeneralMethods.java
@@ -157,6 +157,7 @@ public class GeneralMethods {
private static Method getAbsorption;
private static Method setAbsorption;
+ private static Method getHandle;
public GeneralMethods(final ProjectKorra plugin) {
GeneralMethods.plugin = plugin;
@@ -164,6 +165,7 @@ public class GeneralMethods {
try {
getAbsorption = ReflectionHandler.getMethod("EntityHuman", PackageType.MINECRAFT_SERVER, "getAbsorptionHearts");
setAbsorption = ReflectionHandler.getMethod("EntityHuman", PackageType.MINECRAFT_SERVER, "setAbsorptionHearts", Float.class);
+ getHandle = ReflectionHandler.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle");
} catch (final Exception e) {
e.printStackTrace();
}
@@ -462,6 +464,10 @@ public class GeneralMethods {
if (split[0].contains("p")) {
subelements.add(Element.PLANT);
}
+ if (split[0].contains("r")) {
+ subelements.add(Element.BLUE_FIRE);
+ }
+
if (hasAddon) {
final CopyOnWriteArrayList addonClone = new CopyOnWriteArrayList(Arrays.asList(split[split.length - 1].split(",")));
final long startTime = System.currentTimeMillis();
@@ -672,7 +678,7 @@ public class GeneralMethods {
public static float getAbsorbationHealth(final Player player) {
try {
- final Object entityplayer = ActionBar.getHandle.invoke(player);
+ final Object entityplayer = getHandle.invoke(player);
final Object hearts = getAbsorption.invoke(entityplayer);
return (float) hearts;
} catch (final Exception e) {
@@ -684,7 +690,7 @@ public class GeneralMethods {
public static void setAbsorbationHealth(final Player player, final float hearts) {
try {
- final Object entityplayer = ActionBar.getHandle.invoke(player);
+ final Object entityplayer = getHandle.invoke(player);
setAbsorption.invoke(entityplayer, hearts);
} catch (final Exception e) {
e.printStackTrace();
@@ -863,7 +869,7 @@ public class GeneralMethods {
}
return circleblocks;
}
-
+
/**
* Gets the closest entity within the specified radius around a point
* @param center point to check around
@@ -873,10 +879,10 @@ public class GeneralMethods {
public static Entity getClosestEntity(Location center, double radius) {
Entity found = null;
Double distance = null;
-
+
for (Entity entity : GeneralMethods.getEntitiesAroundPoint(center, radius)) {
double check = center.distanceSquared(entity.getLocation());
-
+
if (distance == null || check < distance) {
found = entity;
distance = check;
@@ -885,7 +891,7 @@ public class GeneralMethods {
return found;
}
-
+
/**
* Gets the closest LivingEntity within the specified radius around a point
* @param center point to check around
@@ -895,16 +901,16 @@ public class GeneralMethods {
public static LivingEntity getClosestLivingEntity(Location center, double radius) {
LivingEntity le = null;
Double distance = null;
-
+
for (Entity entity : GeneralMethods.getEntitiesAroundPoint(center, radius)) {
double check = center.distanceSquared(entity.getLocation());
-
+
if (entity instanceof LivingEntity && (distance == null || check < distance)) {
le = (LivingEntity) entity;
distance = check;
}
}
-
+
return le;
}
@@ -1187,7 +1193,7 @@ public class GeneralMethods {
public static Entity getTargetedEntity(final Player player, final double range) {
return getTargetedEntity(player, range, new ArrayList());
}
-
+
public static Location getTargetedLocation(final Player player, final double range, final boolean ignoreTempBlocks, final boolean checkDiagonals, final Material... nonOpaque2) {
final Location origin = player.getEyeLocation();
final Vector direction = origin.getDirection();
@@ -1208,7 +1214,7 @@ public class GeneralMethods {
for (double i = 0; i < range; i += 0.2) {
location.add(vec);
-
+
if (checkDiagonals && checkDiagonalWall(location, vec)) {
location.subtract(vec);
break;
@@ -1653,7 +1659,7 @@ public class GeneralMethods {
if (entity == null) {
return false;
}
-
+
switch (entity.getType()) {
case SKELETON:
case STRAY:
@@ -1662,7 +1668,8 @@ public class GeneralMethods {
case ZOMBIE:
case HUSK:
case ZOMBIE_VILLAGER:
- case PIG_ZOMBIE:
+ case ZOMBIFIED_PIGLIN:
+ case ZOGLIN:
case DROWNED:
case ZOMBIE_HORSE:
case SKELETON_HORSE:
@@ -2118,6 +2125,9 @@ public class GeneralMethods {
if (bPlayer.hasSubElement(Element.PLANT)) {
subs.append("p");
}
+ if (bPlayer.hasSubElement(Element.BLUE_FIRE)) {
+ subs.append("r");
+ }
boolean hasAddon = false;
for (final Element element : bPlayer.getSubElements()) {
if (Arrays.asList(Element.getAddonSubElements()).contains(element)) {
@@ -2344,6 +2354,19 @@ public class GeneralMethods {
case MAGMA_BLOCK:
case LAVA:
case JACK_O_LANTERN:
+ case CRYING_OBSIDIAN:
+ case SHROOMLIGHT:
+ case CAMPFIRE:
+ case SOUL_CAMPFIRE:
+ case SOUL_TORCH:
+ case LANTERN:
+ case SOUL_LANTERN:
+ case CONDUIT:
+ case RESPAWN_ANCHOR:
+ case BROWN_MUSHROOM:
+ case BREWING_STAND:
+ case ENDER_CHEST:
+ case END_PORTAL_FRAME:
case END_ROD:
return true;
default:
diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java
index 648046b6..98f9c2c6 100644
--- a/src/com/projectkorra/projectkorra/PKListener.java
+++ b/src/com/projectkorra/projectkorra/PKListener.java
@@ -143,7 +143,6 @@ import com.projectkorra.projectkorra.event.HorizontalVelocityChangeEvent;
import com.projectkorra.projectkorra.event.PlayerChangeElementEvent;
import com.projectkorra.projectkorra.event.PlayerJumpEvent;
import com.projectkorra.projectkorra.firebending.Blaze;
-import com.projectkorra.projectkorra.firebending.BlazeArc;
import com.projectkorra.projectkorra.firebending.BlazeRing;
import com.projectkorra.projectkorra.firebending.FireBlast;
import com.projectkorra.projectkorra.firebending.FireBlastCharged;
@@ -372,10 +371,6 @@ public class PKListener implements Listener {
if (!event.isCancelled()) {
event.setCancelled(!Torrent.canThaw(block));
}
-
- if (BlazeArc.getIgnitedBlocks().containsKey(block)) {
- BlazeArc.removeBlock(block);
- }
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
@@ -477,8 +472,8 @@ public class PKListener implements Listener {
public void onEntityCombust(final EntityCombustEvent event) {
final Entity entity = event.getEntity();
final Block block = entity.getLocation().getBlock();
- if (BlazeArc.getIgnitedBlocks().containsKey(block) && entity instanceof LivingEntity) {
- new FireDamageTimer(entity, BlazeArc.getIgnitedBlocks().get(block));
+ if (FireAbility.getSourcePlayers().containsKey(block) && entity instanceof LivingEntity) {
+ new FireDamageTimer(entity, FireAbility.getSourcePlayers().get(block));
}
}
@@ -504,8 +499,8 @@ public class PKListener implements Listener {
public void onEntityDamageEvent(final EntityDamageEvent event) {
final Entity entity = event.getEntity();
- if (event.getCause() == DamageCause.FIRE && BlazeArc.getIgnitedBlocks().containsKey(entity.getLocation().getBlock())) {
- new FireDamageTimer(entity, BlazeArc.getIgnitedBlocks().get(entity.getLocation().getBlock()));
+ if (event.getCause() == DamageCause.FIRE && FireAbility.getSourcePlayers().containsKey(entity.getLocation().getBlock())) {
+ new FireDamageTimer(entity, FireAbility.getSourcePlayers().get(entity.getLocation().getBlock()));
}
if (FireDamageTimer.isEnflamed(entity) && event.getCause() == DamageCause.FIRE_TICK) {
diff --git a/src/com/projectkorra/projectkorra/ability/BlueFireAbility.java b/src/com/projectkorra/projectkorra/ability/BlueFireAbility.java
new file mode 100644
index 00000000..5be58e4f
--- /dev/null
+++ b/src/com/projectkorra/projectkorra/ability/BlueFireAbility.java
@@ -0,0 +1,35 @@
+package com.projectkorra.projectkorra.ability;
+
+import org.bukkit.entity.Player;
+
+import com.projectkorra.projectkorra.Element;
+
+public abstract class BlueFireAbility extends FireAbility implements SubAbility {
+
+ public BlueFireAbility(final Player player) {
+ super(player);
+ }
+
+ @Override
+ public Class extends Ability> getParentAbility() {
+ return FireAbility.class;
+ }
+
+ @Override
+ public Element getElement() {
+ return Element.BLUE_FIRE;
+ }
+
+ public static double getDamageFactor() {
+ return getConfig().getDouble("Properties.Fire.BlueFire.DamageFactor");
+ }
+
+ public static double getCooldownFactor() {
+ return getConfig().getDouble("Properties.Fire.BlueFire.CooldownFactor");
+ }
+
+ public static double getRangeFactor() {
+ return getConfig().getDouble("Properties.Fire.BlueFire.RangeFactor");
+ }
+
+}
diff --git a/src/com/projectkorra/projectkorra/ability/ElementalAbility.java b/src/com/projectkorra/projectkorra/ability/ElementalAbility.java
index b5146f40..6f8e9db8 100644
--- a/src/com/projectkorra/projectkorra/ability/ElementalAbility.java
+++ b/src/com/projectkorra/projectkorra/ability/ElementalAbility.java
@@ -80,6 +80,14 @@ public abstract class ElementalAbility extends CoreAbility {
public static boolean isEarth(final Material material) {
return getConfig().getStringList("Properties.Earth.EarthBlocks").contains(material.toString());
}
+
+ public static boolean isFire(final Block block) {
+ return block != null ? isFire(block.getType()) : false;
+ }
+
+ public static boolean isFire(final Material material) {
+ return material == Material.SOUL_FIRE || material == Material.FIRE;
+ }
public static boolean isFullMoon(final World world) {
final double days = Math.ceil(world.getFullTime() / 24000) + 1;
diff --git a/src/com/projectkorra/projectkorra/ability/FireAbility.java b/src/com/projectkorra/projectkorra/ability/FireAbility.java
index 6b5f1ab4..7460a712 100644
--- a/src/com/projectkorra/projectkorra/ability/FireAbility.java
+++ b/src/com/projectkorra/projectkorra/ability/FireAbility.java
@@ -1,7 +1,7 @@
package com.projectkorra.projectkorra.ability;
import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Random;
@@ -13,21 +13,21 @@ import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.World;
import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
import com.projectkorra.projectkorra.Element;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ProjectKorra;
+import com.projectkorra.projectkorra.Element.SubElement;
import com.projectkorra.projectkorra.ability.util.Collision;
import com.projectkorra.projectkorra.configuration.ConfigManager;
-import com.projectkorra.projectkorra.firebending.BlazeArc;
-import com.projectkorra.projectkorra.util.Information;
import com.projectkorra.projectkorra.util.ParticleEffect;
+import com.projectkorra.projectkorra.util.TempBlock;
public abstract class FireAbility extends ElementalAbility {
- private static final Map TEMP_FIRE = new ConcurrentHashMap();
+ private static final Map SOURCE_PLAYERS = new ConcurrentHashMap<>();
public FireAbility(final Player player) {
super(player);
@@ -52,10 +52,17 @@ public abstract class FireAbility extends ElementalAbility {
public void handleCollision(final Collision collision) {
super.handleCollision(collision);
if (collision.isRemovingFirst()) {
- ParticleEffect.BLOCK_CRACK.display(collision.getLocationFirst(), 10, 1, 1, 1, 0.1, Material.FIRE.createBlockData());
+ ParticleEffect.BLOCK_CRACK.display(collision.getLocationFirst(), 10, 1, 1, 1, 0.1, getFireType().createBlockData());
}
}
-
+ /**
+ *
+ * @return Material based on whether the player is a Blue Firebender, SOUL_FIRE if true, FIRE if false.
+ */
+ public Material getFireType() {
+ return getBendingPlayer().canUseSubElement(SubElement.BLUE_FIRE) ? Material.SOUL_FIRE : Material.FIRE;
+ }
+
/**
* Returns if fire is allowed to completely replace blocks or if it should
* place a temp fire block.
@@ -68,23 +75,15 @@ public abstract class FireAbility extends ElementalAbility {
* Creates a fire block meant to replace other blocks but reverts when the
* fire dissipates or is destroyed.
*/
- public static void createTempFire(final Location loc) {
- if (ElementalAbility.isAir(loc.getBlock().getType())) {
- loc.getBlock().setType(Material.FIRE);
- return;
+ public void createTempFire(final Location loc) {
+ createTempFire(loc, getConfig().getLong("Properties.Fire.RevertTicks") + (long) ((new Random()).nextDouble() * getConfig().getLong("Properties.Fire.RevertTicks")));
+ }
+
+ public void createTempFire(final Location loc, final long time) {
+ if(isIgnitable(loc.getBlock())) {
+ new TempBlock(loc.getBlock(), getFireType().createBlockData(), time);
+ SOURCE_PLAYERS.put(loc.getBlock(), this.getPlayer());
}
- Information info = new Information();
- final long time = getConfig().getLong("Properties.Fire.RevertTicks") + (long) ((new Random()).nextDouble() * getConfig().getLong("Properties.Fire.RevertTicks"));
- if (TEMP_FIRE.containsKey(loc)) {
- info = TEMP_FIRE.get(loc);
- } else {
- info.setBlock(loc.getBlock());
- info.setLocation(loc);
- info.setState(loc.getBlock().getState());
- }
- info.setTime(time + System.currentTimeMillis());
- loc.getBlock().setType(Material.FIRE);
- TEMP_FIRE.put(loc, info);
}
public double getDayFactor(final double value) {
@@ -118,7 +117,7 @@ public abstract class FireAbility extends ElementalAbility {
}
public static boolean isIgnitable(final Block block) {
- return block != null ? isIgnitable(block.getType()) : false;
+ return (isIgnitable(block.getType()) && Arrays.asList(getTransparentMaterials()).contains(block.getType())) || (GeneralMethods.isSolid(block.getRelative(BlockFace.DOWN)) && isAir(block.getType()));
}
public static boolean isIgnitable(final Material material) {
@@ -147,7 +146,6 @@ public abstract class FireAbility extends ElementalAbility {
final float pitch = (float) getConfig().getDouble("Properties.Fire.CombustionSound.Pitch");
Sound sound = Sound.ENTITY_FIREWORK_ROCKET_BLAST;
-
try {
sound = Sound.valueOf(getConfig().getString("Properties.Fire.CombustionSound.Sound"));
} catch (final IllegalArgumentException exception) {
@@ -158,8 +156,12 @@ public abstract class FireAbility extends ElementalAbility {
}
}
- public static void playFirebendingParticles(final Location loc, final int amount, final double xOffset, final double yOffset, final double zOffset) {
- ParticleEffect.FLAME.display(loc, amount, xOffset, yOffset, zOffset);
+ public void playFirebendingParticles(final Location loc, final int amount, final double xOffset, final double yOffset, final double zOffset) {
+ if (this.getBendingPlayer().canUseSubElement(SubElement.BLUE_FIRE)) {
+ ParticleEffect.SOUL_FIRE_FLAME.display(loc, amount, xOffset, yOffset, zOffset);
+ } else {
+ ParticleEffect.FLAME.display(loc, amount, xOffset, yOffset, zOffset);
+ }
}
public static void playFirebendingSound(final Location loc) {
@@ -168,7 +170,6 @@ public abstract class FireAbility extends ElementalAbility {
final float pitch = (float) getConfig().getDouble("Properties.Fire.FireSound.Pitch");
Sound sound = Sound.BLOCK_FIRE_AMBIENT;
-
try {
sound = Sound.valueOf(getConfig().getString("Properties.Fire.FireSound.Sound"));
} catch (final IllegalArgumentException exception) {
@@ -193,7 +194,6 @@ public abstract class FireAbility extends ElementalAbility {
final float pitch = (float) getConfig().getDouble("Properties.Fire.LightningSound.Pitch");
Sound sound = Sound.ENTITY_CREEPER_HURT;
-
try {
sound = Sound.valueOf(getConfig().getString("Properties.Fire.LightningSound.Sound"));
} catch (final IllegalArgumentException exception) {
@@ -203,48 +203,13 @@ public abstract class FireAbility extends ElementalAbility {
}
}
}
-
- /** Removes all temp fire that no longer needs to be there */
- public static void removeFire() {
- final Iterator it = TEMP_FIRE.keySet().iterator();
- while (it.hasNext()) {
- final Location loc = it.next();
- final Information info = TEMP_FIRE.get(loc);
- if (info.getLocation().getBlock().getType() != Material.FIRE && !ElementalAbility.isAir(info.getLocation().getBlock().getType())) {
- revertTempFire(loc);
- } else if (ElementalAbility.isAir(info.getBlock().getType()) || System.currentTimeMillis() > info.getTime()) {
- revertTempFire(loc);
- }
- }
- }
-
- /**
- * Revert the temp fire at the location if any is there.
- *
- * @param location The Location
- */
- public static void revertTempFire(final Location location) {
- if (!TEMP_FIRE.containsKey(location)) {
- return;
- }
- final Information info = TEMP_FIRE.get(location);
- if (info.getLocation().getBlock().getType() != Material.FIRE && !ElementalAbility.isAir(info.getLocation().getBlock().getType())) {
- if (info.getState().getType().isBurnable() && !info.getState().getType().isOccluding()) {
- final ItemStack itemStack = new ItemStack(info.getState().getType(), 1);
- info.getState().getBlock().getWorld().dropItemNaturally(info.getLocation(), itemStack);
- }
- } else {
- info.getBlock().setType(info.getState().getType());
- info.getBlock().setBlockData(info.getState().getBlockData());
- }
- TEMP_FIRE.remove(location);
- }
-
+
public static void stopBending() {
- BlazeArc.removeAllCleanup();
- for (final Location loc : TEMP_FIRE.keySet()) {
- revertTempFire(loc);
- }
+ SOURCE_PLAYERS.clear();
+ }
+
+ public static Map getSourcePlayers() {
+ return SOURCE_PLAYERS;
}
}
diff --git a/src/com/projectkorra/projectkorra/airbending/AirBlast.java b/src/com/projectkorra/projectkorra/airbending/AirBlast.java
index 986d15b9..15774a90 100644
--- a/src/com/projectkorra/projectkorra/airbending/AirBlast.java
+++ b/src/com/projectkorra/projectkorra/airbending/AirBlast.java
@@ -26,6 +26,7 @@ import com.projectkorra.projectkorra.BendingPlayer;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.ability.AirAbility;
+import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.ability.util.Collision;
import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.command.Commands;
@@ -301,7 +302,7 @@ public class AirBlast extends AirAbility {
final Block block = this.location.getBlock();
for (final Block testblock : GeneralMethods.getBlocksAroundPoint(this.location, this.radius)) {
- if (testblock.getType() == Material.FIRE) {
+ if (FireAbility.isFire(testblock.getType())) {
testblock.setType(Material.AIR);
testblock.getWorld().playEffect(testblock.getLocation(), Effect.EXTINGUISH, 0);
continue;
diff --git a/src/com/projectkorra/projectkorra/airbending/AirShield.java b/src/com/projectkorra/projectkorra/airbending/AirShield.java
index 80d2d69f..97ec55db 100644
--- a/src/com/projectkorra/projectkorra/airbending/AirShield.java
+++ b/src/com/projectkorra/projectkorra/airbending/AirShield.java
@@ -14,6 +14,7 @@ import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ability.AirAbility;
+import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.ability.util.Collision;
import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.avatar.AvatarState;
@@ -167,7 +168,7 @@ public class AirShield extends AirAbility {
}
for (final Block testblock : GeneralMethods.getBlocksAroundPoint(this.player.getLocation(), this.radius)) {
- if (testblock.getType() == Material.FIRE) {
+ if (FireAbility.isFire(testblock.getType())) {
testblock.setType(Material.AIR);
testblock.getWorld().playEffect(testblock.getLocation(), Effect.EXTINGUISH, 0);
}
diff --git a/src/com/projectkorra/projectkorra/airbending/AirSwipe.java b/src/com/projectkorra/projectkorra/airbending/AirSwipe.java
index 999bfa45..1fb81ce8 100644
--- a/src/com/projectkorra/projectkorra/airbending/AirSwipe.java
+++ b/src/com/projectkorra/projectkorra/airbending/AirSwipe.java
@@ -21,6 +21,7 @@ import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.ability.AirAbility;
import com.projectkorra.projectkorra.ability.CoreAbility;
import com.projectkorra.projectkorra.ability.ElementalAbility;
+import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.ability.util.Collision;
import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.command.Commands;
@@ -157,7 +158,7 @@ public class AirSwipe extends AirAbility {
}
for (final Block testblock : GeneralMethods.getBlocksAroundPoint(location, this.radius)) {
- if (testblock.getType() == Material.FIRE) {
+ if (FireAbility.isFire(testblock.getType())) {
testblock.setType(Material.AIR);
}
}
diff --git a/src/com/projectkorra/projectkorra/command/AddCommand.java b/src/com/projectkorra/projectkorra/command/AddCommand.java
index edd03fe3..ee0a0105 100644
--- a/src/com/projectkorra/projectkorra/command/AddCommand.java
+++ b/src/com/projectkorra/projectkorra/command/AddCommand.java
@@ -109,7 +109,7 @@ public class AddCommand extends PKCommand {
if (elements.length() > 1) {
elements.append(ChatColor.YELLOW + ", ");
}
- elements.append(e.getColor() + e.getName());
+ elements.append(e.toString());
bPlayer.getSubElements().clear();
for (final SubElement sub : Element.getAllSubElements()) {
@@ -177,18 +177,18 @@ public class AddCommand extends PKCommand {
// send the message.
final ChatColor color = e.getColor();
if (!(sender instanceof Player) || !((Player) sender).equals(target)) {
- if (e != Element.AIR && e != Element.EARTH) {
- GeneralMethods.sendBrandingMessage(sender, color + this.addedOtherCFW.replace("{target}", ChatColor.DARK_AQUA + target.getName() + color).replace("{element}", e.getName() + e.getType().getBender()));
- GeneralMethods.sendBrandingMessage(target, color + this.addedCFW.replace("{element}", e.getName() + e.getType().getBender()));
+ if (e != Element.AIR && e != Element.EARTH && e != Element.BLUE_FIRE) {
+ GeneralMethods.sendBrandingMessage(sender, color + this.addedOtherCFW.replace("{target}", ChatColor.DARK_AQUA + target.getName() + color).replace("{element}", e.toString() + e.getType().getBender()));
+ GeneralMethods.sendBrandingMessage(target, color + this.addedCFW.replace("{element}", e.toString() + e.getType().getBender()));
} else {
- GeneralMethods.sendBrandingMessage(sender, color + this.addedOtherAE.replace("{target}", ChatColor.DARK_AQUA + target.getName() + color).replace("{element}", e.getName() + e.getType().getBender()));
- GeneralMethods.sendBrandingMessage(target, color + this.addedAE.replace("{element}", e.getName() + e.getType().getBender()));
+ GeneralMethods.sendBrandingMessage(sender, color + this.addedOtherAE.replace("{target}", ChatColor.DARK_AQUA + target.getName() + color).replace("{element}", e.toString() + e.getType().getBender()));
+ GeneralMethods.sendBrandingMessage(target, color + this.addedAE.replace("{element}", e.toString() + e.getType().getBender()));
}
} else {
if (e != Element.AIR && e != Element.EARTH) {
- GeneralMethods.sendBrandingMessage(target, color + this.addedCFW.replace("{element}", e.getName() + e.getType().getBender()));
+ GeneralMethods.sendBrandingMessage(target, color + this.addedCFW.replace("{element}", e.toString() + e.getType().getBender()));
} else {
- GeneralMethods.sendBrandingMessage(target, color + this.addedAE.replace("{element}", e.getName() + e.getType().getBender()));
+ GeneralMethods.sendBrandingMessage(target, color + this.addedAE.replace("{element}", e.toString() + e.getType().getBender()));
}
}
@@ -213,16 +213,16 @@ public class AddCommand extends PKCommand {
if (!(sender instanceof Player) || !((Player) sender).equals(target)) {
if (e != Element.AIR && e != Element.EARTH) {
- GeneralMethods.sendBrandingMessage(sender, color + this.addedOtherCFW.replace("{target}", ChatColor.DARK_AQUA + target.getName() + color).replace("{element}", sub.getName() + sub.getType().getBender()));
+ GeneralMethods.sendBrandingMessage(sender, color + this.addedOtherCFW.replace("{target}", ChatColor.DARK_AQUA + target.getName() + color).replace("{element}", sub.toString() + sub.getType().getBender()));
} else {
- GeneralMethods.sendBrandingMessage(sender, color + this.addedOtherAE.replace("{target}", ChatColor.DARK_AQUA + target.getName() + color).replace("{element}", sub.getName() + sub.getType().getBender()));
+ GeneralMethods.sendBrandingMessage(sender, color + this.addedOtherAE.replace("{target}", ChatColor.DARK_AQUA + target.getName() + color).replace("{element}", sub.toString() + sub.getType().getBender()));
}
} else {
if (e != Element.AIR && e != Element.EARTH) {
- GeneralMethods.sendBrandingMessage(target, color + this.addedCFW.replace("{element}", sub.getName() + sub.getType().getBender()));
+ GeneralMethods.sendBrandingMessage(target, color + this.addedCFW.replace("{element}", sub.toString() + sub.getType().getBender()));
} else {
- GeneralMethods.sendBrandingMessage(target, color + this.addedAE.replace("{element}", sub.getName() + sub.getType().getBender()));
+ GeneralMethods.sendBrandingMessage(target, color + this.addedAE.replace("{element}", sub.toString() + sub.getType().getBender()));
}
}
GeneralMethods.saveSubElements(bPlayer);
@@ -268,6 +268,7 @@ public class AddCommand extends PKCommand {
l.add("Plant");
l.add("Sand");
l.add("Spiritual");
+ l.add("BlueFire");
for (final SubElement e : Element.getAddonSubElements()) {
l.add(e.getName());
}
diff --git a/src/com/projectkorra/projectkorra/command/DisplayCommand.java b/src/com/projectkorra/projectkorra/command/DisplayCommand.java
index 4038ca98..9bb6c906 100644
--- a/src/com/projectkorra/projectkorra/command/DisplayCommand.java
+++ b/src/com/projectkorra/projectkorra/command/DisplayCommand.java
@@ -265,11 +265,11 @@ public class DisplayCommand extends PKCommand {
sender.sendMessage(ChatColor.YELLOW + "Combos: " + ChatColor.GOLD + "/bending display ChiCombos");
sender.sendMessage(ChatColor.YELLOW + "Passives: " + ChatColor.GOLD + "/bending display ChiPassives");
} else {
- sender.sendMessage(element.getSubColor() + "Combos: " + element.getColor() + "/bending display " + element.getName() + "Combos");
- sender.sendMessage(element.getSubColor() + "Passives: " + element.getColor() + "/bending display " + element.getName() + "Passives");
+ sender.sendMessage(element.getSubColor() + "Combos: " + element.getColor() + "/bending display " + element.toString() + "Combos");
+ sender.sendMessage(element.getSubColor() + "Passives: " + element.getColor() + "/bending display " + element.toString() + "Passives");
for (final SubElement sub : Element.getSubElements(element)) {
if (sender.hasPermission("bending." + element.getName().toLowerCase() + "." + sub.getName().toLowerCase())) {
- sender.sendMessage(sub.getColor() + sub.getName() + " abilities: " + element.getColor() + "/bending display " + sub.getName());
+ sender.sendMessage(sub.toString() + " abilities: " + element.getColor() + "/bending display " + sub.toString());
}
}
}
@@ -370,6 +370,7 @@ public class DisplayCommand extends PKCommand {
list.add("Plantbending");
list.add("Sand");
list.add("Spiritual");
+ list.add("BlueFire");
for (final SubElement se : Element.getAddonSubElements()) {
list.add(se.getName());
diff --git a/src/com/projectkorra/projectkorra/command/RemoveCommand.java b/src/com/projectkorra/projectkorra/command/RemoveCommand.java
index cd867a16..2e56d279 100644
--- a/src/com/projectkorra/projectkorra/command/RemoveCommand.java
+++ b/src/com/projectkorra/projectkorra/command/RemoveCommand.java
@@ -57,7 +57,7 @@ public class RemoveCommand extends PKCommand {
senderBPlayer.getSubElements().remove(e);
GeneralMethods.saveSubElements(senderBPlayer);
GeneralMethods.removeUnusableAbilities(sender.getName());
- GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementSelf.replace("{element}", e.getName() + e.getType().getBending()).replace("{sender}", ChatColor.DARK_AQUA + sender.getName() + e.getColor()));
+ GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementSelf.replace("{element}", e.toString() + e.getType().getBending()).replace("{sender}", ChatColor.DARK_AQUA + sender.getName() + e.getColor()));
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeSubElementEvent(sender, player, (SubElement) e, com.projectkorra.projectkorra.event.PlayerChangeSubElementEvent.Result.REMOVE));
} else {
GeneralMethods.sendBrandingMessage(sender, ChatColor.RED + this.wrongElementSelf);
@@ -73,7 +73,7 @@ public class RemoveCommand extends PKCommand {
GeneralMethods.saveSubElements(senderBPlayer);
GeneralMethods.removeUnusableAbilities(sender.getName());
- GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementSelf.replace("{element}", e.getName() + e.getType().getBending()));
+ GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementSelf.replace("{element}", e.toString() + e.getType().getBending()));
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, (Player) sender, e, Result.REMOVE));
return;
} else {
@@ -123,8 +123,8 @@ public class RemoveCommand extends PKCommand {
}
GeneralMethods.removeUnusableAbilities(player.getName());
- GeneralMethods.sendBrandingMessage(player, e.getColor() + this.succesfullyRemovedElementTarget.replace("{element}", e.getName() + e.getType().getBending()).replace("{sender}", ChatColor.DARK_AQUA + sender.getName() + e.getColor()));
- GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementTargetConfirm.replace("{element}", e.getName() + e.getType().getBending()).replace("{target}", ChatColor.DARK_AQUA + player.getName() + e.getColor()));
+ GeneralMethods.sendBrandingMessage(player, e.getColor() + this.succesfullyRemovedElementTarget.replace("{element}", e.toString() + e.getType().getBending()).replace("{sender}", ChatColor.DARK_AQUA + sender.getName() + e.getColor()));
+ GeneralMethods.sendBrandingMessage(sender, e.getColor() + this.succesfullyRemovedElementTargetConfirm.replace("{element}", e.toString() + e.getType().getBending()).replace("{target}", ChatColor.DARK_AQUA + player.getName() + e.getColor()));
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, player, e, Result.REMOVE));
return;
}
@@ -189,6 +189,7 @@ public class RemoveCommand extends PKCommand {
l.add("Plant");
l.add("Sand");
l.add("Spiritual");
+ l.add("BlueFire");
for (final SubElement e : Element.getAddonSubElements()) {
l.add(e.getName());
diff --git a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java
index f3408e79..3c607726 100644
--- a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java
+++ b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java
@@ -442,6 +442,8 @@ public class ConfigManager {
final ArrayList earthBlocks = new ArrayList();
earthBlocks.add(Material.DIRT.toString());
+ earthBlocks.add(Material.COARSE_DIRT.toString());
+ earthBlocks.add(Material.PODZOL.toString());
earthBlocks.add(Material.MYCELIUM.toString());
earthBlocks.add(Material.STONE.toString());
earthBlocks.add(Material.GRAVEL.toString());
@@ -460,14 +462,20 @@ public class ConfigManager {
earthBlocks.add(Material.ANDESITE.toString());
earthBlocks.add(Material.GRANITE.toString());
earthBlocks.add(Material.DIORITE.toString());
+ earthBlocks.add(Material.BASALT.toString());
+ earthBlocks.add(Material.ANCIENT_DEBRIS.toString());
+ earthBlocks.add(Material.BLACKSTONE.toString());
final ArrayList metalBlocks = new ArrayList();
metalBlocks.add(Material.IRON_ORE.toString());
metalBlocks.add(Material.GOLD_ORE.toString());
metalBlocks.add(Material.NETHER_QUARTZ_ORE.toString());
+ earthBlocks.add(Material.GILDED_BLACKSTONE.toString());
metalBlocks.add(Material.IRON_BLOCK.toString());
metalBlocks.add(Material.GOLD_BLOCK.toString());
metalBlocks.add(Material.QUARTZ_BLOCK.toString());
+ metalBlocks.add(Material.CHAIN.toString());
+ metalBlocks.add(Material.NETHERITE_BLOCK.toString());
final ArrayList sandBlocks = new ArrayList();
sandBlocks.add(Material.SAND.toString());
@@ -512,12 +520,20 @@ public class ConfigManager {
plantBlocks.add(Material.SUNFLOWER.toString());
plantBlocks.add(Material.POPPY.toString());
plantBlocks.add(Material.FERN.toString());
+ plantBlocks.add(Material.LILY_OF_THE_VALLEY.toString());
+ plantBlocks.add(Material.WITHER_ROSE.toString());
+ plantBlocks.add(Material.CORNFLOWER.toString());
plantBlocks.add(Material.LARGE_FERN.toString());
plantBlocks.add(Material.RED_MUSHROOM.toString());
plantBlocks.add(Material.RED_MUSHROOM_BLOCK.toString());
plantBlocks.add(Material.BROWN_MUSHROOM.toString());
plantBlocks.add(Material.BROWN_MUSHROOM_BLOCK.toString());
plantBlocks.add(Material.MUSHROOM_STEM.toString());
+ plantBlocks.add(Material.WARPED_ROOTS.toString());
+ plantBlocks.add(Material.CRIMSON_ROOTS.toString());
+ plantBlocks.add(Material.TWISTING_VINES_PLANT.toString());
+ plantBlocks.add(Material.WEEPING_VINES_PLANT.toString());
+ plantBlocks.add(Material.NETHER_SPROUTS.toString());
plantBlocks.add(Material.CACTUS.toString());
plantBlocks.add(Material.PUMPKIN.toString());
plantBlocks.add(Material.PUMPKIN_STEM.toString());
@@ -633,7 +649,10 @@ public class ConfigManager {
config.addDefault("Properties.Fire.LightningSound.Sound", "ENTITY_CREEPER_HURT");
config.addDefault("Properties.Fire.LightningSound.Volume", 1);
config.addDefault("Properties.Fire.LightningSound.Pitch", 0);
-
+ config.addDefault("Properties.Fire.BlueFire.DamageFactor", 1.1);
+ config.addDefault("Properties.Fire.BlueFire.CooldownFactor", .9);
+ config.addDefault("Properties.Fire.BlueFire.RangeFactor", 1.2);
+
config.addDefault("Properties.Chi.CanBendWithWeapons", true);
final ArrayList disabledWorlds = new ArrayList();
diff --git a/src/com/projectkorra/projectkorra/firebending/BlazeArc.java b/src/com/projectkorra/projectkorra/firebending/BlazeArc.java
index 94184f74..500e3bea 100644
--- a/src/com/projectkorra/projectkorra/firebending/BlazeArc.java
+++ b/src/com/projectkorra/projectkorra/firebending/BlazeArc.java
@@ -1,19 +1,14 @@
package com.projectkorra.projectkorra.firebending;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
import org.bukkit.Location;
-import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
-import org.bukkit.block.BlockState;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
-import com.projectkorra.projectkorra.BendingPlayer;
-import com.projectkorra.projectkorra.Element;
+import com.projectkorra.projectkorra.Element.SubElement;
import com.projectkorra.projectkorra.GeneralMethods;
+import com.projectkorra.projectkorra.ability.BlueFireAbility;
import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth;
@@ -21,9 +16,6 @@ import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth;
public class BlazeArc extends FireAbility {
private static final long DISSIPATE_REMOVE_TIME = 400;
- private static final Map IGNITED_BLOCKS = new ConcurrentHashMap<>();
- private static final Map IGNITED_TIMES = new ConcurrentHashMap<>();
- private static final Map REPLACED_BLOCKS = new ConcurrentHashMap<>();
private long time;
private long interval;
@@ -39,7 +31,12 @@ public class BlazeArc extends FireAbility {
super(player);
this.range = this.getDayFactor(range);
this.speed = getConfig().getLong("Abilities.Fire.Blaze.Speed");
- this.interval = (long) (1000. / this.speed);
+ this.interval = (long) (1000.0 / this.speed);
+
+ if(bPlayer.canUseSubElement(SubElement.BLUE_FIRE)) {
+ this.range += BlueFireAbility.getRangeFactor() * range - range;
+ }
+
this.origin = location.clone();
this.location = this.origin.clone();
@@ -53,19 +50,17 @@ public class BlazeArc extends FireAbility {
}
private void ignite(final Block block) {
- if (block.getType() != Material.FIRE && !isAir(block.getType())) {
+ if (!isFire(block.getType()) && !isAir(block.getType())) {
if (canFireGrief()) {
if (isPlant(block) || isSnow(block)) {
new PlantRegrowth(this.player, block);
}
- } else if (block.getType() != Material.FIRE) {
- REPLACED_BLOCKS.put(block.getLocation(), block.getState());
}
}
- block.setType(Material.FIRE);
- IGNITED_BLOCKS.put(block, this.player);
- IGNITED_TIMES.put(block, System.currentTimeMillis());
+ if (isIgnitable(block)) {
+ createTempFire(block.getLocation(), DISSIPATE_REMOVE_TIME);
+ }
}
@Override
@@ -78,10 +73,9 @@ public class BlazeArc extends FireAbility {
this.time = System.currentTimeMillis();
final Block block = this.location.getBlock();
- if (block.getType() == Material.FIRE) {
+ if (isFire(block.getType())) {
return;
- }
-
+ }
if (this.location.distanceSquared(this.origin) > this.range * this.range) {
this.remove();
return;
@@ -92,76 +86,26 @@ public class BlazeArc extends FireAbility {
final Block ignitable = getIgnitable(block);
if (ignitable != null) {
this.ignite(ignitable);
+ int difference = ignitable.getY() - this.location.getBlockY();
+ this.location.add(0, difference, 0);
+ } else {
+ remove();
+ return;
}
}
}
- public static void dissipateAll() {
- if (DISSIPATE_REMOVE_TIME != 0) {
- for (final Block block : IGNITED_TIMES.keySet()) {
- if (block.getType() != Material.FIRE) {
- removeBlock(block);
- } else {
- final long time = IGNITED_TIMES.get(block);
- if (System.currentTimeMillis() > time + DISSIPATE_REMOVE_TIME) {
- block.setType(Material.AIR);
- removeBlock(block);
- }
- }
+ public Block getIgnitable(final Block block) {
+
+ Block[] blockArr = { block.getRelative(BlockFace.UP), block, block.getRelative(BlockFace.DOWN) };
+
+ for (int i = 0; i < 3; i++) {
+ if (isFire(blockArr[i].getType()) || isIgnitable(blockArr[i])) {
+ return blockArr[i];
}
}
- }
- public static void handleDissipation() {
- for (final Block block : IGNITED_BLOCKS.keySet()) {
- if (block.getType() != Material.FIRE) {
- IGNITED_BLOCKS.remove(block);
- }
- }
- }
-
- public static Block getIgnitable(final Block block) {
- Block top = block;
-
- for (int i = 0; i < 2; i++) {
- if (GeneralMethods.isSolid(top.getRelative(BlockFace.DOWN))) {
- break;
- }
-
- top = top.getRelative(BlockFace.DOWN);
- }
-
- if (top.getType() == Material.FIRE) {
- return top;
- } else if (top.getType().isBurnable()) {
- return top;
- } else if (isAir(top.getType())) {
- return top;
- } else {
- return null;
- }
- }
-
- public static boolean isIgnitable(final Player player, final Block block) {
- if (!BendingPlayer.getBendingPlayer(player).hasElement(Element.FIRE)) {
- return false;
- } else if (!GeneralMethods.isSolid(block.getRelative(BlockFace.DOWN))) {
- return false;
- } else if (block.getType() == Material.FIRE) {
- return true;
- } else if (block.getType().isBurnable()) {
- return true;
- } else if (isAir(block.getType())) {
- return true;
- } else {
- return false;
- }
- }
-
- public static void removeAllCleanup() {
- for (final Block block : IGNITED_BLOCKS.keySet()) {
- removeBlock(block);
- }
+ return null;
}
public static void removeAroundPoint(final Location location, final double radius) {
@@ -174,20 +118,6 @@ public class BlazeArc extends FireAbility {
}
}
- public static void removeBlock(final Block block) {
- if (IGNITED_BLOCKS.containsKey(block)) {
- IGNITED_BLOCKS.remove(block);
- }
- if (IGNITED_TIMES.containsKey(block)) {
- IGNITED_TIMES.remove(block);
- }
- if (REPLACED_BLOCKS.containsKey(block.getLocation())) {
- block.setType(REPLACED_BLOCKS.get(block.getLocation()).getType());
- block.setBlockData(REPLACED_BLOCKS.get(block.getLocation()).getBlockData());
- REPLACED_BLOCKS.remove(block.getLocation());
- }
- }
-
@Override
public String getName() {
return "Blaze";
@@ -268,18 +198,6 @@ public class BlazeArc extends FireAbility {
return DISSIPATE_REMOVE_TIME;
}
- public static Map getIgnitedBlocks() {
- return IGNITED_BLOCKS;
- }
-
- public static Map getIgnitedTimes() {
- return IGNITED_TIMES;
- }
-
- public static Map getReplacedBlocks() {
- return REPLACED_BLOCKS;
- }
-
public void setLocation(final Location location) {
this.location = location;
}
diff --git a/src/com/projectkorra/projectkorra/firebending/FireBlast.java b/src/com/projectkorra/projectkorra/firebending/FireBlast.java
index b8d674b6..c6481f96 100644
--- a/src/com/projectkorra/projectkorra/firebending/FireBlast.java
+++ b/src/com/projectkorra/projectkorra/firebending/FireBlast.java
@@ -6,9 +6,12 @@ import java.util.Random;
import org.bukkit.Location;
import org.bukkit.Material;
+import org.bukkit.block.BlastFurnace;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.Campfire;
import org.bukkit.block.Furnace;
+import org.bukkit.block.Smoker;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@@ -16,7 +19,9 @@ import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ProjectKorra;
+import com.projectkorra.projectkorra.Element.SubElement;
import com.projectkorra.projectkorra.ability.AirAbility;
+import com.projectkorra.projectkorra.ability.BlueFireAbility;
import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.ability.util.Collision;
import com.projectkorra.projectkorra.attribute.Attribute;
@@ -24,7 +29,6 @@ import com.projectkorra.projectkorra.avatar.AvatarState;
import com.projectkorra.projectkorra.command.Commands;
import com.projectkorra.projectkorra.firebending.util.FireDamageTimer;
import com.projectkorra.projectkorra.util.DamageHandler;
-import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth;
public class FireBlast extends FireAbility {
@@ -53,7 +57,6 @@ public class FireBlast extends FireAbility {
@Attribute(Attribute.KNOCKBACK)
private double knockback;
private double flameRadius;
- private double smokeRadius;
private Random random;
private Location location;
private Location origin;
@@ -69,17 +72,17 @@ public class FireBlast extends FireAbility {
this.setFields();
this.safeBlocks = safeBlocks;
- this.damage = damage;
this.location = location.clone();
this.origin = location.clone();
this.direction = direction.clone().normalize();
- this.range = this.getDayFactor(this.range);
- this.damage = this.getDayFactor(damage);
+
+ // The following code determines the total additive modifier between Blue Fire & Day Modifiers
+ this.applyModifiers();
this.start();
}
-
+
public FireBlast(final Player player) {
super(player);
@@ -91,18 +94,34 @@ public class FireBlast extends FireAbility {
this.setFields();
this.isFireBurst = false;
- this.damage = this.getDayFactor(getConfig().getDouble("Abilities.Fire.FireBlast.Damage"));
+ this.damage = getConfig().getDouble("Abilities.Fire.FireBlast.Damage");
this.safeBlocks = new ArrayList<>();
- this.range = this.getDayFactor(this.range);
this.location = player.getEyeLocation();
this.origin = player.getEyeLocation();
this.direction = player.getEyeLocation().getDirection().normalize();
this.location = this.location.add(this.direction.clone());
+
+ // The following code determines the total additive modifier between Blue Fire & Day Modifiers
+ this.applyModifiers();
this.start();
this.bPlayer.addCooldown("FireBlast", this.cooldown);
}
+ private void applyModifiers() {
+ int damageMod = 0;
+ int rangeMod = 0;
+
+ damageMod = (int) (this.getDayFactor(damage) - damage);
+ rangeMod = (int) (this.getDayFactor(this.range) - this.range);
+
+ damageMod = (int) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (BlueFireAbility.getDamageFactor() * damage - damage) + damageMod : damageMod);
+ rangeMod = (int) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (BlueFireAbility.getRangeFactor() * range - range) + rangeMod : rangeMod);
+
+ this.range += rangeMod;
+ this.damage += damageMod;
+ }
+
private void setFields() {
this.isFireBurst = true;
this.powerFurnace = true;
@@ -116,28 +135,25 @@ public class FireBlast extends FireAbility {
this.fireTicks = getConfig().getDouble("Abilities.Fire.FireBlast.FireTicks");
this.knockback = getConfig().getDouble("Abilities.Fire.FireBlast.Knockback");
this.flameRadius = getConfig().getDouble("Abilities.Fire.FireBlast.FlameParticleRadius");
- this.smokeRadius = getConfig().getDouble("Abilities.Fire.FireBlast.SmokeParticleRadius");
this.random = new Random();
}
private void advanceLocation() {
if (this.isFireBurst) {
this.flameRadius += 0.06;
- this.smokeRadius += 0.06;
}
-
+
if (this.showParticles) {
- ParticleEffect.FLAME.display(this.location, 6, this.flameRadius, this.flameRadius, this.flameRadius);
- ParticleEffect.SMOKE_NORMAL.display(this.location, 3, this.smokeRadius, this.smokeRadius, this.smokeRadius);
+ playFirebendingParticles(this.location, 6, this.flameRadius, this.flameRadius, this.flameRadius);
}
-
+
if (GeneralMethods.checkDiagonalWall(this.location, this.direction)) {
this.remove();
return;
}
-
+
this.location = this.location.add(this.direction.clone().multiply(this.speedFactor));
-
+
if (this.random.nextInt(4) == 0) {
playFirebendingSound(this.location);
}
@@ -162,20 +178,13 @@ public class FireBlast extends FireAbility {
private void ignite(final Location location) {
for (final Block block : GeneralMethods.getBlocksAroundPoint(location, this.collisionRadius)) {
- if (BlazeArc.isIgnitable(this.player, block) && !this.safeBlocks.contains(block) && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) {
+ if (isIgnitable(block) && !this.safeBlocks.contains(block) && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) {
if (canFireGrief()) {
if (isPlant(block) || isSnow(block)) {
new PlantRegrowth(this.player, block);
}
- block.setType(Material.FIRE);
- } else {
- createTempFire(block.getLocation());
- }
-
- if (this.dissipate) {
- BlazeArc.getIgnitedBlocks().put(block, this.player);
- BlazeArc.getIgnitedTimes().put(block, System.currentTimeMillis());
}
+ createTempFire(block.getLocation());
}
}
}
@@ -200,9 +209,23 @@ public class FireBlast extends FireAbility {
if (block.getType() == Material.FURNACE && this.powerFurnace) {
final Furnace furnace = (Furnace) block.getState();
furnace.setBurnTime((short) 800);
- furnace.setCookTime((short) 800);
furnace.update();
- } else if (BlazeArc.isIgnitable(this.player, block.getRelative(BlockFace.UP))) {
+ } else if (block.getType() == Material.SMOKER && this.powerFurnace) {
+ final Smoker smoker = (Smoker) block.getState();
+ smoker.setBurnTime((short) 800);
+ smoker.update();
+ } else if (block.getType() == Material.BLAST_FURNACE && this.powerFurnace) {
+ final BlastFurnace blastF = (BlastFurnace) block.getState();
+ blastF.setBurnTime((short) 800);
+ blastF.update();
+ } else if (block instanceof Campfire) {
+ final Campfire campfire = (Campfire) block.getBlockData();
+ if(!campfire.isLit()) {
+ if(block.getType() != Material.SOUL_CAMPFIRE || bPlayer.canUseSubElement(SubElement.BLUE_FIRE)) {
+ campfire.setLit(true);
+ }
+ }
+ } else if (isIgnitable(block.getRelative(BlockFace.UP))) {
if ((this.isFireBurst && this.fireBurstIgnite) || !this.isFireBurst) {
this.ignite(this.location);
}
@@ -433,5 +456,4 @@ public class FireBlast extends FireAbility {
this.isFireBurst = isFireBurst;
}
-
}
diff --git a/src/com/projectkorra/projectkorra/firebending/FireBlastCharged.java b/src/com/projectkorra/projectkorra/firebending/FireBlastCharged.java
index 60df8218..8725a5dc 100644
--- a/src/com/projectkorra/projectkorra/firebending/FireBlastCharged.java
+++ b/src/com/projectkorra/projectkorra/firebending/FireBlastCharged.java
@@ -5,9 +5,7 @@ import java.util.Map;
import java.util.Random;
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.Entity;
@@ -17,7 +15,9 @@ import org.bukkit.entity.TNTPrimed;
import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.GeneralMethods;
+import com.projectkorra.projectkorra.Element.SubElement;
import com.projectkorra.projectkorra.ability.AirAbility;
+import com.projectkorra.projectkorra.ability.BlueFireAbility;
import com.projectkorra.projectkorra.ability.CoreAbility;
import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.attribute.Attribute;
@@ -79,19 +79,37 @@ public class FireBlastCharged extends FireAbility {
this.fireTicks = getConfig().getDouble("Abilities.Fire.FireBlast.Charged.FireTicks");
this.innerRadius = this.damageRadius / 2;
- if (isDay(player.getWorld())) {
- this.chargeTime = (long) (this.chargeTime / getDayFactor());
- this.maxDamage = this.getDayFactor(this.maxDamage);
- this.range = this.getDayFactor(this.range);
+
+ this.applyModifiers();
+
+ if (!player.getEyeLocation().getBlock().isLiquid()) {
+ this.start();
}
+ }
+
+ private void applyModifiers() {
+ long chargeTimeMod = 0;
+ int damageMod = 0;
+ int rangeMod = 0;
+
+ if (isDay(player.getWorld())) {
+ chargeTimeMod = (long) (this.chargeTime / getDayFactor()) - this.chargeTime;
+ damageMod = (int) (this.getDayFactor(this.maxDamage) - this.maxDamage);
+ rangeMod = (int) (this.getDayFactor(this.range) - this.range);
+ }
+
+ chargeTimeMod = (long) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (chargeTime / BlueFireAbility.getCooldownFactor() - chargeTime) + chargeTimeMod : chargeTimeMod);
+ damageMod = (int) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (BlueFireAbility.getDamageFactor() * maxDamage - maxDamage) + damageMod : damageMod);
+ rangeMod = (int) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (BlueFireAbility.getRangeFactor() * range - range) + rangeMod : rangeMod);
+
if (this.bPlayer.isAvatarState()) {
this.chargeTime = getConfig().getLong("Abilities.Avatar.AvatarState.Fire.FireBlast.Charged.ChargeTime");
this.maxDamage = getConfig().getDouble("Abilities.Avatar.AvatarState.Fire.FireBlast.Charged.Damage");
}
- if (!player.getEyeLocation().getBlock().isLiquid()) {
- this.start();
- }
+ this.chargeTime += chargeTimeMod;
+ this.maxDamage += damageMod;
+ this.range += rangeMod;
}
public static boolean annihilateBlasts(final Location location, final double radius, final Player source) {
@@ -207,8 +225,7 @@ public class FireBlastCharged extends FireAbility {
private void executeFireball() {
for (final Block block : GeneralMethods.getBlocksAroundPoint(this.location, this.collisionRadius)) {
- ParticleEffect.FLAME.display(block.getLocation(), 5, 0.5, 0.5, 0.5, 0);
- ParticleEffect.SMOKE_NORMAL.display(block.getLocation(), 2, 0.5, 0.5, 0.5, 0);
+ playFirebendingParticles(block.getLocation(), 5, 0.5, 0.5, 0.5);
if ((new Random()).nextInt(4) == 0) {
playFirebendingSound(this.location);
}
@@ -233,15 +250,8 @@ public class FireBlastCharged extends FireAbility {
private void ignite(final Location location) {
for (final Block block : GeneralMethods.getBlocksAroundPoint(location, this.collisionRadius)) {
- if (BlazeArc.isIgnitable(this.player, block)) {
- if (block.getType() != Material.FIRE) {
- BlazeArc.getReplacedBlocks().put(block.getLocation(), block.getState());
- }
- block.setType(Material.FIRE);
- if (this.dissipate) {
- BlazeArc.getIgnitedBlocks().put(block, this.player);
- BlazeArc.getIgnitedTimes().put(block, System.currentTimeMillis());
- }
+ if (isIgnitable(block)) {
+ createTempFire(block.getLocation());
}
}
}
@@ -282,7 +292,7 @@ public class FireBlastCharged extends FireAbility {
if (!this.launched && !this.charged) {
return;
} else if (!this.launched) {
- this.player.getWorld().playEffect(this.player.getEyeLocation(), Effect.MOBSPAWNER_FLAMES, 0, 3);
+ playFirebendingParticles(this.player.getEyeLocation().clone().add(this.player.getEyeLocation().getDirection().clone()), 3, .001, .001, .001);
return;
}
diff --git a/src/com/projectkorra/projectkorra/firebending/FireBurst.java b/src/com/projectkorra/projectkorra/firebending/FireBurst.java
index 268aeaa5..ed8147a1 100644
--- a/src/com/projectkorra/projectkorra/firebending/FireBurst.java
+++ b/src/com/projectkorra/projectkorra/firebending/FireBurst.java
@@ -3,7 +3,6 @@ package com.projectkorra.projectkorra.firebending;
import java.util.ArrayList;
import java.util.List;
-import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
@@ -12,6 +11,8 @@ import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ProjectKorra;
+import com.projectkorra.projectkorra.Element.SubElement;
+import com.projectkorra.projectkorra.ability.BlueFireAbility;
import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.attribute.Attribute;
@@ -49,15 +50,22 @@ public class FireBurst extends FireAbility {
return;
}
+ long chargeTimeMod = 0;
+
if (isDay(player.getWorld())) {
- this.chargeTime /= getDayFactor();
+ chargeTimeMod = (long) (this.getDayFactor(chargeTime) - chargeTime);
}
+
+ chargeTimeMod = (long) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (chargeTime / BlueFireAbility.getCooldownFactor() - chargeTime) + chargeTimeMod : chargeTimeMod);
+
if (this.bPlayer.isAvatarState()) {
this.chargeTime = getConfig().getLong("Abilities.Avatar.AvatarState.Fire.FireBurst.Damage");
this.damage = getConfig().getInt("Abilities.Avatar.AvatarState.Fire.FireBurst.Damage");
this.cooldown = getConfig().getLong("Abilities.Avatar.AvatarState.Fire.FireBurst.Cooldown");
}
+ this.chargeTime += chargeTimeMod;
+
this.start();
}
@@ -138,7 +146,8 @@ public class FireBurst extends FireAbility {
}
} else if (this.charged) {
final Location location = this.player.getEyeLocation();
- location.getWorld().playEffect(location, Effect.MOBSPAWNER_FLAMES, 4, 3);
+ location.add(location.getDirection());
+ playFirebendingParticles(location, 1, .01, .01, .01);
}
}
diff --git a/src/com/projectkorra/projectkorra/firebending/FireJet.java b/src/com/projectkorra/projectkorra/firebending/FireJet.java
index 68da1d7a..8c382942 100644
--- a/src/com/projectkorra/projectkorra/firebending/FireJet.java
+++ b/src/com/projectkorra/projectkorra/firebending/FireJet.java
@@ -14,7 +14,6 @@ import com.projectkorra.projectkorra.ability.ElementalAbility;
import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.airbending.AirSpout;
import com.projectkorra.projectkorra.attribute.Attribute;
-import com.projectkorra.projectkorra.util.ParticleEffect;
public class FireJet extends FireAbility {
@@ -57,7 +56,7 @@ public class FireJet extends FireAbility {
this.speed = this.getDayFactor(this.speed);
final Block block = player.getLocation().getBlock();
- if (BlazeArc.isIgnitable(player, block) || ElementalAbility.isAir(block.getType()) || block.getType() == Material.STONE_SLAB || block.getType() == Material.ACACIA_SLAB || block.getType() == Material.BIRCH_SLAB || block.getType() == Material.DARK_OAK_SLAB || block.getType() == Material.JUNGLE_SLAB || block.getType() == Material.OAK_SLAB || block.getType() == Material.SPRUCE_SLAB || isIlluminationTorch(block) || this.bPlayer.isAvatarState()) {
+ if (isIgnitable(block) || ElementalAbility.isAir(block.getType()) || block.getType() == Material.STONE_SLAB || block.getType() == Material.ACACIA_SLAB || block.getType() == Material.BIRCH_SLAB || block.getType() == Material.DARK_OAK_SLAB || block.getType() == Material.JUNGLE_SLAB || block.getType() == Material.OAK_SLAB || block.getType() == Material.SPRUCE_SLAB || isIlluminationTorch(block) || this.bPlayer.isAvatarState()) {
player.setVelocity(player.getEyeLocation().getDirection().clone().normalize().multiply(this.speed));
if (!canFireGrief()) {
if (ElementalAbility.isAir(block.getType())) {
@@ -65,7 +64,7 @@ public class FireJet extends FireAbility {
}
} else if (ElementalAbility.isAir(block.getType())) {
- block.setType(Material.FIRE);
+ createTempFire(block.getLocation());
}
this.flightHandler.createInstance(player, this.getName());
@@ -93,8 +92,7 @@ public class FireJet extends FireAbility {
playFirebendingSound(this.player.getLocation());
}
- ParticleEffect.FLAME.display(this.player.getLocation(), 20, 0.6, 0.6, 0.6);
- ParticleEffect.SMOKE_NORMAL.display(this.player.getLocation(), 10, 0.6, 0.6, 0.6);
+ playFirebendingParticles(this.player.getLocation(), 10, 0.3, 0.3, 0.3);
double timefactor;
if (this.bPlayer.isAvatarState() && this.avatarStateToggled) {
diff --git a/src/com/projectkorra/projectkorra/firebending/FireManipulation.java b/src/com/projectkorra/projectkorra/firebending/FireManipulation.java
index 63d63a57..e4143a80 100644
--- a/src/com/projectkorra/projectkorra/firebending/FireManipulation.java
+++ b/src/com/projectkorra/projectkorra/firebending/FireManipulation.java
@@ -15,7 +15,6 @@ import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.util.DamageHandler;
-import com.projectkorra.projectkorra.util.ParticleEffect;
public class FireManipulation extends FireAbility {
@@ -113,8 +112,7 @@ public class FireManipulation extends FireAbility {
this.points.remove(point);
return;
}
- ParticleEffect.FLAME.display(point, 12, 0.25, 0.25, 0.25);
- ParticleEffect.SMOKE_NORMAL.display(point, 6, 0.25, 0.25, 0.25);
+ playFirebendingParticles(point, 12, 0.25, 0.25, 0.25);
for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(point, 1.2D)) {
if (entity instanceof LivingEntity && entity.getUniqueId() != this.player.getUniqueId()) {
DamageHandler.damageEntity(entity, this.shieldDamage, this);
@@ -143,8 +141,7 @@ public class FireManipulation extends FireAbility {
for (final Location point : this.points.keySet()) {
final Vector direction = this.focalPoint.toVector().subtract(point.toVector());
point.add(direction.clone().multiply(this.streamSpeed / 5));
- ParticleEffect.FLAME.display(point, this.shieldParticles, 0.25, 0.25, 0.25);
- ParticleEffect.SMOKE_NORMAL.display(point, this.shieldParticles / 2, 0.25, 0.25, 0.25);
+ playFirebendingParticles(point, this.shieldParticles, 0.25, 0.25, 0.25);
}
} else {
Vector direction = this.player.getLocation().getDirection().clone();
@@ -173,8 +170,7 @@ public class FireManipulation extends FireAbility {
return;
}
- ParticleEffect.FLAME.display(this.shotPoint, this.streamParticles, 0.5, 0.5, 0.5, 0.01);
- ParticleEffect.SMOKE_NORMAL.display(this.shotPoint, this.streamParticles / 2, 0.5, 0.5, 0.5, 0.01);
+ playFirebendingParticles(this.shotPoint, this.streamParticles, 0.5, 0.5, 0.5);
for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(this.shotPoint, 2)) {
if (entity instanceof LivingEntity && entity.getUniqueId() != this.player.getUniqueId()) {
DamageHandler.damageEntity(entity, this.streamDamage, this);
diff --git a/src/com/projectkorra/projectkorra/firebending/FireShield.java b/src/com/projectkorra/projectkorra/firebending/FireShield.java
index 1c7ddc0c..f42af507 100644
--- a/src/com/projectkorra/projectkorra/firebending/FireShield.java
+++ b/src/com/projectkorra/projectkorra/firebending/FireShield.java
@@ -2,10 +2,7 @@ package com.projectkorra.projectkorra.firebending;
import java.util.Random;
-import org.bukkit.Effect;
import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@@ -17,7 +14,6 @@ import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.ability.util.Collision;
import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.firebending.util.FireDamageTimer;
-import com.projectkorra.projectkorra.util.ParticleEffect;
public class FireShield extends FireAbility {
@@ -125,11 +121,8 @@ public class FireShield extends FireAbility {
final double rtheta = Math.toRadians(theta);
final Location display = this.location.clone().add(this.shieldRadius / 1.5 * Math.cos(rphi) * Math.sin(rtheta), this.shieldRadius / 1.5 * Math.cos(rtheta), this.shieldRadius / 1.5 * Math.sin(rphi) * Math.sin(rtheta));
- if (this.random.nextInt(6) == 0) {
- ParticleEffect.SMOKE_NORMAL.display(display, 1, 0, 0, 0);
- }
if (this.random.nextInt(4) == 0) {
- ParticleEffect.FLAME.display(display, 1, 0.1, 0.1, 0.1, 0.013);
+ playFirebendingParticles(display, 1, 0.1, 0.1, 0.1);
}
if (this.random.nextInt(7) == 0) {
playFirebendingSound(display);
@@ -142,13 +135,6 @@ public class FireShield extends FireAbility {
this.increment = 20;
}
- for (final Block testblock : GeneralMethods.getBlocksAroundPoint(this.player.getLocation(), this.shieldRadius)) {
- if (testblock.getType() == Material.FIRE) {
- testblock.setType(Material.AIR);
- testblock.getWorld().playEffect(testblock.getLocation(), Effect.EXTINGUISH, 0);
- }
- }
-
for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(this.location, this.shieldRadius)) {
if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation())) {
continue;
@@ -165,15 +151,12 @@ public class FireShield extends FireAbility {
this.location = this.player.getEyeLocation().clone();
final Vector direction = this.location.getDirection();
this.location.add(direction.multiply(this.shieldRadius));
- ParticleEffect.FLAME.display(this.location, 3, 0.2, 0.2, 0.2, 0.00023);
+ playFirebendingParticles(this.location, 3, 0.2, 0.2, 0.2);
for (double theta = 0; theta < 360; theta += 20) {
final Vector vector = GeneralMethods.getOrthogonalVector(direction, theta, this.discRadius / 1.5);
final Location display = this.location.add(vector);
- if (this.random.nextInt(6) == 0) {
- ParticleEffect.SMOKE_NORMAL.display(display, 1, 0, 0, 0);
- }
- ParticleEffect.FLAME.display(display, 2, 0.3, 0.2, 0.3, 0.023);
+ playFirebendingParticles(display, 2, 0.3, 0.2, 0.3);
if (this.random.nextInt(4) == 0) {
playFirebendingSound(display);
}
diff --git a/src/com/projectkorra/projectkorra/firebending/HeatControl.java b/src/com/projectkorra/projectkorra/firebending/HeatControl.java
index 6cbf61b8..becc04d7 100644
--- a/src/com/projectkorra/projectkorra/firebending/HeatControl.java
+++ b/src/com/projectkorra/projectkorra/firebending/HeatControl.java
@@ -22,6 +22,7 @@ import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.BendingPlayer;
+import com.projectkorra.projectkorra.Element.SubElement;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.ability.FireAbility;
@@ -43,7 +44,7 @@ public class HeatControl extends FireAbility {
COOK, EXTINGUISH, MELT, SOLIDIFY
}
- private static final Material[] COOKABLE_MATERIALS = { Material.BEEF, Material.CHICKEN, Material.COD, Material.PORKCHOP, Material.POTATO, Material.RABBIT, Material.MUTTON, Material.SALMON, Material.KELP };
+ private static final Material[] COOKABLE_MATERIALS = { Material.BEEF, Material.CHICKEN, Material.COD, Material.PORKCHOP, Material.POTATO, Material.RABBIT, Material.MUTTON, Material.SALMON, Material.KELP, Material.WET_SPONGE, Material.CHORUS_FRUIT, Material.STICK };
private HeatControlType heatControlType;
@@ -194,7 +195,7 @@ public class HeatControl extends FireAbility {
for (final Block block : GeneralMethods.getBlocksAroundPoint(this.player.getLocation(), this.extinguishRadius)) {
final Material material = block.getType();
- if (material == Material.FIRE && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) {
+ if (isFire(material) && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) {
block.setType(Material.AIR);
block.getWorld().playEffect(block.getLocation(), Effect.EXTINGUISH, 0);
@@ -273,6 +274,14 @@ public class HeatControl extends FireAbility {
case KELP:
cooked = new ItemStack(Material.DRIED_KELP);
break;
+ case CHORUS_FRUIT:
+ cooked = new ItemStack(Material.POPPED_CHORUS_FRUIT);
+ break;
+ case WET_SPONGE:
+ cooked = new ItemStack(Material.SPONGE);
+ break;
+ case STICK:
+ cooked = bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? new ItemStack(Material.SOUL_TORCH) : new ItemStack(Material.TORCH);
default:
break;
}
@@ -281,7 +290,7 @@ public class HeatControl extends FireAbility {
}
public void displayCookParticles() {
- ParticleEffect.FLAME.display(this.player.getLocation().clone().add(0, 1, 0), 3, 0.5, 0.5, 0.5);
+ playFirebendingParticles(this.player.getLocation().clone().add(0, 1, 0), 3, 0.5, 0.5, 0.5);
ParticleEffect.SMOKE_NORMAL.display(this.player.getLocation().clone().add(0, 1, 0), 2, 0.5, 0.5, 0.5);
}
diff --git a/src/com/projectkorra/projectkorra/firebending/Illumination.java b/src/com/projectkorra/projectkorra/firebending/Illumination.java
index c7314a81..c16cb502 100644
--- a/src/com/projectkorra/projectkorra/firebending/Illumination.java
+++ b/src/com/projectkorra/projectkorra/firebending/Illumination.java
@@ -11,6 +11,7 @@ import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import com.projectkorra.projectkorra.Element;
+import com.projectkorra.projectkorra.Element.SubElement;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.attribute.Attribute;
@@ -112,9 +113,7 @@ public class Illumination extends FireAbility {
final Block standingBlock = this.player.getLocation().getBlock();
final Block standBlock = standingBlock.getRelative(BlockFace.DOWN);
- if (!BlazeArc.isIgnitable(this.player, standingBlock)) {
- return;
- } else if (!GeneralMethods.isSolid(standBlock)) {
+ if (!GeneralMethods.isSolid(standBlock)) {
return;
} else if (this.block != null && standingBlock.equals(this.block.getBlock())) {
return;
@@ -125,7 +124,7 @@ public class Illumination extends FireAbility {
}
this.revert();
- this.block = new TempBlock(standingBlock, Material.TORCH);
+ this.block = bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? new TempBlock(standingBlock, Material.SOUL_TORCH) : new TempBlock(standingBlock, Material.TORCH);
BLOCKS.put(this.block, this.player);
}
diff --git a/src/com/projectkorra/projectkorra/firebending/WallOfFire.java b/src/com/projectkorra/projectkorra/firebending/WallOfFire.java
index e11cd6c8..a45bb920 100644
--- a/src/com/projectkorra/projectkorra/firebending/WallOfFire.java
+++ b/src/com/projectkorra/projectkorra/firebending/WallOfFire.java
@@ -11,13 +11,14 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
+import com.projectkorra.projectkorra.Element.SubElement;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ability.AirAbility;
+import com.projectkorra.projectkorra.ability.BlueFireAbility;
import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.firebending.util.FireDamageTimer;
import com.projectkorra.projectkorra.util.DamageHandler;
-import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.util.TempBlock;
public class WallOfFire extends FireAbility {
@@ -72,13 +73,23 @@ public class WallOfFire extends FireAbility {
this.origin = GeneralMethods.getTargetedLocation(player, this.range);
+ int widthMod = 0;
+ int heightMod = 0;
+ long durationMod = 0;
+ int damageMod = 0;
+
if (isDay(player.getWorld())) {
- this.width = (int) this.getDayFactor(this.width);
- this.height = (int) this.getDayFactor(this.height);
- this.duration = (long) this.getDayFactor(this.duration);
- this.damage = (int) this.getDayFactor(this.damage);
+ widthMod = (int) this.getDayFactor(this.width) - this.width;
+ heightMod = (int) this.getDayFactor(this.height) - this.height;
+ durationMod = ((long) this.getDayFactor(this.duration) - this.duration);
+ damageMod = (int) (this.getDayFactor(this.damage) - this.damage);
}
+ widthMod = (int) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (BlueFireAbility.getRangeFactor() * width - width) + widthMod : widthMod);
+ heightMod = (int) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (BlueFireAbility.getRangeFactor() * height - height) + heightMod : heightMod);
+ durationMod = (int) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (duration / BlueFireAbility.getCooldownFactor() - duration) + durationMod : durationMod);
+ damageMod = (int) (bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? (BlueFireAbility.getDamageFactor() * damage - damage) + damageMod : damageMod);
+
if (this.bPlayer.isAvatarState()) {
this.width = getConfig().getInt("Abilities.Avatar.AvatarState.Fire.WallOfFire.Width");
this.height = getConfig().getInt("Abilities.Avatar.AvatarState.Fire.WallOfFire.Height");
@@ -87,6 +98,11 @@ public class WallOfFire extends FireAbility {
this.fireTicks = getConfig().getDouble("Abilities.Avatar.AvatarState.Fire.WallOfFire.FireTicks");
}
+ this.width += widthMod;
+ this.height += heightMod;
+ this.duration += durationMod;
+ this.damage += damageMod;
+
this.time = System.currentTimeMillis();
final Block block = this.origin.getBlock();
if (block.isLiquid() || GeneralMethods.isSolid(block)) {
@@ -147,9 +163,7 @@ public class WallOfFire extends FireAbility {
if (!this.isTransparent(block)) {
continue;
}
- ParticleEffect.FLAME.display(block.getLocation(), 3, 0.6, 0.6, 0.6);
- ParticleEffect.SMOKE_NORMAL.display(block.getLocation(), 2, 0.6, 0.6, 0.6);
-
+ playFirebendingParticles(block.getLocation(), 3, 0.6, 0.6, 0.6);
if (this.random.nextInt(7) == 0) {
playFirebendingSound(block.getLocation());
}
diff --git a/src/com/projectkorra/projectkorra/firebending/combo/FireComboStream.java b/src/com/projectkorra/projectkorra/firebending/combo/FireComboStream.java
index dd11a98c..de0a9917 100644
--- a/src/com/projectkorra/projectkorra/firebending/combo/FireComboStream.java
+++ b/src/com/projectkorra/projectkorra/firebending/combo/FireComboStream.java
@@ -15,6 +15,7 @@ import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.BendingPlayer;
+import com.projectkorra.projectkorra.Element.SubElement;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ability.CoreAbility;
import com.projectkorra.projectkorra.ability.ElementalAbility;
@@ -61,9 +62,9 @@ public class FireComboStream extends BukkitRunnable {
this.checkCollisionCounter = 0;
this.spread = 0;
this.collisionRadius = 2;
- this.particleEffect = ParticleEffect.FLAME;
this.player = player;
this.bPlayer = BendingPlayer.getBendingPlayer(player);
+ this.particleEffect = bPlayer.canUseSubElement(SubElement.BLUE_FIRE) ? ParticleEffect.SOUL_FIRE_FLAME : ParticleEffect.FLAME;
this.coreAbility = coreAbility;
this.direction = direction;
this.speed = speed;
diff --git a/src/com/projectkorra/projectkorra/firebending/combo/FireWheel.java b/src/com/projectkorra/projectkorra/firebending/combo/FireWheel.java
index fcbbda38..d963016d 100644
--- a/src/com/projectkorra/projectkorra/firebending/combo/FireWheel.java
+++ b/src/com/projectkorra/projectkorra/firebending/combo/FireWheel.java
@@ -21,7 +21,6 @@ import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.firebending.util.FireDamageTimer;
import com.projectkorra.projectkorra.util.ClickType;
import com.projectkorra.projectkorra.util.DamageHandler;
-import com.projectkorra.projectkorra.util.ParticleEffect;
public class FireWheel extends FireAbility implements ComboAbility {
@@ -139,7 +138,7 @@ public class FireWheel extends FireAbility implements ComboAbility {
final Vector newDir = this.direction.clone().multiply(this.radius * Math.cos(Math.toRadians(i)));
tempLoc.add(newDir);
tempLoc.setY(tempLoc.getY() + (this.radius * Math.sin(Math.toRadians(i))));
- ParticleEffect.FLAME.display(tempLoc, 0, 0, 0, 0, 1);
+ playFirebendingParticles(tempLoc, 0, 0, 0, 0);
}
for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(this.location, this.radius + 0.5)) {
diff --git a/src/com/projectkorra/projectkorra/firebending/combustion/Combustion.java b/src/com/projectkorra/projectkorra/firebending/combustion/Combustion.java
index 000884ef..0e6152a5 100644
--- a/src/com/projectkorra/projectkorra/firebending/combustion/Combustion.java
+++ b/src/com/projectkorra/projectkorra/firebending/combustion/Combustion.java
@@ -41,6 +41,8 @@ public class Combustion extends CombustionAbility {
private Location origin;
private Vector direction;
+ private int explosionCount;
+
public Combustion(final Player player) {
super(player);
@@ -59,6 +61,7 @@ public class Combustion extends CombustionAbility {
this.origin = player.getEyeLocation();
this.direction = player.getEyeLocation().getDirection().normalize();
this.location = this.origin.clone();
+ this.explosionCount = 0;
if (this.bPlayer.isAvatarState()) {
this.range = AvatarState.getValue(this.range);
@@ -103,13 +106,17 @@ public class Combustion extends CombustionAbility {
}
private void advanceLocation() {
- ParticleEffect.FIREWORKS_SPARK.display(this.location, 5, Math.random() / 2, Math.random() / 2, Math.random() / 2, 0);
- ParticleEffect.FLAME.display(this.location, 2, Math.random() / 2, Math.random() / 2, Math.random() / 2);
+ ParticleEffect.FIREWORKS_SPARK.display(this.location, 2, .001, .001, .001, 0);
+ if(explosionCount % 5 == 0)
+ ParticleEffect.EXPLOSION_LARGE.display(this.location, 1, .001, .001, .001, 0);
playCombustionSound(this.location);
this.location = this.location.add(this.direction.clone().multiply(this.speedFactor));
+ this.explosionCount++;
}
private void createExplosion(final Location block, final float power, final boolean canBreakBlocks) {
+ ParticleEffect.EXPLOSION_LARGE.display(block, 3, 2, 2, 2, 0);
+
if (canFireGrief()) {
block.getWorld().createExplosion(block.getX(), block.getY(), block.getZ(), power, true, canBreakBlocks);
}
@@ -121,6 +128,7 @@ public class Combustion extends CombustionAbility {
}
}
}
+
this.remove();
}
diff --git a/src/com/projectkorra/projectkorra/firebending/util/FirebendingManager.java b/src/com/projectkorra/projectkorra/firebending/util/FirebendingManager.java
index e62ef7d4..5221b047 100644
--- a/src/com/projectkorra/projectkorra/firebending/util/FirebendingManager.java
+++ b/src/com/projectkorra/projectkorra/firebending/util/FirebendingManager.java
@@ -1,8 +1,6 @@
package com.projectkorra.projectkorra.firebending.util;
import com.projectkorra.projectkorra.ProjectKorra;
-import com.projectkorra.projectkorra.ability.FireAbility;
-import com.projectkorra.projectkorra.firebending.BlazeArc;
public class FirebendingManager implements Runnable {
@@ -14,9 +12,6 @@ public class FirebendingManager implements Runnable {
@Override
public void run() {
- BlazeArc.handleDissipation();
FireDamageTimer.handleFlames();
- BlazeArc.dissipateAll();
- FireAbility.removeFire();
}
}
diff --git a/src/com/projectkorra/projectkorra/util/ActionBar.java b/src/com/projectkorra/projectkorra/util/ActionBar.java
index 90579d76..13a7311c 100644
--- a/src/com/projectkorra/projectkorra/util/ActionBar.java
+++ b/src/com/projectkorra/projectkorra/util/ActionBar.java
@@ -1,70 +1,15 @@
package com.projectkorra.projectkorra.util;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
import org.bukkit.entity.Player;
-import com.projectkorra.projectkorra.util.ReflectionHandler.PackageType;
+import net.md_5.bungee.api.ChatMessageType;
+import net.md_5.bungee.api.chat.TextComponent;
public class ActionBar {
- private static boolean initialised = false;
- private static Constructor> chatSer;
- private static Constructor> packetChat;
- public static Method getHandle;
- private static Field playerConnection;
- private static Method sendPacket;
- private static int version;
-
- static {
- try {
- version = Integer.parseInt(PackageType.getServerVersion().split("_")[1]);
- chatSer = ReflectionHandler.getConstructor(PackageType.MINECRAFT_SERVER.getClass("ChatComponentText"), String.class);
- if (version >= 12) {
- packetChat = PackageType.MINECRAFT_SERVER.getClass("PacketPlayOutChat").getConstructor(PackageType.MINECRAFT_SERVER.getClass("IChatBaseComponent"), PackageType.MINECRAFT_SERVER.getClass("ChatMessageType"));
- } else {
- packetChat = PackageType.MINECRAFT_SERVER.getClass("PacketPlayOutChat").getConstructor(PackageType.MINECRAFT_SERVER.getClass("IChatBaseComponent"), byte.class);
- }
- getHandle = ReflectionHandler.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle");
- playerConnection = ReflectionHandler.getField("EntityPlayer", PackageType.MINECRAFT_SERVER, false, "playerConnection");
- sendPacket = ReflectionHandler.getMethod(playerConnection.getType(), "sendPacket", PackageType.MINECRAFT_SERVER.getClass("Packet"));
- initialised = true;
- } catch (final ReflectiveOperationException e) {
- initialised = false;
- }
- }
-
- public static boolean isInitialised() {
- return initialised;
- }
-
- public static boolean sendActionBar(final String message, final Player... player) {
- if (!initialised) {
- return false;
- }
- try {
- final Object o = chatSer.newInstance(message);
- Object packet;
- if (version >= 12) {
- packet = packetChat.newInstance(o, PackageType.MINECRAFT_SERVER.getClass("ChatMessageType").getEnumConstants()[2]);
- } else {
- packet = packetChat.newInstance(o, (byte) 2);
- }
- sendTo(packet, player);
- } catch (final ReflectiveOperationException e) {
- e.printStackTrace();
- initialised = false;
- }
- return initialised;
- }
-
- private static void sendTo(final Object packet, final Player... player) throws ReflectiveOperationException {
- for (final Player p : player) {
- final Object entityplayer = getHandle.invoke(p);
- final Object PlayerConnection = playerConnection.get(entityplayer);
- sendPacket.invoke(PlayerConnection, packet);
+ public static void sendActionBar(final String message, final Player... player) {
+ for (Player e : player) {
+ e.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(message));
}
}
}
diff --git a/src/com/projectkorra/projectkorra/util/ParticleEffect.java b/src/com/projectkorra/projectkorra/util/ParticleEffect.java
index 92b9538b..39749baa 100644
--- a/src/com/projectkorra/projectkorra/util/ParticleEffect.java
+++ b/src/com/projectkorra/projectkorra/util/ParticleEffect.java
@@ -6,6 +6,9 @@ import org.bukkit.Particle.DustOptions;
import org.bukkit.inventory.ItemStack;
public enum ParticleEffect {
+
+ ASH (Particle.ASH),
+
BARRIER (Particle.BARRIER),
/**
@@ -19,7 +22,11 @@ public enum ParticleEffect {
BLOCK_DUST (Particle.BLOCK_DUST),
BUBBLE_COLUMN_UP (Particle.BUBBLE_COLUMN_UP),
BUBBLE_POP (Particle.BUBBLE_POP),
+ CAMPFIRE_COSY_SMOKE (Particle.CAMPFIRE_COSY_SMOKE),
+ CAMPFIRE_SIGNAL_SMOKE (Particle.CAMPFIRE_SIGNAL_SMOKE),
CLOUD (Particle.CLOUD),
+ COMPOSTER (Particle.COMPOSTER),
+ CRIMSON_SPORE (Particle.CRIMSON_SPORE),
CRIT (Particle.CRIT),
CRIT_MAGIC (Particle.CRIT_MAGIC), @Deprecated MAGIC_CRIT (Particle.CRIT_MAGIC),
CURRENT_DOWN (Particle.CURRENT_DOWN),
@@ -28,6 +35,8 @@ public enum ParticleEffect {
DRAGON_BREATH (Particle.DRAGON_BREATH),
DRIP_LAVA (Particle.DRIP_LAVA),
DRIP_WATER (Particle.DRIP_WATER),
+ DRIPPING_HONEY (Particle.DRIPPING_HONEY),
+ DRIPPING_OBSIDIAN_TEAR (Particle.DRIPPING_OBSIDIAN_TEAR),
ENCHANTMENT_TABLE (Particle.ENCHANTMENT_TABLE),
END_ROD (Particle.END_ROD),
EXPLOSION_HUGE (Particle.EXPLOSION_HUGE), @Deprecated HUGE_EXPLOSION (Particle.EXPLOSION_HUGE),
@@ -38,14 +47,23 @@ public enum ParticleEffect {
* Applicable data: {@link BlockData}
*/
FALLING_DUST (Particle.FALLING_DUST),
+ FALLING_HONEY (Particle.FALLING_HONEY),
+ FALLING_LAVA (Particle.FALLING_LAVA),
+ FALLING_NECTAR (Particle.FALLING_NECTAR),
+ FALLING_OBSIDIAN_TEAR (Particle.FALLING_OBSIDIAN_TEAR),
+ FALLING_WATER (Particle.FALLING_WATER),
FIREWORKS_SPARK (Particle.FIREWORKS_SPARK),
FLAME (Particle.FLAME),
+ FLASH (Particle.FLASH),
HEART (Particle.HEART),
/**
* Applicable data: {@link ItemStack}
*/
ITEM_CRACK (Particle.ITEM_CRACK),
+ LANDING_HONEY (Particle.LANDING_HONEY),
+ LANDING_LAVA (Particle.LANDING_LAVA),
+ LANDING_OBSIDIAN_TEAR (Particle.LANDING_OBSIDIAN_TEAR),
LAVA (Particle.LAVA),
MOB_APPEARANCE (Particle.MOB_APPEARANCE),
NAUTILUS (Particle.NAUTILUS),
@@ -56,11 +74,15 @@ public enum ParticleEffect {
* Applicable data: {@link DustOptions}
*/
REDSTONE (Particle.REDSTONE), @Deprecated RED_DUST (Particle.REDSTONE),
+ REVERSE_PORTAL (Particle.REVERSE_PORTAL),
SLIME (Particle.SLIME),
SMOKE_NORMAL (Particle.SMOKE_NORMAL), @Deprecated SMOKE (Particle.SMOKE_NORMAL),
SMOKE_LARGE (Particle.SMOKE_LARGE), @Deprecated LARGE_SMOKE (Particle.SMOKE_LARGE),
+ SNEEZE (Particle.SNEEZE),
SNOW_SHOVEL (Particle.SNOW_SHOVEL),
SNOWBALL (Particle.SNOWBALL), @Deprecated SNOWBALL_PROOF (Particle.SNOWBALL),
+ SOUL (Particle.SOUL),
+ SOUL_FIRE_FLAME (Particle.SOUL_FIRE_FLAME),
SPELL (Particle.SPELL),
SPELL_INSTANT (Particle.SPELL_INSTANT), @Deprecated INSTANT_SPELL (Particle.SPELL_INSTANT),
SPELL_MOB (Particle.SPELL_MOB), @Deprecated MOB_SPELL (Particle.SPELL_MOB),
@@ -75,10 +97,12 @@ public enum ParticleEffect {
TOWN_AURA (Particle.TOWN_AURA),
VILLAGER_ANGRY (Particle.VILLAGER_ANGRY), @Deprecated ANGRY_VILLAGER (Particle.VILLAGER_ANGRY),
VILLAGER_HAPPY (Particle.VILLAGER_HAPPY), @Deprecated HAPPY_VILLAGER (Particle.VILLAGER_HAPPY),
+ WARPED_SPORE (Particle.WARPED_SPORE),
WATER_BUBBLE (Particle.WATER_BUBBLE), @Deprecated BUBBLE (Particle.WATER_BUBBLE),
WATER_DROP (Particle.WATER_DROP),
WATER_SPLASH (Particle.WATER_SPLASH), @Deprecated SPLASH (Particle.WATER_SPLASH),
- WATER_WAKE (Particle.WATER_WAKE), @Deprecated WAKE (Particle.WATER_WAKE);
+ WATER_WAKE (Particle.WATER_WAKE), @Deprecated WAKE (Particle.WATER_WAKE),
+ WHITE_ASH (Particle.WHITE_ASH);
Particle particle;
Class> dataClass;
diff --git a/src/com/projectkorra/projectkorra/util/TempBlock.java b/src/com/projectkorra/projectkorra/util/TempBlock.java
index 077c31f6..f535d163 100644
--- a/src/com/projectkorra/projectkorra/util/TempBlock.java
+++ b/src/com/projectkorra/projectkorra/util/TempBlock.java
@@ -11,6 +11,7 @@ import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.block.Container;
+import org.bukkit.block.data.Bisected;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Levelled;
import org.bukkit.scheduler.BukkitRunnable;
@@ -30,29 +31,34 @@ public class TempBlock {
});
private final Block block;
- private BlockData newdata;
+ private BlockData newData;
private BlockState state;
private long revertTime;
private boolean inRevertQueue;
private RevertTask revertTask = null;
public TempBlock(final Block block, final Material newtype) {
- this(block, newtype.createBlockData());
+ this(block, newtype.createBlockData(), 0);
}
@Deprecated
- public TempBlock(final Block block, final Material newtype, final BlockData newdata) {
- this(block, newdata);
+ public TempBlock(final Block block, final Material newtype, final BlockData newData) {
+ this(block, newData, 0);
+ }
+
+ public TempBlock(final Block block, final BlockData newData) {
+ this(block, newData, 0);
}
- public TempBlock(final Block block, final BlockData newdata) {
+ public TempBlock(final Block block, final BlockData newData, final long revertTime) {
this.block = block;
- this.newdata = newdata;
+ this.newData = newData;
+ this.setRevertTime(revertTime);
if (instances.containsKey(block)) {
final TempBlock temp = instances.get(block);
- if (!newdata.equals(temp.block.getBlockData())) {
- temp.block.setBlockData(newdata, GeneralMethods.isLightEmitting(newdata.getMaterial()));
- temp.newdata = newdata;
+ if (!newData.equals(temp.block.getBlockData())) {
+ temp.block.setBlockData(newData, GeneralMethods.isLightEmitting(newData.getMaterial()));
+ temp.newData = newData;
}
this.state = temp.state;
instances.put(block, temp);
@@ -62,10 +68,7 @@ public class TempBlock {
return;
}
instances.put(block, this);
- block.setBlockData(newdata, GeneralMethods.isLightEmitting(newdata.getMaterial()));
- }
- if (this.state.getType() == Material.FIRE) {
- this.state.setType(Material.AIR);
+ block.setBlockData(newData, GeneralMethods.isLightEmitting(newData.getMaterial()));
}
}
@@ -139,7 +142,7 @@ public class TempBlock {
}
public BlockData getBlockData() {
- return this.newdata;
+ return this.newData;
}
public Location getLocation() {
@@ -163,6 +166,10 @@ public class TempBlock {
}
public void setRevertTime(final long revertTime) {
+ if(revertTime <= 0) {
+ return;
+ }
+
if (this.inRevertQueue) {
REVERT_QUEUE.remove(this);
}
@@ -172,7 +179,7 @@ public class TempBlock {
}
public void revertBlock() {
- PaperLib.getChunkAtAsync(this.block.getLocation()).thenAccept(result -> this.state.update(true, GeneralMethods.isLightEmitting(this.state.getType())));
+ PaperLib.getChunkAtAsync(this.block.getLocation()).thenAccept(result -> this.state.update(true, GeneralMethods.isLightEmitting(this.state.getType()) || !(state.getBlockData() instanceof Bisected)));
instances.remove(this.block);
REVERT_QUEUE.remove(this);
if (this.revertTask != null) {
@@ -194,7 +201,7 @@ public class TempBlock {
}
public void setType(final BlockData data) {
- this.newdata = data;
+ this.newData = data;
this.block.setBlockData(data, GeneralMethods.isLightEmitting(data.getMaterial()));
}
diff --git a/src/com/projectkorra/projectkorra/waterbending/OctopusForm.java b/src/com/projectkorra/projectkorra/waterbending/OctopusForm.java
index 99f0ff26..1d1cc480 100644
--- a/src/com/projectkorra/projectkorra/waterbending/OctopusForm.java
+++ b/src/com/projectkorra/projectkorra/waterbending/OctopusForm.java
@@ -16,6 +16,7 @@ import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ProjectKorra;
import com.projectkorra.projectkorra.ability.AirAbility;
+import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.ability.WaterAbility;
import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.avatar.AvatarState;
@@ -179,7 +180,7 @@ public class OctopusForm extends WaterAbility {
} else if (!GeneralMethods.isAdjacentToThreeOrMoreSources(this.sourceBlock) && this.sourceBlock != null) {
this.sourceBlock.setType(Material.AIR);
}
- this.source = new TempBlock(this.sourceBlock, Material.WATER, GeneralMethods.getWaterData(0));
+ this.source = new TempBlock(this.sourceBlock, GeneralMethods.getWaterData(0));
}
private void attack() {
@@ -253,7 +254,7 @@ public class OctopusForm extends WaterAbility {
this.sourceLocation = newBlock.getLocation();
if (!GeneralMethods.isSolid(newBlock)) {
- this.source = new TempBlock(newBlock, Material.WATER, GeneralMethods.getWaterData(0));
+ this.source = new TempBlock(newBlock, GeneralMethods.getWaterData(0));
this.sourceBlock = newBlock;
} else {
this.remove();
@@ -266,7 +267,7 @@ public class OctopusForm extends WaterAbility {
this.sourceLocation = newBlock.getLocation();
if (!GeneralMethods.isSolid(newBlock)) {
- this.source = new TempBlock(newBlock, Material.WATER, GeneralMethods.getWaterData(0));
+ this.source = new TempBlock(newBlock, GeneralMethods.getWaterData(0));
this.sourceBlock = newBlock;
} else {
this.remove();
@@ -282,7 +283,7 @@ public class OctopusForm extends WaterAbility {
this.source.revertBlock();
}
if (!GeneralMethods.isSolid(newBlock)) {
- this.source = new TempBlock(newBlock, Material.WATER, GeneralMethods.getWaterData(0));
+ this.source = new TempBlock(newBlock, GeneralMethods.getWaterData(0));
this.sourceBlock = newBlock;
}
}
@@ -426,16 +427,16 @@ public class OctopusForm extends WaterAbility {
if (!SurgeWave.canThaw(block)) {
SurgeWave.thaw(block);
}
- tblock.setType(Material.WATER, GeneralMethods.getWaterData(0));
+ tblock.setType(GeneralMethods.getWaterData(0));
this.newBlocks.add(tblock);
} else if (this.blocks.contains(tblock)) {
this.newBlocks.add(tblock);
}
- } else if (this.isWaterbendable(this.player, block) || block.getType() == Material.FIRE || isAir(block.getType())) {
+ } else if (this.isWaterbendable(this.player, block) || FireAbility.isFire(block.getType()) || isAir(block.getType())) {
if (isWater(block) && !TempBlock.isTempBlock(block)) {
ParticleEffect.WATER_BUBBLE.display(block.getLocation().clone().add(0.5, 0.5, 0.5), 5, Math.random(), Math.random(), Math.random(), 0);
}
- this.newBlocks.add(new TempBlock(block, Material.WATER, GeneralMethods.getWaterData(0)));
+ this.newBlocks.add(new TempBlock(block, GeneralMethods.getWaterData(0)));
}
}
diff --git a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java
index 9f6fead2..52868949 100644
--- a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java
+++ b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java
@@ -17,6 +17,7 @@ import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.BendingPlayer;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ability.ElementalAbility;
+import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.ability.WaterAbility;
import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.firebending.FireBlast;
@@ -269,7 +270,7 @@ public class SurgeWall extends WaterAbility {
continue;
} else if (WALL_BLOCKS.containsKey(block)) {
blocks.add(block);
- } else if (!blocks.contains(block) && (ElementalAbility.isAir(block.getType()) || block.getType() == Material.FIRE || this.isWaterbendable(block)) && this.isTransparent(block)) {
+ } else if (!blocks.contains(block) && (ElementalAbility.isAir(block.getType()) || FireAbility.isFire(block.getType()) || this.isWaterbendable(block)) && this.isTransparent(block)) {
WALL_BLOCKS.put(block, this.player);
this.addWallBlock(block);
blocks.add(block);
diff --git a/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java b/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java
index 90611298..4a1807a9 100644
--- a/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java
+++ b/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java
@@ -18,6 +18,7 @@ import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.ability.AirAbility;
import com.projectkorra.projectkorra.ability.ElementalAbility;
+import com.projectkorra.projectkorra.ability.FireAbility;
import com.projectkorra.projectkorra.ability.WaterAbility;
import com.projectkorra.projectkorra.attribute.Attribute;
import com.projectkorra.projectkorra.avatar.AvatarState;
@@ -170,7 +171,7 @@ public class SurgeWave extends WaterAbility {
}
final Block oldBlock = block;
- if (!ElementalAbility.isAir(block.getType()) && block.getType() != Material.SNOW && !isWater(block) && !isPlant(block)) {
+ if (!isAir(block.getType()) && block.getType() != Material.SNOW && !isWater(block) && !isPlant(block)) {
continue;
} else if (isPlant(block)) {
block.breakNaturally();
@@ -293,13 +294,13 @@ public class SurgeWave extends WaterAbility {
final Block blockl = this.location.getBlock();
final ArrayList blocks = new ArrayList();
- if (!GeneralMethods.isRegionProtectedFromBuild(this, this.location) && (((ElementalAbility.isAir(blockl.getType()) || blockl.getType() == Material.FIRE || isPlant(blockl) || isWater(blockl) || this.isWaterbendable(this.player, blockl))))) {
+ if (!GeneralMethods.isRegionProtectedFromBuild(this, this.location) && (((isAir(blockl.getType()) || blockl.getType() == Material.FIRE || isPlant(blockl) || isWater(blockl) || this.isWaterbendable(this.player, blockl))))) {
for (double i = 0; i <= this.currentRadius; i += .5) {
for (double angle = 0; angle < 360; angle += 10) {
final Vector vec = GeneralMethods.getOrthogonalVector(this.targetDirection, angle, i);
final Block block = this.location.clone().add(vec).getBlock();
- if (!blocks.contains(block) && (ElementalAbility.isAir(block.getType()) || block.getType() == Material.FIRE) || this.isWaterbendable(block)) {
+ if (!blocks.contains(block) && (isAir(block.getType()) || isFire(block.getType())) || this.isWaterbendable(block)) {
blocks.add(block);
FireBlast.removeFireBlastsAroundPoint(block.getLocation(), 2);
}
diff --git a/src/com/projectkorra/projectkorra/waterbending/plant/PlantRegrowth.java b/src/com/projectkorra/projectkorra/waterbending/plant/PlantRegrowth.java
index 8a3a5174..df9fa2de 100644
--- a/src/com/projectkorra/projectkorra/waterbending/plant/PlantRegrowth.java
+++ b/src/com/projectkorra/projectkorra/waterbending/plant/PlantRegrowth.java
@@ -138,4 +138,4 @@ public class PlantRegrowth extends PlantAbility {
this.block = block;
}
-}
+}
\ No newline at end of file
diff --git a/src/plugin.yml b/src/plugin.yml
index b0fc6a94..a7f19c11 100644
--- a/src/plugin.yml
+++ b/src/plugin.yml
@@ -24,6 +24,7 @@ permissions:
bending.ability.AvatarState: true
bending.water.bloodbending.anytime: true
bending.water.bloodbending: true
+ bending.fire.bluefire: true
bending.ability.Flight: true
bending.ability.MetalClips.loot: true
bending.ability.MetalClips.4clips: true