Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -16,6 +17,7 @@
import static net.minecraft.util.Formatting.GRAY;
import static net.minecraft.util.Formatting.WHITE;

@Getter
@RequiredArgsConstructor
public class Countdown {

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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: \\+(?<percent>\\d+)% für (?<seconds>\\d+)s$");

private LocalDateTime miningBoosterExpirationTime;

@Override
public boolean onMessageReceive(Text text, String message) {
Expand All @@ -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<Job> optionalJob = stream(Job.values())
.filter(job -> job.getJobStartPattern().matcher(message).find())
Expand Down