Locations are mutable, fix toggle path altering the waypoints

This commit is contained in:
fullwall 2013-07-12 21:09:25 +08:00
parent 2d973e7575
commit ff50cd761d
2 changed files with 16 additions and 15 deletions

View File

@ -107,8 +107,9 @@ public class LinearWaypointProvider implements WaypointProvider {
public void save(DataKey key) {
key.removeKey("points");
key = key.getRelative("points");
for (int i = 0; i < waypoints.size(); ++i)
for (int i = 0; i < waypoints.size(); ++i) {
PersistenceLoader.save(waypoints.get(i), key.getRelative(i));
}
}
@Override
@ -142,7 +143,7 @@ public class LinearWaypointProvider implements WaypointProvider {
}
private void createWaypointMarker(int index, Waypoint waypoint) {
Entity entity = spawnMarker(player.getWorld(), waypoint.getLocation().add(0, 1, 0));
Entity entity = spawnMarker(player.getWorld(), waypoint.getLocation().clone().add(0, 1, 0));
if (entity == null)
return;
entity.setMetadata("waypointindex", new FixedMetadataValue(CitizensAPI.getPlugin(), index));

View File

@ -54,19 +54,19 @@ public class Waypoint {
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;
}
if (!(trigger instanceof DelayTrigger))
continue;
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;
}
}