diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index f66c075d528f..bf561b888d0a 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -124,7 +124,7 @@ public void runOnce(){ public void load(LAssembler builder){ stop = false; nameMap = null; - vars = builder.vars.values().toSeq().retainAll(var -> !var.constant).toArray(LVar.class); + vars = builder.vars.values().toSeq().retainAll(var -> !var.constant || var.name.charAt(0) != '_' && var.name.charAt(0) != '@').toArray(LVar.class); for(int i = 0; i < vars.length; i++){ vars[i].id = i; } diff --git a/core/src/mindustry/world/blocks/logic/LogicBlock.java b/core/src/mindustry/world/blocks/logic/LogicBlock.java index 42b5ef55ee37..d33c2143db88 100644 --- a/core/src/mindustry/world/blocks/logic/LogicBlock.java +++ b/core/src/mindustry/world/blocks/logic/LogicBlock.java @@ -91,7 +91,11 @@ public LogicBlock(String name){ int x = lbuild.tileX(), y = lbuild.tileY(); int oldSize = entity.links.size; - entity.links.removeAll(l -> world.build(l.x, l.y) == lbuild); + entity.links.removeAll(l -> { + boolean remove = world.build(l.x, l.y) == lbuild; + if(remove) l.trySet(entity.executor, null); + return remove; + }); if(oldSize > entity.links.size){ //check whether any were removed //re-enable the target when unlinking @@ -99,10 +103,12 @@ public LogicBlock(String name){ lbuild.enabled = true; } }else{ - entity.links.add(new LogicLink(x, y, entity.findLinkName(lbuild.block), true)); + LogicLink link = new LogicLink(x, y, entity.findLinkName(lbuild.block), true); + link.trySet(entity.executor, lbuild); + entity.links.add(link); } - entity.updateCode(entity.code, true, null); + entity.updateLinks(); }); } @@ -575,6 +581,8 @@ public void updateTile(){ } public void updateLinks(){ + if(linksVar == null) return; //no valid code compiled yet + int valids = links.count(l -> l.valid); executor.links = new Building[valids]; executor.linkIds.clear();