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; package com.projectkorra.projectkorra.airbending;
import java.util.ArrayList; import com.projectkorra.projectkorra.GeneralMethods;
import java.util.Random; 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.Location;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
@ -10,10 +11,8 @@ import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.GeneralMethods; import java.util.ArrayList;
import com.projectkorra.projectkorra.ability.AirAbility; import java.util.Random;
import com.projectkorra.projectkorra.ability.ElementalAbility;
import com.projectkorra.projectkorra.attribute.Attribute;
public class AirScooter extends AirAbility { public class AirScooter extends AirAbility {
@ -39,7 +38,7 @@ public class AirScooter extends AirAbility {
if (check(player)) { if (check(player)) {
return; 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; return;
} else if (GeneralMethods.isSolid(player.getLocation().add(0, -.5, 0).getBlock())) { } else if (GeneralMethods.isSolid(player.getLocation().add(0, -.5, 0).getBlock())) {
return; return;
@ -92,7 +91,7 @@ public class AirScooter extends AirAbility {
this.floorblock = null; this.floorblock = null;
for (int i = 0; i <= this.maxHeightFromGround; i++) { for (int i = 0; i <= this.maxHeightFromGround; i++) {
final Block block = this.player.getEyeLocation().getBlock().getRelative(BlockFace.DOWN, 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; this.floorblock = block;
return; return;
} }
@ -141,7 +140,7 @@ public class AirScooter extends AirAbility {
final double distance = this.player.getLocation().getY() - this.floorblock.getY(); final double distance = this.player.getLocation().getY() - this.floorblock.getY();
final double dx = Math.abs(distance - 2.4); final double dx = Math.abs(distance - 2.4);
if (distance > 2.75) { if (distance > 2.75) {
velocity.setY(-.25 * dx * dx); velocity.setY(-0.25);
} else if (distance < 2) { } else if (distance < 2) {
velocity.setY(.25 * dx * dx); velocity.setY(.25 * dx * dx);
} else { } else {
@ -150,9 +149,9 @@ public class AirScooter extends AirAbility {
final Vector v = velocity.clone().setY(0); final Vector v = velocity.clone().setY(0);
final Block b = this.floorblock.getLocation().clone().add(v.multiply(1.2)).getBlock(); 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)); 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)); velocity.add(new Vector(0, 1.0, 0));
} }

View file

@ -1,18 +1,18 @@
package com.projectkorra.projectkorra.airbending; package com.projectkorra.projectkorra.airbending;
import java.util.ArrayList; import com.projectkorra.projectkorra.GeneralMethods;
import java.util.List; import com.projectkorra.projectkorra.ability.AirAbility;
import java.util.Random; 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.Location;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.projectkorra.projectkorra.GeneralMethods; import java.util.ArrayList;
import com.projectkorra.projectkorra.ability.AirAbility; import java.util.List;
import com.projectkorra.projectkorra.ability.util.Collision; import java.util.Random;
import com.projectkorra.projectkorra.attribute.Attribute;
public class AirSpout extends AirAbility { public class AirSpout extends AirAbility {
@ -109,7 +109,7 @@ public class AirSpout extends AirAbility {
final Block standingblock = this.player.getLocation().getBlock(); final Block standingblock = this.player.getLocation().getBlock();
for (int i = 0; i <= this.height + 5; i++) { for (int i = 0; i <= this.height + 5; i++) {
final Block block = standingblock.getRelative(BlockFace.DOWN, i); final Block block = standingblock.getRelative(BlockFace.DOWN, i);
if (GeneralMethods.isSolid(block) || block.isLiquid()) { if (GeneralMethods.isSolid(block) || ElementalAbility.isWater(block)) {
return block; return block;
} }
} }
@ -135,7 +135,7 @@ public class AirSpout extends AirAbility {
} }
final Block eyeBlock = this.player.getEyeLocation().getBlock(); final Block eyeBlock = this.player.getEyeLocation().getBlock();
if (eyeBlock.isLiquid() || GeneralMethods.isSolid(eyeBlock)) { if (ElementalAbility.isWater(eyeBlock) || GeneralMethods.isSolid(eyeBlock)) {
this.remove(); this.remove();
return; return;
} }