Fixed issues with EarthGrab. (#607)

* Changes to EarthGrab (PR Fixed, I hope.)

- Move now has travel time.
- Added particles that travel along the ground, to represent the travel
time.
- Changed the functions of the move to be: Shift + click = grab other -
entity, left click ground = self-grab.
- Edited the default config for the description.
- Edited the default range of the move, changed from 14 to 20.
- Edited the default cooldown time, it is now set to 2 seconds by
default.

* Fixed issues with Earthgrab.
This commit is contained in:
Jay Stannon 2016-10-15 13:17:00 +11:00 committed by Christopher Martin
parent 329f91fff8
commit a756e8df89

View file

@ -30,6 +30,7 @@ public class EarthGrab extends EarthAbility {
private Vector dir; private Vector dir;
private Block groundBlock; private Block groundBlock;
private Material blockType; private Material blockType;
private Byte blockByte;
private Random random; private Random random;
public EarthGrab(Player player) { public EarthGrab(Player player) {
@ -44,7 +45,7 @@ public class EarthGrab extends EarthAbility {
this.closestEntity = null; this.closestEntity = null;
this.startLoc = player.getLocation(); this.startLoc = player.getLocation();
this.loc = player.getLocation(); this.loc = player.getLocation();
this.dir = player.getLocation().getDirection(); this.dir = player.getLocation().getDirection().clone().normalize().multiply(1.5);
this.random = new Random(); this.random = new Random();
if (!bPlayer.canBend(this)) { if (!bPlayer.canBend(this)) {
@ -52,14 +53,15 @@ public class EarthGrab extends EarthAbility {
} }
if(player.isSneaking()) { if(player.isSneaking()) {
start(); start();
} } else {
Location targetLocation = GeneralMethods.getTargetedLocation(player, 1); Location targetLocation = GeneralMethods.getTargetedLocation(player, 1);
Block block = GeneralMethods.getTopBlock(targetLocation, 1); Block block = GeneralMethods.getTopBlock(targetLocation, 1, 1);
if(isEarthbendable(block) && block.getLocation().distance(player.getLocation()) <= 2) { if(isEarthbendable(block) && block.getLocation().distance(player.getLocation()) <= 1.3) {
earthGrabSelf(); earthGrabSelf();
remove(); remove();
} }
} }
}
public void formDome() { public void formDome() {
@ -113,7 +115,7 @@ public class EarthGrab extends EarthAbility {
closestEntity = player; closestEntity = player;
getGround(); getGround();
ParticleEffect.BLOCK_CRACK.display( ParticleEffect.BLOCK_CRACK.display(
(ParticleEffect.ParticleData) new ParticleEffect.BlockData(blockType, (byte) 0), 1F, 1F, 1F, (ParticleEffect.ParticleData) new ParticleEffect.BlockData(blockType, blockByte), 1F, 1F, 1F,
0.1F, 100, player.getLocation(), 500); 0.1F, 100, player.getLocation(), 500);
if (closestEntity != null) { if (closestEntity != null) {
ArrayList<Block> blocks = new ArrayList<Block>(); ArrayList<Block> blocks = new ArrayList<Block>();
@ -166,12 +168,14 @@ public class EarthGrab extends EarthAbility {
return "EarthGrab"; return "EarthGrab";
} }
@SuppressWarnings("deprecation")
private void getGround() { private void getGround() {
for (int i = 0; i <= 5; i++) { for (int i = 0; i <= 5; i++) {
Block block = loc.getBlock().getRelative(BlockFace.DOWN, i); Block block = loc.getBlock().getRelative(BlockFace.DOWN, i);
if (isEarthbendable(block)) { if (isEarthbendable(block)) {
groundBlock = block; groundBlock = block;
blockType = block.getType(); blockType = block.getType();
blockByte = block.getData();
return; return;
} }
} }
@ -185,7 +189,7 @@ public class EarthGrab extends EarthAbility {
remove(); remove();
return; return;
} }
dir = player.getLocation().getDirection().clone().normalize().multiply(1.5); dir = dir.clone().normalize().multiply(1.5);
dir.setY(0); dir.setY(0);
double distance = loc.getY() - (double) groundBlock.getY(); double distance = loc.getY() - (double) groundBlock.getY();
double dx = Math.abs(distance - 2.4); double dx = Math.abs(distance - 2.4);
@ -198,7 +202,7 @@ public class EarthGrab extends EarthAbility {
} }
loc.add(dir); loc.add(dir);
ParticleEffect.BLOCK_CRACK.display( ParticleEffect.BLOCK_CRACK.display(
(ParticleEffect.ParticleData) new ParticleEffect.BlockData(blockType, (byte) 0), 1F, 0.1F, 1F, (ParticleEffect.ParticleData) new ParticleEffect.BlockData(blockType, blockByte), 1F, 0.1F, 1F,
0.1F, 100, loc.add(0, -1, 0), 500); 0.1F, 100, loc.add(0, -1, 0), 500);
if(player.isDead() || !player.isOnline()) { if(player.isDead() || !player.isOnline()) {
remove(); remove();