Attempt to properly update...
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.garbagemule.MobArena.framework.Arena;
|
||||
import com.garbagemule.MobArena.waves.MABoss;
|
||||
import com.garbagemule.MobArena.waves.ability.*;
|
||||
|
||||
/**
|
||||
* DISCLAIMER: The Ability source code is provided as-is, and the creator(s) of
|
||||
* MobArena WILL NOT be held responsible for any damage that may
|
||||
* result from altering the files.
|
||||
*
|
||||
* WARNING: Unless you know exactly what you are doing, i.e. you have a lot
|
||||
* of experience with Java and Bukkit, you should never change any
|
||||
* other values than those of the variables in CAPITAL LETTERS.
|
||||
*
|
||||
*
|
||||
* Root Target
|
||||
* Freezes the boss' target in place for ~3 seconds (default), by warping the
|
||||
* player to the same spot [ITERATIONS] times, with [TICKS] server ticks
|
||||
* between each iteration.
|
||||
*
|
||||
* @author garbagemule
|
||||
*/
|
||||
@AbilityInfo(
|
||||
name = "Root Target",
|
||||
aliases = {"roottarget", "freezetarget"}
|
||||
)
|
||||
public class RootTarget implements Ability
|
||||
{
|
||||
/**
|
||||
* How many times the player will be warped back to his original position.
|
||||
* Must be greater than 0.
|
||||
*/
|
||||
private final int ITERATIONS = 5;
|
||||
|
||||
/**
|
||||
* How many server ticks between each iteration of
|
||||
* Must be greater than 0.
|
||||
*/
|
||||
private final int TICKS = 5;
|
||||
|
||||
@Override
|
||||
public void execute(Arena arena, MABoss boss) {
|
||||
final LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), true);
|
||||
if (target == null || !(target instanceof Player))
|
||||
return;
|
||||
|
||||
Player p = (Player) target;
|
||||
Location loc = p.getLocation();
|
||||
|
||||
rootTarget(arena, p, loc, ITERATIONS);
|
||||
}
|
||||
|
||||
private void rootTarget(final Arena arena, final Player p, final Location loc, final int counter) {
|
||||
// If the counter is 0, we're done.
|
||||
if (counter <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
arena.scheduleTask(new Runnable() {
|
||||
public void run() {
|
||||
if (!arena.isRunning() || !arena.inArena(p)) {
|
||||
return;
|
||||
}
|
||||
|
||||
p.teleport(loc);
|
||||
rootTarget(arena, p, loc, counter - 1);
|
||||
}
|
||||
}, TICKS);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user