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 // close current objective progress if quest is active
if (hasCurrent()) if (hasCurrent())
current.closeObjectiveProgress(); current.getProgress().close();
// apply newer quest // apply newer quest
current = quest == null ? null : quest.generateNewProgress(playerData); current = quest == null ? null : quest.generateNewProgress(playerData);

View File

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

View File

@ -10,7 +10,7 @@ public abstract class Trigger {
private final long delay; private final long delay;
public Trigger(MMOLineConfig config) { 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() { public boolean hasDelay() {
@ -22,8 +22,16 @@ public abstract class Trigger {
} }
public void schedule(PlayerData player) { public void schedule(PlayerData player) {
if (delay <= 0)
apply(player);
else
Bukkit.getScheduler().scheduleSyncDelayedTask(MMOCore.plugin, () -> apply(player), delay); 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); public abstract void apply(PlayerData player);
} }