1.1.3
Compatibility
Required content
Changes
What's new Fixes Surrendered spell Potency enchantment no longer being overwritten AllySurrendered no longer replaces the weapon granted by the spell when the owner has no Potency enchantment on their equipment. The weapon is only rewritten when a positive Potency level is present, and Sharpness is preserved at the higher of the two values.
Surrendered summons no longer dying within seconds duration was computed as spellStat.getDuration(), which defaults to 0, causing lifeTicks = 0. Duration now starts at 1 + spellStat.getDuration(), and the Duration enchantment adds levels on top without double-dipping.
MOVEMENT_SPEED config values now actually applied Ten servant classes defined movement-speed config entries but never applied them. All are now correctly applied in setConfigurableAttributes().
AlchemistServant no longer missing its MOVEMENT_SPEED attribute The config entry existed but the attribute was never registered. Both the default supplier and setConfigurableAttributes() now include it.
MarauderServant now has a configurable attribute application The class had no setConfigurableAttributes() at all. It now applies HP, attack damage, follow range, and movement speed from config.
InquisitorServant no longer reads server config in its constructor The constructor runs on both sides; shield block limit and stun duration are now hardcoded defaults there and refreshed server-side.
NecromancerServant client crash / desync fixed getMaxLevel() is no longer a static method reading a server-only config. Scale bonus is now synced via a new DATA_SCALE_BONUS field so client dimensions match the server hitbox. hurt() and setNecroLevel() no longer read server config or mutate attributes on the client.
Changes goety_invasion-servants.toml is now a SERVER config Previously COMMON. The file is now generated at <world>/serverconfig/goety_invasion-servants.toml and is managed by the server operator. goety_invasion-spells.toml remains COMMON since the client UI needs spell costs and cooldowns.
Manual migration required The old config/goety_invasion-servants.toml is no longer read. Customised values must be copied into the new serverconfig file; otherwise the defineInRange defaults will be used.
Miscellaneous Config access isolated from attribute registration Because EntityAttributeCreationEvent fires on both client and server, all setCustomAttributes() / createAttributes() now use hardcoded defaults matching the defineInRange defaults. Configured values are applied by setConfigurableAttributes() inside finalizeSpawn() and at the start of readAdditionalSaveData().
Client-safe setConfigurableAttributes() Methods that touch server-only config return early on the client, preventing IllegalStateException: Cannot get config value from unloaded config file.
Unused GINServantConfig.loadConfig() removed The method was never called; ModLoadingContext.registerConfig handles loading automatically.
These changes do not affect existing gameplay or save compatibility. They are groundwork for the planned 1.21.1 port.
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:MnJ7CuCq:SHXjhl1U"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:MnJ7CuCq:SHXjhl1U"
}

