In 2.1's transport-belt-connectable collision mask validation, please allow a linked-belt prototype to waive only the "must collide with itself" half of the check, for example by honouring the existing not_colliding_with_itself flag, while keeping the pairwise "must collide with every other belt-connectable" requirement exactly as it is.
Background:
I'm the author of Better Belt Balancer. boskid posted an exact writeup of why it loads on 2.0: the validation's already-checked cache compared collision masks by layers only, ignoring flags, so my linked belt (default belt layers plus not_colliding_with_itself) skipped the check while the flag was still honoured at runtime. The 2.1 CollisionMask rewrite fixed the compare, and on 2.1.14 the mod fails data-stage validation with:
Code: Select all
entity prototype "bbb-linked-belt" (linked-belt) collision_mask(Modifications: Better Belt Balancer) must collide with entity prototype "bbb-linked-belt" (linked-belt) collision_mask(Modifications: Better Belt Balancer).In 2.1.14 the validation requires every belt-connectable to collide pairwise with every other one, so disjoint custom-layer variants fail against each other, and neither create_entity nor teleport will place a second belt-connectable on a tile at runtime -- there doesn't seem to be a feasible workaround.
The use case:
The mod compiles balancer clusters at build time into networks of real splitters and belts on a hidden surface, so the steady state runs no Lua at all; the engine does all the work. Each edge (a player's belt adjacent to a balancer part) gets a hidden, script-placed linked belt standing on the part's own 1x1 tile, crossing to the hidden surface. A part with an input belt on one side and an output belt on another therefore needs two linked belts on its tile, and the worst case is four (one per side). This is the common case for a belt balancer mod: the smallest balancer, one belt in and one belt out through a single part, already needs two.
The ask:
Honor not_colliding_with_itself in the validation: waive only self-collision, keep the pairwise requirement. This is exactly what 2.0 de facto allowed, turned into a declared opt-in, and gating it to hidden or otherwise non-player-placeable prototypes would fully cover this use case. Alternatively, provide a new explicit opt-in property. Linked-belt only would be enough; I don't need it for belts, splitters or loaders.
Thanks to boskid for the heads-up; it's the reason I know exactly what to ask for.

