package net.minecraft.client.waypoints; import com.mojang.datafixers.util.Either; import java.util.Comparator; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; import net.minecraft.world.entity.Entity; import net.minecraft.world.waypoints.TrackedWaypoint; import net.minecraft.world.waypoints.TrackedWaypointManager; public class ClientWaypointManager implements TrackedWaypointManager { private final Map, TrackedWaypoint> waypoints = new ConcurrentHashMap<>(); public void trackWaypoint(final TrackedWaypoint waypoint) { this.waypoints.put(waypoint.id(), waypoint); } public void updateWaypoint(final TrackedWaypoint waypoint) { this.waypoints.get(waypoint.id()).update(waypoint); } public void untrackWaypoint(final TrackedWaypoint waypoint) { this.waypoints.remove(waypoint.id()); } public boolean hasWaypoints() { return !this.waypoints.isEmpty(); } public void forEachWaypoint(final Entity fromEntity, final Consumer consumer) { this.waypoints .values() .stream() .sorted(Comparator.comparingDouble(waypoint -> waypoint.distanceSquared(fromEntity)).reversed()) .forEachOrdered(consumer); } }