From 8b2ec63bcbf057d021d179120a1281a9a08daa7d Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Thu, 3 Jan 2019 05:19:56 -0500 Subject: [PATCH 01/34] make airsuction work on self --- .../projectkorra/airbending/AirSuction.java | 39 +++++++------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/com/projectkorra/projectkorra/airbending/AirSuction.java b/src/com/projectkorra/projectkorra/airbending/AirSuction.java index 1122db74..194a7a71 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirSuction.java +++ b/src/com/projectkorra/projectkorra/airbending/AirSuction.java @@ -1,10 +1,14 @@ package com.projectkorra.projectkorra.airbending; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.ability.AirAbility; +import com.projectkorra.projectkorra.ability.CoreAbility; +import com.projectkorra.projectkorra.ability.util.Collision; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.command.Commands; +import com.projectkorra.projectkorra.object.HorizontalVelocityTracker; +import com.projectkorra.projectkorra.waterbending.WaterSpout; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -16,15 +20,10 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; 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.CoreAbility; -import com.projectkorra.projectkorra.ability.util.Collision; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.command.Commands; -import com.projectkorra.projectkorra.object.HorizontalVelocityTracker; -import com.projectkorra.projectkorra.waterbending.WaterSpout; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; public class AirSuction extends AirAbility { @@ -193,7 +192,6 @@ public class AirSuction extends AirAbility { } for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(this.location, this.radius)) { - if (entity.getEntityId() != this.player.getEntityId()) { if (entity instanceof Player) { if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ continue; @@ -204,7 +202,7 @@ public class AirSuction extends AirAbility { final Vector push = this.direction.clone(); double factor = this.pushFactor; - if (Math.abs(push.getY()) > max && entity.getEntityId() != this.player.getEntityId()) { + if (Math.abs(push.getY()) > max) { if (push.getY() < 0) { push.setY(-max); } else { @@ -226,16 +224,10 @@ public class AirSuction extends AirAbility { velocity.add(push.clone().multiply(factor * .5)); } - if (entity instanceof Player) { - if (Commands.invincible.contains(((Player) entity).getName())) { - continue; - } - } - GeneralMethods.setVelocity(entity, velocity); new HorizontalVelocityTracker(entity, this.player, 200l, this); entity.setFallDistance(0); - if (entity.getEntityId() != this.player.getEntityId() && entity instanceof Player) { + if (entity instanceof Player) { flightHandler.createInstance((Player) entity, this.player, 5000L, this.getName()); } @@ -244,7 +236,6 @@ public class AirSuction extends AirAbility { } entity.setFireTicks(0); breakBreathbendingHold(entity); - } } this.advanceLocation(); From 4aa4e228337fdc30844e685fa07942d5803a7e24 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Thu, 3 Jan 2019 10:20:16 -0500 Subject: [PATCH 02/34] some more protection fixes --- .../airbending/combo/AirStream.java | 15 +++---- .../waterbending/WaterManipulation.java | 39 +++++++++---------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/src/com/projectkorra/projectkorra/airbending/combo/AirStream.java b/src/com/projectkorra/projectkorra/airbending/combo/AirStream.java index 2c519af0..d9855b27 100644 --- a/src/com/projectkorra/projectkorra/airbending/combo/AirStream.java +++ b/src/com/projectkorra/projectkorra/airbending/combo/AirStream.java @@ -96,11 +96,6 @@ public class AirStream extends AirAbility implements ComboAbility { this.currentLoc = this.origin.clone(); } final Entity target = GeneralMethods.getTargetedEntity(this.player, this.range); - if (target instanceof Player) { - if (Commands.invincible.contains(((Player) target).getName())) { - return; - } - } if (target != null && target.getLocation().distanceSquared(this.currentLoc) > 49) { this.destination = target.getLocation(); @@ -159,11 +154,6 @@ public class AirStream extends AirAbility implements ComboAbility { this.time = System.currentTimeMillis(); } if (!entity.equals(this.player) && !this.affectedEntities.contains(entity)) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - continue; - } - } this.affectedEntities.add(entity); if (entity instanceof Player) { final Player ep = (Player) entity; @@ -174,6 +164,11 @@ public class AirStream extends AirAbility implements ComboAbility { } for (final Entity entity : this.affectedEntities) { + if (entity instanceof Player) { + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ + continue; + } + } final Vector force = GeneralMethods.getDirection(entity.getLocation(), this.currentLoc); entity.setVelocity(force.clone().normalize().multiply(this.speed)); entity.setFallDistance(0F); diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java b/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java index 66261677..eef4e0de 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java @@ -1,11 +1,16 @@ package com.projectkorra.projectkorra.waterbending; -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.AirAbility; +import com.projectkorra.projectkorra.ability.WaterAbility; +import com.projectkorra.projectkorra.ability.util.Collision; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.command.Commands; +import com.projectkorra.projectkorra.util.*; +import com.projectkorra.projectkorra.waterbending.ice.PhaseChange; +import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth; +import com.projectkorra.projectkorra.waterbending.util.WaterReturn; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -14,20 +19,11 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.AirAbility; -import com.projectkorra.projectkorra.ability.WaterAbility; -import com.projectkorra.projectkorra.ability.util.Collision; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.util.BlockSource; -import com.projectkorra.projectkorra.util.ClickType; -import com.projectkorra.projectkorra.util.DamageHandler; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempBlock; -import com.projectkorra.projectkorra.waterbending.ice.PhaseChange; -import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth; -import com.projectkorra.projectkorra.waterbending.util.WaterReturn; +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; public class WaterManipulation extends WaterAbility { @@ -277,6 +273,9 @@ public class WaterManipulation extends WaterAbility { if (!this.displacing) { for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(this.location, this.collisionRadius)) { if (entity instanceof LivingEntity && entity.getEntityId() != this.player.getEntityId()) { + if(GeneralMethods.isRegionProtectedFromBuild(player, "WaterManipulation", entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; + } final Location location = this.player.getEyeLocation(); final Vector vector = location.getDirection(); entity.setVelocity(vector.normalize().multiply(this.knockback)); From 07632b62efefb6972c12e9480e2facb62a0a3977 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Thu, 3 Jan 2019 10:46:06 -0500 Subject: [PATCH 03/34] some more protection fixes, make airstream dangerous since you can affect other players, change to protect non player entities --- .../projectkorra/airbending/AirBlast.java | 6 +-- .../projectkorra/airbending/AirSuction.java | 6 +-- .../airbending/combo/AirStream.java | 8 ++-- .../airbending/combo/Twister.java | 23 +++++----- .../projectkorra/earthbending/Ripple.java | 6 +-- .../projectkorra/waterbending/SurgeWave.java | 6 +-- .../projectkorra/waterbending/Torrent.java | 42 ++++++++----------- .../waterbending/TorrentWave.java | 6 +-- .../multiabilities/WaterArmsWhip.java | 18 +++----- 9 files changed, 46 insertions(+), 75 deletions(-) diff --git a/src/com/projectkorra/projectkorra/airbending/AirBlast.java b/src/com/projectkorra/projectkorra/airbending/AirBlast.java index e2398346..7a75c6b4 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirBlast.java +++ b/src/com/projectkorra/projectkorra/airbending/AirBlast.java @@ -425,10 +425,8 @@ public class AirBlast extends AirAbility { } for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(this.location, this.radius)) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - continue; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; } this.affect(entity); } diff --git a/src/com/projectkorra/projectkorra/airbending/AirSuction.java b/src/com/projectkorra/projectkorra/airbending/AirSuction.java index 194a7a71..cb5d0a33 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirSuction.java +++ b/src/com/projectkorra/projectkorra/airbending/AirSuction.java @@ -192,10 +192,8 @@ public class AirSuction extends AirAbility { } for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(this.location, this.radius)) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - continue; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; } final Vector velocity = entity.getVelocity(); final double max = this.speed; diff --git a/src/com/projectkorra/projectkorra/airbending/combo/AirStream.java b/src/com/projectkorra/projectkorra/airbending/combo/AirStream.java index d9855b27..95544e88 100644 --- a/src/com/projectkorra/projectkorra/airbending/combo/AirStream.java +++ b/src/com/projectkorra/projectkorra/airbending/combo/AirStream.java @@ -164,10 +164,8 @@ public class AirStream extends AirAbility implements ComboAbility { } for (final Entity entity : this.affectedEntities) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - continue; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; } final Vector force = GeneralMethods.getDirection(entity.getLocation(), this.currentLoc); entity.setVelocity(force.clone().normalize().multiply(this.speed)); @@ -194,7 +192,7 @@ public class AirStream extends AirAbility implements ComboAbility { @Override public boolean isHarmlessAbility() { - return true; + return false; } @Override diff --git a/src/com/projectkorra/projectkorra/airbending/combo/Twister.java b/src/com/projectkorra/projectkorra/airbending/combo/Twister.java index 0c84fa89..0ef0f344 100644 --- a/src/com/projectkorra/projectkorra/airbending/combo/Twister.java +++ b/src/com/projectkorra/projectkorra/airbending/combo/Twister.java @@ -1,13 +1,5 @@ package com.projectkorra.projectkorra.airbending.combo; -import java.util.ArrayList; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.AirAbility; import com.projectkorra.projectkorra.ability.ComboAbility; @@ -15,6 +7,13 @@ import com.projectkorra.projectkorra.ability.util.ComboManager.AbilityInformatio import com.projectkorra.projectkorra.attribute.Attribute; import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.util.ClickType; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.ArrayList; public class Twister extends AirAbility implements ComboAbility { @@ -142,12 +141,10 @@ public class Twister extends AirAbility implements ComboAbility { } for (final Entity entity : this.affectedEntities) { - final Vector forceDir = GeneralMethods.getDirection(entity.getLocation(), this.currentLoc.clone().add(0, height, 0)); - if (entity instanceof Player) { - if (Commands.invincible.contains(((Player) entity).getName())) { - break; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; } + final Vector forceDir = GeneralMethods.getDirection(entity.getLocation(), this.currentLoc.clone().add(0, height, 0)); entity.setVelocity(forceDir.clone().normalize().multiply(0.3)); } } diff --git a/src/com/projectkorra/projectkorra/earthbending/Ripple.java b/src/com/projectkorra/projectkorra/earthbending/Ripple.java index 4e467f95..a8e09e33 100644 --- a/src/com/projectkorra/projectkorra/earthbending/Ripple.java +++ b/src/com/projectkorra/projectkorra/earthbending/Ripple.java @@ -274,10 +274,8 @@ public class Ripple extends EarthAbility { } private void affect(final Entity entity) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - return; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + return; } if (entity instanceof LivingEntity) { DamageHandler.damageEntity(entity, this.damage, this); diff --git a/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java b/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java index 37cc7eae..ab1c6a95 100644 --- a/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java +++ b/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java @@ -337,10 +337,8 @@ public class SurgeWave extends WaterAbility { } } if (knockback) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - continue; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; } final Vector dir = direction.clone(); dir.setY(dir.getY() * this.knockup); diff --git a/src/com/projectkorra/projectkorra/waterbending/Torrent.java b/src/com/projectkorra/projectkorra/waterbending/Torrent.java index cd010b39..e5ac018d 100644 --- a/src/com/projectkorra/projectkorra/waterbending/Torrent.java +++ b/src/com/projectkorra/projectkorra/waterbending/Torrent.java @@ -1,12 +1,15 @@ package com.projectkorra.projectkorra.waterbending; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.AirAbility; +import com.projectkorra.projectkorra.ability.WaterAbility; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.avatar.AvatarState; +import com.projectkorra.projectkorra.command.Commands; +import com.projectkorra.projectkorra.util.*; +import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth; +import com.projectkorra.projectkorra.waterbending.util.WaterReturn; import org.apache.commons.lang3.tuple.Pair; import org.bukkit.Location; import org.bukkit.Material; @@ -16,20 +19,8 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.AirAbility; -import com.projectkorra.projectkorra.ability.WaterAbility; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.avatar.AvatarState; -import com.projectkorra.projectkorra.command.Commands; -import com.projectkorra.projectkorra.util.BlockSource; -import com.projectkorra.projectkorra.util.ClickType; -import com.projectkorra.projectkorra.util.DamageHandler; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempBlock; -import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth; -import com.projectkorra.projectkorra.waterbending.util.WaterReturn; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class Torrent extends WaterAbility { @@ -551,10 +542,8 @@ public class Torrent extends WaterAbility { if (entity.getEntityId() == this.player.getEntityId()) { return; } - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - return; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + return; } double x, z, vx, vz, mag; double angle = 50; @@ -592,6 +581,9 @@ public class Torrent extends WaterAbility { if (entity.getEntityId() == this.player.getEntityId()) { return; } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || (entity instanceof Player && Commands.invincible.contains(((Player) entity).getName()))){ + return; + } if (direction.getY() > this.knockup) { direction.setY(this.knockup); } diff --git a/src/com/projectkorra/projectkorra/waterbending/TorrentWave.java b/src/com/projectkorra/projectkorra/waterbending/TorrentWave.java index 8b869d05..7b3320df 100644 --- a/src/com/projectkorra/projectkorra/waterbending/TorrentWave.java +++ b/src/com/projectkorra/projectkorra/waterbending/TorrentWave.java @@ -150,10 +150,8 @@ public class TorrentWave extends WaterAbility { for (final Entity entity : indexList) { if (!this.affectedEntities.contains(entity)) { if (entity.getLocation().distanceSquared(location) <= 4) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - continue; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; } this.affectedEntities.add(entity); this.affect(entity); diff --git a/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArmsWhip.java b/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArmsWhip.java index 0ca6fd7d..a70ccfbf 100644 --- a/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArmsWhip.java +++ b/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArmsWhip.java @@ -293,10 +293,8 @@ public class WaterArmsWhip extends WaterAbility { switch (this.ability) { case PULL: for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(location, 2)) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - continue; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; } final Vector vector = endOfArm.toVector().subtract(entity.getLocation().toVector()); entity.setVelocity(vector.multiply(this.pullMultiplier)); @@ -304,10 +302,8 @@ public class WaterArmsWhip extends WaterAbility { break; case PUNCH: for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(location, 2)) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - continue; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; } final Vector vector = entity.getLocation().toVector().subtract(endOfArm.toVector()); @@ -327,10 +323,8 @@ public class WaterArmsWhip extends WaterAbility { if (this.grabbedEntity == null) { for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(location, 2)) { if (entity instanceof LivingEntity && entity.getEntityId() != this.player.getEntityId() && !GRABBED_ENTITIES.containsKey(entity)) { - if (entity instanceof Player) { - if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || Commands.invincible.contains(((Player) entity).getName())){ - continue; - } + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; } GRABBED_ENTITIES.put((LivingEntity) entity, this); this.grabbedEntity = (LivingEntity) entity; From cc865ef41c010eccd0ea51474a54db145a305195 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Thu, 3 Jan 2019 13:37:14 -0500 Subject: [PATCH 04/34] more protection stuff --- .../projectkorra/firebending/FireBlast.java | 32 ++++++++--------- .../waterbending/WaterSpoutWave.java | 34 +++++++++---------- 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/src/com/projectkorra/projectkorra/firebending/FireBlast.java b/src/com/projectkorra/projectkorra/firebending/FireBlast.java index 441253fb..b3eff2dc 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireBlast.java +++ b/src/com/projectkorra/projectkorra/firebending/FireBlast.java @@ -1,9 +1,17 @@ package com.projectkorra.projectkorra.firebending; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - +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.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; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -14,17 +22,9 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; 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.util.Collision; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.avatar.AvatarState; -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; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; public class FireBlast extends FireAbility { @@ -131,7 +131,7 @@ public class FireBlast extends FireAbility { } private void affect(final Entity entity) { - if (entity.getUniqueId() != this.player.getUniqueId()) { + if (entity.getUniqueId() != this.player.getUniqueId() && !GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) && !((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))) { if (this.bPlayer.isAvatarState()) { GeneralMethods.setVelocity(entity, this.direction.clone().multiply(AvatarState.getValue(this.knockback))); } else { diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterSpoutWave.java b/src/com/projectkorra/projectkorra/waterbending/WaterSpoutWave.java index bab352a3..81027020 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterSpoutWave.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterSpoutWave.java @@ -1,23 +1,5 @@ package com.projectkorra.projectkorra.waterbending; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Map; -import java.util.Random; -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.data.BlockData; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; @@ -28,6 +10,19 @@ import com.projectkorra.projectkorra.util.DamageHandler; import com.projectkorra.projectkorra.util.TempBlock; import com.projectkorra.projectkorra.waterbending.combo.IceWave; import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.data.BlockData; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class WaterSpoutWave extends WaterAbility { @@ -420,6 +415,9 @@ public class WaterSpoutWave extends WaterAbility { if (block.getLocation().distanceSquared(entity.getLocation().getBlock().getLocation()) > radius * radius) { continue; } + if(GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())){ + continue; + } if (block.getType() == Material.AIR || block.getType() == Material.ICE || this.isWaterbendable(block)) { if (!FROZEN_BLOCKS.containsKey(block)) { From 0ad0a544a30c0d1cb0064c251f4f4b3590d0807a Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Fri, 4 Jan 2019 06:20:28 -0500 Subject: [PATCH 05/34] air check fixes --- .../projectkorra/GeneralMethods.java | 18 +- .../projectkorra/projectkorra/PKListener.java | 168 ++++-------------- .../projectkorra/ability/EarthAbility.java | 43 +++-- .../projectkorra/ability/FireAbility.java | 31 ++-- .../projectkorra/airbending/Tornado.java | 20 +-- .../projectkorra/chiblocking/SwiftKick.java | 11 +- .../projectkorra/earthbending/EarthArmor.java | 30 ++-- .../projectkorra/earthbending/EarthGrab.java | 45 ++--- .../projectkorra/earthbending/EarthSmash.java | 7 +- .../earthbending/Tremorsense.java | 16 +- .../earthbending/lava/LavaSurge.java | 23 +-- .../earthbending/lava/LavaSurgeWall.java | 28 +-- .../earthbending/lava/LavaSurgeWave.java | 27 ++- .../projectkorra/firebending/FireJet.java | 18 +- .../firebending/combo/FireComboStream.java | 24 ++- .../firebending/combo/FireWheel.java | 25 ++- .../firebending/combustion/Combustion.java | 17 +- .../projectkorra/util/BlockSource.java | 16 +- .../projectkorra/waterbending/SurgeWall.java | 27 ++- .../projectkorra/waterbending/SurgeWave.java | 7 +- .../waterbending/WaterBubble.java | 24 ++- .../projectkorra/waterbending/WaterSpout.java | 28 +-- .../waterbending/WaterSpoutWave.java | 13 +- .../waterbending/combo/IceBullet.java | 40 ++--- .../waterbending/ice/IceSpikePillar.java | 28 +-- .../waterbending/ice/IceSpikePillarField.java | 20 +-- .../waterbending/ice/PhaseChange.java | 28 ++- .../multiabilities/WaterArms.java | 28 +-- .../waterbending/passive/HydroSink.java | 2 +- .../waterbending/plant/PlantRegrowth.java | 3 +- .../waterbending/util/WaterSourceGrabber.java | 20 +-- 31 files changed, 337 insertions(+), 498 deletions(-) diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index 39516d14..d5d7f361 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -95,6 +95,8 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; +import static com.projectkorra.projectkorra.ability.ElementalAbility.isAir; + public class GeneralMethods { // Represents PlayerName, previously checked blocks, and whether they were true or false @@ -1164,19 +1166,19 @@ public class GeneralMethods { Block blockHolder = loc.getBlock(); int y = 0; // Only one of these while statements will go - while (blockHolder.getType() != Material.AIR && Math.abs(y) < Math.abs(positiveY)) { + while (!ElementalAbility.isAir(blockHolder.getType()) && Math.abs(y) < Math.abs(positiveY)) { y++; final Block tempBlock = loc.clone().add(0, y, 0).getBlock(); - if (tempBlock.getType() == Material.AIR) { + if (ElementalAbility.isAir(tempBlock.getType())) { return blockHolder; } blockHolder = tempBlock; } - while (blockHolder.getType() == Material.AIR && Math.abs(y) < Math.abs(negativeY)) { + while (ElementalAbility.isAir(blockHolder.getType()) && Math.abs(y) < Math.abs(negativeY)) { y--; blockHolder = loc.clone().add(0, y, 0).getBlock(); - if (blockHolder.getType() != Material.AIR) { + if (!ElementalAbility.isAir(blockHolder.getType())) { return blockHolder; } } @@ -1187,20 +1189,20 @@ public class GeneralMethods { Block blockHolder = loc.getBlock(); int y = 0; // Only one of these while statements will go - while (blockHolder.getType() != Material.AIR && Math.abs(y) < Math.abs(negativeY)) { + while (!ElementalAbility.isAir(blockHolder.getType()) && Math.abs(y) < Math.abs(negativeY)) { y--; final Block tempblock = loc.clone().add(0, y, 0).getBlock(); - if (tempblock.getType() == Material.AIR) { + if (ElementalAbility.isAir(tempblock.getType())) { return blockHolder; } blockHolder = tempblock; } - while (blockHolder.getType() != Material.AIR && Math.abs(y) < Math.abs(positiveY)) { + while (!ElementalAbility.isAir(blockHolder.getType()) && Math.abs(y) < Math.abs(positiveY)) { y++; blockHolder = loc.clone().add(0, y, 0).getBlock(); - if (blockHolder.getType() == Material.AIR) { + if (ElementalAbility.isAir(blockHolder.getType())) { return blockHolder; } } diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 7a262270..4e6e4f56 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -1,122 +1,21 @@ package com.projectkorra.projectkorra; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Statistic; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.*; -import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.entity.EntityCombustEvent; -import org.bukkit.event.entity.EntityDamageByBlockEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.entity.EntityDamageEvent.DamageModifier; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntityInteractEvent; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.entity.EntityTargetLivingEntityEvent; -import org.bukkit.event.entity.EntityTeleportEvent; -import org.bukkit.event.entity.EntityToggleGlideEvent; -import org.bukkit.event.entity.EntityToggleSwimEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; -import org.bukkit.event.entity.SlimeSplitEvent; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerAnimationEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerGameModeChangeEvent; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerItemDamageEvent; -import org.bukkit.event.player.PlayerItemHeldEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerKickEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerSwapHandItemsEvent; -import org.bukkit.event.player.PlayerToggleFlightEvent; -import org.bukkit.event.player.PlayerToggleSneakEvent; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.Element.SubElement; -import com.projectkorra.projectkorra.ability.Ability; -import com.projectkorra.projectkorra.ability.AddonAbility; -import com.projectkorra.projectkorra.ability.AirAbility; -import com.projectkorra.projectkorra.ability.AvatarAbility; -import com.projectkorra.projectkorra.ability.ChiAbility; -import com.projectkorra.projectkorra.ability.CoreAbility; -import com.projectkorra.projectkorra.ability.EarthAbility; -import com.projectkorra.projectkorra.ability.ElementalAbility; -import com.projectkorra.projectkorra.ability.FireAbility; -import com.projectkorra.projectkorra.ability.WaterAbility; +import com.projectkorra.projectkorra.ability.*; import com.projectkorra.projectkorra.ability.util.ComboManager; import com.projectkorra.projectkorra.ability.util.MultiAbilityManager; import com.projectkorra.projectkorra.ability.util.PassiveManager; -import com.projectkorra.projectkorra.airbending.AirBlast; -import com.projectkorra.projectkorra.airbending.AirBurst; -import com.projectkorra.projectkorra.airbending.AirScooter; -import com.projectkorra.projectkorra.airbending.AirShield; -import com.projectkorra.projectkorra.airbending.AirSpout; -import com.projectkorra.projectkorra.airbending.AirSuction; -import com.projectkorra.projectkorra.airbending.AirSwipe; -import com.projectkorra.projectkorra.airbending.Suffocate; -import com.projectkorra.projectkorra.airbending.Tornado; +import com.projectkorra.projectkorra.airbending.*; import com.projectkorra.projectkorra.airbending.flight.FlightMultiAbility; import com.projectkorra.projectkorra.airbending.passive.GracefulDescent; import com.projectkorra.projectkorra.avatar.AvatarState; -import com.projectkorra.projectkorra.chiblocking.AcrobatStance; -import com.projectkorra.projectkorra.chiblocking.HighJump; -import com.projectkorra.projectkorra.chiblocking.Paralyze; -import com.projectkorra.projectkorra.chiblocking.QuickStrike; -import com.projectkorra.projectkorra.chiblocking.RapidPunch; -import com.projectkorra.projectkorra.chiblocking.Smokescreen; -import com.projectkorra.projectkorra.chiblocking.SwiftKick; -import com.projectkorra.projectkorra.chiblocking.WarriorStance; +import com.projectkorra.projectkorra.chiblocking.*; import com.projectkorra.projectkorra.chiblocking.passive.Acrobatics; import com.projectkorra.projectkorra.chiblocking.passive.ChiPassive; import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.configuration.ConfigManager; -import com.projectkorra.projectkorra.earthbending.Catapult; -import com.projectkorra.projectkorra.earthbending.Collapse; -import com.projectkorra.projectkorra.earthbending.CollapseWall; -import com.projectkorra.projectkorra.earthbending.EarthArmor; -import com.projectkorra.projectkorra.earthbending.EarthBlast; -import com.projectkorra.projectkorra.earthbending.EarthGrab; +import com.projectkorra.projectkorra.earthbending.*; import com.projectkorra.projectkorra.earthbending.EarthGrab.GrabMode; -import com.projectkorra.projectkorra.earthbending.EarthSmash; -import com.projectkorra.projectkorra.earthbending.EarthTunnel; -import com.projectkorra.projectkorra.earthbending.RaiseEarth; -import com.projectkorra.projectkorra.earthbending.RaiseEarthWall; -import com.projectkorra.projectkorra.earthbending.Shockwave; -import com.projectkorra.projectkorra.earthbending.Tremorsense; import com.projectkorra.projectkorra.earthbending.combo.EarthPillars; import com.projectkorra.projectkorra.earthbending.lava.LavaFlow; import com.projectkorra.projectkorra.earthbending.lava.LavaFlow.AbilityType; @@ -130,44 +29,18 @@ import com.projectkorra.projectkorra.event.EntityBendingDeathEvent; 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; -import com.projectkorra.projectkorra.firebending.FireBurst; -import com.projectkorra.projectkorra.firebending.FireJet; -import com.projectkorra.projectkorra.firebending.FireManipulation; +import com.projectkorra.projectkorra.firebending.*; import com.projectkorra.projectkorra.firebending.FireManipulation.FireManipulationType; -import com.projectkorra.projectkorra.firebending.FireShield; -import com.projectkorra.projectkorra.firebending.HeatControl; import com.projectkorra.projectkorra.firebending.HeatControl.HeatControlType; -import com.projectkorra.projectkorra.firebending.Illumination; -import com.projectkorra.projectkorra.firebending.WallOfFire; import com.projectkorra.projectkorra.firebending.combustion.Combustion; import com.projectkorra.projectkorra.firebending.lightning.Lightning; import com.projectkorra.projectkorra.firebending.passive.FirePassive; import com.projectkorra.projectkorra.firebending.util.FireDamageTimer; import com.projectkorra.projectkorra.object.HorizontalVelocityTracker; import com.projectkorra.projectkorra.object.Preset; -import com.projectkorra.projectkorra.util.BlockSource; -import com.projectkorra.projectkorra.util.ClickType; -import com.projectkorra.projectkorra.util.DamageHandler; -import com.projectkorra.projectkorra.util.FlightHandler; +import com.projectkorra.projectkorra.util.*; import com.projectkorra.projectkorra.util.FlightHandler.Flight; -import com.projectkorra.projectkorra.util.MovementHandler; -import com.projectkorra.projectkorra.util.PassiveHandler; -import com.projectkorra.projectkorra.util.StatisticsManager; -import com.projectkorra.projectkorra.util.StatisticsMethods; -import com.projectkorra.projectkorra.util.TempArmor; -import com.projectkorra.projectkorra.util.TempBlock; -import com.projectkorra.projectkorra.waterbending.OctopusForm; -import com.projectkorra.projectkorra.waterbending.SurgeWall; -import com.projectkorra.projectkorra.waterbending.SurgeWave; -import com.projectkorra.projectkorra.waterbending.Torrent; -import com.projectkorra.projectkorra.waterbending.WaterBubble; -import com.projectkorra.projectkorra.waterbending.WaterManipulation; -import com.projectkorra.projectkorra.waterbending.WaterSpout; +import com.projectkorra.projectkorra.waterbending.*; import com.projectkorra.projectkorra.waterbending.blood.Bloodbending; import com.projectkorra.projectkorra.waterbending.healing.HealingWaters; import com.projectkorra.projectkorra.waterbending.ice.IceBlast; @@ -177,6 +50,29 @@ import com.projectkorra.projectkorra.waterbending.ice.PhaseChange.PhaseChangeTyp import com.projectkorra.projectkorra.waterbending.multiabilities.WaterArms; import com.projectkorra.projectkorra.waterbending.passive.FastSwim; import com.projectkorra.projectkorra.waterbending.passive.HydroSink; +import org.bukkit.Statistic; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.*; +import org.bukkit.event.entity.*; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityDamageEvent.DamageModifier; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.*; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.*; public class PKListener implements Listener { ProjectKorra plugin; @@ -253,7 +149,7 @@ public class PKListener implements Listener { if (ElementalAbility.isLava(fromblock)) { event.setCancelled(!EarthPassive.canFlowFromTo(fromblock, toblock)); } else if (ElementalAbility.isWater(fromblock)) { - event.setCancelled(WaterBubble.isAir(toblock)); + event.setCancelled(ElementalAbility.isAir(toblock.getType())); if (!event.isCancelled()) { event.setCancelled(!WaterManipulation.canFlowFromTo(fromblock, toblock)); } @@ -347,7 +243,7 @@ public class PKListener implements Listener { } // If there is a TempBlock of Air bellow FallingSand blocks, prevent it from updating. - if (!event.isCancelled() && (block.getType() == Material.SAND || block.getType() == Material.GRAVEL || block.getType() == Material.ANVIL || block.getType() == Material.DRAGON_EGG) && TempBlock.isTempBlock(block.getRelative(BlockFace.DOWN)) && block.getRelative(BlockFace.DOWN).getType() == Material.AIR) { + if (!event.isCancelled() && (block.getType() == Material.SAND || block.getType() == Material.GRAVEL || block.getType() == Material.ANVIL || block.getType() == Material.DRAGON_EGG) && TempBlock.isTempBlock(block.getRelative(BlockFace.DOWN)) && ElementalAbility.isAir(block.getRelative(BlockFace.DOWN).getType())) { event.setCancelled(true); } } diff --git a/src/com/projectkorra/projectkorra/ability/EarthAbility.java b/src/com/projectkorra/projectkorra/ability/EarthAbility.java index 0510dfae..18892659 100644 --- a/src/com/projectkorra/projectkorra/ability/EarthAbility.java +++ b/src/com/projectkorra/projectkorra/ability/EarthAbility.java @@ -1,24 +1,5 @@ package com.projectkorra.projectkorra.ability; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.Levelled; -import org.bukkit.entity.Entity; -import org.bukkit.entity.FallingBlock; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; @@ -32,6 +13,24 @@ import com.projectkorra.projectkorra.util.BlockSource; import com.projectkorra.projectkorra.util.Information; import com.projectkorra.projectkorra.util.ParticleEffect; import com.projectkorra.projectkorra.util.TempBlock; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Levelled; +import org.bukkit.entity.Entity; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public abstract class EarthAbility extends ElementalAbility { @@ -578,7 +577,7 @@ public abstract class EarthAbility extends ElementalAbility { final Information info = TEMP_AIR_LOCATIONS.get(i); final Block block = info.getState().getBlock(); - if (block.getType() != Material.AIR && !block.isLiquid()) { + if (!ElementalAbility.isAir(block.getType()) && !block.isLiquid()) { if (force || !MOVED_EARTH.containsKey(block)) { TEMP_AIR_LOCATIONS.remove(i); } else { @@ -600,7 +599,7 @@ public abstract class EarthAbility extends ElementalAbility { final Information info = MOVED_EARTH.get(block); final Block sourceblock = info.getState().getBlock(); - if (info.getState().getType() == Material.AIR) { + if (ElementalAbility.isAir(info.getState().getType())) { MOVED_EARTH.remove(block); return true; } @@ -623,7 +622,7 @@ public abstract class EarthAbility extends ElementalAbility { return true; } - if (sourceblock.getType() == Material.AIR || sourceblock.isLiquid()) { + if (ElementalAbility.isAir(sourceblock.getType()) || sourceblock.isLiquid()) { info.getState().update(true); } else { diff --git a/src/com/projectkorra/projectkorra/ability/FireAbility.java b/src/com/projectkorra/projectkorra/ability/FireAbility.java index 877a8f30..5a6d76f5 100644 --- a/src/com/projectkorra/projectkorra/ability/FireAbility.java +++ b/src/com/projectkorra/projectkorra/ability/FireAbility.java @@ -1,21 +1,5 @@ package com.projectkorra.projectkorra.ability; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.World; -import org.bukkit.block.Block; -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; @@ -24,6 +8,13 @@ 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 org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public abstract class FireAbility extends ElementalAbility { @@ -69,7 +60,7 @@ public abstract class FireAbility extends ElementalAbility { * fire dissipates or is destroyed. */ public static void createTempFire(final Location loc) { - if (loc.getBlock().getType() == Material.AIR) { + if (ElementalAbility.isAir(loc.getBlock().getType())) { loc.getBlock().setType(Material.FIRE); return; } @@ -216,9 +207,9 @@ public abstract class FireAbility extends ElementalAbility { while (it.hasNext()) { final Location loc = it.next(); final Information info = TEMP_FIRE.get(loc); - if (info.getLocation().getBlock().getType() != Material.FIRE && info.getLocation().getBlock().getType() != Material.AIR) { + if (info.getLocation().getBlock().getType() != Material.FIRE && !ElementalAbility.isAir(info.getLocation().getBlock().getType())) { revertTempFire(loc); - } else if (info.getBlock().getType() == Material.AIR || System.currentTimeMillis() > info.getTime()) { + } else if (ElementalAbility.isAir(info.getBlock().getType()) || System.currentTimeMillis() > info.getTime()) { revertTempFire(loc); } } @@ -234,7 +225,7 @@ public abstract class FireAbility extends ElementalAbility { return; } final Information info = TEMP_FIRE.get(location); - if (info.getLocation().getBlock().getType() != Material.FIRE && info.getLocation().getBlock().getType() != Material.AIR) { + 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); diff --git a/src/com/projectkorra/projectkorra/airbending/Tornado.java b/src/com/projectkorra/projectkorra/airbending/Tornado.java index badbae8f..969598fe 100644 --- a/src/com/projectkorra/projectkorra/airbending/Tornado.java +++ b/src/com/projectkorra/projectkorra/airbending/Tornado.java @@ -1,20 +1,20 @@ package com.projectkorra.projectkorra.airbending; -import java.util.HashSet; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.AirAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.command.Commands; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.AirAbility; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.command.Commands; +import java.util.HashSet; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; public class Tornado extends AirAbility { @@ -104,7 +104,7 @@ public class Tornado extends AirAbility { final double timefactor = this.currentHeight / this.maxHeight; this.currentRadius = timefactor * this.radius; - if (this.origin.getBlock().getType() != Material.AIR && this.origin.getBlock().getType() != Material.BARRIER) { + if (!ElementalAbility.isAir(this.origin.getBlock().getType()) && this.origin.getBlock().getType() != Material.BARRIER) { this.origin.setY(this.origin.getY() - 1. / 10. * this.currentHeight); for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(this.origin, this.currentHeight)) { diff --git a/src/com/projectkorra/projectkorra/chiblocking/SwiftKick.java b/src/com/projectkorra/projectkorra/chiblocking/SwiftKick.java index 3daa4020..e4e05cb9 100644 --- a/src/com/projectkorra/projectkorra/chiblocking/SwiftKick.java +++ b/src/com/projectkorra/projectkorra/chiblocking/SwiftKick.java @@ -1,14 +1,13 @@ package com.projectkorra.projectkorra.chiblocking; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; - import com.projectkorra.projectkorra.ability.ChiAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.attribute.Attribute; import com.projectkorra.projectkorra.chiblocking.passive.ChiPassive; import com.projectkorra.projectkorra.util.DamageHandler; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; public class SwiftKick extends ChiAbility { @@ -38,7 +37,7 @@ public class SwiftKick extends ChiAbility { this.remove(); return; } - if (this.player.getLocation().subtract(0, 0.5, 0).getBlock().getType() != Material.AIR) { + if (!ElementalAbility.isAir(this.player.getLocation().subtract(0, 0.5, 0).getBlock().getType())) { this.remove(); return; } diff --git a/src/com/projectkorra/projectkorra/earthbending/EarthArmor.java b/src/com/projectkorra/projectkorra/earthbending/EarthArmor.java index e9a22a6c..260ad8c1 100644 --- a/src/com/projectkorra/projectkorra/earthbending/EarthArmor.java +++ b/src/com/projectkorra/projectkorra/earthbending/EarthArmor.java @@ -1,12 +1,15 @@ package com.projectkorra.projectkorra.earthbending; -import java.util.List; - -import org.bukkit.Color; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.ability.EarthAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.command.Commands; +import com.projectkorra.projectkorra.util.ParticleEffect; +import com.projectkorra.projectkorra.util.TempArmor; +import com.projectkorra.projectkorra.util.TempBlock; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; @@ -17,14 +20,7 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ProjectKorra; -import com.projectkorra.projectkorra.ability.EarthAbility; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.command.Commands; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempArmor; -import com.projectkorra.projectkorra.util.TempBlock; +import java.util.List; public class EarthArmor extends EarthAbility { @@ -183,7 +179,7 @@ public class EarthArmor extends EarthAbility { if (this.isTransparent(newHeadBlock) && !newHeadBlock.isLiquid()) { GeneralMethods.breakBlock(newHeadBlock); - } else if (!this.isEarthbendable(newHeadBlock) && !newHeadBlock.isLiquid() && newHeadBlock.getType() != Material.AIR) { + } else if (!this.isEarthbendable(newHeadBlock) && !newHeadBlock.isLiquid() && !ElementalAbility.isAir(newHeadBlock.getType())) { ParticleEffect.BLOCK_CRACK.display(newHeadBlock.getLocation(), 8, 0.5, 0.5, 0.5, newHeadBlock.getBlockData()); this.remove(); return false; @@ -191,7 +187,7 @@ public class EarthArmor extends EarthAbility { if (this.isTransparent(newLegsBlock) && !newLegsBlock.isLiquid()) { GeneralMethods.breakBlock(newLegsBlock); - } else if (!this.isEarthbendable(newLegsBlock) && !newLegsBlock.isLiquid() && newLegsBlock.getType() != Material.AIR) { + } else if (!this.isEarthbendable(newLegsBlock) && !newLegsBlock.isLiquid() && !ElementalAbility.isAir(newLegsBlock.getType())) { newLegsBlock.getLocation().getWorld().playSound(newLegsBlock.getLocation(), Sound.BLOCK_GRASS_BREAK, 1, 1); ParticleEffect.BLOCK_CRACK.display(newHeadBlock.getLocation(), 8, 0.5, 0.5, 0.5, newLegsBlock.getBlockData()); this.remove(); diff --git a/src/com/projectkorra/projectkorra/earthbending/EarthGrab.java b/src/com/projectkorra/projectkorra/earthbending/EarthGrab.java index 4126489b..b84c4801 100644 --- a/src/com/projectkorra/projectkorra/earthbending/EarthGrab.java +++ b/src/com/projectkorra/projectkorra/earthbending/EarthGrab.java @@ -1,40 +1,29 @@ package com.projectkorra.projectkorra.earthbending; -import java.util.Arrays; -import java.util.List; - -import org.bukkit.Color; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.Ageable; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Item; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Skeleton; -import org.bukkit.entity.Zombie; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.CoreAbility; import com.projectkorra.projectkorra.ability.EarthAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.attribute.Attribute; import com.projectkorra.projectkorra.avatar.AvatarState; -import com.projectkorra.projectkorra.util.MovementHandler; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempArmor; -import com.projectkorra.projectkorra.util.TempArmorStand; -import com.projectkorra.projectkorra.util.TempBlock; +import com.projectkorra.projectkorra.util.*; +import org.bukkit.Color; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.data.Ageable; +import org.bukkit.entity.*; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.Vector; + +import java.util.Arrays; +import java.util.List; public class EarthGrab extends EarthAbility { @@ -220,7 +209,7 @@ public class EarthGrab extends EarthAbility { ParticleEffect.BLOCK_DUST.display(this.target.getLocation(), 36, 0.3, 0.6, 0.3, this.target.getLocation().getBlock().getRelative(BlockFace.DOWN).getBlockData()); - if (this.trap.getLocation().clone().subtract(0, 0.1, 0).getBlock().getType() != Material.AIR) { + if (!ElementalAbility.isAir(this.trap.getLocation().clone().subtract(0, 0.1, 0).getBlock().getType())) { this.trap.setGravity(false); } else { this.trap.setGravity(true); diff --git a/src/com/projectkorra/projectkorra/earthbending/EarthSmash.java b/src/com/projectkorra/projectkorra/earthbending/EarthSmash.java index 4ae6864b..c90d4e97 100644 --- a/src/com/projectkorra/projectkorra/earthbending/EarthSmash.java +++ b/src/com/projectkorra/projectkorra/earthbending/EarthSmash.java @@ -3,6 +3,7 @@ package com.projectkorra.projectkorra.earthbending; import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.EarthAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.attribute.Attribute; import com.projectkorra.projectkorra.util.ClickType; import com.projectkorra.projectkorra.util.DamageHandler; @@ -224,7 +225,7 @@ public class EarthSmash extends EarthAbility { // Check to make sure the new location is available to move to. for (final Block block : this.getBlocks()) { - if (block.getType() != Material.AIR && !this.isTransparent(block)) { + if (!ElementalAbility.isAir(block.getType()) && !this.isTransparent(block)) { this.location = oldLoc; break; } @@ -253,7 +254,7 @@ public class EarthSmash extends EarthAbility { // If an earthsmash runs into too many blocks we should remove it. int badBlocksFound = 0; for (final Block block : this.getBlocks()) { - if (block.getType() != Material.AIR && (!this.isTransparent(block) || block.getType() == Material.WATER)) { + if (!ElementalAbility.isAir(block.getType()) && (!this.isTransparent(block) || block.getType() == Material.WATER)) { badBlocksFound++; } } @@ -343,7 +344,7 @@ public class EarthSmash extends EarthAbility { // Make sure there is a clear path upward otherwise remove. for (int y = 0; y <= 3; y++) { final Block tempBlock = this.location.clone().add(0, y, 0).getBlock(); - if (!this.isTransparent(tempBlock) && tempBlock.getType() != Material.AIR) { + if (!this.isTransparent(tempBlock) && !ElementalAbility.isAir(tempBlock.getType())) { this.remove(); return; } diff --git a/src/com/projectkorra/projectkorra/earthbending/Tremorsense.java b/src/com/projectkorra/projectkorra/earthbending/Tremorsense.java index 73f91f61..cc6c5c06 100644 --- a/src/com/projectkorra/projectkorra/earthbending/Tremorsense.java +++ b/src/com/projectkorra/projectkorra/earthbending/Tremorsense.java @@ -1,8 +1,10 @@ package com.projectkorra.projectkorra.earthbending; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.EarthAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.attribute.Attribute; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -11,10 +13,8 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; -import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.EarthAbility; -import com.projectkorra.projectkorra.attribute.Attribute; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class Tremorsense extends EarthAbility { @@ -78,7 +78,7 @@ public class Tremorsense extends EarthAbility { } else if (!this.isEarthbendable(blocki) && earth) { foundAir = true; break; - } else if (!this.isEarthbendable(blocki) && !earth && blocki.getType() != Material.AIR) { + } else if (!this.isEarthbendable(blocki) && !earth && !ElementalAbility.isAir(blocki.getType())) { break; } } diff --git a/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurge.java b/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurge.java index 5e6454b6..2ebaed56 100644 --- a/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurge.java +++ b/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurge.java @@ -1,13 +1,9 @@ package com.projectkorra.projectkorra.earthbending.lava; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.ability.LavaAbility; +import com.projectkorra.projectkorra.util.*; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -18,13 +14,8 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.LavaAbility; -import com.projectkorra.projectkorra.util.BlockSource; -import com.projectkorra.projectkorra.util.ClickType; -import com.projectkorra.projectkorra.util.DamageHandler; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempBlock; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class LavaSurge extends LavaAbility { @@ -95,7 +86,7 @@ public class LavaSurge extends LavaAbility { public boolean prepare() { final Block targetBlock = BlockSource.getEarthSourceBlock(this.player, this.prepareRange, ClickType.SHIFT_DOWN); - if (targetBlock == null || !(targetBlock.getRelative(BlockFace.UP).getType() == Material.AIR) && !isLava(targetBlock.getRelative(BlockFace.UP))) { + if (targetBlock == null || !(ElementalAbility.isAir(targetBlock.getRelative(BlockFace.UP).getType())) && !isLava(targetBlock.getRelative(BlockFace.UP))) { return false; } diff --git a/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurgeWall.java b/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurgeWall.java index 24aa16af..d4c4b051 100644 --- a/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurgeWall.java +++ b/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurgeWall.java @@ -1,18 +1,7 @@ package com.projectkorra.projectkorra.earthbending.lava; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.ability.LavaAbility; import com.projectkorra.projectkorra.avatar.AvatarState; import com.projectkorra.projectkorra.firebending.FireBlast; @@ -20,6 +9,17 @@ import com.projectkorra.projectkorra.util.BlockSource; import com.projectkorra.projectkorra.util.BlockSource.BlockSourceType; import com.projectkorra.projectkorra.util.ClickType; import com.projectkorra.projectkorra.util.TempBlock; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class LavaSurgeWall extends LavaAbility { @@ -176,7 +176,7 @@ public class LavaSurgeWall extends LavaAbility { } if (WALL_BLOCKS.containsKey(block)) { blocks.add(block); - } else if (!blocks.contains(block) && (block.getType() == Material.AIR || block.getType() == Material.FIRE || this.isLavabendable(block))) { + } else if (!blocks.contains(block) && (ElementalAbility.isAir(block.getType()) || block.getType() == Material.FIRE || this.isLavabendable(block))) { WALL_BLOCKS.put(block, this.player); this.addWallBlock(block); blocks.add(block); @@ -212,7 +212,7 @@ public class LavaSurgeWall extends LavaAbility { block = this.location.getBlock(); } - if (block.getType() != Material.AIR) { + if (!ElementalAbility.isAir(block.getType())) { this.breakBlock(); return; } else if (!this.progressing) { diff --git a/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurgeWave.java b/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurgeWave.java index 2261c507..1a0991a9 100644 --- a/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurgeWave.java +++ b/src/com/projectkorra/projectkorra/earthbending/lava/LavaSurgeWave.java @@ -1,17 +1,5 @@ package com.projectkorra.projectkorra.earthbending.lava; -import java.util.ArrayList; -import java.util.concurrent.ConcurrentHashMap; - -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; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.ability.LavaAbility; @@ -21,6 +9,17 @@ import com.projectkorra.projectkorra.util.BlockSource; import com.projectkorra.projectkorra.util.BlockSource.BlockSourceType; import com.projectkorra.projectkorra.util.ClickType; import com.projectkorra.projectkorra.util.TempBlock; +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; +import org.bukkit.util.Vector; + +import java.util.ArrayList; +import java.util.concurrent.ConcurrentHashMap; public class LavaSurgeWave extends LavaAbility { @@ -165,13 +164,13 @@ public class LavaSurgeWave extends LavaAbility { final Block blockl = this.location.getBlock(); final ArrayList blocks = new ArrayList(); - if (!GeneralMethods.isRegionProtectedFromBuild(this, this.location) && (blockl.getType() == Material.AIR || blockl.getType() == Material.FIRE || ElementalAbility.isPlant(blockl) || isLava(blockl))) { + if (!GeneralMethods.isRegionProtectedFromBuild(this, this.location) && (ElementalAbility.isAir(blockl.getType()) || blockl.getType() == Material.FIRE || ElementalAbility.isPlant(blockl) || isLava(blockl))) { for (double i = 0; i <= this.radius; i += 0.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) && (block.getType() == Material.AIR || block.getType() == Material.FIRE) || this.isLavabendable(block)) { + if (!blocks.contains(block) && (ElementalAbility.isAir(block.getType()) || block.getType() == Material.FIRE) || this.isLavabendable(block)) { blocks.add(block); FireBlast.removeFireBlastsAroundPoint(block.getLocation(), 2); } diff --git a/src/com/projectkorra/projectkorra/firebending/FireJet.java b/src/com/projectkorra/projectkorra/firebending/FireJet.java index de9ffcb7..08067a84 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireJet.java +++ b/src/com/projectkorra/projectkorra/firebending/FireJet.java @@ -1,17 +1,17 @@ package com.projectkorra.projectkorra.firebending; -import java.util.Random; - +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; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.ability.FireAbility; -import com.projectkorra.projectkorra.airbending.AirSpout; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.util.ParticleEffect; +import java.util.Random; public class FireJet extends FireAbility { @@ -51,14 +51,14 @@ public class FireJet extends FireAbility { this.speed = this.getDayFactor(this.speed); final Block block = player.getLocation().getBlock(); - if (BlazeArc.isIgnitable(player, block) || block.getType() == Material.AIR || 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 || this.bPlayer.isAvatarState()) { + 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 || this.bPlayer.isAvatarState()) { player.setVelocity(player.getEyeLocation().getDirection().clone().normalize().multiply(this.speed)); if (!canFireGrief()) { - if (block.getType() == Material.AIR) { + if (ElementalAbility.isAir(block.getType())) { createTempFire(block.getLocation()); } - } else if (block.getType() == Material.AIR) { + } else if (ElementalAbility.isAir(block.getType())) { block.setType(Material.FIRE); } diff --git a/src/com/projectkorra/projectkorra/firebending/combo/FireComboStream.java b/src/com/projectkorra/projectkorra/firebending/combo/FireComboStream.java index 213e818c..77c73087 100644 --- a/src/com/projectkorra/projectkorra/firebending/combo/FireComboStream.java +++ b/src/com/projectkorra/projectkorra/firebending/combo/FireComboStream.java @@ -1,17 +1,5 @@ package com.projectkorra.projectkorra.firebending.combo; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.CoreAbility; @@ -20,6 +8,16 @@ 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 org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; /*** * Is only here for legacy purposes. All fire combos used to use a form of this @@ -73,7 +71,7 @@ public class FireComboStream extends BukkitRunnable { @Override public void run() { final Block block = this.location.getBlock(); - if (block.getRelative(BlockFace.UP).getType() != Material.AIR && !ElementalAbility.isPlant(block)) { + if (!ElementalAbility.isAir(block.getRelative(BlockFace.UP).getType()) && !ElementalAbility.isPlant(block)) { this.remove(); return; } diff --git a/src/com/projectkorra/projectkorra/firebending/combo/FireWheel.java b/src/com/projectkorra/projectkorra/firebending/combo/FireWheel.java index 00bbf545..0db95cca 100644 --- a/src/com/projectkorra/projectkorra/firebending/combo/FireWheel.java +++ b/src/com/projectkorra/projectkorra/firebending/combo/FireWheel.java @@ -1,17 +1,5 @@ package com.projectkorra.projectkorra.firebending.combo; -import java.util.ArrayList; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.ComboAbility; import com.projectkorra.projectkorra.ability.ElementalAbility; @@ -22,6 +10,17 @@ 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; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.ArrayList; public class FireWheel extends FireAbility implements ComboAbility { @@ -125,7 +124,7 @@ public class FireWheel extends FireAbility implements ComboAbility { } else if (ElementalAbility.isPlant(topBlock)) { topBlock.breakNaturally(); topBlock = topBlock.getRelative(BlockFace.DOWN); - } else if (topBlock.getType() == Material.AIR) { + } else if (ElementalAbility.isAir(topBlock.getType())) { this.remove(); return; } else if (GeneralMethods.isSolid(topBlock.getRelative(BlockFace.UP)) || isWater(topBlock.getRelative(BlockFace.UP))) { diff --git a/src/com/projectkorra/projectkorra/firebending/combustion/Combustion.java b/src/com/projectkorra/projectkorra/firebending/combustion/Combustion.java index 96c79ae7..97402d75 100644 --- a/src/com/projectkorra/projectkorra/firebending/combustion/Combustion.java +++ b/src/com/projectkorra/projectkorra/firebending/combustion/Combustion.java @@ -1,22 +1,21 @@ package com.projectkorra.projectkorra.firebending.combustion; -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; -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.CombustionAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.ability.util.Collision; import com.projectkorra.projectkorra.attribute.Attribute; import com.projectkorra.projectkorra.avatar.AvatarState; import com.projectkorra.projectkorra.util.DamageHandler; import com.projectkorra.projectkorra.util.ParticleEffect; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; public class Combustion extends CombustionAbility { @@ -146,7 +145,7 @@ public class Combustion extends CombustionAbility { final Block block = this.location.getBlock(); if (block != null) { - if (block.getType() != Material.AIR && !isWater(block)) { + if (!ElementalAbility.isAir(block.getType()) && !isWater(block)) { this.createExplosion(block.getLocation(), this.explosivePower, this.breakBlocks); } } diff --git a/src/com/projectkorra/projectkorra/util/BlockSource.java b/src/com/projectkorra/projectkorra/util/BlockSource.java index 0ed2f22e..d156313e 100644 --- a/src/com/projectkorra/projectkorra/util/BlockSource.java +++ b/src/com/projectkorra/projectkorra/util/BlockSource.java @@ -1,19 +1,17 @@ package com.projectkorra.projectkorra.util; -import java.util.HashMap; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; - import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.ability.CoreAbility; import com.projectkorra.projectkorra.ability.EarthAbility; import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.ability.WaterAbility; import com.projectkorra.projectkorra.configuration.ConfigManager; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; + +import java.util.HashMap; /** * BlockSource is a class that handles water and earth bending sources. When a @@ -269,7 +267,7 @@ public class BlockSource { } else { sourceBlock = WaterAbility.getWaterSourceBlock(player, range, allowPlant); } - if (sourceBlock != null && !sourceBlock.getType().equals(Material.AIR) && (ElementalAbility.isWater(sourceBlock) || ElementalAbility.isPlant(sourceBlock) || WaterAbility.isSnow(sourceBlock) || ElementalAbility.isIce(sourceBlock))) { + if (sourceBlock != null && !ElementalAbility.isAir(sourceBlock.getType()) && (ElementalAbility.isWater(sourceBlock) || ElementalAbility.isPlant(sourceBlock) || WaterAbility.isSnow(sourceBlock) || ElementalAbility.isIce(sourceBlock))) { if (TempBlock.isTempBlock(sourceBlock) && !WaterAbility.isBendableWaterTempBlock(sourceBlock)) { return null; } diff --git a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java index d7da2763..f2845bbc 100644 --- a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java +++ b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java @@ -1,21 +1,8 @@ package com.projectkorra.projectkorra.waterbending; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -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.WaterAbility; import com.projectkorra.projectkorra.attribute.Attribute; import com.projectkorra.projectkorra.firebending.FireBlast; @@ -25,6 +12,14 @@ import com.projectkorra.projectkorra.util.ParticleEffect; import com.projectkorra.projectkorra.util.TempBlock; import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth; import com.projectkorra.projectkorra.waterbending.util.WaterReturn; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class SurgeWall extends WaterAbility { @@ -269,7 +264,7 @@ public class SurgeWall extends WaterAbility { continue; } else if (WALL_BLOCKS.containsKey(block)) { blocks.add(block); - } else if (!blocks.contains(block) && (block.getType() == Material.AIR || block.getType() == Material.FIRE || this.isWaterbendable(block)) && this.isTransparent(block)) { + } else if (!blocks.contains(block) && (ElementalAbility.isAir(block.getType()) || block.getType() == Material.FIRE || this.isWaterbendable(block)) && this.isTransparent(block)) { WALL_BLOCKS.put(block, this.player); this.addWallBlock(block); blocks.add(block); @@ -306,7 +301,7 @@ public class SurgeWall extends WaterAbility { block = this.location.getBlock(); } - if (block.getType() != Material.AIR) { + if (!ElementalAbility.isAir(block.getType())) { this.remove(); return; } else if (!this.progressing) { diff --git a/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java b/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java index ab1c6a95..71ce3232 100644 --- a/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java +++ b/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java @@ -2,6 +2,7 @@ package com.projectkorra.projectkorra.waterbending; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.AirAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.ability.WaterAbility; import com.projectkorra.projectkorra.attribute.Attribute; import com.projectkorra.projectkorra.avatar.AvatarState; @@ -155,7 +156,7 @@ public class SurgeWave extends WaterAbility { } final Block oldBlock = block; - if (!isAir(block.getType()) && block.getType() != Material.SNOW && !isWater(block) && !isPlant(block)) { + if (!ElementalAbility.isAir(block.getType()) && block.getType() != Material.SNOW && !isWater(block) && !isPlant(block)) { continue; } else if (isPlant(block)) { block.breakNaturally(); @@ -285,13 +286,13 @@ public class SurgeWave extends WaterAbility { final Block blockl = this.location.getBlock(); final ArrayList blocks = new ArrayList(); - if (!GeneralMethods.isRegionProtectedFromBuild(this, this.location) && (((blockl.getType() == Material.AIR || blockl.getType() == Material.FIRE || isPlant(blockl) || isWater(blockl) || this.isWaterbendable(this.player, blockl))))) { + if (!GeneralMethods.isRegionProtectedFromBuild(this, this.location) && (((ElementalAbility.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) && (block.getType() == Material.AIR || block.getType() == Material.FIRE) || this.isWaterbendable(block)) { + if (!blocks.contains(block) && (ElementalAbility.isAir(block.getType()) || block.getType() == Material.FIRE) || this.isWaterbendable(block)) { blocks.add(block); FireBlast.removeFireBlastsAroundPoint(block.getLocation(), 2); } diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterBubble.java b/src/com/projectkorra/projectkorra/waterbending/WaterBubble.java index 8d67be70..5ab7f910 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterBubble.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterBubble.java @@ -1,12 +1,11 @@ package com.projectkorra.projectkorra.waterbending; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.ability.CoreAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.ability.WaterAbility; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.configuration.ConfigManager; +import com.projectkorra.projectkorra.util.TempBlock; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -14,11 +13,8 @@ import org.bukkit.block.BlockState; import org.bukkit.block.data.Waterlogged; import org.bukkit.entity.Player; -import com.projectkorra.projectkorra.ability.CoreAbility; -import com.projectkorra.projectkorra.ability.WaterAbility; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.configuration.ConfigManager; -import com.projectkorra.projectkorra.util.TempBlock; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class WaterBubble extends WaterAbility { @@ -153,7 +149,7 @@ public class WaterBubble extends WaterAbility { Waterlogged logged = (Waterlogged) b.getBlockData(); logged.setWaterlogged(true); b.setBlockData(logged); - } else if (b.getType() == Material.AIR) { + } else if (ElementalAbility.isAir(b.getType())) { b.setType(this.waterOrigins.get(b).getType()); b.setBlockData(this.waterOrigins.get(b).getBlockData()); } @@ -193,7 +189,7 @@ public class WaterBubble extends WaterAbility { Waterlogged logged = (Waterlogged) b.getBlockData(); logged.setWaterlogged(true); b.setBlockData(logged); - } else if (b.getType() == Material.AIR) { + } else if (ElementalAbility.isAir(b.getType())) { b.setType(this.waterOrigins.get(b).getType()); b.setBlockData(this.waterOrigins.get(b).getBlockData()); } diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterSpout.java b/src/com/projectkorra/projectkorra/waterbending/WaterSpout.java index e1d927cf..a64714a3 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterSpout.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterSpout.java @@ -1,23 +1,23 @@ package com.projectkorra.projectkorra.waterbending; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.ability.WaterAbility; +import com.projectkorra.projectkorra.ability.util.Collision; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.util.ParticleEffect; +import com.projectkorra.projectkorra.util.TempBlock; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffectType; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.WaterAbility; -import com.projectkorra.projectkorra.ability.util.Collision; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempBlock; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; public class WaterSpout extends WaterAbility { @@ -109,7 +109,7 @@ public class WaterSpout extends WaterAbility { loc.add(x, height, z); final Block block = loc.getBlock(); - if ((!TempBlock.isTempBlock(block)) && (block.getType().equals(Material.AIR) || !GeneralMethods.isSolid(block))) { + if ((!TempBlock.isTempBlock(block)) && (ElementalAbility.isAir(block.getType()) || !GeneralMethods.isSolid(block))) { this.blocks.add(new TempBlock(block, Material.WATER, GeneralMethods.getWaterData(7))); AFFECTED_BLOCKS.put(block, block); } @@ -291,7 +291,7 @@ public class WaterSpout extends WaterAbility { return i; } - if ((blocki.getType() != Material.AIR && (!isPlant(blocki) || !this.bPlayer.canPlantbend()))) { + if ((!ElementalAbility.isAir(blocki.getType()) && (!isPlant(blocki) || !this.bPlayer.canPlantbend()))) { this.revertBaseBlock(); return -1; } diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterSpoutWave.java b/src/com/projectkorra/projectkorra/waterbending/WaterSpoutWave.java index 81027020..130f95e5 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterSpoutWave.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterSpoutWave.java @@ -4,6 +4,7 @@ import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.CoreAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.ability.WaterAbility; import com.projectkorra.projectkorra.attribute.Attribute; import com.projectkorra.projectkorra.util.DamageHandler; @@ -164,7 +165,7 @@ public class WaterSpoutWave extends WaterAbility { } final Block blockAbove = block.getRelative(BlockFace.UP); - if (blockAbove.getType() != Material.AIR && !this.isWaterbendable(blockAbove)) { + if (!ElementalAbility.isAir(blockAbove.getType()) && !this.isWaterbendable(blockAbove)) { this.remove(); return; } @@ -235,7 +236,7 @@ public class WaterSpoutWave extends WaterAbility { this.location.add(0, this.animationSpeed, 0); final Block block = this.location.getBlock(); - if (!(this.isWaterbendable(block) || block.getType() == Material.AIR) || GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) { + if (!(this.isWaterbendable(block) || ElementalAbility.isAir(block.getType()) || GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation()))) { this.remove(); return; } @@ -251,7 +252,7 @@ public class WaterSpoutWave extends WaterAbility { this.location.add(vec.normalize().multiply(this.animationSpeed)); final Block block = this.location.getBlock(); - if (!(this.isWaterbendable(block) || block.getType() == Material.AIR) || GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) { + if (!(this.isWaterbendable(block) || ElementalAbility.isAir(block.getType()) || GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation()))) { this.remove(); return; } @@ -295,7 +296,7 @@ public class WaterSpoutWave extends WaterAbility { this.player.setVelocity(this.player.getEyeLocation().getDirection().normalize().multiply(currentSpeed)); for (final Block block : GeneralMethods.getBlocksAroundPoint(this.player.getLocation().add(0, -1, 0), this.waveRadius)) { - if (block.getType() == Material.AIR && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) { + if (ElementalAbility.isAir(block.getType()) && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) { if (this.iceWave) { this.createBlockDelay(block, Material.ICE, Material.ICE.createBlockData(), 2L); } else { @@ -343,7 +344,7 @@ public class WaterSpoutWave extends WaterAbility { dir.setY(0); final Block block = this.player.getEyeLocation().add(dir).getBlock(); this.location = block.getLocation(); - if (block.getType() == Material.AIR && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) { + if (ElementalAbility.isAir(block.getType()) && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) { this.createBlock(block, Material.WATER, GeneralMethods.getWaterData(0)); } } @@ -419,7 +420,7 @@ public class WaterSpoutWave extends WaterAbility { continue; } - if (block.getType() == Material.AIR || block.getType() == Material.ICE || this.isWaterbendable(block)) { + if (ElementalAbility.isAir(block.getType()) || block.getType() == Material.ICE || this.isWaterbendable(block)) { if (!FROZEN_BLOCKS.containsKey(block)) { final TempBlock tblock = new TempBlock(block, Material.ICE); FROZEN_BLOCKS.put(block, tblock); diff --git a/src/com/projectkorra/projectkorra/waterbending/combo/IceBullet.java b/src/com/projectkorra/projectkorra/waterbending/combo/IceBullet.java index 7a835f14..33fe5570 100644 --- a/src/com/projectkorra/projectkorra/waterbending/combo/IceBullet.java +++ b/src/com/projectkorra/projectkorra/waterbending/combo/IceBullet.java @@ -1,12 +1,18 @@ package com.projectkorra.projectkorra.waterbending.combo; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.ability.ComboAbility; +import com.projectkorra.projectkorra.ability.CoreAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.ability.IceAbility; +import com.projectkorra.projectkorra.ability.util.Collision; +import com.projectkorra.projectkorra.ability.util.ComboManager.AbilityInformation; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.avatar.AvatarState; +import com.projectkorra.projectkorra.firebending.combo.FireComboStream; +import com.projectkorra.projectkorra.util.*; +import com.projectkorra.projectkorra.waterbending.util.WaterSourceGrabber; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -17,22 +23,8 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ProjectKorra; -import com.projectkorra.projectkorra.ability.ComboAbility; -import com.projectkorra.projectkorra.ability.CoreAbility; -import com.projectkorra.projectkorra.ability.IceAbility; -import com.projectkorra.projectkorra.ability.util.Collision; -import com.projectkorra.projectkorra.ability.util.ComboManager.AbilityInformation; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.avatar.AvatarState; -import com.projectkorra.projectkorra.firebending.combo.FireComboStream; -import com.projectkorra.projectkorra.util.BlockSource; -import com.projectkorra.projectkorra.util.ClickType; -import com.projectkorra.projectkorra.util.DamageHandler; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempBlock; -import com.projectkorra.projectkorra.waterbending.util.WaterSourceGrabber; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class IceBullet extends IceAbility implements ComboAbility { @@ -240,7 +232,7 @@ public class IceBullet extends IceAbility implements ComboAbility { final Block block = loc.clone().add(dir).getBlock(); this.location = block.getLocation(); - if (block.getType() == Material.AIR && !GeneralMethods.isRegionProtectedFromBuild(this.player, "WaterManipulation", block.getLocation())) { + if (ElementalAbility.isAir(block.getType()) && !GeneralMethods.isRegionProtectedFromBuild(this.player, "WaterManipulation", block.getLocation())) { this.createBlock(block, mat, data); } } diff --git a/src/com/projectkorra/projectkorra/waterbending/ice/IceSpikePillar.java b/src/com/projectkorra/projectkorra/waterbending/ice/IceSpikePillar.java index ca61a818..94245dda 100644 --- a/src/com/projectkorra/projectkorra/waterbending/ice/IceSpikePillar.java +++ b/src/com/projectkorra/projectkorra/waterbending/ice/IceSpikePillar.java @@ -1,10 +1,14 @@ package com.projectkorra.projectkorra.waterbending.ice; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.Random; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.AirAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.ability.IceAbility; +import com.projectkorra.projectkorra.ability.WaterAbility; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.util.DamageHandler; +import com.projectkorra.projectkorra.util.TempBlock; +import com.projectkorra.projectkorra.util.TempPotionEffect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -16,14 +20,10 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.AirAbility; -import com.projectkorra.projectkorra.ability.IceAbility; -import com.projectkorra.projectkorra.ability.WaterAbility; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.util.DamageHandler; -import com.projectkorra.projectkorra.util.TempBlock; -import com.projectkorra.projectkorra.util.TempPotionEffect; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; public class IceSpikePillar extends IceAbility { @@ -184,7 +184,7 @@ public class IceSpikePillar extends IceAbility { Block b; for (int i = 1; i <= this.height; i++) { b = this.source_block.getWorld().getBlockAt(this.location.clone().add(this.direction.clone().multiply(i))); - if (b.getType() != Material.AIR) { + if (!ElementalAbility.isAir(b.getType())) { return false; } diff --git a/src/com/projectkorra/projectkorra/waterbending/ice/IceSpikePillarField.java b/src/com/projectkorra/projectkorra/waterbending/ice/IceSpikePillarField.java index f35a36b0..6cb40584 100644 --- a/src/com/projectkorra/projectkorra/waterbending/ice/IceSpikePillarField.java +++ b/src/com/projectkorra/projectkorra/waterbending/ice/IceSpikePillarField.java @@ -1,9 +1,11 @@ package com.projectkorra.projectkorra.waterbending.ice; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.ability.IceAbility; +import com.projectkorra.projectkorra.ability.WaterAbility; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.util.TempBlock; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -13,11 +15,9 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.IceAbility; -import com.projectkorra.projectkorra.ability.WaterAbility; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.util.TempBlock; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; public class IceSpikePillarField extends IceAbility { @@ -73,7 +73,7 @@ public class IceSpikePillarField extends IceAbility { for (int y = -1; y <= 1; y++) { final Block testBlock = player.getWorld().getBlockAt(locX + x, locY + y, locZ + z); - if (((WaterAbility.isIcebendable(player, testBlock.getType(), false) && !TempBlock.isTempBlock(testBlock)) || (TempBlock.isTempBlock(testBlock) && WaterAbility.isBendableWaterTempBlock(testBlock))) && testBlock.getRelative(BlockFace.UP).getType() == Material.AIR && !(testBlock.getX() == player.getEyeLocation().getBlock().getX() && testBlock.getZ() == player.getEyeLocation().getBlock().getZ()) ) { + if (((WaterAbility.isIcebendable(player, testBlock.getType(), false) && !TempBlock.isTempBlock(testBlock)) || (TempBlock.isTempBlock(testBlock) && WaterAbility.isBendableWaterTempBlock(testBlock))) && ElementalAbility.isAir(testBlock.getRelative(BlockFace.UP).getType()) && !(testBlock.getX() == player.getEyeLocation().getBlock().getX() && testBlock.getZ() == player.getEyeLocation().getBlock().getZ()) ) { iceBlocks.add(testBlock); for (int i = 0; i < iceBlocks.size() / 2 + 1; i++) { final Random rand = new Random(); diff --git a/src/com/projectkorra/projectkorra/waterbending/ice/PhaseChange.java b/src/com/projectkorra/projectkorra/waterbending/ice/PhaseChange.java index 1a81657a..c2e0b53f 100644 --- a/src/com/projectkorra/projectkorra/waterbending/ice/PhaseChange.java +++ b/src/com/projectkorra/projectkorra/waterbending/ice/PhaseChange.java @@ -1,21 +1,7 @@ package com.projectkorra.projectkorra.waterbending.ice; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.CopyOnWriteArrayList; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.type.Snow; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.ability.IceAbility; import com.projectkorra.projectkorra.attribute.Attribute; import com.projectkorra.projectkorra.util.TempBlock; @@ -24,6 +10,16 @@ import com.projectkorra.projectkorra.waterbending.SurgeWave; import com.projectkorra.projectkorra.waterbending.Torrent; import com.projectkorra.projectkorra.waterbending.WaterSpoutWave; import com.projectkorra.projectkorra.waterbending.multiabilities.WaterArmsSpear; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.data.type.Snow; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; public class PhaseChange extends IceAbility { @@ -223,7 +219,7 @@ public class PhaseChange extends IceAbility { final Block b = l.getBlock(); loop: for (int i = 1; i <= this.depth; i++) { for (final BlockFace face : this.getBlockFacesTowardsPlayer(center)) { - if (b.getRelative(face, i).getType() == Material.AIR) { + if (ElementalAbility.isAir(b.getRelative(face, i).getType())) { blocks.add(b); break loop; } diff --git a/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArms.java b/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArms.java index c3b26a61..f04abf88 100644 --- a/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArms.java +++ b/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArms.java @@ -1,20 +1,8 @@ package com.projectkorra.projectkorra.waterbending.multiabilities; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.data.BlockData; -import org.bukkit.entity.Player; - import com.projectkorra.projectkorra.Element; 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.ability.util.MultiAbilityManager; @@ -27,6 +15,18 @@ import com.projectkorra.projectkorra.util.TempBlock; import com.projectkorra.projectkorra.waterbending.multiabilities.WaterArmsWhip.Whip; import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth; import com.projectkorra.projectkorra.waterbending.util.WaterReturn; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class WaterArms extends WaterAbility { @@ -210,7 +210,7 @@ public class WaterArms extends WaterAbility { } } - return isWaterbendable(block.getType()) || isIce(block) || isWater(block) || block.getType() == Material.AIR; + return isWaterbendable(block.getType()) || isIce(block) || isWater(block) || ElementalAbility.isAir(block.getType()); } /** diff --git a/src/com/projectkorra/projectkorra/waterbending/passive/HydroSink.java b/src/com/projectkorra/projectkorra/waterbending/passive/HydroSink.java index 943ea2b9..b537293a 100644 --- a/src/com/projectkorra/projectkorra/waterbending/passive/HydroSink.java +++ b/src/com/projectkorra/projectkorra/waterbending/passive/HydroSink.java @@ -29,7 +29,7 @@ public class HydroSink extends WaterAbility implements PassiveAbility { return true; } else if (WaterAbility.isWaterbendable(player, null, block) && !ElementalAbility.isPlant(block)) { return true; - } else if (fallBlock.getType() == Material.AIR) { + } else if (ElementalAbility.isAir(fallBlock.getType())) { return true; } else if ((WaterAbility.isWaterbendable(player, null, fallBlock) && !ElementalAbility.isPlant(fallBlock)) || fallBlock.getType() == Material.SNOW_BLOCK) { return true; diff --git a/src/com/projectkorra/projectkorra/waterbending/plant/PlantRegrowth.java b/src/com/projectkorra/projectkorra/waterbending/plant/PlantRegrowth.java index 96d00353..85432f0b 100644 --- a/src/com/projectkorra/projectkorra/waterbending/plant/PlantRegrowth.java +++ b/src/com/projectkorra/projectkorra/waterbending/plant/PlantRegrowth.java @@ -1,5 +1,6 @@ package com.projectkorra.projectkorra.waterbending.plant; +import com.projectkorra.projectkorra.ability.ElementalAbility; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -48,7 +49,7 @@ public class PlantRegrowth extends PlantAbility { @Override public void remove() { super.remove(); - if (this.block.getType() == Material.AIR) { + if (ElementalAbility.isAir(this.block.getType())) { this.block.setType(this.type); this.block.setBlockData(this.data); if (this.type == Material.TALL_GRASS) { diff --git a/src/com/projectkorra/projectkorra/waterbending/util/WaterSourceGrabber.java b/src/com/projectkorra/projectkorra/waterbending/util/WaterSourceGrabber.java index 4433ace6..1d919060 100644 --- a/src/com/projectkorra/projectkorra/waterbending/util/WaterSourceGrabber.java +++ b/src/com/projectkorra/projectkorra/waterbending/util/WaterSourceGrabber.java @@ -1,10 +1,9 @@ package com.projectkorra.projectkorra.waterbending.util; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.ability.WaterAbility; +import com.projectkorra.projectkorra.util.TempBlock; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -12,9 +11,10 @@ import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.WaterAbility; -import com.projectkorra.projectkorra.util.TempBlock; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class WaterSourceGrabber { @@ -57,7 +57,7 @@ public class WaterSourceGrabber { this.currentLoc.add(0, this.animimationSpeed * Math.signum(locDiff), 0); final Block block = this.currentLoc.getBlock(); - if (!(WaterAbility.isWaterbendable(this.player, null, block) || block.getType() == Material.AIR) || GeneralMethods.isRegionProtectedFromBuild(this.player, "WaterSpout", block.getLocation())) { + if (!(WaterAbility.isWaterbendable(this.player, null, block) || ElementalAbility.isAir(block.getType())) || GeneralMethods.isRegionProtectedFromBuild(this.player, "WaterSpout", block.getLocation())) { this.remove(); return; } @@ -74,7 +74,7 @@ public class WaterSourceGrabber { this.currentLoc.add(vec.normalize().multiply(this.animimationSpeed)); final Block block = this.currentLoc.getBlock(); - if (!(WaterAbility.isWaterbendable(this.player, null, block) || block.getType() == Material.AIR) || GeneralMethods.isRegionProtectedFromBuild(this.player, "WaterManipulation", block.getLocation())) { + if (!(WaterAbility.isWaterbendable(this.player, null, block) || ElementalAbility.isAir(block.getType())) || GeneralMethods.isRegionProtectedFromBuild(this.player, "WaterManipulation", block.getLocation())) { this.remove(); return; } From dae0f19fcc3e09b20a3531a30447ead77fb53969 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Fri, 4 Jan 2019 06:24:55 -0500 Subject: [PATCH 06/34] some fixup for last commit --- src/com/projectkorra/projectkorra/GeneralMethods.java | 2 -- src/com/projectkorra/projectkorra/PKListener.java | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index d5d7f361..027c3052 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -95,8 +95,6 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; -import static com.projectkorra.projectkorra.ability.ElementalAbility.isAir; - public class GeneralMethods { // Represents PlayerName, previously checked blocks, and whether they were true or false diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 4e6e4f56..63a99442 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -149,7 +149,7 @@ public class PKListener implements Listener { if (ElementalAbility.isLava(fromblock)) { event.setCancelled(!EarthPassive.canFlowFromTo(fromblock, toblock)); } else if (ElementalAbility.isWater(fromblock)) { - event.setCancelled(ElementalAbility.isAir(toblock.getType())); + event.setCancelled(WaterBubble.isAir(toblock)); if (!event.isCancelled()) { event.setCancelled(!WaterManipulation.canFlowFromTo(fromblock, toblock)); } From fa4139eccc76b36e5f8687588595c259809e0fa1 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Fri, 4 Jan 2019 08:14:21 -0500 Subject: [PATCH 07/34] just thaw the wall, fixes creating water sources in protected regions --- src/com/projectkorra/projectkorra/waterbending/SurgeWall.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java index f2845bbc..7e7d9ab7 100644 --- a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java +++ b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java @@ -496,7 +496,7 @@ public class SurgeWall extends WaterAbility { private void returnWater() { if (this.location != null) { if (this.frozen) { - this.location.getBlock().setType(Material.WATER); + this.thaw(); } new WaterReturn(this.player, this.location.getBlock()); } From 15ac7b6d5be6bc9b89e979cfc94c24972194376d Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Fri, 4 Jan 2019 08:50:46 -0500 Subject: [PATCH 08/34] fix firejet when you have illumination torch --- .../projectkorra/firebending/FireJet.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/firebending/FireJet.java b/src/com/projectkorra/projectkorra/firebending/FireJet.java index 08067a84..2ee1a03e 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireJet.java +++ b/src/com/projectkorra/projectkorra/firebending/FireJet.java @@ -13,6 +13,8 @@ import org.bukkit.util.Vector; import java.util.Random; +import static com.projectkorra.projectkorra.firebending.Illumination.isIlluminationTorch; + public class FireJet extends FireAbility { @Attribute("AvatarStateToggle") @@ -51,7 +53,17 @@ 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 || this.bPlayer.isAvatarState()) { + 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()) { player.setVelocity(player.getEyeLocation().getDirection().clone().normalize().multiply(this.speed)); if (!canFireGrief()) { if (ElementalAbility.isAir(block.getType())) { From 0b45215636cee9380a800fc4645ebe7ba77ebfc9 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sat, 5 Jan 2019 06:37:11 -0500 Subject: [PATCH 09/34] some more protection checks --- .../chiblocking/combo/Immobilize.java | 17 ++++++++++------- .../multiabilities/WaterArmsFreeze.java | 4 ++++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/com/projectkorra/projectkorra/chiblocking/combo/Immobilize.java b/src/com/projectkorra/projectkorra/chiblocking/combo/Immobilize.java index b3894dec..9a05ce4a 100644 --- a/src/com/projectkorra/projectkorra/chiblocking/combo/Immobilize.java +++ b/src/com/projectkorra/projectkorra/chiblocking/combo/Immobilize.java @@ -1,12 +1,5 @@ package com.projectkorra.projectkorra.chiblocking.combo; -import java.util.ArrayList; - -import org.bukkit.Location; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; - import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.ChiAbility; @@ -14,8 +7,15 @@ import com.projectkorra.projectkorra.ability.ComboAbility; import com.projectkorra.projectkorra.ability.CoreAbility; import com.projectkorra.projectkorra.ability.util.ComboManager.AbilityInformation; import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.util.ClickType; import com.projectkorra.projectkorra.util.MovementHandler; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; + +import java.util.ArrayList; public class Immobilize extends ChiAbility implements ComboAbility { @@ -38,6 +38,9 @@ public class Immobilize extends ChiAbility implements ComboAbility { this.remove(); return; } else { + if (GeneralMethods.isRegionProtectedFromBuild(this, target.getLocation()) || ((target instanceof Player) && Commands.invincible.contains(((Player) target).getName()))){ + return; + } paralyze(this.target, this.duration); this.bPlayer.addCooldown(this); } diff --git a/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArmsFreeze.java b/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArmsFreeze.java index ad2ffcdf..d6ed2894 100644 --- a/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArmsFreeze.java +++ b/src/com/projectkorra/projectkorra/waterbending/multiabilities/WaterArmsFreeze.java @@ -1,5 +1,6 @@ package com.projectkorra.projectkorra.waterbending.multiabilities; +import com.projectkorra.projectkorra.command.Commands; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -130,6 +131,9 @@ public class WaterArmsFreeze extends IceAbility { for (final Entity entity : GeneralMethods.getEntitiesAroundPoint(this.location, 2.5)) { if (entity instanceof LivingEntity && entity.getEntityId() != this.player.getEntityId() && !(entity instanceof ArmorStand)) { + if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ + continue; + } DamageHandler.damageEntity(entity, this.iceDamage, this); final PotionEffect effect = new PotionEffect(PotionEffectType.SLOW, 40, 2); new TempPotionEffect((LivingEntity) entity, effect); From 38ddefeb5a959be154e317e462f2b05386c514c6 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sun, 6 Jan 2019 08:54:07 -0500 Subject: [PATCH 10/34] some fixes --- src/com/projectkorra/projectkorra/GeneralMethods.java | 4 ++-- src/com/projectkorra/projectkorra/ability/EarthAbility.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index 027c3052..38984b6f 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -2158,11 +2158,11 @@ public class GeneralMethods { } public static FallingBlock spawnFallingBlock(final Location loc, final Material type) { - return spawnFallingBlock(loc, type, null); + return spawnFallingBlock(loc, type, type.createBlockData()); } public static FallingBlock spawnFallingBlock(final Location loc, final Material type, final BlockData data) { - return loc.getWorld().spawnFallingBlock(loc, type.createBlockData(data.getAsString())); + return loc.getWorld().spawnFallingBlock(loc, data); } public static void sendBrandingMessage(final CommandSender sender, final String message) { diff --git a/src/com/projectkorra/projectkorra/ability/EarthAbility.java b/src/com/projectkorra/projectkorra/ability/EarthAbility.java index 18892659..fae1f2f4 100644 --- a/src/com/projectkorra/projectkorra/ability/EarthAbility.java +++ b/src/com/projectkorra/projectkorra/ability/EarthAbility.java @@ -277,8 +277,8 @@ public abstract class EarthAbility extends ElementalAbility { Material sand = red ? Material.RED_SAND : Material.SAND; Material stone = red ? Material.RED_SANDSTONE : Material.SANDSTONE; - ParticleEffect.ITEM_CRACK.display(loc, amount, xOffset, yOffset, zOffset, speed, sand.createBlockData()); - ParticleEffect.ITEM_CRACK.display(loc, amount, xOffset, yOffset, zOffset, speed, stone.createBlockData()); + ParticleEffect.BLOCK_CRACK.display(loc, amount, xOffset, yOffset, zOffset, speed, sand.createBlockData()); + ParticleEffect.BLOCK_CRACK.display(loc, amount, xOffset, yOffset, zOffset, speed, stone.createBlockData()); } /** From 1f72980dc8e556a6f80a28ba645a9b62c7edab21 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sun, 6 Jan 2019 09:29:06 -0500 Subject: [PATCH 11/34] dont allow extraction on tempblocks --- .../earthbending/metal/Extraction.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/com/projectkorra/projectkorra/earthbending/metal/Extraction.java b/src/com/projectkorra/projectkorra/earthbending/metal/Extraction.java index 62f5d0e1..39b36f97 100644 --- a/src/com/projectkorra/projectkorra/earthbending/metal/Extraction.java +++ b/src/com/projectkorra/projectkorra/earthbending/metal/Extraction.java @@ -1,17 +1,17 @@ package com.projectkorra.projectkorra.earthbending.metal; -import java.util.HashSet; -import java.util.Random; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.MetalAbility; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.util.TempBlock; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.MetalAbility; -import com.projectkorra.projectkorra.attribute.Attribute; +import java.util.HashSet; +import java.util.Random; public class Extraction extends MetalAbility { @@ -42,7 +42,7 @@ public class Extraction extends MetalAbility { return; } - if (!GeneralMethods.isRegionProtectedFromBuild(this, this.originBlock.getLocation())) { + if (!GeneralMethods.isRegionProtectedFromBuild(this, this.originBlock.getLocation()) && !TempBlock.isTempBlock(this.originBlock)) { final Material material = this.originBlock.getType(); Material type = null; From 551de94f7e25a9ad8843445c6a5579c8ba305eba Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sun, 6 Jan 2019 10:22:09 -0500 Subject: [PATCH 12/34] restore previous behavior for airsuction where you could only affect yourself if a origin cloud was set --- .../projectkorra/airbending/AirSuction.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/com/projectkorra/projectkorra/airbending/AirSuction.java b/src/com/projectkorra/projectkorra/airbending/AirSuction.java index cb5d0a33..f1c9565c 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirSuction.java +++ b/src/com/projectkorra/projectkorra/airbending/AirSuction.java @@ -45,6 +45,7 @@ public class AirSuction extends AirAbility { private Location location; private Location origin; private Vector direction; + private boolean canAffectSelf; public AirSuction(final Player player) { super(player); @@ -78,6 +79,7 @@ public class AirSuction extends AirAbility { this.cooldown = getConfig().getLong("Abilities.Air.AirSuction.Cooldown"); this.random = new Random(); this.origin = getTargetLocation(); + this.canAffectSelf = true; if (GeneralMethods.isRegionProtectedFromBuild(player, this.getName(), origin)) { return; @@ -195,6 +197,9 @@ public class AirSuction extends AirAbility { if (GeneralMethods.isRegionProtectedFromBuild(this, entity.getLocation()) || ((entity instanceof Player) && Commands.invincible.contains(((Player) entity).getName()))){ continue; } + if((entity.getEntityId() == player.getEntityId()) && !canAffectSelf){ + continue; + } final Vector velocity = entity.getVelocity(); final double max = this.speed; final Vector push = this.direction.clone(); @@ -269,6 +274,7 @@ public class AirSuction extends AirAbility { } else { suc = new AirSuction(player); suc.setOrigin(player.getEyeLocation().clone()); + suc.setCanEffectSelf(false); } if (suc.getOrigin() != null) { @@ -393,6 +399,10 @@ public class AirSuction extends AirAbility { this.cooldown = cooldown; } + public void setCanEffectSelf(final boolean affect) { + this.canAffectSelf = affect; + } + public static int getSelectParticles() { return getConfig().getInt("Abilities.Air.AirSuction.SelectParticles"); } From 5fe6d2ee3f0770431628bf0a71ee9a4645c6b6ca Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sun, 6 Jan 2019 12:15:51 -0500 Subject: [PATCH 13/34] always remove the water from waterbottles for torrnet --- src/com/projectkorra/projectkorra/waterbending/Torrent.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/projectkorra/projectkorra/waterbending/Torrent.java b/src/com/projectkorra/projectkorra/waterbending/Torrent.java index e5ac018d..697c9c55 100644 --- a/src/com/projectkorra/projectkorra/waterbending/Torrent.java +++ b/src/com/projectkorra/projectkorra/waterbending/Torrent.java @@ -524,9 +524,8 @@ public class Torrent extends WaterAbility { if (tor.sourceSelected || tor.settingUp) { WaterReturn.emptyWaterBottle(player); - } else { - block.setType(Material.AIR); } + block.setType(Material.AIR); } } } From feedc725a2134a63d5d4ac32863e40d6d447c772 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Tue, 8 Jan 2019 11:35:07 -0500 Subject: [PATCH 14/34] make use of brand new FluidLevelChangeEvent --- src/com/projectkorra/projectkorra/PKListener.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 63a99442..6af794e9 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -163,6 +163,15 @@ public class PKListener implements Listener { } } + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onFluidLevelChange(FluidLevelChangeEvent event) { + if (TempBlock.isTempBlock(event.getBlock())){ + event.setCancelled(true); + } else if (TempBlock.isTouchingTempBlock(event.getBlock())) { + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onBlockForm(final BlockFormEvent event) { if (TempBlock.isTempBlock(event.getBlock())) { From 3bfb203c8ce02b450602823da035c8b6af241a5f Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Tue, 8 Jan 2019 12:57:55 -0500 Subject: [PATCH 15/34] pom change to allow specifying jar output location, wont change anything unless specified with -Ddir= --- pom.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pom.xml b/pom.xml index 012390ad..ebe26bdc 100644 --- a/pom.xml +++ b/pom.xml @@ -183,9 +183,18 @@ 1.8 + + org.apache.maven.plugins + maven-jar-plugin + 3.1.1 + + ${dir} + + + ${project.build.directory} UTF-8 \ No newline at end of file From e7f2d5ce5d77a5d9622d4f6da343d1e500530310 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Wed, 9 Jan 2019 12:16:16 -0500 Subject: [PATCH 16/34] allow phase change to revert temp ice blocks if they were previously water --- .../projectkorra/waterbending/ice/PhaseChange.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/projectkorra/projectkorra/waterbending/ice/PhaseChange.java b/src/com/projectkorra/projectkorra/waterbending/ice/PhaseChange.java index c2e0b53f..68e5812f 100644 --- a/src/com/projectkorra/projectkorra/waterbending/ice/PhaseChange.java +++ b/src/com/projectkorra/projectkorra/waterbending/ice/PhaseChange.java @@ -382,6 +382,10 @@ public class PhaseChange extends IceAbility { } } } + + if (isIce(tb.getBlock()) && ElementalAbility.isWater(tb.getState().getBlockData().getMaterial())) { + tb.revertBlock(); + } } else if (isWater(b)) { // Figure out what to do here also. } else if (isIce(b)) { From eb9fc7ca375f19ac9df6c9e5ab64a0a9667f8975 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Wed, 9 Jan 2019 12:50:38 -0500 Subject: [PATCH 17/34] add null check for entity death event for statistics --- src/com/projectkorra/projectkorra/PKListener.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 6af794e9..5f362894 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -629,10 +629,13 @@ public class PKListener implements Listener { } }.runTaskLater(ProjectKorra.plugin, 20); } - - StatisticsMethods.addStatisticAbility(event.getAttacker().getUniqueId(), CoreAbility.getAbility(event.getAbility().getName()), com.projectkorra.projectkorra.util.Statistic.PLAYER_KILLS, 1); + if (event.getAttacker() != null) { + StatisticsMethods.addStatisticAbility(event.getAttacker().getUniqueId(), CoreAbility.getAbility(event.getAbility().getName()), com.projectkorra.projectkorra.util.Statistic.PLAYER_KILLS, 1); + } + } + if (event.getAttacker() != null) { + StatisticsMethods.addStatisticAbility(event.getAttacker().getUniqueId(), CoreAbility.getAbility(event.getAbility().getName()), com.projectkorra.projectkorra.util.Statistic.TOTAL_KILLS, 1); } - StatisticsMethods.addStatisticAbility(event.getAttacker().getUniqueId(), CoreAbility.getAbility(event.getAbility().getName()), com.projectkorra.projectkorra.util.Statistic.TOTAL_KILLS, 1); } @EventHandler From b712364e8699f6dd75868c8b1db96d56816c639a Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Wed, 9 Jan 2019 12:52:35 -0500 Subject: [PATCH 18/34] also check if statistics are even enabled --- src/com/projectkorra/projectkorra/PKListener.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 5f362894..97a4bf62 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -74,6 +74,8 @@ import org.bukkit.util.Vector; import java.util.*; +import static com.projectkorra.projectkorra.ProjectKorra.isStatisticsEnabled; + public class PKListener implements Listener { ProjectKorra plugin; @@ -629,11 +631,11 @@ public class PKListener implements Listener { } }.runTaskLater(ProjectKorra.plugin, 20); } - if (event.getAttacker() != null) { + if (event.getAttacker() != null && isStatisticsEnabled()) { StatisticsMethods.addStatisticAbility(event.getAttacker().getUniqueId(), CoreAbility.getAbility(event.getAbility().getName()), com.projectkorra.projectkorra.util.Statistic.PLAYER_KILLS, 1); } } - if (event.getAttacker() != null) { + if (event.getAttacker() != null && isStatisticsEnabled()) { StatisticsMethods.addStatisticAbility(event.getAttacker().getUniqueId(), CoreAbility.getAbility(event.getAbility().getName()), com.projectkorra.projectkorra.util.Statistic.TOTAL_KILLS, 1); } } @@ -1012,7 +1014,7 @@ public class PKListener implements Listener { JUMPS.put(player, player.getStatistic(Statistic.JUMP)); GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); - if (ProjectKorra.isStatisticsEnabled()) { + if (isStatisticsEnabled()) { Manager.getManager(StatisticsManager.class).load(player.getUniqueId()); } Bukkit.getScheduler().runTaskLater(ProjectKorra.plugin, new Runnable() { @@ -1149,7 +1151,7 @@ public class PKListener implements Listener { final Player player = event.getPlayer(); final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); - if (ProjectKorra.isStatisticsEnabled()) { + if (isStatisticsEnabled()) { Manager.getManager(StatisticsManager.class).store(player.getUniqueId()); } if (bPlayer != null) { From 2cf4ecdbd8b24a5b8a74912176a3fd1bbb22be36 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Wed, 9 Jan 2019 13:13:49 -0500 Subject: [PATCH 19/34] dont do static import for last commit --- src/com/projectkorra/projectkorra/PKListener.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 97a4bf62..1ebd9f4b 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -74,8 +74,6 @@ import org.bukkit.util.Vector; import java.util.*; -import static com.projectkorra.projectkorra.ProjectKorra.isStatisticsEnabled; - public class PKListener implements Listener { ProjectKorra plugin; @@ -631,11 +629,11 @@ public class PKListener implements Listener { } }.runTaskLater(ProjectKorra.plugin, 20); } - if (event.getAttacker() != null && isStatisticsEnabled()) { + if (event.getAttacker() != null && ProjectKorra.isStatisticsEnabled()) { StatisticsMethods.addStatisticAbility(event.getAttacker().getUniqueId(), CoreAbility.getAbility(event.getAbility().getName()), com.projectkorra.projectkorra.util.Statistic.PLAYER_KILLS, 1); } } - if (event.getAttacker() != null && isStatisticsEnabled()) { + if (event.getAttacker() != null && ProjectKorra.isStatisticsEnabled()) { StatisticsMethods.addStatisticAbility(event.getAttacker().getUniqueId(), CoreAbility.getAbility(event.getAbility().getName()), com.projectkorra.projectkorra.util.Statistic.TOTAL_KILLS, 1); } } @@ -1014,7 +1012,7 @@ public class PKListener implements Listener { JUMPS.put(player, player.getStatistic(Statistic.JUMP)); GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); - if (isStatisticsEnabled()) { + if (ProjectKorra.isStatisticsEnabled()) { Manager.getManager(StatisticsManager.class).load(player.getUniqueId()); } Bukkit.getScheduler().runTaskLater(ProjectKorra.plugin, new Runnable() { @@ -1151,7 +1149,7 @@ public class PKListener implements Listener { final Player player = event.getPlayer(); final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); - if (isStatisticsEnabled()) { + if (ProjectKorra.isStatisticsEnabled()) { Manager.getManager(StatisticsManager.class).store(player.getUniqueId()); } if (bPlayer != null) { From 61a0f1e7136418a86dbbb742526b87de42b80c77 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Wed, 9 Jan 2019 13:43:31 -0500 Subject: [PATCH 20/34] fix that cooldown error, will require a table reset of pk_cooldowns, also make having database cooldowns configureable --- .../projectkorra/BendingPlayer.java | 48 +++++++++---------- .../projectkorra/projectkorra/PKListener.java | 4 +- .../projectkorra/ProjectKorra.java | 34 ++++++------- .../configuration/ConfigManager.java | 1 + .../projectkorra/storage/DBConnection.java | 8 ++-- 5 files changed, 44 insertions(+), 51 deletions(-) diff --git a/src/com/projectkorra/projectkorra/BendingPlayer.java b/src/com/projectkorra/projectkorra/BendingPlayer.java index a82fe782..101f67c3 100644 --- a/src/com/projectkorra/projectkorra/BendingPlayer.java +++ b/src/com/projectkorra/projectkorra/BendingPlayer.java @@ -1,22 +1,5 @@ package com.projectkorra.projectkorra; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.OfflinePlayer; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; - import com.projectkorra.projectkorra.Element.SubElement; import com.projectkorra.projectkorra.ability.Ability; import com.projectkorra.projectkorra.ability.AvatarAbility; @@ -33,6 +16,18 @@ import com.projectkorra.projectkorra.storage.DBConnection; import com.projectkorra.projectkorra.util.Cooldown; import com.projectkorra.projectkorra.util.DBCooldownManager; import com.projectkorra.projectkorra.waterbending.blood.Bloodbending; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; /** * Class that presents a player and stores all bending information about the @@ -152,17 +147,18 @@ public class BendingPlayer { public Map loadCooldowns() { final Map cooldowns = new ConcurrentHashMap<>(); - try (ResultSet rs = DBConnection.sql.readQuery("SELECT * FROM pk_cooldowns WHERE uuid = '" + this.uuid.toString() + "'")) { - while (rs.next()) { - final int cooldownId = rs.getInt("cooldown_id"); - final long value = rs.getLong("value"); - final String name = cooldownManager.getCooldownName(cooldownId); - cooldowns.put(name, new Cooldown(value, true)); + if (ProjectKorra.isDatabaseCooldownsEnabled()) { + try (ResultSet rs = DBConnection.sql.readQuery("SELECT * FROM pk_cooldowns WHERE uuid = '" + this.uuid.toString() + "'")) { + while (rs.next()) { + final int cooldownId = rs.getInt("cooldown_id"); + final long value = rs.getLong("value"); + final String name = cooldownManager.getCooldownName(cooldownId); + cooldowns.put(name, new Cooldown(value, true)); + } + } catch (final SQLException e) { + e.printStackTrace(); } } - catch (final SQLException e) { - e.printStackTrace(); - } return cooldowns; } diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 1ebd9f4b..5cfb1f2e 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -1153,7 +1153,9 @@ public class PKListener implements Listener { Manager.getManager(StatisticsManager.class).store(player.getUniqueId()); } if (bPlayer != null) { - bPlayer.saveCooldowns(); + if (ProjectKorra.isDatabaseCooldownsEnabled()) { + bPlayer.saveCooldowns(); + } if (TOGGLED_OUT.contains(player.getUniqueId()) && bPlayer.isToggled()) { TOGGLED_OUT.remove(player.getUniqueId()); diff --git a/src/com/projectkorra/projectkorra/ProjectKorra.java b/src/com/projectkorra/projectkorra/ProjectKorra.java index 0009da96..dacaffb1 100644 --- a/src/com/projectkorra/projectkorra/ProjectKorra.java +++ b/src/com/projectkorra/projectkorra/ProjectKorra.java @@ -1,21 +1,8 @@ package com.projectkorra.projectkorra; -import java.util.HashMap; -import java.util.logging.Logger; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Statistic; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; - import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.projectkorra.projectkorra.ability.CoreAbility; -import com.projectkorra.projectkorra.ability.util.CollisionInitializer; -import com.projectkorra.projectkorra.ability.util.CollisionManager; -import com.projectkorra.projectkorra.ability.util.ComboManager; -import com.projectkorra.projectkorra.ability.util.MultiAbilityManager; -import com.projectkorra.projectkorra.ability.util.PassiveManager; +import com.projectkorra.projectkorra.ability.util.*; import com.projectkorra.projectkorra.airbending.util.AirbendingManager; import com.projectkorra.projectkorra.chiblocking.util.ChiblockingManager; import com.projectkorra.projectkorra.command.Commands; @@ -24,12 +11,16 @@ import com.projectkorra.projectkorra.earthbending.util.EarthbendingManager; import com.projectkorra.projectkorra.firebending.util.FirebendingManager; import com.projectkorra.projectkorra.object.Preset; import com.projectkorra.projectkorra.storage.DBConnection; -import com.projectkorra.projectkorra.util.Metrics; -import com.projectkorra.projectkorra.util.RevertChecker; -import com.projectkorra.projectkorra.util.StatisticsManager; -import com.projectkorra.projectkorra.util.TempBlock; -import com.projectkorra.projectkorra.util.Updater; +import com.projectkorra.projectkorra.util.*; import com.projectkorra.projectkorra.waterbending.util.WaterbendingManager; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Statistic; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.HashMap; +import java.util.logging.Logger; public class ProjectKorra extends JavaPlugin { @@ -152,7 +143,7 @@ public class ProjectKorra extends JavaPlugin { Manager.getManager(StatisticsManager.class).save(player.getUniqueId(), false); } final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); - if (bPlayer != null) { + if (bPlayer != null && isDatabaseCooldownsEnabled()) { bPlayer.saveCooldowns(); } } @@ -181,5 +172,8 @@ public class ProjectKorra extends JavaPlugin { public static boolean isStatisticsEnabled() { return ConfigManager.getConfig().getBoolean("Properties.Statistics"); } + public static boolean isDatabaseCooldownsEnabled() { + return ConfigManager.getConfig().getBoolean("Properties.DatabaseCooldowns"); + } } diff --git a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java index 1f809d69..a9d3d803 100644 --- a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java +++ b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java @@ -541,6 +541,7 @@ public class ConfigManager { config.addDefault("Properties.UpdateChecker", true); config.addDefault("Properties.Statistics", true); + config.addDefault("Properties.DatabaseCooldowns", true); config.addDefault("Properties.BendingPreview", true); config.addDefault("Properties.BendingAffectFallingSand.Normal", true); config.addDefault("Properties.BendingAffectFallingSand.NormalStrengthMultiplier", 1.0); diff --git a/src/com/projectkorra/projectkorra/storage/DBConnection.java b/src/com/projectkorra/projectkorra/storage/DBConnection.java index 73cd5c15..19a4cea2 100644 --- a/src/com/projectkorra/projectkorra/storage/DBConnection.java +++ b/src/com/projectkorra/projectkorra/storage/DBConnection.java @@ -1,12 +1,12 @@ package com.projectkorra.projectkorra.storage; -import java.sql.DatabaseMetaData; -import java.sql.SQLException; - import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.configuration.ConfigManager; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; + public class DBConnection { public static Database sql; @@ -66,7 +66,7 @@ public class DBConnection { } if (!sql.tableExists("pk_cooldowns")) { ProjectKorra.log.info("Creating pk_cooldowns table"); - final String query = "CREATE TABLE `pk_cooldowns` (uuid VARCHAR(36) PRIMARY KEY, cooldown_id INTEGER NOT NULL, value BIGINT);"; + final String query = "CREATE TABLE `pk_cooldowns` (uuid VARCHAR(36) NOT NULL, cooldown_id INTEGER NOT NULL, value BIGINT);"; sql.modifyQuery(query, false); } } else { From 1c4feb5f20d769da658aef9363797aa6132155bf Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Wed, 9 Jan 2019 15:44:12 -0500 Subject: [PATCH 21/34] database fix for sqlite as well --- src/com/projectkorra/projectkorra/storage/DBConnection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/storage/DBConnection.java b/src/com/projectkorra/projectkorra/storage/DBConnection.java index 19a4cea2..87210b68 100644 --- a/src/com/projectkorra/projectkorra/storage/DBConnection.java +++ b/src/com/projectkorra/projectkorra/storage/DBConnection.java @@ -111,7 +111,7 @@ public class DBConnection { } if (!sql.tableExists("pk_cooldowns")) { ProjectKorra.log.info("Creating pk_cooldowns table"); - final String query = "CREATE TABLE `pk_cooldowns` (uuid TEXT(36) PRIMARY KEY, cooldown_id INTEGER NOT NULL, value BIGINT);"; + final String query = "CREATE TABLE `pk_cooldowns` (uuid TEXT(36) NOT NULL, cooldown_id INTEGER NOT NULL, value BIGINT);"; sql.modifyQuery(query, false); } } From 7f737f8576271eed5e49a7511acc8c1cdba84026 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Wed, 9 Jan 2019 15:55:31 -0500 Subject: [PATCH 22/34] add composite primary key for cooldowns --- src/com/projectkorra/projectkorra/storage/DBConnection.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/projectkorra/projectkorra/storage/DBConnection.java b/src/com/projectkorra/projectkorra/storage/DBConnection.java index 87210b68..a1dc1e57 100644 --- a/src/com/projectkorra/projectkorra/storage/DBConnection.java +++ b/src/com/projectkorra/projectkorra/storage/DBConnection.java @@ -66,7 +66,7 @@ public class DBConnection { } if (!sql.tableExists("pk_cooldowns")) { ProjectKorra.log.info("Creating pk_cooldowns table"); - final String query = "CREATE TABLE `pk_cooldowns` (uuid VARCHAR(36) NOT NULL, cooldown_id INTEGER NOT NULL, value BIGINT);"; + final String query = "CREATE TABLE `pk_cooldowns` (uuid VARCHAR(36) NOT NULL, cooldown_id INTEGER NOT NULL, value BIGINT, PRIMARY KEY (uuid, cooldown_id));"; sql.modifyQuery(query, false); } } else { @@ -111,7 +111,7 @@ public class DBConnection { } if (!sql.tableExists("pk_cooldowns")) { ProjectKorra.log.info("Creating pk_cooldowns table"); - final String query = "CREATE TABLE `pk_cooldowns` (uuid TEXT(36) NOT NULL, cooldown_id INTEGER NOT NULL, value BIGINT);"; + final String query = "CREATE TABLE `pk_cooldowns` (uuid TEXT(36) NOT NULL, cooldown_id INTEGER NOT NULL, value BIGINT, PRIMARY KEY (uuid, cooldown_id));"; sql.modifyQuery(query, false); } } From 002d9b05fc4baaa959991756860c22e79201c919 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Wed, 9 Jan 2019 15:58:55 -0500 Subject: [PATCH 23/34] add the other spot cooldown table is created --- .../projectkorra/projectkorra/util/DBCooldownManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/projectkorra/projectkorra/util/DBCooldownManager.java b/src/com/projectkorra/projectkorra/util/DBCooldownManager.java index f4a01dc9..03216568 100644 --- a/src/com/projectkorra/projectkorra/util/DBCooldownManager.java +++ b/src/com/projectkorra/projectkorra/util/DBCooldownManager.java @@ -1,13 +1,13 @@ package com.projectkorra.projectkorra.util; -import java.sql.ResultSet; -import java.sql.SQLException; - import com.projectkorra.projectkorra.Manager; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.storage.DBConnection; import com.projectkorra.projectkorra.storage.MySQL; +import java.sql.ResultSet; +import java.sql.SQLException; + public class DBCooldownManager extends Manager { private DBCooldownManager() { @@ -33,7 +33,7 @@ public class DBCooldownManager extends Manager { ProjectKorra.log.info("Creating pk_cooldowns table"); String query = "CREATE TABLE `pk_cooldowns` (uuid TEXT(36) PRIMARY KEY, cooldown_id INTEGER NOT NULL, value BIGINT);"; if (DBConnection.sql instanceof MySQL) { - query = "CREATE TABLE `pk_cooldowns` (uuid VARCHAR(36) PRIMARY KEY, cooldown_id INTEGER NOT NULL, value BIGINT);"; + query = "CREATE TABLE `pk_cooldowns` (uuid VARCHAR(36) NOT NULL, cooldown_id INTEGER NOT NULL, value BIGINT, PRIMARY KEY (uuid, cooldown_id));"; } DBConnection.sql.modifyQuery(query, false); } From a32031387f9f4610712f6ab8a77ff30eee261529 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Thu, 10 Jan 2019 14:24:52 -0500 Subject: [PATCH 24/34] fix airscooter and airspout not working over kelp, make airscooter more forgiving on downward velocity preventing a bouncing loop if you fall from too high --- .../projectkorra/airbending/AirScooter.java | 23 +++++++++---------- .../projectkorra/airbending/AirSpout.java | 20 ++++++++-------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/com/projectkorra/projectkorra/airbending/AirScooter.java b/src/com/projectkorra/projectkorra/airbending/AirScooter.java index 52972e43..a70f938e 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirScooter.java +++ b/src/com/projectkorra/projectkorra/airbending/AirScooter.java @@ -1,8 +1,9 @@ package com.projectkorra.projectkorra.airbending; -import java.util.ArrayList; -import java.util.Random; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.AirAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.attribute.Attribute; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -10,10 +11,8 @@ import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffectType; 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.attribute.Attribute; +import java.util.ArrayList; +import java.util.Random; public class AirScooter extends AirAbility { @@ -39,7 +38,7 @@ public class AirScooter extends AirAbility { if (check(player)) { return; - } else if (!player.isSprinting() || GeneralMethods.isSolid(player.getEyeLocation().getBlock()) || player.getEyeLocation().getBlock().isLiquid()) { + } else if (!player.isSprinting() || GeneralMethods.isSolid(player.getEyeLocation().getBlock()) || ElementalAbility.isWater(player.getEyeLocation().getBlock())) { return; } else if (GeneralMethods.isSolid(player.getLocation().add(0, -.5, 0).getBlock())) { return; @@ -92,7 +91,7 @@ public class AirScooter extends AirAbility { this.floorblock = null; for (int i = 0; i <= this.maxHeightFromGround; i++) { final Block block = this.player.getEyeLocation().getBlock().getRelative(BlockFace.DOWN, i); - if (GeneralMethods.isSolid(block) || block.isLiquid()) { + if (GeneralMethods.isSolid(block) || ElementalAbility.isWater(block)) { this.floorblock = block; return; } @@ -141,7 +140,7 @@ public class AirScooter extends AirAbility { final double distance = this.player.getLocation().getY() - this.floorblock.getY(); final double dx = Math.abs(distance - 2.4); if (distance > 2.75) { - velocity.setY(-.25 * dx * dx); + velocity.setY(-0.25); } else if (distance < 2) { velocity.setY(.25 * dx * dx); } else { @@ -150,9 +149,9 @@ public class AirScooter extends AirAbility { final Vector v = velocity.clone().setY(0); final Block b = this.floorblock.getLocation().clone().add(v.multiply(1.2)).getBlock(); - if (!GeneralMethods.isSolid(b) && !b.isLiquid()) { + if (!GeneralMethods.isSolid(b) && !ElementalAbility.isWater(b)) { velocity.add(new Vector(0, -0.6, 0)); - } else if (GeneralMethods.isSolid(b.getRelative(BlockFace.UP)) || b.getRelative(BlockFace.UP).isLiquid()) { + } else if (GeneralMethods.isSolid(b.getRelative(BlockFace.UP)) || ElementalAbility.isWater(b.getRelative(BlockFace.UP))) { velocity.add(new Vector(0, 1.0, 0)); } diff --git a/src/com/projectkorra/projectkorra/airbending/AirSpout.java b/src/com/projectkorra/projectkorra/airbending/AirSpout.java index 0b974209..b5d42b3a 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirSpout.java +++ b/src/com/projectkorra/projectkorra/airbending/AirSpout.java @@ -1,18 +1,18 @@ package com.projectkorra.projectkorra.airbending; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.AirAbility; +import com.projectkorra.projectkorra.ability.ElementalAbility; +import com.projectkorra.projectkorra.ability.util.Collision; +import com.projectkorra.projectkorra.attribute.Attribute; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ability.AirAbility; -import com.projectkorra.projectkorra.ability.util.Collision; -import com.projectkorra.projectkorra.attribute.Attribute; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; public class AirSpout extends AirAbility { @@ -109,7 +109,7 @@ public class AirSpout extends AirAbility { final Block standingblock = this.player.getLocation().getBlock(); for (int i = 0; i <= this.height + 5; i++) { final Block block = standingblock.getRelative(BlockFace.DOWN, i); - if (GeneralMethods.isSolid(block) || block.isLiquid()) { + if (GeneralMethods.isSolid(block) || ElementalAbility.isWater(block)) { return block; } } @@ -135,7 +135,7 @@ public class AirSpout extends AirAbility { } final Block eyeBlock = this.player.getEyeLocation().getBlock(); - if (eyeBlock.isLiquid() || GeneralMethods.isSolid(eyeBlock)) { + if (ElementalAbility.isWater(eyeBlock) || GeneralMethods.isSolid(eyeBlock)) { this.remove(); return; } From 76c86bce3791c6d07e54024ce19b5c692dbd7bf2 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Thu, 10 Jan 2019 23:56:55 -0500 Subject: [PATCH 25/34] make avatar title more consistent with either the lore or the permission specification, this will also fix avatar title showing for addons that add new elements but would not necessarily make sense to display as an avatar. for example the spirits addon, having light and dark spirit would cause you to display as an avatar --- .../projectkorra/GeneralMethods.java | 8 +++---- .../projectkorra/projectkorra/PKListener.java | 22 ++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index 38984b6f..7df5abbc 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -1659,13 +1659,13 @@ public class GeneralMethods { String prefix = ""; final boolean chatEnabled = ConfigManager.languageConfig.get().getBoolean("Chat.Enable"); - if (bPlayer.getElements().size() > 1) { + + prefix = ChatColor.WHITE + ChatColor.translateAlternateColorCodes('&', ConfigManager.languageConfig.get().getString("Chat.Prefixes.Nonbender")) + " "; + if (player.hasPermission("bending.avatar") || (bPlayer.hasElement(Element.AIR) && bPlayer.hasElement(Element.EARTH) && bPlayer.hasElement(Element.FIRE) && bPlayer.hasElement(Element.WATER))) { prefix = Element.AVATAR.getPrefix(); - } else if (bPlayer.getElements().size() == 1) { + } else if (bPlayer.getElements().size() > 0) { element = bPlayer.getElements().get(0); prefix = element.getPrefix(); - } else { - prefix = ChatColor.WHITE + ChatColor.translateAlternateColorCodes('&', ConfigManager.languageConfig.get().getString("Chat.Prefixes.Nonbender")) + " "; } if (chatEnabled) { diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 5cfb1f2e..3467a17b 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -653,9 +653,16 @@ public class PKListener implements Listener { final Player player = event.getPlayer(); final BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); - final String e = bPlayer == null || bPlayer.getElements().size() == 0 ? "Nonbender" : (bPlayer.getElements().size() > 1 ? "Avatar" : bPlayer.getElements().get(0).getName()); + String e = "Nonbender"; + ChatColor c = ChatColor.WHITE; + if(player.hasPermission("bending.avatar") || (bPlayer.hasElement(Element.AIR) && bPlayer.hasElement(Element.EARTH) && bPlayer.hasElement(Element.FIRE) && bPlayer.hasElement(Element.WATER))){ + c = Element.AVATAR.getColor(); + e = Element.AVATAR.getName(); + } else if (bPlayer.getElements().size() > 0) { + c = bPlayer.getElements().get(0).getColor(); + e = bPlayer.getElements().get(0).getName(); + } final String element = ConfigManager.languageConfig.get().getString("Chat.Prefixes." + e); - final ChatColor c = bPlayer == null || bPlayer.getElements().size() == 0 ? ChatColor.WHITE : (bPlayer.getElements().size() > 1 ? Element.AVATAR.getColor() : bPlayer.getElements().get(0).getColor()); event.setFormat(event.getFormat().replace("{element}", c + element + ChatColor.RESET).replace("{ELEMENT}", c + element + ChatColor.RESET).replace("{elementcolor}", c + "").replace("{ELEMENTCOLOR}", c + "")); if (!ConfigManager.languageConfig.get().getBoolean("Chat.Enable")) { @@ -668,15 +675,10 @@ public class PKListener implements Listener { return; } - if (player.hasPermission("bending.avatar") || bPlayer.getElements().size() > 1) { + if (player.hasPermission("bending.avatar") || (bPlayer.hasElement(Element.AIR) && bPlayer.hasElement(Element.EARTH) && bPlayer.hasElement(Element.FIRE) && bPlayer.hasElement(Element.WATER))) { color = ChatColor.valueOf(ConfigManager.languageConfig.get().getString("Chat.Colors.Avatar")); - } else { - for (final Element element_ : Element.getMainElements()) { - if (bPlayer.hasElement(element_)) { - color = element_.getColor(); - break; - } - } + } else if (bPlayer.getElements().size() > 0) { + color = bPlayer.getElements().get(0).getColor(); } String format = ConfigManager.languageConfig.get().getString("Chat.Format"); From aa6bf5a849003eabd92767b852d8a82071df6938 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sat, 12 Jan 2019 16:37:56 -0500 Subject: [PATCH 26/34] null checks for tempblocks in surge remove water --- .../projectkorra/projectkorra/waterbending/SurgeWall.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java index 7e7d9ab7..86436230 100644 --- a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java +++ b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java @@ -352,7 +352,9 @@ public class SurgeWall extends WaterAbility { if (!GeneralMethods.isAdjacentToThreeOrMoreSources(block)) { if (this.oldTemps.containsKey(block)) { final TempBlock tb = TempBlock.get(block); - tb.setType(this.oldTemps.get(block)); + if (tb != null) { + tb.setType(this.oldTemps.get(block)); + } } else { TempBlock.revertBlock(block, Material.AIR); } @@ -367,7 +369,9 @@ public class SurgeWall extends WaterAbility { if (AFFECTED_BLOCKS.containsKey(block)) { if (this.oldTemps.containsKey(block)) { final TempBlock tb = TempBlock.get(block); - tb.setType(this.oldTemps.get(block)); + if (tb != null) { + tb.setType(this.oldTemps.get(block)); + } } else { TempBlock.revertBlock(block, Material.AIR); } From f6f2b8b954d42e57d7e9ffdd8457c2586e0476c7 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sat, 12 Jan 2019 21:56:02 -0500 Subject: [PATCH 27/34] display player as sitting for airscooter and make the velocity changes more gentle --- .../projectkorra/airbending/AirScooter.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/com/projectkorra/projectkorra/airbending/AirScooter.java b/src/com/projectkorra/projectkorra/airbending/AirScooter.java index a70f938e..1e7d32d6 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirScooter.java +++ b/src/com/projectkorra/projectkorra/airbending/AirScooter.java @@ -7,7 +7,10 @@ import com.projectkorra.projectkorra.attribute.Attribute; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.entity.Slime; +import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; @@ -30,6 +33,7 @@ public class AirScooter extends AirAbility { private Block floorblock; private Random random; private ArrayList angles; + private Slime slime; private double phi = 0; @@ -65,6 +69,15 @@ public class AirScooter extends AirAbility { for (int i = 0; i < 5; i++) { this.angles.add((double) (60 * i)); } + slime = (Slime)player.getWorld().spawnEntity(player.getLocation(), EntityType.SLIME); + if (slime == null){ + return; + } + slime.setSize(1); + slime.setSilent(true); + slime.setInvulnerable(true); + slime.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 1, true, false)); + slime.addPassenger(player); this.start(); } @@ -127,7 +140,7 @@ public class AirScooter extends AirAbility { * checks the players speed and ends the move if they are going too slow */ if (System.currentTimeMillis() > this.getStartTime() + this.interval) { - if (this.player.getVelocity().length() < this.speed * 0.3) { + if (this.slime.getVelocity().length() < this.speed * 0.3) { this.remove(); return; } @@ -140,9 +153,9 @@ public class AirScooter extends AirAbility { final double distance = this.player.getLocation().getY() - this.floorblock.getY(); final double dx = Math.abs(distance - 2.4); if (distance > 2.75) { - velocity.setY(-0.25); + velocity.setY(-.25); } else if (distance < 2) { - velocity.setY(.25 * dx * dx); + velocity.setY(.25); } else { velocity.setY(0); } @@ -150,9 +163,9 @@ public class AirScooter extends AirAbility { final Vector v = velocity.clone().setY(0); final Block b = this.floorblock.getLocation().clone().add(v.multiply(1.2)).getBlock(); if (!GeneralMethods.isSolid(b) && !ElementalAbility.isWater(b)) { - velocity.add(new Vector(0, -0.6, 0)); + velocity.add(new Vector(0, -0.1, 0)); } else if (GeneralMethods.isSolid(b.getRelative(BlockFace.UP)) || ElementalAbility.isWater(b.getRelative(BlockFace.UP))) { - velocity.add(new Vector(0, 1.0, 0)); + velocity.add(new Vector(0, 0.7, 0)); } final Location loc = this.player.getLocation(); @@ -164,7 +177,7 @@ public class AirScooter extends AirAbility { this.player.setSprinting(false); this.player.removePotionEffect(PotionEffectType.SPEED); - this.player.setVelocity(velocity); + slime.setVelocity(velocity); if (this.random.nextInt(4) == 0) { playAirbendingSound(this.player.getLocation()); @@ -177,6 +190,7 @@ public class AirScooter extends AirAbility { @Override public void remove() { super.remove(); + slime.remove(); flightHandler.removeInstance(this.player, this.getName()); this.bPlayer.addCooldown(this); } From 3094c691a911b55863b2c0d4063f8d74de26d8cc Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sat, 12 Jan 2019 22:10:44 -0500 Subject: [PATCH 28/34] add check for slime existing and still mounted --- .../projectkorra/projectkorra/airbending/AirScooter.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/projectkorra/projectkorra/airbending/AirScooter.java b/src/com/projectkorra/projectkorra/airbending/AirScooter.java index 1e7d32d6..2eeb0632 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirScooter.java +++ b/src/com/projectkorra/projectkorra/airbending/AirScooter.java @@ -134,6 +134,12 @@ public class AirScooter extends AirAbility { return; } + if (slime == null || !slime.getPassengers().contains(player)){ + this.bPlayer.addCooldown(this); + this.remove(); + return; + } + Vector velocity = this.player.getEyeLocation().getDirection().clone().normalize(); velocity = velocity.clone().normalize().multiply(this.speed); /* From abfbff19fadb2be0c73d203f18ba0477e6e2215d Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sat, 12 Jan 2019 22:12:17 -0500 Subject: [PATCH 29/34] null check in tempblock revert_queue, rare occasion when server stops before any tempblocks are made --- .../projectkorra/util/TempBlock.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/com/projectkorra/projectkorra/util/TempBlock.java b/src/com/projectkorra/projectkorra/util/TempBlock.java index 318754cb..218feca4 100644 --- a/src/com/projectkorra/projectkorra/util/TempBlock.java +++ b/src/com/projectkorra/projectkorra/util/TempBlock.java @@ -1,10 +1,7 @@ package com.projectkorra.projectkorra.util; -import java.util.Comparator; -import java.util.Map; -import java.util.PriorityQueue; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -14,8 +11,10 @@ import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Levelled; import org.bukkit.scheduler.BukkitRunnable; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ProjectKorra; +import java.util.Comparator; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.concurrent.ConcurrentHashMap; public class TempBlock { @@ -88,8 +87,10 @@ public class TempBlock { for (final Block block : instances.keySet()) { revertBlock(block, Material.AIR); } - for (final TempBlock tempblock : REVERT_QUEUE) { - tempblock.revertBlock(); + if (REVERT_QUEUE != null) { + for (final TempBlock tempblock : REVERT_QUEUE) { + tempblock.revertBlock(); + } } } From 09478cc5bf1a1f30eac12611ad33ac1bf391d4ab Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sat, 12 Jan 2019 22:52:44 -0500 Subject: [PATCH 30/34] add support for standing scooter in case of peaceful world or the slime doesnt spawn for whatever reason, also made it configureable --- .../projectkorra/airbending/AirScooter.java | 50 +++++++++++++------ .../configuration/ConfigManager.java | 1 + 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/com/projectkorra/projectkorra/airbending/AirScooter.java b/src/com/projectkorra/projectkorra/airbending/AirScooter.java index 2eeb0632..3c5064b8 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirScooter.java +++ b/src/com/projectkorra/projectkorra/airbending/AirScooter.java @@ -4,6 +4,7 @@ import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.AirAbility; import com.projectkorra.projectkorra.ability.ElementalAbility; import com.projectkorra.projectkorra.attribute.Attribute; +import org.bukkit.Difficulty; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -34,6 +35,7 @@ public class AirScooter extends AirAbility { private Random random; private ArrayList angles; private Slime slime; + private Boolean useslime; private double phi = 0; @@ -56,6 +58,7 @@ public class AirScooter extends AirAbility { this.cooldown = getConfig().getLong("Abilities.Air.AirScooter.Cooldown"); this.duration = getConfig().getLong("Abilities.Air.AirScooter.Duration"); this.maxHeightFromGround = getConfig().getDouble("Abilities.Air.AirScooter.MaxHeightFromGround"); + this.useslime = getConfig().getBoolean("Abilities.Air.AirScooter.ShowSitting"); this.random = new Random(); this.angles = new ArrayList<>(); @@ -69,15 +72,21 @@ public class AirScooter extends AirAbility { for (int i = 0; i < 5; i++) { this.angles.add((double) (60 * i)); } - slime = (Slime)player.getWorld().spawnEntity(player.getLocation(), EntityType.SLIME); - if (slime == null){ - return; + if (player.getWorld().getDifficulty() == Difficulty.PEACEFUL) { + useslime = false; + } + if (useslime) { + slime = (Slime) player.getWorld().spawnEntity(player.getLocation(), EntityType.SLIME); + if (slime != null) { + slime.setSize(1); + slime.setSilent(true); + slime.setInvulnerable(true); + slime.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 1, true, false)); + slime.addPassenger(player); + } else { + useslime = false; + } } - slime.setSize(1); - slime.setSilent(true); - slime.setInvulnerable(true); - slime.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 1, true, false)); - slime.addPassenger(player); this.start(); } @@ -134,7 +143,7 @@ public class AirScooter extends AirAbility { return; } - if (slime == null || !slime.getPassengers().contains(player)){ + if (useslime && (slime == null || !slime.getPassengers().contains(player))){ this.bPlayer.addCooldown(this); this.remove(); return; @@ -146,9 +155,16 @@ public class AirScooter extends AirAbility { * checks the players speed and ends the move if they are going too slow */ if (System.currentTimeMillis() > this.getStartTime() + this.interval) { - if (this.slime.getVelocity().length() < this.speed * 0.3) { - this.remove(); - return; + if (useslime) { + if (this.slime.getVelocity().length() < this.speed * 0.3) { + this.remove(); + return; + } + } else { + if (this.player.getVelocity().length() < this.speed * 0.3) { + this.remove(); + return; + } } this.spinScooter(); } @@ -183,7 +199,11 @@ public class AirScooter extends AirAbility { this.player.setSprinting(false); this.player.removePotionEffect(PotionEffectType.SPEED); - slime.setVelocity(velocity); + if (useslime) { + slime.setVelocity(velocity); + } else { + player.setVelocity(velocity); + } if (this.random.nextInt(4) == 0) { playAirbendingSound(this.player.getLocation()); @@ -196,7 +216,9 @@ public class AirScooter extends AirAbility { @Override public void remove() { super.remove(); - slime.remove(); + if (slime != null) { + slime.remove(); + } flightHandler.removeInstance(this.player, this.getName()); this.bPlayer.addCooldown(this); } diff --git a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java index a9d3d803..4d034320 100644 --- a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java +++ b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java @@ -817,6 +817,7 @@ public class ConfigManager { config.addDefault("Abilities.Air.AirBurst.AngleTheta", 10); config.addDefault("Abilities.Air.AirScooter.Enabled", true); + config.addDefault("Abilities.Air.AirScooter.ShowSitting", true); config.addDefault("Abilities.Air.AirScooter.Speed", 0.675); config.addDefault("Abilities.Air.AirScooter.Interval", 100); config.addDefault("Abilities.Air.AirScooter.Radius", 1); From da046579579411acd323e633ba4e5f863d176426 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sun, 13 Jan 2019 18:15:55 -0500 Subject: [PATCH 31/34] make firejet look cool, also missed null check in surge wall --- src/com/projectkorra/projectkorra/PKListener.java | 4 ++++ src/com/projectkorra/projectkorra/firebending/FireJet.java | 2 ++ src/com/projectkorra/projectkorra/waterbending/SurgeWall.java | 4 +++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 3467a17b..390e5d43 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -1659,6 +1659,10 @@ public class PKListener implements Listener { return; } } + + if (CoreAbility.getAbility(player, FireJet.class) != null) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) diff --git a/src/com/projectkorra/projectkorra/firebending/FireJet.java b/src/com/projectkorra/projectkorra/firebending/FireJet.java index 2ee1a03e..e45607f5 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireJet.java +++ b/src/com/projectkorra/projectkorra/firebending/FireJet.java @@ -79,6 +79,7 @@ public class FireJet extends FireAbility { this.time = System.currentTimeMillis(); this.start(); + player.setGliding(true); this.bPlayer.addCooldown(this); } } @@ -116,6 +117,7 @@ public class FireJet extends FireAbility { public void remove() { super.remove(); flightHandler.removeInstance(this.player, this.getName()); + player.setGliding(false); } @Override diff --git a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java index 86436230..1c60bc3f 100644 --- a/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java +++ b/src/com/projectkorra/projectkorra/waterbending/SurgeWall.java @@ -380,7 +380,9 @@ public class SurgeWall extends WaterAbility { if (WALL_BLOCKS.containsKey(block)) { if (this.oldTemps.containsKey(block)) { final TempBlock tb = TempBlock.get(block); - tb.setType(this.oldTemps.get(block)); + if (tb != null) { + tb.setType(this.oldTemps.get(block)); + } } else { TempBlock.revertBlock(block, Material.AIR); } From 88c1debab97233052168464551fe991c07652fe2 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Sun, 13 Jan 2019 18:48:21 -0500 Subject: [PATCH 32/34] fix some annoying damage introductions from last commits change --- src/com/projectkorra/projectkorra/PKListener.java | 4 ++++ src/com/projectkorra/projectkorra/firebending/FireJet.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 390e5d43..42f9d3de 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -380,6 +380,10 @@ public class PKListener implements Listener { abil.remove(); } + if (CoreAbility.getAbility(player, FireJet.class) != null && event.getCause() == DamageCause.FLY_INTO_WALL) { + event.setCancelled(true); + } + if (bPlayer.isElementToggled(Element.FIRE)) { return; } diff --git a/src/com/projectkorra/projectkorra/firebending/FireJet.java b/src/com/projectkorra/projectkorra/firebending/FireJet.java index e45607f5..3f93b1e4 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireJet.java +++ b/src/com/projectkorra/projectkorra/firebending/FireJet.java @@ -116,8 +116,9 @@ public class FireJet extends FireAbility { @Override public void remove() { super.remove(); + this.player.setGliding(false); flightHandler.removeInstance(this.player, this.getName()); - player.setGliding(false); + this.player.setFallDistance(0); } @Override From be896ecf32e519e0b3cae5965ecd537fc48c5a31 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Mon, 14 Jan 2019 15:48:51 -0500 Subject: [PATCH 33/34] when firejet is done use previous gliding state --- src/com/projectkorra/projectkorra/firebending/FireJet.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/firebending/FireJet.java b/src/com/projectkorra/projectkorra/firebending/FireJet.java index 3f93b1e4..5a538753 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireJet.java +++ b/src/com/projectkorra/projectkorra/firebending/FireJet.java @@ -27,6 +27,7 @@ public class FireJet extends FireAbility { @Attribute(Attribute.SPEED) private double speed; private Random random; + private Boolean previousGlidingState; public FireJet(final Player player) { super(player); @@ -79,6 +80,7 @@ public class FireJet extends FireAbility { this.time = System.currentTimeMillis(); this.start(); + previousGlidingState = player.isGliding(); player.setGliding(true); this.bPlayer.addCooldown(this); } @@ -116,7 +118,7 @@ public class FireJet extends FireAbility { @Override public void remove() { super.remove(); - this.player.setGliding(false); + this.player.setGliding(previousGlidingState); flightHandler.removeInstance(this.player, this.getName()); this.player.setFallDistance(0); } From 83afd7142f1eec14ff9b509d7d589c0d3eafe864 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Mon, 14 Jan 2019 17:17:35 -0500 Subject: [PATCH 34/34] safety check for moved earth, otherwise this move could be used on top of a bunch of raised earth to glitch out blocks and sometimes leave lava sources making a mess in the world --- .../earthbending/lava/LavaFlow.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/com/projectkorra/projectkorra/earthbending/lava/LavaFlow.java b/src/com/projectkorra/projectkorra/earthbending/lava/LavaFlow.java index 152843cb..93cf5b3a 100644 --- a/src/com/projectkorra/projectkorra/earthbending/lava/LavaFlow.java +++ b/src/com/projectkorra/projectkorra/earthbending/lava/LavaFlow.java @@ -1,11 +1,15 @@ package com.projectkorra.projectkorra.earthbending.lava; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; - +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.ability.CoreAbility; +import com.projectkorra.projectkorra.ability.EarthAbility; +import com.projectkorra.projectkorra.ability.LavaAbility; +import com.projectkorra.projectkorra.attribute.Attribute; +import com.projectkorra.projectkorra.util.BlockSource; +import com.projectkorra.projectkorra.util.ClickType; +import com.projectkorra.projectkorra.util.ParticleEffect; +import com.projectkorra.projectkorra.util.TempBlock; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -14,15 +18,11 @@ import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.ProjectKorra; -import com.projectkorra.projectkorra.ability.CoreAbility; -import com.projectkorra.projectkorra.ability.LavaAbility; -import com.projectkorra.projectkorra.attribute.Attribute; -import com.projectkorra.projectkorra.util.BlockSource; -import com.projectkorra.projectkorra.util.ClickType; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempBlock; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; public class LavaFlow extends LavaAbility { @@ -386,6 +386,9 @@ public class LavaFlow extends LavaAbility { */ public void createLava(final Block block) { if (isEarth(block) || isSand(block) || isMetal(block)) { + if (EarthAbility.getMovedEarth().containsKey(block)){ + return; + } if (isPlant(block.getRelative(BlockFace.UP)) || isSnow(block.getRelative(BlockFace.UP))) { final Block above = block.getRelative(BlockFace.UP); final Block above2 = above.getRelative(BlockFace.UP);