Beltlayer by TeuLux

by teulux

Route your belts freely underground, around corners and over any distance. Factorio 2.0 / Space Age, with Factorissimo 3 support and undergrounds that mirror the surface above. Continuation of Therax's Beltlayer.

Content
6 days ago
2.0 - 2.1
224
Logistics

Changelog

Version: 2.9.52
Date: 2026-07-15
  Changes:
    - The experimental circuit-network belt connector is not included in this release; it is still in
      development and disabled for now.
Version: 2.9.51
Date: 2026-07-15
  Bugfixes:
    - Removed a leftover development diagnostic that printed a "[BL-GHOST] ..." line to chat every time
      a ghost was removed. (Also tidied stale/misplaced code comments ahead of release.)
Version: 2.9.50
Date: 2026-07-15
  Bugfixes:
    - Hardened connector/proxy generation against exotic modpacks: a connector item is now created
      only when its connector entity exists, and a connector recipe only when its result item exists,
      keeping entity/item/recipe in lockstep (belts with no minable result could previously produce a
      dangling item or recipe).
    - Connector "next_upgrade" references that do not resolve are now cleared (the belt proxies already
      were), preventing a "next_upgrade target does not exist" load error.
    - Proxy belt-sprite generation now falls back to an icon sprite instead of crashing when a belt
      uses a non-standard sprite layout (missing structure / belt_animation_set).
Version: 2.9.49
Date: 2026-07-15
  Bugfixes:
    - Fixed a "Key 'item' not found ... placeable_by" crash caused by belts that have no placing item
      (script-only component belts, e.g. from the Router mod). Their bot-build proxy was generated with
      an empty placeable_by, which the engine rejects. The transport-belt, underground-belt and splitter
      proxy generators now skip belts with no placing item (they can't be blueprinted anyway), matching
      what the generic-entity proxy pass already did.
Version: 2.9.48
Date: 2026-07-15
  Bugfixes:
    - Fixed a "Prototype registered twice" crash caused by modded belts whose name spells it with an
      underscore ("umr_underground_belt_entity") or is otherwise custom. The connector-name derivation
      could not rewrite those names, so the generated connector reused the source belt's exact name and
      collided with it. It now also handles the underscore spelling and, for wholly custom names, falls
      back to a guaranteed-distinct name (also distinct from the migration connector). Standard belt
      names are unchanged, so existing saves and blueprints are unaffected.
Version: 2.9.47
Date: 2026-07-15
  Bugfixes:
    - Fixed the startup hang on large modpacks (the "Loading mods" bar freezing on beltlayer-by-lux).
      The technology pass inserted a connector-recipe unlock into a technology's effect list while it
      was iterating that same list; when a belt mod's recipe name did not contain "underground-belt"
      (so no connector name could be derived), the inserted effect referred back to the same recipe and
      matched again, looping forever. Connector unlocks are now collected and inserted after the walk,
      and only when they name a distinct, existing recipe.
Version: 2.9.45
Date: 2026-07-15
  Bugfixes:
    - Fixed a startup hang (the "Loading mods" bar getting stuck on beltlayer-by-lux) on large
      modpacks. The connector-item generation built its items while iterating the game's item table,
      which mutates that table mid-traversal -- harmless on small setups, but with thousands of items
      it can send the iterator into an effectively infinite loop and freeze loading. The new items are
      now collected and added after the loop instead.
    - Fixed a second large-modpack startup slowdown: the bot-build proxy generator rescanned every
      prototype in the game for each entity it processed (O(entities x prototypes)). It now builds a
      lookup index once, turning minutes of work near the loading bar into a quick pass.
Version: 2.9.44
Date: 2026-07-04
  Bugfixes:
    - The underground editor no longer leaves your character exposed on the surface while you are down
      there. Your character is made invulnerable for the duration and restored on exit, so it can no
      longer be destroyed (e.g. by Vulcanus demolishers) and strand you in god view with no body to
      return to.
  Changes:
    - /beltlayer-exit-editor now also revives you: if your character was already lost, the command
      spawns a fresh one at your spawn on the aboveground surface instead of leaving you in god view.
Version: 2.9.43
Date: 2026-07-04
  Features:
    - Added a /beltlayer-exit-editor console command as an escape hatch. If you ever get stuck in the
      underground editor view (for example the Ctrl+B toggle is unbound or conflicting), type
      /beltlayer-exit-editor in the console to be returned cleanly to your character. It uses your
      saved position/character and clears the editor state, so it does not affect your inventory.
Version: 2.9.42
Date: 2026-07-01
  Bugfixes:
    - Mirrored ghost removal now covers every removal path (right-click/mine and deconstruct, on both
      the surface and the underground editor) and locates the paired ghost by a small area instead of
      an exact point -- bpproxy ghosts have an empty collision mask, so a point lookup could miss them.
      Removing a ghost on either surface should now reliably remove its counterpart. Includes a
      temporary on-screen "[BL-GHOST]" diagnostic line while the fix is being confirmed.
Version: 2.9.41
Date: 2026-06-30
  Bugfixes:
    - Removing a belt/connector ghost on one surface now removes its mirror on the other surface, so
      bots no longer keep building it. Right-clicking a ghost in the underground editor previously
      left the above-ground counterpart behind (god-mode removal fires a different event than the
      counterpart cleanup was wired to).
Version: 2.9.40
Date: 2026-06-30
  Bugfixes:
    - Circuit Belt Connector (test): fixed a crash ("LuaEntity::active is read only") that fired when
      the enable/disable condition was evaluated. The connector is now stopped and started by
      disconnecting/reconnecting its underground link instead of toggling "active", which linked belts
      don't allow.
Version: 2.9.39
Date: 2026-07-01
  Bugfixes:
    - Fixed a crash ("attempt to index local 'name' (a number value)") when a construction robot
      mined a belt connector that was marked for upgrade. The upgrade check read the robot's cargo
      using the pre-2.0 inventory format; it now reads it correctly (and is nil-safe).
Version: 2.9.38
Date: 2026-07-01
  Bugfixes:
    - The underground twin preview shown when placing a belt connector as a ghost now faces the right
      way -- it previews as the output twin, matching what actually gets built -- instead of showing
      the opposite orientation.
Version: 2.9.37
Date: 2026-06-30
  Features:
    - Circuit Belt Connector (test): opening it now shows a belt-style circuit panel -- "Read belt
      contents" with a Pulse/Hold switch, and "Enable/disable" with a signal / comparator / constant
      condition that stops the connector passing items when the condition is false. (Read-contents
      already worked; this adds the read modes, the enable condition, and a proper window in place of
      the raw combinator GUI.) Still a 2.1-only test clone; production connectors are unchanged.
Version: 2.9.36
Date: 2026-06-30
  Changes:
    - Circuit Belt Connector (test): the co-located wire point is now the selectable face of the
      connector, so red/green wires attach to it (previously the wire hit the non-wireable belt
      underneath and reported "cannot connect to wire"). Mining the connector returns its item and
      also removes the underground counterpart.
Version: 2.9.35
Date: 2026-06-30
  Features:
    - EXPERIMENTAL (test build): a separate "Circuit Belt Connector (test)" item -- a clone of the
      belt connector that can be wired to the circuit network and reports the items currently passing
      through it. A linked belt can't take a wire directly, so this clone carries a co-located wire
      point that the script keeps updated. Your normal belt connectors are unchanged. The 2.0 build
      and an enable/disable condition will follow once the wiring is confirmed working in-game.
Version: 2.9.34
Date: 2026-06-29
  Changes:
    - A hand-placed connector with no aligned surface belt to snap to now defaults to OUTPUT (bringing
      items up from underground to the surface) instead of input. Connectors placed next to a belt
      still snap to match it, and the facing is never changed.
Version: 2.9.33
Date: 2026-06-29
  Bugfixes:
    - In the underground editor, a belt and a non-belt entity (pipe, power, or circuit) can no longer
      be placed on the same tile. The god-mode editor was not enforcing that collision, so pipes could
      sit directly on top of belts; such overlapping placements are now rejected with "Underground
      obstructed".
Version: 2.9.32
Date: 2026-06-29
  Changes:
    - Upgrading a belt connector (building a higher tier over it, or via the upgrade planner) now keeps
      the existing connector's facing and input/output -- only the belt tier changes. Previously the
      upgraded connector could flip 180 degrees by taking the cursor's orientation instead of the old one.
Version: 2.9.31
Date: 2026-06-29
  Changes:
    - Pipe and circuit connectors now refuse to build when their underground counterpart would land on
      top of something already routed there (a belt, etc.). The build is rejected with "Underground
      obstructed" and the item refunded, instead of the underground post silently overlapping it.
Version: 2.9.30
Date: 2026-06-29
  Changes:
    - Crafting-menu ordering: each belt connector now sits immediately to the RIGHT of its
      underground belt (previously to the left). The pipe connector now sits directly after the
      pipe-to-ground, and the circuit connector directly after the medium electric pole.
Version: 2.9.29
Date: 2026-06-28
  Changes:
    - Blueprints, blueprint books, and deconstruction/upgrade planners now carry into the underground
      editor with their full contents instead of showing up as blank copies. They travel down with
      you when you toggle underground and back up when you return -- the same planner usable from
      either view, including ones you create or edit while underground.
Version: 2.9.28
Date: 2026-06-27
  Changes:
    - Connector belt-snapping now reads only the belt at the connector's front (the side its mouth
      faces) and sets input or output to match -- a belt feeding in makes it an input, a belt
      leading away makes it an output. The connector's aim is never changed, so the snap does
      exactly what pressing R does; belts on every other side are ignored.
Version: 2.9.27
Date: 2026-06-27
  Changes:
    - Connector snapping again orients the connector fully (facing AND input/output) so the
      adjacent belt connects, regardless of how it was aimed at placement. The previous
      input/output-only behaviour left a connector unconnected when its placed facing did not
      line up with the belt (e.g. aimed away from a belt it should output onto).
Version: 2.9.25
Date: 2026-06-26
  Changes:
    - Connector belt-snapping now only sets input/output and leaves the facing exactly as you
      place it (the facing can't be rotated after placement, so it is no longer auto-changed).
      The lined-up belt decides the type: a belt feeding the connector makes it an input, a belt
      it feeds makes it an output; perpendicular or non-aligned belts are ignored.
Version: 2.9.24
Date: 2026-06-26
  Bugfixes:
    - Connector belt-snapping now actually connects: the input/output type is applied before the
      facing, since changing a linked belt's type re-derives its direction. Previously the facing
      was set first and then flipped, so snapped connectors pointed the wrong way and the belt
      wouldn't latch without a manual rotate.
Version: 2.9.22
Date: 2026-06-26
  Features:
    - Connectors now auto-orient to an adjacent belt when you place them by hand: a belt feeding
      into the connector makes it send items down, a belt leading away makes it bring items up.
      It only snaps to belts on the top surface and only on manual placement -- blueprint and
      bot-placed connectors keep their saved orientation. Rotate (R) after placing to override.
Version: 2.9.21
Date: 2026-06-26
  Changes:
    - Simplified the inventory-full message wording (dropped the word "above").
Version: 2.9.20
Date: 2026-06-26
  Changes:
    - The message shown when mined underground items can't fit in a full inventory now reads
      clearly and names how many items were dropped on the ground above (it previously showed a
      raw "__2__" placeholder from the vanilla string).
Version: 2.9.19
Date: 2026-06-26
  Bugfixes:
    - Fixed a crash when mining underground belts or connectors while the above-ground
      character inventory was full. The editor/character inventory sync called
      LuaSurface.spill_item_stack with the legacy positional arguments; it now uses the
      current single-table form ({position=, stack=}), which is what Factorio 2.0+ expects.
Version: 2.9.18
Date: 2026-06-26
  Features:
    - New per-player setting "Include underground belts in blueprints" (off by default).
      When off, a blueprint captures only the surface you are viewing; an above-ground blueprint
      no longer pulls in the underground belts beneath the area. Turn it on to restore the
      original behaviour where above-ground blueprints also carry the underground routing.
Version: 2.9.17
Date: 2026-06-26
  Bugfixes:
    - Fixed the remaining "LuaEntity API call when LuaEntity was invalid." console spam, which fired every time a belt-connector ghost was placed. The underground mirror ghost is no longer oriented by reading a linked-belt property off the connector ghost (which the engine logs as an invalid call); it is created as a plain placeholder and the real underground end is oriented when the connector is built.
Version: 2.9.16
Date: 2026-06-25
  Bugfixes:
    - Fixed the console spamming "LuaEntity API call when LuaEntity was invalid." every time a belt-connector was built on top of its ghost (revived by bots or built over a blueprint/placed ghost). The underground connector now takes its orientation from the real connector instead of reading a linked-belt property off the consumed ghost, which the engine logs as an invalid call.
Version: 2.9.15
Date: 2026-06-25
  Bugfixes:
    - Blueprinting while in the underground editor view no longer also captures entities from the surface above; a blueprint now contains only the surface you are viewing. Folding the underground layer into a blueprint still happens, as before, when you blueprint above ground over a connector.
Version: 2.9.14
Date: 2026-06-25
  Bugfixes:
    - Fixed a crash ("attempt to index local 'entity' (a nil value)" in proxy_name) when creating a blueprint above ground over a Beltlayer connector. Ghost entities on the underground editor surface are now matched by their ghost name, and any underground entity that can't be resolved is skipped instead of crashing the game.
Version: 2.9.13
Date: 2026-06-25
  Graphics:
    - New mod thumbnail: the BELTLAYER logo framed by the underground belt loop.
Version: 2.9.12
Date: 2026-06-25
  Bugfixes:
    - Fixed underground belts, splitters and connectors getting marked for deconstruction when a filtered deconstruction planner (e.g. trees-and-rocks) was dragged from remote view. When the planner's filters can't be read, the mod no longer propagates any underground deconstruction instead of marking everything in range.
Version: 2.9.11
Date: 2026-06-25
  Bugfixes:
    - A trees-and-rocks-only deconstruction planner no longer marks underground belts, splitters or connectors for deconstruction; it only affects trees and rocks above ground as intended.
Version: 2.9.10
Date: 2026-06-25
  Bugfixes:
    - Building a connector above ground where the underground is obstructed no longer consumes the item; manually-built entities the mod rejects are now refunded instead of lost.
Version: 2.9.9
Date: 2026-06-25
  Features:
    - Belt-connector ghosts placed above ground now show a matching connector ghost on the underground surface, so you can see where the underground end will land.
Version: 2.9.8
Date: 2026-06-23
  Features:
    - Updated for Factorio 2.1 and Space Age.
  Changes:
    - Removed the experimental underground train/subway system to focus on a clean, stable belts-only release.
    - Underground circuit network, fluid network, Factorissimo 3 integration, and terrain mirroring are now optional and OFF by default for the classic belts-only experience.
    - Underground pipes and storage tanks now show their fluid contents in alt-mode, matching surface entities.
  Balancing:
    - Pipe connector now costs 2x a pipe-to-ground.
    - Circuit connector now costs 2x a medium electric pole (8 iron sticks, 4 steel plates, 4 copper cables).
  Bugfixes:
    - Reworked the underground fluid network for the Factorio 2.1 fluid API.
  Translation:
    - Completed Czech, German, Spanish, French, Korean, Brazilian Portuguese, and Russian translations.