Links
Tags
Creators
Details
1.0.8
Compatibility
Changes
🚂 Railway Evolution v1.0.8 — [CORE PERFORMANCE & MEMORY OVERHAUL]
This update delivers critical performance optimizations and garbage-collection improvements, targeting high-frequency tick loops across core registries and controllers. / Это обновление приносит критические оптимизации производительности и снижение нагрузки на сборщик мусора (GC), затрагивая высокочастотные тиковые циклы в ключевых реестрах и контроллерах.
To be completely transparent with the community: profiling heavy networks revealed hidden allocation bottlenecks during high-frequency checks. Version 1.0.8 aggressively eliminates transient object spamming and redundant string operations per tick. / Буду честен с сообществом: профилирование тяжелых сетей выявило скрытые узкие места выделения памяти во время частых проверок. Версия 1.0.8 агрессивно убирает мусор из временных объектов и избыточные операции со строками за каждый тик.
Version 1.0.8 eliminates per-tick array allocations, caches immutable identifiers, and optimizes collection sorting, making Railway Evolution faster and lighter on server resources. / Версия 1.0.8 полностью убирает выделение массивов за каждый тик, кэширует неизменяемые идентификаторы и оптимизирует сортировку коллекций, делая Railway Evolution быстрее и легче для серверных ресурсов.
✨ Key Features & Improvements / Ключевые изменения и улучшения:
-
Zero-Allocation Coordinate Lookups / Нулевые аллокации координат:
TrainAIController.java:getNodeXZ()/getNodeXYZ()no longer allocate newdouble[]arrays every tick, relying instead on an internal reusable buffer_nodeCoordBuf. /TrainAIController.java:getNodeXZ()/getNodeXYZ(): Устранена аллокация массивовnew double[]каждый тик — теперь используется внутренний переиспользуемый буфер_nodeCoordBuf. -
Identifier Caching & CPU Saving / Кэширование идентификаторов: Precomputed
final String shortIdinside the constructor, removing over 70 costlytrainId.toString().substring(0, 8)calls per tick. / ПредрассчитываетсяshortId: Полеfinal String shortIdпредрассчитывается один раз в конструкторе, убраны 70+ вызововtrainId.toString().substring(0, 8)за тик. -
Lambda-Free Registry Sorting / Сортировка без лямбд в реестрах:
StoppedTrainRegistry.javaandMovingTrainRegistry.java: Distance sorting ingetNearby()has been migrated to a staticDistanceComparatorinstance, eliminating anonymous lambda allocations. /StoppedTrainRegistry.javaиMovingTrainRegistry.java: Сортировка по дистанции вgetNearby()переведена на статический экземплярDistanceComparator(устранены анонимные лямбды при сортировке). -
Optimized Segment Keys / Оптимизированные ключи сегментов:
VirtualBlockSystem.java: String concatenation inmakeSegmentKey()replaced with a lightweightrecord SegmentKey(int dimHash, long posA, long posB)utilizing packed coordinates viaBlockPos.asLong(). /VirtualBlockSystem.java: Конкатенация строк вmakeSegmentKey()заменена на компактныйrecord SegmentKey(int dimHash, long posA, long posB)с упаковкой координат черезBlockPos.asLong(). -
Reusable Safety Evaluations / Переиспользуемые структуры безопасности:
SafetyManager.java: Eliminatednew SafetyResult(...)allocations during safety evaluations by utilizing areusable.set(...)pattern. /SafetyManager.java: Устранены аллокацииnew SafetyResult(...)при оценке безопасности — используется переиспользуемыйreusable.set(...). -
API & State Machine Refinements / Доработки состояний и API:
TrainStateId.java&TrainActuator.java: AddedSTOPPEDto theTrainStateIdenum and standardized theITrainHandleinterface implementation inTrainActuator. /TrainStateId.javaиTrainActuator.java: ДобавленSTOPPEDв enumTrainStateId. Приведена к стандарту имплементация интерфейсаITrainHandleвTrainActuator.
🔮 What's Next / Что дальше:
With these low-level performance bottlenecks crushed, tick times are tighter than ever, ensuring smoother sessions for massive automated networks. Thank you for your continued support and bug reports! / Благодаря устранению этих низкоуровневых узких мест производительности, время тиков стало стабильнее, обеспечивая плавную работу масштабных автоматизированных сетей. Спасибо за вашу поддержку и багрепорты! 🚀
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:FKZaGNay"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:VcPwJKGX:FKZaGNay"
}

