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

This commit is contained in:
PhanaticD 2019-01-10 14:24:52 -05:00
parent 002d9b05fc
commit a32031387f
2 changed files with 21 additions and 22 deletions

View file

@ -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));
}

View file

@ -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;
}