From 778dab59dc9e875a9d9373b40001aeea1fbce3a8 Mon Sep 17 00:00:00 2001 From: Pablo Herrera Date: Sat, 18 Jan 2025 19:47:08 +0100 Subject: [PATCH] Fix sponsoring not considering variants (#87) Signed-off-by: Pablo Herrera --- .../pgm/community/requests/MapCooldown.java | 18 ++++++------------ .../requests/commands/RequestCommands.java | 2 +- .../requests/feature/RequestFeatureBase.java | 7 +++++-- .../requests/sponsor/SponsorManager.java | 4 +--- 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/core/src/main/java/dev/pgm/community/requests/MapCooldown.java b/core/src/main/java/dev/pgm/community/requests/MapCooldown.java index 18724b94..252fbcd3 100644 --- a/core/src/main/java/dev/pgm/community/requests/MapCooldown.java +++ b/core/src/main/java/dev/pgm/community/requests/MapCooldown.java @@ -2,26 +2,20 @@ import java.time.Duration; import java.time.Instant; +import tc.oc.pgm.util.TimeUtils; public class MapCooldown { - private Instant endTime; - private Duration matchLength; + private final Instant endsAt; - public MapCooldown(Instant endTime, Duration matchLength) { - this.endTime = endTime; - this.matchLength = matchLength; - } - - public Instant getEndTime() { - return endTime; + public MapCooldown(Duration cooldown) { + this.endsAt = Instant.now().plus(cooldown); } public boolean hasExpired() { - return getTimeRemaining().isNegative(); + return !getTimeRemaining().isPositive(); } public Duration getTimeRemaining() { - Duration timeSince = Duration.between(endTime, Instant.now()); - return matchLength.minus(timeSince); + return TimeUtils.max(Duration.ZERO, Duration.between(Instant.now(), endsAt)); } } diff --git a/core/src/main/java/dev/pgm/community/requests/commands/RequestCommands.java b/core/src/main/java/dev/pgm/community/requests/commands/RequestCommands.java index 34fac1b0..690b606d 100644 --- a/core/src/main/java/dev/pgm/community/requests/commands/RequestCommands.java +++ b/core/src/main/java/dev/pgm/community/requests/commands/RequestCommands.java @@ -59,7 +59,7 @@ record MapWithCooldown(MapInfo map, Duration cooldown) {} var maps = StreamUtils.of(library.getMaps()) .map(map -> new MapWithCooldown(map, requests.getApproximateCooldown(map))) - .filter(mcd -> mcd.cooldown.isPositive()) + .filter(mcd -> mcd.cooldown.toSeconds() > 0) .sorted(Comparator.comparing(MapWithCooldown::cooldown)) .toList(); diff --git a/core/src/main/java/dev/pgm/community/requests/feature/RequestFeatureBase.java b/core/src/main/java/dev/pgm/community/requests/feature/RequestFeatureBase.java index e4ffb8d8..bddae45b 100644 --- a/core/src/main/java/dev/pgm/community/requests/feature/RequestFeatureBase.java +++ b/core/src/main/java/dev/pgm/community/requests/feature/RequestFeatureBase.java @@ -75,6 +75,9 @@ public abstract class RequestFeatureBase extends FeatureBase implements RequestFeature { + // Multiplier for minimum score to allow sponsoring + private static final double MIN_SCORE_MUL = 0.35; + private Cache requests; private Cache cooldown; @@ -641,7 +644,7 @@ public Duration getApproximateCooldown(MapInfo map) { return map.getVariants().values().stream() .map(variant -> mapLibrary.getMapById(variant.getId())) .filter(Objects::nonNull) - .map(m -> TimeUtils.max(sponsor.getSponsorCooldown(map), getPgmCooldown(map))) + .map(m -> TimeUtils.max(sponsor.getSponsorCooldown(m), getPgmCooldown(m))) .max(Comparator.naturalOrder()) .orElse(Duration.ZERO); } @@ -652,7 +655,7 @@ private Duration getPgmCooldown(MapInfo map) { var data = pool.getVoteData(map); Duration cd = data.remainingCooldown(pool.constants); if (cd.isPositive()) return cd; - return data.getScore() < (pool.constants.defaultScore() / 2) + return data.getScore() < (pool.constants.defaultScore() * MIN_SCORE_MUL) ? Duration.ofMillis(1L) : Duration.ZERO; } diff --git a/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorManager.java b/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorManager.java index ed8a9d16..0d13d871 100644 --- a/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorManager.java +++ b/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorManager.java @@ -17,7 +17,6 @@ import dev.pgm.community.utils.PGMUtils.MapSizeBounds; import dev.pgm.community.utils.Sounds; import java.time.Duration; -import java.time.Instant; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -90,8 +89,7 @@ public Duration getSponsorCooldown(MapInfo map) { public void startNewMapCooldown(MapInfo map, Duration matchLength) { this.mapCooldown.putIfAbsent( - map.getId(), - new MapCooldown(Instant.now(), matchLength.multipliedBy(config.getMapCooldownMultiply()))); + map.getId(), new MapCooldown(matchLength.multipliedBy(config.getMapCooldownMultiply()))); } public MapSizeBounds getCurrentMapSizeBounds() {