From a1c9c54d48d3ccf2aa065579faec7aff48622df3 Mon Sep 17 00:00:00 2001 From: Benford Date: Wed, 13 Apr 2016 21:00:21 -0400 Subject: [PATCH] Various bug fixes + new event - Added PlayerJumpEvent - Added JUMPS map to PKListener - Fixed fly glitch with airspout/sandspout + firejet - Added snowBlocks config list - Fixed AirCombo cooldowns - Fixed FireSpin enabled config option not appearing - Fixed speed and jump passives, no longer requires sprinting - Fixed HealingWaters ShiftRequired config option - Fixed Surge select range - Fixed WaterManipulation creating water in place of ice sources - Added snow methods to ElementalAbility and BlockSource - Added SNOW enum value to BlockSourceType - Added check for snow in WaterAbility.isWaterbendable() --- .../projectkorra/projectkorra/PKListener.java | 55 ++++- .../projectkorra/ProjectKorra.java | 4 +- .../ability/ElementalAbility.java | 4 + .../projectkorra/ability/WaterAbility.java | 2 +- .../projectkorra/airbending/AirCombo.java | 4 + .../configuration/ConfigManager.java | 6 + .../projectkorra/earthbending/EarthArmor.java | 2 + .../projectkorra/event/PlayerJumpEvent.java | 37 ++++ .../projectkorra/firebending/FireJet.java | 10 + .../projectkorra/util/BlockSource.java | 12 +- .../projectkorra/util/PassiveHandler.java | 188 ++++++++---------- .../waterbending/HealingWaters.java | 20 +- .../projectkorra/waterbending/PlantArmor.java | 2 + .../projectkorra/waterbending/SurgeWave.java | 4 +- .../waterbending/WaterManipulation.java | 5 +- 15 files changed, 230 insertions(+), 125 deletions(-) create mode 100644 src/com/projectkorra/projectkorra/event/PlayerJumpEvent.java diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index 94dfbea6..e09933bb 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -59,6 +59,7 @@ import com.projectkorra.projectkorra.event.EntityBendingDeathEvent; import com.projectkorra.projectkorra.event.HorizontalVelocityChangeEvent; import com.projectkorra.projectkorra.event.PlayerChangeElementEvent; import com.projectkorra.projectkorra.event.PlayerChangeElementEvent.Result; +import com.projectkorra.projectkorra.event.PlayerJumpEvent; import com.projectkorra.projectkorra.firebending.Blaze; import com.projectkorra.projectkorra.firebending.BlazeArc; import com.projectkorra.projectkorra.firebending.BlazeRing; @@ -81,6 +82,7 @@ import com.projectkorra.projectkorra.util.BlockSource; import com.projectkorra.projectkorra.util.ClickType; import com.projectkorra.projectkorra.util.DamageHandler; import com.projectkorra.projectkorra.util.Flight; +import com.projectkorra.projectkorra.util.PassiveHandler; import com.projectkorra.projectkorra.util.TempBlock; import com.projectkorra.projectkorra.waterbending.Bloodbending; import com.projectkorra.projectkorra.waterbending.IceBlast; @@ -99,10 +101,12 @@ import com.projectkorra.projectkorra.waterbending.WaterSpout; import com.projectkorra.projectkorra.waterbending.WaterSpoutWave; import com.projectkorra.rpg.RPGMethods; +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.entity.Entity; import org.bukkit.entity.EntityType; @@ -151,6 +155,7 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerToggleFlightEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; @@ -158,6 +163,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.UUID; @@ -168,6 +174,7 @@ public class PKListener implements Listener { private static final HashMap BENDING_PLAYER_DEATH = new HashMap<>(); // Player killed by Bending private static final List RIGHT_CLICK_INTERACT = new ArrayList(); // Player right click block private static final ArrayList TOGGLED_OUT = new ArrayList<>(); // Stands for toggled = false while logging out + private static final Map JUMPS = new HashMap<>(); public PKListener(ProjectKorra plugin) { this.plugin = plugin; @@ -1034,6 +1041,7 @@ public class PKListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); + JUMPS.put(player, player.getStatistic(Statistic.JUMP)); GeneralMethods.createBendingPlayer(e.getPlayer().getUniqueId(), player.getName()); } @@ -1043,6 +1051,7 @@ public class PKListener implements Listener { return; } AirFlight.remove(event.getPlayer()); + JUMPS.remove(event.getPlayer()); } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @@ -1101,6 +1110,45 @@ public class PKListener implements Listener { return; } } + } + + else { + BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); + double xDif = event.getTo().getX() - event.getFrom().getX(); + double yDif = event.getTo().getY() - event.getFrom().getY(); + double zDif = event.getTo().getZ() - event.getFrom().getZ(); + if ((xDif > 0.12 || xDif < -0.12) || (yDif > 0.12 || yDif < -0.12) || (zDif > 0.12 || zDif < -0.12)) { + if (bPlayer.hasElement(Element.AIR) || bPlayer.hasElement(Element.CHI) || bPlayer.hasElement(Element.EARTH)) { + if (player.hasPotionEffect(PotionEffectType.SPEED)) { + player.removePotionEffect(PotionEffectType.SPEED); + } + PassiveHandler.checkSpeedPassives(player); + } + if (bPlayer.hasElement(Element.AIR) || bPlayer.hasElement(Element.CHI)) { + if (player.hasPotionEffect(PotionEffectType.JUMP)) { + player.removePotionEffect(PotionEffectType.JUMP); + } + PassiveHandler.checkJumpPassives(player); + PassiveHandler.checkExhaustionPassives(player); + } + } + } + + if (event.getTo().getY() > event.getFrom().getY()) { + if (!(player.getLocation().getBlock().getType() == Material.VINE) && !(player.getLocation().getBlock().getType() == Material.LADDER)) { + int current = player.getStatistic(Statistic.JUMP); + int last = JUMPS.get(player); + + if (last != current) { + JUMPS.put(player, current); + + double yDif = event.getTo().getY() - event.getFrom().getY(); + + if ((yDif < 0.035 || yDif > 0.037) && (yDif < 0.116 || yDif > 0.118)) { + Bukkit.getServer().getPluginManager().callEvent(new PlayerJumpEvent(player, yDif)); + } + } + } } } @@ -1152,7 +1200,8 @@ public class PKListener implements Listener { } MultiAbilityManager.remove(player); - AirFlight.remove(event.getPlayer()); + AirFlight.remove(player); + JUMPS.remove(player); } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @@ -1651,5 +1700,9 @@ public class PKListener implements Listener { public static ArrayList getToggledOut() { return TOGGLED_OUT; } + + public static Map getJumpStatistics() { + return JUMPS; + } } diff --git a/src/com/projectkorra/projectkorra/ProjectKorra.java b/src/com/projectkorra/projectkorra/ProjectKorra.java index 3c5573ad..395a3960 100644 --- a/src/com/projectkorra/projectkorra/ProjectKorra.java +++ b/src/com/projectkorra/projectkorra/ProjectKorra.java @@ -13,13 +13,13 @@ import com.projectkorra.projectkorra.firebending.FirebendingManager; import com.projectkorra.projectkorra.object.Preset; import com.projectkorra.projectkorra.storage.DBConnection; import com.projectkorra.projectkorra.util.MetricsLite; -import com.projectkorra.projectkorra.util.PassiveHandler; import com.projectkorra.projectkorra.util.RevertChecker; import com.projectkorra.projectkorra.util.Updater; import com.projectkorra.projectkorra.util.logging.PKLogHandler; import com.projectkorra.projectkorra.waterbending.WaterbendingManager; import org.bukkit.Bukkit; +import org.bukkit.Statistic; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -79,10 +79,10 @@ public class ProjectKorra extends JavaPlugin { getServer().getScheduler().scheduleSyncRepeatingTask(this, new EarthbendingManager(this), 0, 1); getServer().getScheduler().scheduleSyncRepeatingTask(this, new FirebendingManager(this), 0, 1); getServer().getScheduler().scheduleSyncRepeatingTask(this, new ChiblockingManager(this), 0, 1); - getServer().getScheduler().scheduleSyncRepeatingTask(this, new PassiveHandler(), 0, 1); getServer().getScheduler().runTaskTimerAsynchronously(this, new RevertChecker(this), 0, 200); for (Player player : Bukkit.getOnlinePlayers()) { + PKListener.getJumpStatistics().put(player, player.getStatistic(Statistic.JUMP)); GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); } diff --git a/src/com/projectkorra/projectkorra/ability/ElementalAbility.java b/src/com/projectkorra/projectkorra/ability/ElementalAbility.java index 4a3bece3..2a4c48ef 100644 --- a/src/com/projectkorra/projectkorra/ability/ElementalAbility.java +++ b/src/com/projectkorra/projectkorra/ability/ElementalAbility.java @@ -99,6 +99,10 @@ public abstract class ElementalAbility extends CoreAbility { return material == Material.LAVA || material == Material.STATIONARY_LAVA; } + public static boolean isSnow(Material material) { + return getConfig().getStringList("Properties.Water.SnowBlocks").contains(material.toString()); + } + public static boolean isLunarEclipse(World world) { if (world == null || !GeneralMethods.hasRPG()) { return false; diff --git a/src/com/projectkorra/projectkorra/ability/WaterAbility.java b/src/com/projectkorra/projectkorra/ability/WaterAbility.java index e11d114b..8ac0f8ef 100644 --- a/src/com/projectkorra/projectkorra/ability/WaterAbility.java +++ b/src/com/projectkorra/projectkorra/ability/WaterAbility.java @@ -107,7 +107,7 @@ public abstract class WaterAbility extends ElementalAbility { } public static boolean isWaterbendable(Material material) { - return isWater(material) || isIce(material) || isPlant(material); + return isWater(material) || isIce(material) || isPlant(material) || isSnow(material); } public static Block getIceSourceBlock(Player player, double range) { diff --git a/src/com/projectkorra/projectkorra/airbending/AirCombo.java b/src/com/projectkorra/projectkorra/airbending/AirCombo.java index fcb137a1..d38d6189 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirCombo.java +++ b/src/com/projectkorra/projectkorra/airbending/AirCombo.java @@ -69,6 +69,10 @@ public class AirCombo extends AirAbility implements ComboAbility { if (!bPlayer.canBendIgnoreBindsCooldowns(this)) { return; } + + if (bPlayer.isOnCooldown(ability)) { + return; + } if (ability.equalsIgnoreCase("Twister")) { this.range = getConfig().getDouble("Abilities.Air.AirCombo.Twister.Range"); diff --git a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java index 2e397ecf..bd0a7949 100644 --- a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java +++ b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java @@ -384,6 +384,9 @@ public class ConfigManager { plantBlocks.add("SUGAR_CANE_BLOCK"); plantBlocks.add("PUMPKIN_STEM"); plantBlocks.add("MELON_STEM"); + + ArrayList snowBlocks = new ArrayList<>(); + snowBlocks.add("SNOW"); config.addDefault("Properties.ImportEnabled", true); config.addDefault("Properties.BendingAffectFallingSand.Normal", true); @@ -416,6 +419,7 @@ public class ConfigManager { config.addDefault("Properties.Water.CanBendWithWeapons", true); config.addDefault("Properties.Water.IceBlocks", iceBlocks); config.addDefault("Properties.Water.PlantBlocks", plantBlocks); + config.addDefault("Properties.Water.SnowBlocks", snowBlocks); config.addDefault("Properties.Water.NightFactor", 1.5); config.addDefault("Properties.Water.FullMoonFactor", 2.0); config.addDefault("Properties.Water.PlaySound", true); @@ -660,6 +664,7 @@ public class ConfigManager { config.addDefault("Abilities.Water.Surge.Enabled", true); config.addDefault("Abilities.Water.Surge.Wave.Radius", 3); config.addDefault("Abilities.Water.Surge.Wave.Range", 20); + config.addDefault("Abilities.Water.Surge.Wave.SelectRange", 7); config.addDefault("Abilities.Water.Surge.Wave.HorizontalPush", 1); config.addDefault("Abilities.Water.Surge.Wave.VerticalPush", 0.2); config.addDefault("Abilities.Water.Surge.Wave.MaxFreezeRadius", 7); @@ -1035,6 +1040,7 @@ public class ConfigManager { config.addDefault("Abilities.Fire.FireCombo.FireKick.Range", 7.0); config.addDefault("Abilities.Fire.FireCombo.FireKick.Damage", 3.0); config.addDefault("Abilities.Fire.FireCombo.FireKick.Cooldown", 5500); + config.addDefault("Abilities.Fire.FireCombo.FireSpin.Enabled", true); config.addDefault("Abilities.Fire.FireCombo.FireSpin.Range", 7); config.addDefault("Abilities.Fire.FireCombo.FireSpin.Damage", 3.0); config.addDefault("Abilities.Fire.FireCombo.FireSpin.Knockback", 3.0); diff --git a/src/com/projectkorra/projectkorra/earthbending/EarthArmor.java b/src/com/projectkorra/projectkorra/earthbending/EarthArmor.java index 070a5c3c..69906941 100644 --- a/src/com/projectkorra/projectkorra/earthbending/EarthArmor.java +++ b/src/com/projectkorra/projectkorra/earthbending/EarthArmor.java @@ -2,6 +2,7 @@ package com.projectkorra.projectkorra.earthbending; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.EarthAbility; +import com.projectkorra.projectkorra.util.PassiveHandler; import com.projectkorra.projectkorra.util.TempBlock; import com.projectkorra.projectkorra.waterbending.PlantArmor; @@ -169,6 +170,7 @@ public class EarthArmor extends EarthAbility { } if (formed) { + PassiveHandler.checkArmorPassives(player); if (System.currentTimeMillis() > startTime + duration && !complete) { complete = true; bPlayer.addCooldown(this); diff --git a/src/com/projectkorra/projectkorra/event/PlayerJumpEvent.java b/src/com/projectkorra/projectkorra/event/PlayerJumpEvent.java new file mode 100644 index 00000000..2582dc2c --- /dev/null +++ b/src/com/projectkorra/projectkorra/event/PlayerJumpEvent.java @@ -0,0 +1,37 @@ +package com.projectkorra.projectkorra.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class PlayerJumpEvent extends Event{ + + private static final HandlerList HANDLERS = new HandlerList(); + + private Player player; + private double height; + + public PlayerJumpEvent(Player player, double height) { + this.player = player; + this.height = height; + } + + public Player getPlayer() { + return player; + } + + public double getHeight() { + return height; + } + + @Override + public HandlerList getHandlers() { + // TODO Auto-generated method stub + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + +} diff --git a/src/com/projectkorra/projectkorra/firebending/FireJet.java b/src/com/projectkorra/projectkorra/firebending/FireJet.java index 5d67a630..97c6d793 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireJet.java +++ b/src/com/projectkorra/projectkorra/firebending/FireJet.java @@ -1,6 +1,8 @@ package com.projectkorra.projectkorra.firebending; import com.projectkorra.projectkorra.ability.FireAbility; +import com.projectkorra.projectkorra.airbending.AirSpout; +import com.projectkorra.projectkorra.earthbending.SandSpout; import com.projectkorra.projectkorra.util.Flight; import com.projectkorra.projectkorra.util.ParticleEffect; @@ -32,6 +34,14 @@ public class FireJet extends FireAbility { return; } + if (hasAbility(player, AirSpout.class)) { + AirSpout abil = getAbility(player, AirSpout.class); + abil.remove(); + } else if (hasAbility(player, SandSpout.class)) { + SandSpout abil = getAbility(player, SandSpout.class); + abil.remove(); + } + this.avatarStateToggled = getConfig().getBoolean("Abilities.Fire.FireJet.IsAvatarStateToggle"); this.duration = getConfig().getLong("Abilities.Fire.FireJet.Duration"); this.speed = getConfig().getDouble("Abilities.Fire.FireJet.Speed"); diff --git a/src/com/projectkorra/projectkorra/util/BlockSource.java b/src/com/projectkorra/projectkorra/util/BlockSource.java index 5a73b490..8f133477 100644 --- a/src/com/projectkorra/projectkorra/util/BlockSource.java +++ b/src/com/projectkorra/projectkorra/util/BlockSource.java @@ -29,7 +29,7 @@ public class BlockSource { * @author kingbirdy */ public static enum BlockSourceType { - WATER, ICE, PLANT, EARTH, METAL, LAVA + WATER, ICE, PLANT, EARTH, METAL, LAVA, SNOW } private static HashMap>> playerSources = new HashMap>>(); @@ -65,6 +65,9 @@ public class BlockSource { if (WaterAbility.isIce(waterBlock)) { putSource(player, waterBlock, BlockSourceType.ICE, clickType); } + if (WaterAbility.isSnow(waterBlock)) { + putSource(player, waterBlock, BlockSourceType.SNOW, clickType); + } } } else if (coreAbil instanceof EarthAbility) { Block earthBlock = EarthAbility.getEarthSourceBlock(player, null, MAX_RANGE); @@ -210,7 +213,7 @@ public class BlockSource { * @return a valid Water bendable block, or null if none was found. */ public static Block getWaterSourceBlock(Player player, double range, ClickType clickType, boolean allowWater, boolean allowIce, boolean allowPlant) { - return getWaterSourceBlock(player, range, clickType, allowWater, allowIce, allowPlant, true); + return getWaterSourceBlock(player, range, clickType, allowWater, allowIce, allowPlant, true, true); } /** @@ -228,7 +231,7 @@ public class BlockSource { * that may have been created by a WaterBottle. * @return a valid Water bendable block, or null if none was found. */ - public static Block getWaterSourceBlock(Player player, double range, ClickType clickType, boolean allowWater, boolean allowIce, boolean allowPlant, boolean allowWaterBottles) { + public static Block getWaterSourceBlock(Player player, double range, ClickType clickType, boolean allowWater, boolean allowIce, boolean allowPlant, boolean allowSnow, boolean allowWaterBottles) { Block sourceBlock = null; if (allowWaterBottles) { // Check the block in front of the player's eyes, it may have been created by a @@ -247,6 +250,9 @@ public class BlockSource { if (allowPlant && sourceBlock == null) { sourceBlock = getSourceBlock(player, range, BlockSourceType.PLANT, clickType); } + if (allowSnow && sourceBlock == null) { + sourceBlock = getSourceBlock(player, range, BlockSourceType.SNOW, clickType); + } if(sourceBlock != null && TempBlock.isTempBlock(sourceBlock) && !tempblock) { return null; } diff --git a/src/com/projectkorra/projectkorra/util/PassiveHandler.java b/src/com/projectkorra/projectkorra/util/PassiveHandler.java index 536c03d4..bf37d804 100644 --- a/src/com/projectkorra/projectkorra/util/PassiveHandler.java +++ b/src/com/projectkorra/projectkorra/util/PassiveHandler.java @@ -12,7 +12,6 @@ import com.projectkorra.projectkorra.earthbending.EarthArmor; import com.projectkorra.projectkorra.earthbending.EarthPassive; import com.projectkorra.projectkorra.waterbending.PlantArmor; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; @@ -21,7 +20,7 @@ import org.bukkit.potion.PotionEffectType; import java.util.concurrent.ConcurrentHashMap; -public class PassiveHandler implements Runnable{ +public class PassiveHandler { private static final ConcurrentHashMap FOOD = new ConcurrentHashMap<>(); @@ -41,139 +40,120 @@ public class PassiveHandler implements Runnable{ } } - public static void handleArmorPassives() { - for (Player player : Bukkit.getOnlinePlayers()) { - if (ConfigManager.defaultConfig.get().getStringList("Properties.DisabledWorlds").contains(player.getWorld().getName())) { - continue; - } - - BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); - - if (bPlayer == null) continue; - if (CoreAbility.hasAbility(player, EarthArmor.class)) { - EarthArmor abil = CoreAbility.getAbility(player, EarthArmor.class); + public static void checkArmorPassives(Player player) { + if (ConfigManager.defaultConfig.get().getStringList("Properties.DisabledWorlds").contains(player.getWorld().getName())) { + return; + } + + BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); + + if (bPlayer == null) return; + if (CoreAbility.hasAbility(player, EarthArmor.class)) { + EarthArmor abil = CoreAbility.getAbility(player, EarthArmor.class); + if (abil.isFormed()) { int strength = abil.getStrength(); player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 3, strength - 1), false); } - if (CoreAbility.hasAbility(player, PlantArmor.class)) { - PlantArmor abil = CoreAbility.getAbility(player, PlantArmor.class); + } + if (CoreAbility.hasAbility(player, PlantArmor.class)) { + PlantArmor abil = CoreAbility.getAbility(player, PlantArmor.class); + if (abil.isFormed()) { int strength = abil.getResistance(); player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 3, strength - 1), false); } } } - public static void handleExhaustionPassives() { + public static void checkExhaustionPassives(Player player) { double air = AirPassive.getExhaustionFactor(); double chi = ChiPassive.getExhaustionFactor(); - for (Player player : Bukkit.getOnlinePlayers()) { - if (ConfigManager.defaultConfig.get().getStringList("Properties.DisabledWorlds").contains(player.getWorld().getName())) { - continue; - } - - BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); - - if (bPlayer == null) continue; - - if (!bPlayer.hasElement(Element.AIR)) air = 0; - if (!bPlayer.hasElement(Element.CHI)) chi = 0; - - double max = Math.max(air, chi); - if (max == 0) continue; - else { - player.setExhaustion(getExhaustion(player, player.getExhaustion(), max)); - } + if (ConfigManager.defaultConfig.get().getStringList("Properties.DisabledWorlds").contains(player.getWorld().getName())) { + return; + } + + BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); + + if (bPlayer == null) return; + + if (!bPlayer.hasElement(Element.AIR)) air = 0; + if (!bPlayer.hasElement(Element.CHI)) chi = 0; + + double max = Math.max(air, chi); + if (max == 0) return; + else { + player.setExhaustion(getExhaustion(player, player.getExhaustion(), max)); } } - public static void handleSpeedPassives() { + public static void checkSpeedPassives(Player player) { int air = AirPassive.getSpeedPower(); int chi = ChiPassive.getSpeedPower(); int earth = EarthPassive.getSandRunSpeed(); - for (Player player : Bukkit.getOnlinePlayers()) { - if (ConfigManager.defaultConfig.get().getStringList("Properties.DisabledWorlds").contains(player.getWorld().getName())) { - continue; - } - - boolean sandbender = true; - BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); - - if (bPlayer == null) continue; - if (!bPlayer.hasElement(Element.EARTH)) sandbender = false; - if (!bPlayer.hasSubElement(SubElement.SAND)) sandbender = false; - if (!bPlayer.hasElement(Element.AIR)) air = 0; - if (!bPlayer.hasElement(Element.CHI)) chi = 0; - - int max = 0; - - if (sandbender && (player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.SAND - || player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.SANDSTONE - || player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.RED_SANDSTONE)) { - if (CoreAbility.hasAbility(player, AcrobatStance.class)) { - AcrobatStance abil = CoreAbility.getAbility(player, AcrobatStance.class); - max = Math.max(air, chi); - max = Math.max(max, abil.getSpeed()); - max = Math.max(max, earth); - } else { - max = Math.max(air, chi); - max = Math.max(max, earth); - } - } else { - if (CoreAbility.hasAbility(player, AcrobatStance.class)) { - AcrobatStance abil = CoreAbility.getAbility(player, AcrobatStance.class); - max = Math.max(air, chi); - max = Math.max(max, abil.getSpeed()); - } else { - max = Math.max(air, chi); - } - } - - if (max == 0) continue; - if (player.isSprinting()) { - player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 3, max-1)); - } + if (ConfigManager.defaultConfig.get().getStringList("Properties.DisabledWorlds").contains(player.getWorld().getName())) { + return; } - } - - public static void handleJumpPassives() { - int air = AirPassive.getJumpPower(); - int chi = ChiPassive.getJumpPower(); - for (Player player : Bukkit.getOnlinePlayers()) { - if (ConfigManager.defaultConfig.get().getStringList("Properties.DisabledWorlds").contains(player.getWorld().getName())) { - continue; + boolean sandbender = true; + BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); + + if (bPlayer == null) return; + if (!bPlayer.hasElement(Element.EARTH)) sandbender = false; + if (!bPlayer.hasSubElement(SubElement.SAND)) sandbender = false; + if (!bPlayer.hasElement(Element.AIR)) air = 0; + if (!bPlayer.hasElement(Element.CHI)) chi = 0; + + int max = 0; + + if (sandbender && (player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.SAND + || player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.SANDSTONE + || player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.RED_SANDSTONE)) { + if (CoreAbility.hasAbility(player, AcrobatStance.class)) { + AcrobatStance abil = CoreAbility.getAbility(player, AcrobatStance.class); + max = Math.max(air, chi); + max = Math.max(max, abil.getSpeed()); + max = Math.max(max, earth); + } else { + max = Math.max(air, chi); + max = Math.max(max, earth); } - - BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); - - if (bPlayer == null) continue; - if (!bPlayer.hasElement(Element.AIR)) air = 0; - if (!bPlayer.hasElement(Element.CHI)) chi = 0; - int max = 0; + } else { if (CoreAbility.hasAbility(player, AcrobatStance.class)) { AcrobatStance abil = CoreAbility.getAbility(player, AcrobatStance.class); max = Math.max(air, chi); max = Math.max(max, abil.getSpeed()); } else { max = Math.max(air, chi); - if (max == 0) { - continue; - } - } - - if (player.isSprinting()) { - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 3, max-1), false); } } + + if (max == 0) return; + player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 3, max-1)); } - @Override - public void run() { - handleArmorPassives(); - handleExhaustionPassives(); - handleSpeedPassives(); - handleJumpPassives(); + public static void checkJumpPassives(Player player) { + int air = AirPassive.getJumpPower(); + int chi = ChiPassive.getJumpPower(); + + if (ConfigManager.defaultConfig.get().getStringList("Properties.DisabledWorlds").contains(player.getWorld().getName())) { + return; + } + + BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(player); + + if (bPlayer == null) return; + if (!bPlayer.hasElement(Element.AIR)) air = 0; + if (!bPlayer.hasElement(Element.CHI)) chi = 0; + int max = 0; + if (CoreAbility.hasAbility(player, AcrobatStance.class)) { + AcrobatStance abil = CoreAbility.getAbility(player, AcrobatStance.class); + max = Math.max(air, chi); + max = Math.max(max, abil.getSpeed()); + } else { + max = Math.max(air, chi); + } + if (max == 0) return; + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 3, max-1), false); } } diff --git a/src/com/projectkorra/projectkorra/waterbending/HealingWaters.java b/src/com/projectkorra/projectkorra/waterbending/HealingWaters.java index 91f4b7c8..e8040cd6 100644 --- a/src/com/projectkorra/projectkorra/waterbending/HealingWaters.java +++ b/src/com/projectkorra/projectkorra/waterbending/HealingWaters.java @@ -39,23 +39,19 @@ public class HealingWaters extends HealingAbility { private static void heal(Player player) { if (inWater(player)) { - if (player.isSneaking()) { - Entity entity = GeneralMethods.getTargetedEntity(player, getRadius()); - if (entity == null) { - giveHP(player); - } else { - giveHPToEntity((LivingEntity) entity); - } - } else { - if (getShiftRequired()) { - return; - } else { + if ((getShiftRequired() == true && player.isSneaking()) || getShiftRequired() == false) { + Entity target = GeneralMethods.getTargetedEntity(player, getRadius()); + if (target == null || !(target instanceof LivingEntity)) { giveHP(player); + } else { + giveHPToEntity((LivingEntity) target); } + } else if (getShiftRequired() == true && !player.isSneaking()) { + return; } } } - + private static void giveHPToEntity(LivingEntity le) { if (!le.isDead() && le.getHealth() < le.getMaxHealth()) { applyHealingToEntity(le); diff --git a/src/com/projectkorra/projectkorra/waterbending/PlantArmor.java b/src/com/projectkorra/projectkorra/waterbending/PlantArmor.java index 7e919b55..9e304ec4 100644 --- a/src/com/projectkorra/projectkorra/waterbending/PlantArmor.java +++ b/src/com/projectkorra/projectkorra/waterbending/PlantArmor.java @@ -3,6 +3,7 @@ package com.projectkorra.projectkorra.waterbending; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.PlantAbility; import com.projectkorra.projectkorra.earthbending.EarthArmor; +import com.projectkorra.projectkorra.util.PassiveHandler; import org.bukkit.Color; import org.bukkit.Location; @@ -127,6 +128,7 @@ public class PlantArmor extends PlantAbility { } if (formed) { + PassiveHandler.checkArmorPassives(player); if (System.currentTimeMillis() > startTime + duration) { remove(); bPlayer.addCooldown(this); diff --git a/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java b/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java index 738736e2..89840a2f 100644 --- a/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java +++ b/src/com/projectkorra/projectkorra/waterbending/SurgeWave.java @@ -34,6 +34,7 @@ public class SurgeWave extends WaterAbility { private double currentRadius; private double maxRadius; private double range; + private double selectRange; private double pushFactor; private double verticalFactor; private double maxFreezeRadius; @@ -65,6 +66,7 @@ public class SurgeWave extends WaterAbility { this.verticalFactor = getConfig().getDouble("Abilities.Water.Surge.Wave.VerticalPush"); this.maxFreezeRadius = getConfig().getDouble("Abilities.Water.Surge.Wave.MaxFreezeRadius"); this.range = getConfig().getDouble("Abilities.Water.Surge.Wave.Range"); + this.selectRange = getConfig().getDouble("Abilities.Water.Surge.Wave.SelectRange"); this.waveBlocks = new ConcurrentHashMap<>(); this.frozenBlocks = new ConcurrentHashMap<>(); @@ -215,7 +217,7 @@ public class SurgeWave extends WaterAbility { public boolean prepare() { cancelPrevious(); - Block block = BlockSource.getWaterSourceBlock(player, range, ClickType.SHIFT_DOWN, true, true, bPlayer.canPlantbend()); + Block block = BlockSource.getWaterSourceBlock(player, selectRange, ClickType.SHIFT_DOWN, true, true, bPlayer.canPlantbend()); if (block != null && !GeneralMethods.isRegionProtectedFromBuild(this, block.getLocation())) { sourceBlock = block; focusBlock(); diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java b/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java index d1c4b3e2..1bf6b000 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterManipulation.java @@ -148,8 +148,11 @@ public class WaterManipulation extends WaterAbility { if (isPlant(sourceBlock)) { new PlantRegrowth(player, sourceBlock); + } else if (!isIce(sourceBlock)) { + addWater(sourceBlock); + } else { + sourceBlock.setType(Material.AIR); } - addWater(sourceBlock); } } bPlayer.addCooldown(this);