From ae6a666bc6c7f80a8facc1c9dd3a309b441feca4 Mon Sep 17 00:00:00 2001 From: fullwall Date: Wed, 31 Oct 2012 12:03:38 +0800 Subject: [PATCH] Delay trigger delays other triggers --- .../waypoint/LinearWaypointProvider.java | 5 +--- .../citizensnpcs/trait/waypoint/Waypoint.java | 24 ++++++++++++++++++- .../trait/waypoint/triggers/DelayTrigger.java | 4 ++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java b/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java index 068dc8312..dc85b4e2b 100644 --- a/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java +++ b/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java @@ -269,10 +269,7 @@ public class LinearWaypointProvider implements WaypointProvider { return; // the player isn't scrolling editingSlot += diff > 0 ? 1 : -1; } - if (editingSlot >= waypoints.size()) - editingSlot = 0; - if (editingSlot < 0) - editingSlot = waypoints.size() - 1; + normaliseEditingSlot(); Messaging.sendTr(player, Messages.LINEAR_WAYPOINT_EDITOR_EDIT_SLOT_SET, editingSlot, formatLoc(waypoints.get(editingSlot).getLocation())); } diff --git a/src/main/java/net/citizensnpcs/trait/waypoint/Waypoint.java b/src/main/java/net/citizensnpcs/trait/waypoint/Waypoint.java index 22be46616..15ae3e0e2 100644 --- a/src/main/java/net/citizensnpcs/trait/waypoint/Waypoint.java +++ b/src/main/java/net/citizensnpcs/trait/waypoint/Waypoint.java @@ -3,12 +3,15 @@ package net.citizensnpcs.trait.waypoint; import java.util.Collections; import java.util.List; +import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.persistence.PersistenceLoader; +import net.citizensnpcs.trait.waypoint.triggers.DelayTrigger; import net.citizensnpcs.trait.waypoint.triggers.WaypointTrigger; import net.citizensnpcs.trait.waypoint.triggers.WaypointTriggerRegistry; +import org.bukkit.Bukkit; import org.bukkit.Location; import com.google.common.collect.Lists; @@ -44,8 +47,27 @@ public class Waypoint { public void onReach(NPC npc) { if (triggers == null) return; - for (WaypointTrigger trigger : triggers) + runTriggers(npc, 0); + } + + private void runTriggers(final NPC npc, int start) { + for (int i = start; i < triggers.size(); i++) { + WaypointTrigger trigger = triggers.get(i); trigger.onWaypointReached(npc, location); + if (trigger instanceof DelayTrigger) { + int delay = ((DelayTrigger) trigger).getDelay(); + if (delay <= 0) + continue; + final int newStart = i; + Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() { + @Override + public void run() { + runTriggers(npc, newStart); + } + }, delay); + break; + } + } } static { diff --git a/src/main/java/net/citizensnpcs/trait/waypoint/triggers/DelayTrigger.java b/src/main/java/net/citizensnpcs/trait/waypoint/triggers/DelayTrigger.java index fa43d3a6c..aa4e2c462 100644 --- a/src/main/java/net/citizensnpcs/trait/waypoint/triggers/DelayTrigger.java +++ b/src/main/java/net/citizensnpcs/trait/waypoint/triggers/DelayTrigger.java @@ -31,6 +31,10 @@ public class DelayTrigger implements WaypointTrigger { scheduleTask(npc.getTrait(Waypoints.class).getCurrentProvider()); } + public int getDelay() { + return delay; + } + private void scheduleTask(final WaypointProvider provider) { provider.setPaused(true); Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() {