What did you do?
Opened a decider, waited a second, then wrote LuaEntity::combinator_description on it while its own GUI was still open.
What happened?
The description field keeps showing the old text. Close and reopen and the new text is there, so the write worked.
What did you expect to happen instead?
The field to show what the entity holds. Writing behavior.parameters on the same entity in the same tick repaints the rows right away. Only the description is left behind.
Repro
Code: Select all
script.on_event(defines.events.on_gui_opened, function(event)
local entity = event.entity
if entity and entity.type == "decider-combinator" then
storage.at, storage.entity = game.tick + 60, entity
end
end)
script.on_event(defines.events.on_tick, function()
if not storage.at or game.tick < storage.at then return end
storage.at = nil
local entity = storage.entity
if not (entity and entity.valid) then return end
entity.combinator_description = "set at tick " .. game.tick
entity.get_or_create_control_behavior().parameters = {
conditions = {
{ first_signal = { type = "virtual", name = "signal-A" },
comparator = "<", constant = game.tick % 1000 },
},
outputs = { { signal = { type = "virtual", name = "signal-A" } } },
}
end)The wait is the point. Writing from on_gui_opened proves nothing, since the window may read the entity after the handler runs.
Why
combinator_description appears twice in the runtime API: the LuaEntity property, and defines.input_action.set_combinator_description. The GUI follows the input action, which a mod cannot raise.
Same gap, closed three times already:
Reassigning player.opened is the only workaround, and it closes and reopens the window, which throws away anything a relative GUI was holding.

