Catch early repeat attempts, fixes #2244

This commit is contained in:
PikaMug 2025-01-11 20:52:28 -05:00
parent a18bb3aadc
commit d6f8a2be59
2 changed files with 16 additions and 4 deletions

View File

@ -389,7 +389,7 @@ public class BukkitPlayerListener implements Listener {
} else {
if (quester.getCompletedQuests().contains(bukkitQuest)) {
if (bukkitQuest.getPlanner().getCooldown() > -1
&& (quester.getRemainingCooldown(bukkitQuest)) > 0) {
&& quester.getRemainingCooldown(bukkitQuest) > 0) {
String early = BukkitLang.get(player, "questTooEarly");
early = early.replace("<quest>", bukkitQuest.getName());
early = early.replace("<time>", BukkitMiscUtil.getTime(

View File

@ -640,7 +640,7 @@ public class BukkitQuester implements Quester {
}
/**
* Check if Quester is too early or late for a planned quest<p>
* Check if Quester is not too early or late for a planned quest<p>
*
* For player cooldown, use {@link #canAcceptOffer(Quest, boolean)} instead
*
@ -678,8 +678,20 @@ public class BukkitQuester implements Quester {
}
}
if (repeat != -1 && start != -1 && end != -1) {
// Ensure that we're past the initial duration
if (currentTime > end) {
// Repeatable quest
if (currentTime <= end) {
// Initial period where quest may be active
if (completedTimes.containsKey(quest) && quest.getPlanner().getCooldown() > -1
&& getRemainingCooldown(quest) > 0) {
if (giveReason) {
final String early = BukkitLang.get("plnTooEarly").replace("<quest>", quest.getName())
.replace("<time>", BukkitMiscUtil.getTime(end - currentTime));
sendMessage(ChatColor.YELLOW + early);
return false;
}
}
} else {
// Subsequent period where quest may be active
final int maxSize = 2;
final LinkedHashMap<Long, Long> mostRecent = new LinkedHashMap<Long, Long>() {
private static final long serialVersionUID = 3046838061019897713L;