diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/LookCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/LookCommand.java index 8a6dc102a5..6af2353859 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/LookCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/LookCommand.java @@ -3,17 +3,15 @@ import java.util.Arrays; import java.util.List; -import net.aufdemrand.denizen.objects.dEntity; -import net.aufdemrand.denizen.objects.dList; -import net.aufdemrand.denizen.objects.dLocation; +import net.aufdemrand.denizen.objects.*; import net.aufdemrand.denizen.exceptions.CommandExecutionException; import net.aufdemrand.denizen.exceptions.InvalidArgumentsException; import net.aufdemrand.denizen.scripts.ScriptEntry; import net.aufdemrand.denizen.scripts.commands.AbstractCommand; import net.aufdemrand.denizen.utilities.entity.Rotation; -import net.aufdemrand.denizen.objects.aH; import net.aufdemrand.denizen.utilities.debugging.dB; +import org.bukkit.scheduler.BukkitRunnable; /** * Controls entity heads. @@ -35,6 +33,11 @@ public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException scriptEntry.addObject("location", arg.asType(dLocation.class)); } + else if (!scriptEntry.hasObject("duration") + && arg.matchesArgumentType(Duration.class) + && arg.matchesPrefix("duration, d")) + scriptEntry.addObject("duration", arg.asType(Duration.class)); + else if (!scriptEntry.hasObject("entities") && arg.matchesArgumentList(dEntity.class)) { // Entity arg @@ -52,11 +55,13 @@ else if (!scriptEntry.hasObject("entities") throw new InvalidArgumentsException("Must specify a location and entity!"); } + @SuppressWarnings("unchecked") @Override public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { - dLocation loc = (dLocation) scriptEntry.getObject("location"); - List entities = (List) scriptEntry.getObject("entities"); + final dLocation loc = (dLocation) scriptEntry.getObject("location"); + final List entities = (List) scriptEntry.getObject("entities"); + final Duration duration = (Duration) scriptEntry.getObject("duration"); dB.report(getName(), loc.debug() + aH.debugObj("entities", entities.toString())); @@ -66,6 +71,24 @@ public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { Rotation.faceLocation(entity.getBukkitEntity(), loc); } } + if (duration != null && duration.getTicks() > 2) { + BukkitRunnable task = new BukkitRunnable() { + long bounces = 0; + public void run() { + bounces += 2; + if (bounces > duration.getTicks()) { + this.cancel(); + return; + } + for (dEntity entity : entities) { + if (entity.isSpawned()) { + Rotation.faceLocation(entity.getBukkitEntity(), loc); + } + } + } + }; + task.runTaskTimer(denizen, 0, 2); + } }