Tags
Creators
Details
1.0.1
Compatibility
Changes
[CHANGELOG] Version: 1.0.1 (NeoForge)
Complete client/server decoupling for NeoForge 1.21.1 — first stable build that runs on dedicated servers without a single crash, achieving full feature parity with the Forge branch using native modern APIs.
Core Architecture & Server Safety:
-
Client/Server Isolation Wall — Every GUI component, renderer, and projection handler is now strictly confined to the client side, ensuring the server never attempts to load Screen and eliminating startup crashes entirely.
-
Proxied Screen Opening — A lightweight client-side opener class safely handles book interface creation without leaking client types into common paths, removing all BootstrapMethodError threats.
-
Fixed AutomaticEventSubscriber Scanning — All client-only subscribers (commands, key mappings, GUI events) now explicitly declare value = Dist.CLIENT, preventing the NeoForge built-in scanner from loading them on dedicated servers.
-
FMLEnvironment-Aware Guards — Invocations from shared items are wrapped with clean FMLEnvironment.dist.isClient() checks, acting as a final safety net against accidental server-side classloading.
-
Modern Network Layer — The quest synchronization system has been migrated to CustomPacketPayload and PayloadRegistrar, ensuring seamless multiplayer sync without legacy channel overhead.
What This Means for NeoForge Community:
✅ NeoForge 1.21.1 servers launch with Guide without any errors — full dedicated server support is here.
✅ Absolute feature parity with the Forge branch — everything that works on the client works here, including holographic projections, interactive mob previews, and dynamic audio.
✅ Ready for large modpacks and public servers; the mod is no longer client-only and can be safely distributed.
Optional dependencies
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:ubKIGRC6:MHw6gW4C"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:ubKIGRC6:MHw6gW4C"
}

