diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java index 4864b7ff23..64701a47d8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java @@ -191,7 +191,8 @@ private static boolean onChatMessage(Component text, boolean overlay) { LOGGER.info("[Skyblocker Egg Finder] Not sharing this egg to the WebSocket - matches previous location"); return true; } - WsMessageHandler.sendLocationMessage(Service.EGG_WAYPOINTS, new EggWaypointMessage(eggType, eggType.egg.pos)); + WsMessageHandler.sendLocationMessage(Service.EGG_WAYPOINTS, + new EggWaypointMessage(eggType, eggType.egg.pos, Optional.empty())); } catch (IllegalArgumentException e) { LOGGER.error("[Skyblocker Egg Finder] Failed to process an egg!", e); } diff --git a/src/main/java/de/hysky/skyblocker/utils/ws/message/EggWaypointMessage.java b/src/main/java/de/hysky/skyblocker/utils/ws/message/EggWaypointMessage.java index 95441ee206..c865b4ea9a 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ws/message/EggWaypointMessage.java +++ b/src/main/java/de/hysky/skyblocker/utils/ws/message/EggWaypointMessage.java @@ -10,10 +10,11 @@ import java.util.Optional; import net.minecraft.core.BlockPos; -public record EggWaypointMessage(EggFinder.EggType eggType, BlockPos coordinates) implements Message { +public record EggWaypointMessage(EggFinder.EggType eggType, BlockPos coordinates, Optional expirationEpoch) implements Message { private static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EggFinder.EggType.CODEC.fieldOf("eggType").forGetter(EggWaypointMessage::eggType), - BlockPos.CODEC.fieldOf("coordinates").forGetter(EggWaypointMessage::coordinates) + BlockPos.CODEC.fieldOf("coordinates").forGetter(EggWaypointMessage::coordinates), + Codec.LONG.optionalFieldOf("expirationEpoch").forGetter(EggWaypointMessage::expirationEpoch) ).apply(instance, EggWaypointMessage::new)); private static final Codec> LIST_CODEC = CODEC.listOf(); @@ -30,8 +31,11 @@ public static void handle(Type type, Optional> message) { case Type.INITIAL_MESSAGE -> { if (message.isEmpty()) return; List waypoints = LIST_CODEC.parse(message.get()).getOrThrow(); + long now = System.currentTimeMillis(); - RenderHelper.runOnRenderThread(() -> waypoints.forEach(EggFinder::onWebsocketMessage)); + RenderHelper.runOnRenderThread(() -> waypoints.stream() + .filter(w -> w.expirationEpoch.isPresent() && w.expirationEpoch().get() > now) + .forEach(EggFinder::onWebsocketMessage)); } default -> {}