diff --git a/src/main/java/com/simibubi/create/content/trains/graph/TrackGraphSync.java b/src/main/java/com/simibubi/create/content/trains/graph/TrackGraphSync.java index f4f11aee46..6e7a37b4d1 100644 --- a/src/main/java/com/simibubi/create/content/trains/graph/TrackGraphSync.java +++ b/src/main/java/com/simibubi/create/content/trains/graph/TrackGraphSync.java @@ -2,9 +2,11 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; +import java.util.Map.Entry; import javax.annotation.Nullable; @@ -138,6 +140,8 @@ public void sendFullGraphTo(TrackGraph graph, ServerPlayer player) { packet.fullWipe = true; int sent = 0; + Set sentPoints = new HashSet<>(); + for (TrackNode node : graph.nodes.values()) { TrackGraphSyncPacket currentPacket = packet; currentPacket.addedNodes.put(node.getNetId(), Pair.of(node.getLocation(), node.getNormal())); @@ -152,12 +156,24 @@ public void sendFullGraphTo(TrackGraph graph, ServerPlayer player) { TrackGraphSyncPacket currentPacket = packet; if (!graph.connectionsByNode.containsKey(node)) continue; - graph.connectionsByNode.get(node) - .forEach((node2, edge) -> { - Couple key = Couple.create(node.getNetId(), node2.getNetId()); - currentPacket.addedEdges.add(Pair.of(Pair.of(key, edge.getTrackMaterial()), edge.getTurn())); - currentPacket.syncEdgeData(node, node2, edge); - }); + + for (Entry entry : graph.connectionsByNode.get(node).entrySet()) { + TrackNode node2 = entry.getKey(); + TrackEdge edge = entry.getValue(); + + Couple key = Couple.create(node.getNetId(), node2.getNetId()); + currentPacket.addedEdges.add(Pair.of(Pair.of(key, edge.getTrackMaterial()), edge.getTurn())); + currentPacket.syncEdgeData(node, node2, edge); + + for (TrackEdgePoint point : edge.edgeData.getPoints()) { + if (sentPoints.contains(point)) + continue; + + sentPoints.add(point); + currentPacket.addedEdgePoints.add(point); + sent++; + } + } if (sent++ < 1000) continue; @@ -168,6 +184,10 @@ public void sendFullGraphTo(TrackGraph graph, ServerPlayer player) { for (EdgePointType type : EdgePointType.TYPES.values()) { for (TrackEdgePoint point : graph.getPoints(type)) { + if (sentPoints.contains(point)) + continue; + + sentPoints.add(point); packet.addedEdgePoints.add(point); if (sent++ < 1000)