4.0.0-1.21.1
Compatibility
Required content
Changes
Dark Doppelganger — Changelog 4.0.0 IS HERE!
Fixes
- Removed extremely large world-wide entity scans used during server shutdown and level unload. ( Fix for mods like Sable )
- Fixed compatibility issues caused by those global entity scans, including Sable preventing the server from shutting down.
- Removed broad minion cleanup scans on player logout, respawn, and dimension changes.
- Fixed minions being able to get removed because an unrelated nearby player logged out or changed dimensions.
- Removed the now-unused ServerEvents event subscriber to prevent NeoForge mod-loading errors.
- Fixed boss music logic repeatedly sending stop-music packets during the fight.
- Fixed boss music failing to restart correctly after reaching the end of its timer.
- Limited boss music cleanup to nearby players instead of affecting the entire server.
- Fixed the boss laugh sound previously being played with zero volume in one location.
- Added a shared cooldown to boss laughs so they no longer play excessively.
- Fixed void recovery logic so the boss can recover in any dimension instead of relying on a hardcoded End-only check.
- Improved boss state persistence across saves and server restarts.
- Changed summoner tracking to use UUIDs instead of storing a direct player reference.
Minion Improvements
- Boss-spawned minions now store the UUID of the specific Dark Doppelganger that created them.
- Minions now clean themselves up if their owning boss no longer exists.
- Bosses only remove minions that actually belong to them.
- Minion ownership now persists through world saves.
- Boss minions inherit the boss’s active target when summoned.
- Removed unused global minion-count tracking.
Boss Recovery
- Added automatic recovery teleporting when the Dark Doppelganger becomes stranded below the player.
- If the boss remains significantly below the player for several seconds, it attempts to teleport back to a safe nearby position.
- Added immediate recovery if the boss falls below the world’s build floor.
- Recovery teleport searches for valid ground and collision-free space near the player.
- Rescue teleporting is separate from offensive teleport abilities and works in every phase.
- Added cooldowns to prevent rescue teleport spam.
New Doppelganger Mechanics
Mirror Adaptation
- The boss now tracks repeated damage types used against it.
- Repeatedly using the same type of attack causes the Doppelganger to temporarily adapt to it.
- Adapted attacks deal reduced damage for a limited time.
- Adaptation becomes stronger during the final phase.
- Switching attack types prevents the player from relying on a single repeated strategy.
Live Weapon Mirroring
- The Doppelganger periodically copies the player’s currently equipped main-hand weapon.
- Changing weapons during the fight can cause the boss to update its own weapon.
- Weapon mirroring stops during the final phase as the Doppelganger becomes less dependent on directly copying the player.
Mirror Theft
- Replaced frequent automatic buff removal with a dedicated ability.
- The Doppelganger can steal selected beneficial effects from the player.
- Stolen effects are removed from the player and temporarily applied to the boss.
- Added visual effects and messaging when a buff is stolen.
Mirror Clones
- Added temporary Dark Doppelganger clones during later phases.
- Clones copy the boss/player equipment appearance.
- Clones can actively attack the player.
- Clones use reduced health and damage compared to the main boss.
- Clones automatically disappear after a limited lifetime.
- Clone deaths no longer trigger normal boss death logic or rewards.
Shadow Echo
- The boss now records the player’s recent movement.
- It can summon a Shadow Echo that replays the path the player previously took.
- The echo damages players who intersect with its replayed path.
- Shadow Echoes wear copied player equipment and disappear after completing their replay.
Shadowstep
- Added offensive teleporting during later phases.
- The boss can teleport behind distant targets when enough space is available.
- Teleporting uses the existing portal visual effects.
- Added collision checks to reduce teleporting into invalid locations.
Phase Changes
- Phase 2 is now presented as Reflection Broken.
- Final phase is now presented as Shadowfall.
- Phase transitions now initialize the new clone, teleport, echo, and Mirror Theft systems.
- Later phases use shorter ability cooldowns and stronger adaptation.
- The final phase increases pressure through more frequent Doppelganger-specific abilities.
Audio Changes
- Added a global laugh cooldown.
- Routine boss abilities now respect the same laugh cooldown.
- Life Drain, Mirror Theft, and adaptation only have a chance to trigger a laugh.
- Clones do not trigger boss laughs.
- Laughs should now occur primarily during meaningful ability moments instead of repeatedly throughout combat.
Internal / Technical
- Added persistent NBT data for:
- Summoner UUID
- Phase state
- Clone state
- Minion ownership
- Ability cooldowns
- Rescue teleport state
- Reduced unnecessary entity queries.
- Reduced unnecessary network sound packets.
- Improved cleanup behavior for spawned boss entities.
- Improved compatibility with large modpacks and entity-management mods.
- Updated all dependencies and NeoForge version to insure all is working on latest!
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:2vzHL83v:XmtF5USk"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:2vzHL83v:XmtF5USk"
}

