diff --git a/src/main/java/de/rettichlp/ucutils/common/models/Countdown.java b/src/main/java/de/rettichlp/ucutils/common/models/Countdown.java index ae64195c..c20c0ab5 100644 --- a/src/main/java/de/rettichlp/ucutils/common/models/Countdown.java +++ b/src/main/java/de/rettichlp/ucutils/common/models/Countdown.java @@ -1,6 +1,7 @@ package de.rettichlp.ucutils.common.models; import de.rettichlp.ucutils.common.gui.widgets.CountdownWidget; +import lombok.Getter; import lombok.RequiredArgsConstructor; import net.minecraft.text.Text; @@ -16,6 +17,7 @@ import static net.minecraft.util.Formatting.GRAY; import static net.minecraft.util.Formatting.WHITE; +@Getter @RequiredArgsConstructor public class Countdown { diff --git a/src/main/java/de/rettichlp/ucutils/listener/impl/job/JobListener.java b/src/main/java/de/rettichlp/ucutils/listener/impl/job/JobListener.java index 5722a907..c4610d1f 100644 --- a/src/main/java/de/rettichlp/ucutils/listener/impl/job/JobListener.java +++ b/src/main/java/de/rettichlp/ucutils/listener/impl/job/JobListener.java @@ -1,5 +1,6 @@ package de.rettichlp.ucutils.listener.impl.job; +import de.rettichlp.ucutils.common.models.Countdown; import de.rettichlp.ucutils.common.models.Job; import de.rettichlp.ucutils.common.registry.UCUtilsListener; import de.rettichlp.ucutils.listener.IMessageReceiveListener; @@ -8,6 +9,7 @@ import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; +import java.time.LocalDateTime; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -19,6 +21,9 @@ import static de.rettichlp.ucutils.common.models.Job.PIZZA_DELIVERY; import static de.rettichlp.ucutils.common.models.Job.TOBACCO_PLANTATION; import static de.rettichlp.ucutils.common.models.Job.URANIUM_TRANSPORT; +import static java.lang.Integer.parseInt; +import static java.time.Duration.between; +import static java.time.LocalDateTime.now; import static java.util.Arrays.stream; import static java.util.Objects.isNull; import static java.util.concurrent.TimeUnit.SECONDS; @@ -27,9 +32,13 @@ @UCUtilsListener public class JobListener implements IMessageReceiveListener, IMoveListener, INaviSpotReachedListener { + private static final String MINING_BOOSTER_COUNTDOWN_TITLE = "Mining XP-Booster"; private static final Pattern TRANSPORT_DELIVER_PATTERN = compile("^\\[Transport] Du hast (eine Holz Lieferung|eine Kiste|eine Waffenkiste|ein Weizen Paket|eine Schwarzpulverkiste) abgeliefert( bei .+)?\\.$"); private static final Pattern DRINK_TRANSPORT_DELIVER_PATTERN = compile("^\\[Bar] Du hast eine Flasche abgegeben!$"); private static final Pattern PIZZA_JOB_TRANSPORT_GET_PIZZA_PATTERN = compile("^\\[Pizzalieferant] Sobald du 10 Pizzen dabei hast, wird dir deine erste Route angezeigt\\.$"); + private static final Pattern MINING_BOOSTER_PATTERN = compile("^ᴍɪɴɪɴɢ ┃ XP-Booster aktiviert: \\+(?\\d+)% für (?\\d+)s$"); + + private LocalDateTime miningBoosterExpirationTime; @Override public boolean onMessageReceive(Text text, String message) { @@ -51,6 +60,20 @@ public boolean onMessageReceive(Text text, String message) { return true; } + Matcher miningBoosterMatcher = MINING_BOOSTER_PATTERN.matcher(message); + if (miningBoosterMatcher.find()) { + int seconds = parseInt(miningBoosterMatcher.group("seconds")); + LocalDateTime now = now(); + + this.miningBoosterExpirationTime = this.miningBoosterExpirationTime != null && this.miningBoosterExpirationTime.isAfter(now) + ? this.miningBoosterExpirationTime.plusSeconds(seconds) + : now.plusSeconds(seconds); + + storage.getCountdowns().removeIf(countdown -> countdown.getTitle().equals(MINING_BOOSTER_COUNTDOWN_TITLE)); + storage.getCountdowns().add(new Countdown(MINING_BOOSTER_COUNTDOWN_TITLE, between(now, this.miningBoosterExpirationTime), () -> {})); + return true; + } + // refresh job cooldowns Optional optionalJob = stream(Job.values()) .filter(job -> job.getJobStartPattern().matcher(message).find())