Trigger delays fixed

This commit is contained in:
Jules 2020-07-28 19:06:36 +02:00
parent 3928c688b3
commit cc9a22d828
3 changed files with 13 additions and 9 deletions

View File

@ -150,7 +150,7 @@ public class PlayerQuests {
// close current objective progress if quest is active
if (hasCurrent())
current.closeObjectiveProgress();
current.getProgress().close();
// apply newer quest
current = quest == null ? null : quest.generateNewProgress(playerData);

View File

@ -43,16 +43,12 @@ public class QuestProgress {
return quest.getObjectives().get(objective);
}
public void closeObjectiveProgress() {
objectiveProgress.close();
}
public void completeObjective() {
objective++;
closeObjectiveProgress();
objectiveProgress.close();
// apply triggers
objectiveProgress.getObjective().getTriggers().forEach(trigger -> trigger.apply(getPlayer()));
objectiveProgress.getObjective().getTriggers().forEach(trigger -> trigger.schedule(getPlayer()));
// end quest
if (objective >= quest.getObjectives().size())

View File

@ -10,7 +10,7 @@ public abstract class Trigger {
private final long delay;
public Trigger(MMOLineConfig config) {
delay = config.contains("delay") ? (long) (config.getDouble("delay") * 20) : 0;
delay = config.contains("delay") ? (long) (config.getDouble("delay") * 20.) : 0;
}
public boolean hasDelay() {
@ -22,8 +22,16 @@ public abstract class Trigger {
}
public void schedule(PlayerData player) {
Bukkit.getScheduler().scheduleSyncDelayedTask(MMOCore.plugin, () -> apply(player), delay);
if (delay <= 0)
apply(player);
else
Bukkit.getScheduler().scheduleSyncDelayedTask(MMOCore.plugin, () -> apply(player), delay);
}
/*
* this method must not be used directly when executing triggers after quest
* objectives for example, because this method does NOT take into account
* trigger delay
*/
public abstract void apply(PlayerData player);
}