Tags
Creators
Details
1.5.0
Compatibility
Changes
Journey Mode v1.5.0 - Multi-Loader Architecture
Release Date: October 31, 2025
šļø Major Architectural Changes - Phase 2 Complete
Journey Mode has been completely restructured with a multi-loader architecture, setting the foundation for future Fabric and Forge ports!
Architecture Highlights
- ā 90/10 Split: 90% of code is now platform-agnostic, 10% loader-specific
- ā Common Module: Pure Java code with zero loader dependencies
- ā Platform Abstraction: Clean separation between game logic and platform APIs
- ā Service Loader Pattern: Automatic platform detection at runtime
- ā Future-Proof: Ready for Fabric and Forge ports in Phase 3
Project Structure
journey-mode/
āāā common/ # Platform-agnostic code (90%)
ā āāā Core logic: JourneyData, ConfigHandler, ThresholdCalculator, UnlockLogic
āāā neoforge-1.21.1/ # NeoForge-specific wrappers (10%)
ā āāā Platform implementation, GUI, networking, events
š Bug Fixes
Fixed: Deposit Slot Visibility in Journey Tab
- Problem: Deposit slot was visible and clickable in the Journey tab
- Solution: Created
ConditionalSlotclass withisActive()override - Result: Slot is now properly hidden and disabled when Journey tab is active
- Impact: Prevents accidental item placement in wrong tab
Fixed: AttachmentType Serialization Error
- Problem:
AttachmentType.Builder$1.buildExceptionerror on player data load - Solution: Rewrote Codec using
Codec.STRING.xmap()for proper JSON serialization - Result: Player data now saves and loads correctly without errors
- Impact: No more crashes or data loss on player login
šÆ Benefits for Users
- Same Features: All functionality from v1.4.0 is preserved
- Better Stability: Fixed critical serialization and UI bugs
- Future Updates: Easier to add new features and support more loaders
- Cleaner Code: More maintainable and reliable
š§ Technical Details
Common Module Components
JourneyData.java- Pure Java data model with Gson serializationConfigHandler.java- Platform-agnostic config managementThresholdCalculator.java- Recipe depth calculation logicUnlockLogic.java- Business logic for deposits and unlocksPlatformHelper.java- Platform abstraction interface
NeoForge Platform Components
NeoForgeDataHandler.java- AttachmentType wrapper with fixed CodecNeoForgePlatformImpl.java- Platform implementationConditionalSlot- Tab-aware slot with enable/disable logic
š¦ Installation
Requirements
- Minecraft 1.21.1
- NeoForge 21.1.72 or later
- Java 21 or later
Steps
- Download
journeymode-1.5.0.jarfrom this release - Place in your
.minecraft/modsfolder - Launch Minecraft with NeoForge 1.21.1
ā¬ļø Upgrading from v1.4.0
- ā Drop-in replacement - No changes needed
- ā Config files - Fully compatible
- ā Player data - Automatically migrates
- ā All features - Work exactly as before
š What's Next?
Phase 3: Multi-version support (Fabric and Forge ports)
- Fabric 1.21.1, 1.20.1, 1.19.2, 1.16.5
- Forge 1.20.1, 1.19.2, 1.16.5, 1.12.2
- NeoForge 1.20.1
The new architecture makes these ports much easier to implement!
š Full Changelog
Added
- Multi-loader architecture with common + platform modules
ConditionalSlotclass for tab-aware slot control- Service loader pattern for platform detection
- Proper Gson-based serialization in common module
Fixed
- Deposit slot visibility in Journey tab (now properly hidden)
- AttachmentType Codec serialization errors
- Item slot interaction in wrong tab
Changed
- Project structure reorganized into multi-module Gradle project
- Core logic moved to platform-agnostic common module
- NeoForge-specific code isolated to platform module
- Codec implementation rewritten for reliability
Technical
- Build output:
neoforge-1.21.1/build/libs/journeymode-1.5.0.jar - Common module uses only Java + Gson dependencies
- Platform detection via
META-INF/services/ - Cleaner separation of concerns
Questions or issues? Report them on the GitHub Issues page!
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:OMRJLjO7:rKlHiX8m"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:OMRJLjO7:rKlHiX8m"
}

