From cd7d8eded05d48116039f65e903a7c41e7bba14e Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 7 Apr 2023 18:51:07 +0200 Subject: [PATCH] Fixes a bug causing duplicate records to be stored --- .../dropper/arena/DropperArenaRecordsRegistry.java | 10 ++++++++-- .../knarcraft/dropper/arena/record/IntegerRecord.java | 5 +++++ .../net/knarcraft/dropper/arena/record/LongRecord.java | 5 +++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/knarcraft/dropper/arena/DropperArenaRecordsRegistry.java b/src/main/java/net/knarcraft/dropper/arena/DropperArenaRecordsRegistry.java index d477047..829aacc 100644 --- a/src/main/java/net/knarcraft/dropper/arena/DropperArenaRecordsRegistry.java +++ b/src/main/java/net/knarcraft/dropper/arena/DropperArenaRecordsRegistry.java @@ -77,7 +77,10 @@ public class DropperArenaRecordsRegistry implements ConfigurationSerializable { * @return

The result explaining what type of record was achieved

*/ public @NotNull RecordResult registerDeathRecord(@NotNull UUID playerId, int deaths) { - Consumer consumer = (value) -> leastDeaths.add(new IntegerRecord(playerId, value)); + Consumer consumer = (value) -> { + leastDeaths.removeIf((item) -> item.getUserId().equals(playerId)); + leastDeaths.add(new IntegerRecord(playerId, value)); + }; Set> asInt = new HashSet<>(leastDeaths); return registerRecord(asInt, consumer, playerId, deaths); } @@ -90,7 +93,10 @@ public class DropperArenaRecordsRegistry implements ConfigurationSerializable { * @return

The result explaining what type of record was achieved

*/ public @NotNull RecordResult registerTimeRecord(@NotNull UUID playerId, long milliseconds) { - Consumer consumer = (value) -> shortestTimeMilliSeconds.add(new LongRecord(playerId, value)); + Consumer consumer = (value) -> { + shortestTimeMilliSeconds.removeIf((item) -> item.getUserId().equals(playerId)); + shortestTimeMilliSeconds.add(new LongRecord(playerId, value)); + }; Set> asLong = new HashSet<>(shortestTimeMilliSeconds); return registerRecord(asLong, consumer, playerId, milliseconds); } diff --git a/src/main/java/net/knarcraft/dropper/arena/record/IntegerRecord.java b/src/main/java/net/knarcraft/dropper/arena/record/IntegerRecord.java index e68eb06..d836eec 100644 --- a/src/main/java/net/knarcraft/dropper/arena/record/IntegerRecord.java +++ b/src/main/java/net/knarcraft/dropper/arena/record/IntegerRecord.java @@ -24,6 +24,11 @@ public class IntegerRecord extends SummableArenaRecord { return new IntegerRecord(this.getUserId(), this.getRecord() + value); } + @Override + public boolean equals(Object other) { + return other instanceof IntegerRecord && this.getUserId().equals(((IntegerRecord) other).getUserId()); + } + /** * Deserializes the saved arena record * diff --git a/src/main/java/net/knarcraft/dropper/arena/record/LongRecord.java b/src/main/java/net/knarcraft/dropper/arena/record/LongRecord.java index 8ec62d4..5ea0c8a 100644 --- a/src/main/java/net/knarcraft/dropper/arena/record/LongRecord.java +++ b/src/main/java/net/knarcraft/dropper/arena/record/LongRecord.java @@ -19,6 +19,11 @@ public class LongRecord extends SummableArenaRecord { super(userId, record); } + @Override + public boolean equals(Object other) { + return other instanceof LongRecord && this.getUserId().equals(((LongRecord) other).getUserId()); + } + @Override public SummableArenaRecord sum(Long value) { return new LongRecord(this.getUserId(), this.getRecord() + value);