Links
Tags
Creators
Details
1.0-1.21.1
Compatibility
Changes
🚂 Create: Railway Evolution v1.0 — [TRAIN AI, DEADLOCK & NAVIGATION FIXES]
This update focuses on resolving several critical issues in Railway Evolution's train AI, including false obstacle detection, junction deadlocks, trains getting stuck after world loading, and navigation recovery failures.
After investigating both the mod's codebase and Create's source code, I identified the underlying causes of these problems and implemented targeted fixes instead of relying on temporary workarounds.
/ Это обновление посвящено исправлению нескольких критических проблем ИИ поездов в Railway Evolution: ложного обнаружения препятствий, взаимных блокировок на перекрёстках, застревания поездов после загрузки мира и сбоев восстановления навигации.
После детального изучения кодовой базы мода и исходников Create мне удалось выявить причины этих проблем и внести целевые исправления вместо использования временных обходных решений.
🙏 An Apology & Update from the Developer / Извинения и новости от разработчика
First of all, I want to sincerely apologize for being absent for almost two months without providing proper updates. I know that many of you have been waiting for news, fixes, and improvements, and I'm sorry for the long silence.
The main reasons for my absence were my studies and moving to a new Linux distribution. This transition took time away from development, and I wasn't able to communicate with the community as consistently as I would have liked.
Despite the delay, I haven't abandoned Railway Evolution. I've been working on understanding the deeper issues affecting train behavior and making the AI more reliable.
Thank you to everyone who continued supporting the project, reporting bugs, and waiting patiently. With over 11,000 downloads, Railway Evolution has grown beyond a small personal project, and I don't take your support for granted.
I'm sorry for keeping you waiting, and thank you for staying with the project. ❤️
/ Прежде всего, я хочу искренне извиниться за то, что меня почти два месяца не было и я не публиковал нормальных обновлений о разработке. Я понимаю, что многие ждали новостей, исправлений и улучшений, и мне действительно жаль, что так долго не выходил на связь.
Основными причинами моего отсутствия стали учёба и переход на новый дистрибутив Linux. На адаптацию к новой системе и решение сопутствующих задач ушло немало времени, поэтому уделять разработке и общению с сообществом столько внимания, сколько хотелось бы, у меня не получалось.
Несмотря на задержку, я не забросил Railway Evolution. Я продолжил разбираться в глубинных проблемах поведения поездов, чтобы сделать ИИ надёжнее.
Спасибо всем, кто продолжал поддерживать проект, сообщать об ошибках и терпеливо ждать. У Railway Evolution уже более 11 тысяч скачиваний, и я прекрасно понимаю, что за этой цифрой стоят реальные игроки, которые используют мой мод в своих мирах. Я не воспринимаю вашу поддержку как должное.
Простите за долгое ожидание и спасибо, что остаетесь с проектом! ❤️
✨ Key Fixes & Improvements / Основные исправления и улучшения
1. 🛤️ False Obstacle Detection & Parallel Track Awareness / Ложные препятствия и распознавание параллельных путей
Trains should no longer stop because of unrelated trains on nearby tracks.
Previously, the main graphWalkScan scanner could confirm that the route ahead was clear, only for the fallback StoppedTrainRegistry or MovingTrainRegistry scanner to detect an unrelated train nearby and incorrectly classify it as an obstacle.
The fallback scanners used a broad detection angle and a radius of up to 64 blocks without sufficiently checking whether the detected train was actually on the same track or how far it was offset sideways. This meant a train parked on a parallel track, station platform, or dead-end could cause an unnecessary stop on a completely clear route.
What changed:
- Track-Aware Detection: Added stricter checks to
StoppedTrainRegistryandMovingTrainRegistryto distinguish relevant obstacles from trains on unrelated tracks. - Graph Scan Priority: When
graphWalkScanconfirms that the route is clear, trains on other tracks are ignored by the fallback detection logic. - Lateral Distance Filtering: Added perpendicular-distance checks using
perpDistandcurrentBeamToleranceto reduce false positives. - Clearer Routes, Fewer Unnecessary Stops: Nearby trains are less likely to interfere with traffic on parallel lines and station platforms.
/ Поезда больше не должны останавливаться из-за посторонних составов на соседних путях.
Раньше основной сканер graphWalkScan мог подтверждать, что путь свободен, но резервные сканеры StoppedTrainRegistry и MovingTrainRegistry обнаруживали другой поезд поблизости и ошибочно считали его препятствием.
Резервное обнаружение использовало радиус до 64 блоков и широкий угол обзора, при этом недостаточно учитывалось, находится ли состав на том же пути и насколько сильно он смещён в сторону. Поэтому поезд на соседней колее, платформе станции или в тупике мог заставить наш состав остановиться посреди совершенно свободного перегона.
Что изменено:
- Проверка принадлежности к пути: Добавлены более строгие проверки в
StoppedTrainRegistryиMovingTrainRegistry. - Приоритет сканирования графа: Если
graphWalkScanподтверждает, что маршрут свободен, резервный сканер игнорирует поезда на других путях. - Фильтрация бокового расстояния: Добавлена проверка
perpDistс учётомcurrentBeamTolerance, уменьшающая количество ложных препятствий. - Меньше ненужных остановок: Поезда на параллельных колеях и соседних платформах реже мешают движению составов по свободному маршруту.
2. 🚦 Junction Deadlock Prevention / Устранение взаимных блокировок на перекрёстках
The train that wins junction arbitration must actually be able to move.
Previously, when two trains approached a junction, the AI could correctly determine which train had the right of way but fail to restore the winning train's throttle or transition it back to the CRUISING state. The winner was granted permission to proceed but could remain stationary.
What changed:
- Winner Recovery: When
effectiveWindetermines that a train wins the junction conflict, the controller restores throttle, wakes Create's navigation, and activatesCRUISING. - Junction Reservation Protection: Trains with valid junction reservations receive improved protection against unnecessary emergency stops when passage is safe.
- Improved Priority Tie-Breaking: Junction reservations and distance to the switch help resolve conflicts between trains with equal priorities.
- Extended Yield Timeout: Yielding can remain active for up to 300 ticks (15 seconds), or until the winning train moves more than 30 blocks away.
- Bypass Ignore Coordination: The yielding train can temporarily configure the winner to ignore it during bypass detection, reducing unnecessary braking near the junction.
/ Поезд, получивший право проезда перекрёстка, теперь корректно восстанавливает движение.
Раньше ИИ мог правильно определить победителя в конфликте на стрелке, но не восстановить тягу и не перевести состав обратно в состояние CRUISING. Поезд получал разрешение на проезд, но продолжал стоять.
Что изменено:
- Восстановление движения победителя: При срабатывании
effectiveWinвосстанавливается тяга, пробуждается навигация Create и активируется состояниеCRUISING. - Защита резерваций перекрёстков: Составы с действующей резервацией лучше защищены от ненужных аварийных остановок, если проезд безопасен.
- Разрешение равных приоритетов: Учитываются резервация перекрёстка и расстояние до стрелки.
- Увеличенное время уступки: До 300 тиков (15 секунд) либо до удаления победившего состава более чем на 30 блоков.
- Координация обнаружения препятствий: Временно исключается лишнее торможение перед перекрёстком из-за состава, который уже уступает дорогу.
3. 🔄 Stuck Trains After World Loading / Застревание поездов после загрузки мира
Fixed a recovery issue where trains could load with zero throttle and never start moving again.
Create saves train parameters, including throttle and target speed, to NBT. If an AI-controlled train was stopped when the world was saved, its throttle could remain at 0.0 after loading.
The AI controller could initialize in CRUISING, even though the train had no throttle. Since the old recovery logic primarily restored throttle when leaving WAIT_FOR_CLEARANCE or YIELDING, a train already in CRUISING could remain permanently stationary despite having a clear route.
What changed:
- Automatic Throttle Recovery:
handleNoObstacle()now checks for insufficient throttle inCRUISINGwhen the route ahead is clear. - Navigation Wake-Up: If a train is stationary despite having an active schedule, the controller restores throttle and calls
wakeCreateNavigation(). - Initial Binding Recovery:
bindCreateTrain()now removes throttle lock conditions during the train's initial binding after world or server startup. - More Reliable Restarts: Trains have an improved recovery path when their saved state would otherwise prevent them from moving.
/ Исправлена проблема, из-за которой поезда после загрузки мира могли оставаться с нулевой тягой.
Create сохраняет параметры поездов, включая тягу и целевую скорость, в NBT. Если ИИ остановил состав перед сохранением мира, после загрузки тяга могла остаться равной 0.0.
При этом контроллер ИИ мог сразу перейти в состояние CRUISING, хотя поезд фактически не имел тяги. Старая логика восстановления работала преимущественно при выходе из WAIT_FOR_CLEARANCE или YIELDING. Поэтому состав в состоянии CRUISING мог бесконечно стоять даже при свободном пути.
Что изменено:
- Автоматическое восстановление тяги:
handleNoObstacle()проверяет состояние тяги вCRUISING, если впереди свободно. - Пробуждение навигации: Если поезд стоит при активном расписании, восстанавливается тяга и вызывается
wakeCreateNavigation(). - Восстановление при первоначальной привязке:
bindCreateTrain()снимает блокировку тяги при первоначальной привязке состава после запуска мира или сервера. - Более надёжный запуск: Улучшен механизм восстановления поездов, чьё сохранённое состояние мешает возобновлению движения.
4. 🛠️ Blocked Train Recovery & Navigation Guards / Восстановление заблокированных поездов
Stopped trains can now recover instead of being trapped by a permanent safety guard.
Create's TravellingPoint.blocked flag can be set when a train's travelling point reaches the end of a rail. Create normally clears this flag during travel(), but a stationary train may never call that movement logic.
Previously, Guard 2 could repeatedly call forceStop() and return early on every tick. Since the train was already stationary, the flag could remain set indefinitely, preventing recovery logic such as reversing or switching tracks from executing.
What changed:
- Movement-Aware Guard: Guard 2 now activates only while the train is actively moving forward (
currentSpeed > 0.05). - Recovery Logic Preserved: When a train is already stopped, the guard no longer blocks the entire AI tick, allowing reversing and track-switching logic to run.
- Safer Navigation Recovery: Early recovery attempts restore throttle and wake Create's navigation instead of immediately destroying the current route.
- Clearance Improvements: Additional checks prevent trains on parallel tracks or already-yielding trains from unnecessarily blocking departure.
/ Исправлена логика защитного механизма, которая могла навсегда блокировать восстановление поезда.
Флаг TravellingPoint.blocked в Create может устанавливаться, когда точка движения достигает конца рельса. Обычно Create сбрасывает этот флаг во время travel(), однако полностью остановленный поезд может больше не вызывать эту логику движения.
Раньше Guard 2 мог каждый тик вызывать forceStop() и досрочно завершать выполнение логики ИИ. Поскольку поезд уже стоял, флаг мог оставаться активным бесконечно, блокируя восстановление движения, реверс и переключение пути.
Что изменено:
- Проверка фактического движения: Guard 2 срабатывает только при активном движении вперёд (
currentSpeed > 0.05). - Сохранение логики восстановления: Если поезд уже остановлен, защитный механизм больше не блокирует весь тик ИИ, позволяя выполнить реверс или переключение пути.
- Бережное восстановление навигации: На первых попытках восстановления тяга возвращается, а навигация Create пробуждается без немедленного сброса маршрута.
- Улучшенные проверки свободного пути: Поезда на соседних путях и уже уступающие составы не должны без необходимости блокировать отправление.
🔧 Technical Summary / Техническая сводка
- Improved player-control detection and train priority registration.
- Refined virtual block coordination and junction conflict resolution.
- Added track-aware fallback obstacle detection and lateral-distance filtering.
- Fixed missing throttle restoration after junction arbitration.
- Added throttle recovery for trains loaded with zero throttle.
- Improved initial train binding after world and server startup.
- Prevented stationary trains from being trapped by the
createBlockedsafety guard. - Improved navigation wake-up and non-destructive stuck-train recovery.
/ Краткий список технических изменений:
- Улучшено обнаружение управления поездом со стороны игрока и регистрация приоритетов.
- Доработаны виртуальные блокировки и разрешение конфликтов на перекрёстках.
- Добавлены проверки принадлежности к пути и бокового расстояния при обнаружении препятствий.
- Исправлено отсутствие восстановления тяги после определения победителя на стрелке.
- Добавлено восстановление тяги у поездов, загруженных с нулевым значением.
- Улучшена первоначальная привязка поездов после запуска мира и сервера.
- Исправлена блокировка логики ИИ у остановленных поездов из-за защитного механизма
createBlocked. - Улучшено пробуждение навигации и восстановление застрявших составов без принудительного сброса маршрута.
🔮 What's Next? / Что дальше?
Railway Evolution aims to make large automated Create railway networks easier to operate without relying on conventional signals. This update addresses several underlying AI issues and improves how trains detect obstacles, negotiate junctions, and recover from unexpected stopped states.
I will continue improving the mod and appreciate any bug reports, feedback, and real-world testing on complex railway networks.
Thank you for your patience, support, and for being part of Railway Evolution's journey.
/ Цель Railway Evolution — упростить управление большими автоматизированными железнодорожными сетями Create без необходимости использовать обычные сигналы. Это обновление устраняет ряд глубинных проблем ИИ и улучшает обнаружение препятствий, взаимодействие на перекрёстках и восстановление после неожиданных остановок.
Я продолжу развивать мод и буду благодарен за сообщения об ошибках, отзывы и тестирование на сложных железнодорожных сетях.
Спасибо за терпение, поддержку и за то, что вы являетесь частью истории Railway Evolution!
Happy railroading! 🚂❤️
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:VcPwJKGX:MSCQuGlb"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:VcPwJKGX:MSCQuGlb"
}

