From a32031387f9f4610712f6ab8a77ff30eee261529 Mon Sep 17 00:00:00 2001 From: PhanaticD Date: Thu, 10 Jan 2019 14:24:52 -0500 Subject: [PATCH] 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; }