Like many have already asked, I need some clarification on how ABM run in the engine side, and how to make them efficient when modding.
Context: I'm really fan of @FaceDeer mode dynamic_liquid, but as a side-effect, it produces nasty lags. I already tried few optimizations, but it didn't do much (in fact, I see no difference at all). Since I'm addict to this mod, I just can't turn it off, the world seems so boring without it...
The questions (core dev wanted!):
- What have the most impact on the performance?
- The number of node having ABM even if the ABM actually change nothing (exit condition triggered)?
- The number of actual changes produced by ABM?
- Rather than the number of node, the number of map block that have changed? (i.e. when a node change, is that only node that is transferred to clients, or the whole block it is part of)
- Is the lag server-side (internal computing) or due to client-server communications (lot of things to send over the network to synchronize clients)?
- Why dynamic_liquid is so intensive for the server (the mod is already optimized), while at the same time, flowing liquid (which is an engine-stuff) does not need much resource? To me, making flowing liquid is even more complicated than dynamic_liquid behavior, and flowing liquid is a sort of ABM (even if it's technically not). Why flowing is so much optimized compared to a an optimized Lua ABM?
- Is there any chance/plan that some kind of dynamic liquid behavior could be implemented directly inside the engine?