Release
26.6.B03a
07 Jun 2026
Vehicles and rendering
----------------------
- Added the built-in taxi sedan resources:
- mta_sedan_taxi
- sedan_taxi
- sedan_taxi.obj / sedan_taxi.mtl
- sedan_taxi.png / taxi_sign.png
- Added the built-in hatchback resources:
- mta_hatchback / hatchback
- mta_hatchback_white / hatchback_white
- mta_hatchback_gray / hatchback_gray
- mta_hatchback_blue / hatchback_blue
- mta_hatchback_brown / hatchback_brown
- mta_hatchback_green / hatchback_green
- mta_hatchback_orange / hatchback_orange
- mta_hatchback_pink / hatchback_pink
- mta_hatchback_red / hatchback_red
- hatchback.obj and hatchback texture variants
- Hatchback OBJ rendering uses per-variant default textures from traffic model definitions instead of a fixed MTL map_Kd texture.
- Added OBJ material-library loading for traffic models.
- Added per-face texture selection from MTL map_Kd entries.
- Added route pitch to traffic debug snapshots, server networking, client interpolation, and custom/MTR/placeholder render state.
- Added deterministic lateral vehicle offset and small deterministic custom-render pitch variation.
Traffic lights and bindings
---------------------------
- Added Pedestrian Lights and Pedestrian Lights Pole blocks, items, blockstates, models, textures, loot tables, translations, creative-tab entries, pickaxe tags, and emissive overlays.
- Added TrafficLightBindingTargetType with NODE and GROUP target modes.
- Updated saved traffic light bindings to retain backwards compatibility with old node-only bindings while supporting group targets.
- Updated the brush binding screen/networking to list signal groups before IN nodes and send target type plus target number.
- Added group signal-state lookup so bound lights can follow a whole signal group.
Simulation and spacing
----------------------
- Added materialization clearance checks against active addon vehicles and recently observed MTR vehicles.
- Added skipped virtual vehicle tracking so unsafe virtual departures are not retried every simulation pass.
- Added next-segment entry limits to prevent vehicles entering occupied/full segments.
- Refined signal occupancy checks to apply at signal entry boundaries instead of every segment that shares a signal color.
- Spawn connector route traversal now prefers saved node direction, while retaining reverse traversal for old saved spawn points.
- Despawn connector segments remain protected from vehicle materialization.
Documentation
-------------
- Updated README with 26.6.B03a status, taxi/hatchback resources, pedestrian/group binding behavior, and clearance-aware materialization.
- Updated docs/ADDON_DOCUMENTATION.md with B03a runtime behavior, pedestrian lights, group bindings, OBJ MTL texture support, taxi/hatchback resources, and current jar names.
- Updated docs/RESOURCE_PACK_AUTHORING.md and CUSTOM_TRAFFIC_MODELS.md with taxi/hatchback IDs and OBJ material texture support.
- Updated the standalone resource pack README and pack metadata to describe road vehicle resources instead of sedan-only resources.
Release
26.5.B01a
24 May 2026
- Fixed a dedicated-server crash in the traffic signal tick path:
java.lang.IllegalStateException: End size ... is less than fixed size ...
- Replaced the shared MTR vehicle occupancy HashMap with a ConcurrentHashMap because MTR vehicle simulation can update the cache while the server tick is reading it.
- Changed MTR signal vehicle snapshot creation from Stream.toList() to a plain loop over the concurrent map values.
- Removed the repeated "Spawn blocked: no MTR graph loaded" INFO log that appeared every 5 seconds on empty dedicated servers.
- Moved repeated MTR graph refresh, no-rails, in-flight, spawn-planning, and graph-request diagnostics to debug logging.
- Kept real load/save failures and explicit player dashboard actions in normal logs.
- Verified build output for this changelog:
D:\mta\build\libs\mta-26.5.B01a-fabric-1.20.1.jar
Release
26.5.B01
22 May 2026
Official open BETA
- cleaned trash code
- mtr route integration fixes
Release
26.5.A05
22 May 2026
Changelog
- Added traffic light blocks, poles, vertical poles, and primary traffic lights.
- Added red, yellow, green, and off traffic light variants.
- Added brush binding UI for linking traffic lights to intersection node IDs.
- Traffic lights now follow bound intersection signal states.
- Fixed yellow signal behavior so only transitioning nodes turn yellow.
- Added emissive glow for active traffic light lenses.
- Fixed traffic light transparency and several glow placement issues.
- Improved vertical pole placement so it faces the player.
- Updated traffic dashboard item texture.
- Updated license terms to reserve rights while allowing modpacks, showcases, and videos with credit.
Release
26.5.A03
20 May 2026
- Fixed stale traffic spawn/despawn connectors staying alive after their rails were deleted. They now get removed instead of snapping to random nearby tracks.
- Changed vehicle spawning so spawn tracks must be clear before another vehicle can appear.
- Removed hard vehicle spawn caps. Spawning is now controlled by spawn interval and track clearance.
- Increased MTR graph query range and made connector routing check both rail directions, improving route discovery for valid tracks.
- Cleaned up the dashboard by hiding Max Vehicles controls and updating spawn-limit text.
- Added an all-red intersection clearance phase between signal groups, then increased it from 5s to 10s.
- Updated MOD_STATUS_SUMMARY.txt for 26.5.A03.
- Verified builds successfully with Java 21.
Release
26.5.A02
19 May 2026
MTR Traffic Addon - Status Summary
Updated: 2026-05-19
Version covered: 26.5.A02
Current working state
=====================
- The mod builds successfully as a Fabric 1.20.1 addon for Minecraft Transit Railway 4.0.4.
- The local MTR jar is included as a Gradle dependency.
- The project builds with Java 23 via:
JAVA_HOME=C:\Program Files\Java\jdk-23
- The current built jar is:
D:\mta\build\libs\mtr-traffic-addon-26.5.A02.jar
- The latest test/install copy was placed in:
C:\Users\opale\AppData\Roaming\ModrinthApp\profiles\CookieCraftModsMTR\mods\mtr-traffic-addon-26.5.A02.jar
- The Traffic Dashboard item opens the client dashboard UI.
- Spawn and despawn traffic connectors are listed in the dashboard.
- Spawn/despawn connectors show position, enabled state, active vehicle count, and route status.
- Connector routes can be refreshed from the dashboard.
- Active traffic vehicles can be cleared from the dashboard.
- Spawn connectors can open the Vehicle Pool screen.
- Vehicle pools can select available MTR vehicle resources for each spawn connector.
- The standalone sedan resource pack was stabilized, then embedded into the mod jar.
- Players no longer need to install the sedan resource pack separately when using the current mod jar.
- The resourcepack copy under resourcepacks/mtr-traffic-addon-sedan is kept as a source/export/testing copy.
- Built-in sedan visual IDs:
mta_sedan
mta_sedan_white
mta_sedan_green
mta_sedan_red
- Legacy visual ID mtr_traffic_addon_sedan:sedan is remapped to mta_sedan for compatibility with older spawned/debug state.
- The bundled sedan model properties currently use modelYOffset 0.0.
- The MTR vehicle resource renderer no longer uses MTR floors/doorways as a universal render-height anchor.
- The renderer queues one MTR render cache at a time instead of mixing normal and doors-closed caches.
- Normal MTR vehicles should keep their complete parts because the renderer no longer globally drops arbitrary render buckets.
- The sedan no longer renders the accidental flipped duplicate copy.
- Traffic vehicles now look ahead across route segments for occupied track sections.
- Vehicles should slow down or wait before entering a full next track instead of driving into a queue.
- Same-segment and route-lookahead spacing include braking-distance caps.
- Configured spawning no longer falls back to random bootstrap vehicles when no enabled spawn/despawn connector route exists.
- New worlds with no Traffic Spawn/Despawn Tracks should not randomly spawn sedans.
- Intersection areas can be created from the dashboard map.
- Existing intersections are listed and selectable.
- Intersections can be enabled or disabled.
- Intersection node auto-detection can be toggled.
- Intersection detection and manual node handling use X/Z containment more reliably, avoiding the previous Y-level mismatch.
- Detected IN and OUT nodes are shown on the dashboard map.
- Node labels include IN/OUT direction and node numbers.
- Signal groups are displayed as clickable rows.
- Signal groups can be selected, removed, reordered, and assigned IN nodes.
- Multiple IN nodes can belong to more than one signal group.
- Selected group nodes and selected nodes are highlighted on the map.
- Group green duration can be adjusted.
26.5.A02 traffic bridge status
==============================
- MTR route vehicles now use a transient mixin bridge instead of saved MTR BlockRails/SignalModification state.
- The rejected visible-signal approach was removed from the active behavior.
- The bridge injects into MTR Vehicle.railBlockedDistance(...) so MTR route vehicles can see:
- red MTA intersection entries
- active MTA spawned vehicles on matching route segments
- MTR route checks now use route-direction rail IDs instead of ordered endpoint pairs.
- Graph rail IDs are direction-aware via MTR TwoPositionsBase.getHexIdRaw(from, to).
- This fixes the earlier issue where MTR vehicles stopped one whole track before the actual obstacle/intersection.
- MTR Vehicle.simulate(...) now records transient vehicle occupancy for the current tick.
- MTA vehicles now query the transient MTR occupancy cache and treat MTR route vehicles as moving spacing obstacles.
- The MTR occupancy mixin uses VehicleSchemaAccessor for inherited railProgress/speed fields.
- This fixes the 19:17 and 19:20 server crashes caused by shadowing inherited fields directly on Vehicle.
- The occupancy cache is pruned after a short stale window so old MTR positions do not remain as permanent obstacles.
Changes since the previous summary
==================================
- Updated project version output to 26.5.A02.
- Added VehicleMixin for MTR route vehicle blocking/occupancy integration.
- Added VehicleSchemaAccessor to safely read MTR VehicleSchema railProgress and speed.
- Registered VehicleMixin and VehicleSchemaAccessor in mtr-traffic-addon.mixins.json.
- Added TrafficManager.mtrVehicleBlockedDistance(...) for MTR vehicles seeing MTA signals and vehicles.
- Added TrafficManager.recordMtrVehicle(...) and closestMtrVehicleObstacle(...) for MTA vehicles seeing MTR vehicles.
- Added MTR obstacle spacing to TrafficSpacingResolver.
- Changed MtrGraphBuilder rail IDs to be direction-aware raw MTR rail IDs.
- Removed automatic MTR resource floor/doorway Y anchoring from MtrVehicleResourceRenderer.
- Raised the route render origin back to pathSample.y() by removing the old -0.25 vehicle Y offset.
- Set bundled sedan modelYOffset to 0.0 in both embedded resources and the resourcepack copy.
- Kept the sedan resource embedded in src/main/resources so it is part of the mod jar.
- Preserved the sedan resourcepack copy for authoring/export only.
- Confirmed build output:
D:\mta\build\libs\mtr-traffic-addon-26.5.A02.jar
Resource pack authoring rules learned
=====================================
- Road vehicles should usually have exactly one body model in models.
- Do not add bogie1Models or bogie2Models for road cars unless they are real separate visible bogie/wheel models.
- Do not point bogie models at the full vehicle body.
- Do not use an empty bogie properties file as a hiding mechanism.
- For a normal body part, use positions and leave positionsFlipped empty.
- Do not put [{}] in both positions and positionsFlipped for the same part.
- Use condition NORMAL, renderStage EXTERIOR, and type NORMAL for always-visible exterior body geometry.
- Keep visual IDs in traffic_vehicles/*.json matched to vehicle IDs in mtr_custom_resources.json.
- After embedding resources in the jar, remove old external copies from .minecraft/resourcepacks to avoid stale overrides.
- Per-model modelYOffset is safer than deriving road-vehicle height from MTR floor/doorway metadata.
Release
26.5.A01
19 May 2026
MTR Traffic Addon - Status Summary
Updated: 2026-05-19
Current working state
=====================
- The mod builds successfully as a Fabric 1.20.1 addon for Minecraft Transit Railway 4.0.4.
- The local MTR jar is included as a Gradle dependency.
- The project builds with Java 23 via:
JAVA_HOME=C:\Program Files\Java\jdk-23
- The Traffic Dashboard item opens the client dashboard UI.
- Spawn and despawn traffic connectors are listed in the dashboard.
- Spawn/despawn connectors show position, enabled state, active vehicle count, and route status.
- Connector routes can be refreshed from the dashboard.
- Active traffic vehicles can be cleared from the dashboard.
- Spawn connectors can open the Vehicle Pool screen.
- Vehicle pools can select available MTR vehicle resources for each spawn connector.
- The standalone sedan resource pack was stabilized, then embedded into the mod jar.
- The current jar contains the sedan MTR resources under:
assets/mtr/mtr_custom_resources.json
assets/mtr_traffic_addon_sedan/...
data/mtr_traffic_addon_sedan/traffic_vehicles/...
- Players no longer need to install the sedan resource pack separately when using the current mod jar.
- Built-in sedan visual IDs:
mta_sedan
mta_sedan_white
mta_sedan_green
mta_sedan_red
- The sedan model now renders at the correct vertical offset.
- The sedan no longer renders the accidental flipped duplicate copy.
- The MTR vehicle resource renderer queues one MTR render cache at a time instead of mixing normal and doors-closed caches.
- Normal MTR vehicles should keep their complete parts because the renderer no longer globally drops arbitrary render buckets.
- Legacy visual ID mtr_traffic_addon_sedan:sedan is remapped to mta_sedan for compatibility with older spawned/debug state.
- Traffic vehicles now look ahead across route segments for occupied track sections.
- Vehicles should slow down or wait before entering a full next track instead of driving into a queue.
- Same-segment and route-lookahead spacing now include braking-distance caps.
- Intersection areas can be created from the dashboard map.
- Existing intersections are listed and selectable.
- Intersections can be enabled or disabled.
- Intersection node auto-detection can be toggled.
- Detected IN and OUT nodes are shown on the dashboard map.
- Node labels include IN/OUT direction and node numbers.
- Signal groups are displayed as clickable rows.
- Signal groups can be selected, removed, reordered, and assigned IN nodes.
- Multiple IN nodes can belong to the same signal group.
- Selected group nodes and selected nodes are highlighted on the map.
- Group green duration can be adjusted.
Changes since the previous summary
==================================
- Added a dedicated sedan MTR vehicle resource set with model, textures, model properties, and traffic vehicle definitions.
- Added sedan variants using the same model with different textures:
default, white, green, and red.
- Fixed sedan vertical placement by using modelYOffset -0.75 in the MTR model properties.
- Removed the old custom renderer path from the active vehicle rendering flow.
- Restored rendering through MTR vehicle resources instead of drawing custom debug geometry.
- Fixed blue-box placeholder behavior by using valid MTR visual IDs and keeping a legacy ID remap.
- Fixed duplicate sedan rendering caused by an invalid position definition:
positions: [{}]
positionsFlipped: []
The previous broken form had [{}] in both arrays, which caused one normal and one flipped render.
- Removed experimental empty bogie definitions from the sedan resource pack.
- Confirmed the current sedan definitions have one body model and zero bogie models.
- Embedded the sedan assets and traffic definitions into src/main/resources so they are part of the mod jar.
- Kept resourcepacks/mtr-traffic-addon-sedan as a source/export/testing copy, not as a required user install.
- Added docs/RESOURCE_PACK_AUTHORING.md with practical MTR resource-pack authoring rules.
- Updated README.md to document that sedan resources are now built in.
- Updated the sedan pack README to explain its new role and the important authoring constraints.
- Improved traffic spacing so vehicles scan up to 80 meters ahead across route segments.
- Added braking-distance speed caps to reduce pileups when the next track is occupied.
Resource pack authoring rules learned
=====================================
- Road vehicles should usually have exactly one body model in models.
- Do not add bogie1Models or bogie2Models for road cars unless they are real separate visible bogie/wheel models.
- Do not point bogie models at the full vehicle body.
- Do not use an empty bogie properties file as a hiding mechanism.
- For a normal body part, use positions and leave positionsFlipped empty.
- Do not put [{}] in both positions and positionsFlipped for the same part.
- Use condition NORMAL, renderStage EXTERIOR, and type NORMAL for always-visible exterior body geometry.
- Keep visual IDs in traffic_vehicles/*.json matched to vehicle IDs in mtr_custom_resources.json.
- After embedding resources in the jar, remove old external copies from .minecraft/resourcepacks to avoid stale overrides.
Known limitations and remaining work
====================================
- The default Java environment still points to Java 17 on this machine, while the current Fabric Loom setup needs Java 21 or newer. JAVA_HOME is currently set manually to Java 23 for builds.
- The dashboard still has many text-heavy controls and could be made more compact.
- The group list needs scrolling or pagination for intersections with many signal groups.
- Removing a signal group is immediate; confirmation or undo would reduce accidental deletion.
- Node assignment works, but the UI could make the IN-node-only rule clearer.
- OUT nodes are shown and numbered, but their role could be clearer in the UI.
- Map labels can overlap when nodes are close together.
- The intersection editor could be improved with more direct drag/drop or node-to-group interactions.
- Signal group names are generated and still cannot be renamed from the dashboard.
- The dashboard does not show a live preview of the currently green signal group.
- Intersection area drawing works, but first/second corner feedback could be clearer.
- Vehicle pool management still needs better search, filtering, and missing-resource warnings.
- Connector lists need sorting and filtering for larger worlds.
- More in-game validation messages are needed for missing routes, empty vehicle pools, and signal groups without IN nodes.
- The mod should be tested in a larger world with many connectors, intersections, and active vehicles.
- Multiplayer synchronization and permissions still need dedicated testing.
- The saved data format should be reviewed before release to reduce future world-breaking changes.
- Automated tests are not present. Core routing, spacing, signal, and resource ID logic would benefit from unit tests.
- A clean release test should be run with only Fabric API, MTR, and this addon installed.
Build verification
==================
Last verified command:
JAVA_HOME=C:\Program Files\Java\jdk-23
.\gradlew.bat build
Result:
BUILD SUCCESSFUL
Current jar:
D:\mta\build\libs\mtr-traffic-addon-26.5.ALPHA.jar
Release
26.5.Alpha
18 May 2026
MTR Traffic Addon - Status Summary
What works
==========
- The mod is set up as a Fabric 1.20.1 addon for Minecraft Transit Railway.
- The local MTR jar is included as a Gradle dependency.
- The Traffic Dashboard item opens a client UI with a map view.
- Traffic connector entries are listed in the dashboard.
- Spawn and despawn connectors show their position, enabled state, active vehicle count, and route status.
- Spawn connectors can open the Vehicle Pool screen.
- The Vehicle Pool screen can display available MTR vehicles and selected vehicles for a spawn connector.
- Connector routes can be refreshed from the dashboard.
- Active traffic vehicles can be cleared from the dashboard.
- Intersection areas can be created from the dashboard by drawing an area on the map.
- Existing intersections are listed and can be selected.
- Intersections can be enabled or disabled.
- Intersection node auto-detection can be toggled.
- Detected intersection nodes are shown on the map.
- Node labels are shown on the selected intersection map view, using IN and OUT labels with node numbers.
- Signal groups are displayed as clickable rows.
- A signal group can be selected directly from the group list.
- A signal group can be removed with the small x button next to its row.
- IN nodes can be assigned to the selected signal group.
- Multiple IN nodes can be assigned to the same signal group, so two lanes in the same direction can go green together.
- Selected group nodes are highlighted on the map.
- The selected node is highlighted on the map.
- Group green duration can be adjusted.
- Signal groups can be reordered.
- The project builds successfully when Gradle is run with Java 23.
What needs improvement or repair
================================
- The default Java environment points to Java 17, but the current Fabric Loom version requires Java 21 or newer. JAVA_HOME should be updated, or Gradle should be configured to use a Java 21+ toolchain.
- The dashboard still uses many text buttons. It is clearer than before, but it could benefit from a more compact control layout and stronger visual hierarchy.
- The group list currently shows only a limited number of rows. If an intersection has many groups, scrolling or pagination should be added.
- The x button deletes a group immediately. A confirmation step or undo would reduce accidental data loss.
- Node assignment is functional, but the UI should make it even clearer that only IN nodes can be assigned to signal groups.
- OUT nodes are displayed and numbered, but their role could be explained better in the UI.
- The map node labels can overlap when nodes are close together. Label placement should be improved to avoid clutter.
- The intersection editor still depends on manual clicking and buttons. A drag-and-drop or direct node-to-group interaction would be easier for users.
- Group names are generated automatically and cannot be renamed from the dashboard yet.
- The dashboard does not currently show a live signal preview of which group is green at the current server tick.
- The intersection area drawing workflow works, but it could use clearer visual feedback for the first and second corner.
- Vehicle pool management works, but search, filtering, and missing vehicle warnings could be made more user-friendly.
- The connector list could use sorting and filtering, especially for worlds with many connectors.
- More in-game validation messages are needed when a route is missing, a vehicle pool is empty, or a group has no IN nodes.
- README documentation is minimal and should be expanded with setup, usage, screenshots, and troubleshooting.
- The mod should be tested in a larger world with many connectors, intersections, and active vehicles.
- The mod should be tested in multiplayer to confirm server-client synchronization and permissions.
- The saved data format should be reviewed before release to avoid breaking worlds later.
- Automated tests are not present. Core traffic routing and signal group logic would benefit from unit tests.
- A release build should be checked in a clean Minecraft instance with only Fabric API, MTR, and this addon installed.
Build note
==========
The project currently builds with:
JAVA_HOME=C:\Program Files\Java\jdk-23
The default Java 17 runtime is not sufficient for the configured Fabric Loom version.
No discussion yet. Start the first thread for this mod.