diff --git a/core/src/mindustry/world/blocks/logic/LogicBlock.java b/core/src/mindustry/world/blocks/logic/LogicBlock.java index a3de197586..b9fc38bf8b 100644 --- a/core/src/mindustry/world/blocks/logic/LogicBlock.java +++ b/core/src/mindustry/world/blocks/logic/LogicBlock.java @@ -194,6 +194,7 @@ public class LogicBlock extends Block{ public LExecutor executor = new LExecutor(); public float accumulator = 0; public Seq links = new Seq<>(); + public boolean checkedDuplicates = false; public void readCompressed(byte[] data, boolean relative){ DataInputStream stream = new DataInputStream(new InflaterInputStream(new ByteArrayInputStream(data))); @@ -362,6 +363,21 @@ public class LogicBlock extends Block{ public void updateTile(){ executor.team = team; + if(!checkedDuplicates){ + checkedDuplicates = true; + var removal = new IntSet(); + var removeLinks = new Seq(); + for(var link : links){ + var build = world.build(link.x, link.y); + if(build != null){ + if(!removal.add(build.id)){ + removeLinks.add(link); + } + } + } + links.removeAll(removeLinks); + } + //check for previously invalid links to add after configuration boolean changed = false; @@ -371,7 +387,7 @@ public class LogicBlock extends Block{ if(!l.active) continue; boolean valid = validLink(world.build(l.x, l.y)); - if(valid != l.valid ){ + if(valid != l.valid){ changed = true; l.valid = valid; if(valid){