1.0.5
Compatibility
Changes
Undo Mod v1.0.5 — Release Notes
Release date: 2026-06-26
🚀 New Features
YACL is now Optional (Recommended)
YACL (Yet Another Config Lib) v3 is no longer required, now a recommended dependency:
| Status | YACL installed | YACL not installed |
|---|---|---|
| Settings Screen | Full YACL config (General / HUD / History) | Basic vanilla screen (mouse buttons + mode) |
| Dependency | recommends (optional, recommended) |
Not needed — basic config built-in |
Download the
-bundledJAR to have YACL included automatically.
Basic Settings Screen (No YACL Required)
Press U to open settings:
Mouse Side Buttons— ON / OFFUndo Mode— Full / Block Only
The mod works fully without YACL.
New Mod Icon
A custom icon (assets/undo/icon.png) now displays in the Minecraft mod list and on Modrinth.
🐛 Bug Fixes
🔴 Critical: Mode Setting Not Synced to Server
- Symptom: Changing the undo mode in settings had no effect in-game
- Cause: Neither
UndoBasicSettingsScreennorUndoYaclConfigcalledUndoPacketSender.sendSetMode()to notify the server - Fix: Mode changes now immediately send a
SetModepacket to the server, which responds with aModeSyncacknowledgment
🔴 Critical: HUD Count Decremented Twice (MC 26.1.2)
- Symptom: The HUD history count decreased by more than expected after undo
- Cause: The client
history_synchandler both sethistoryCount = payload.remaining()AND calleddecrementHistory(doneCount), causing a double decrement - Fix: Removed the redundant
decrementHistory()call
🟡 Digit 0 Not Usable for Number Input
- Symptom: Could not enter numbers containing 0 (10, 20, 100, etc.)
- Cause:
UndoModClient.onClientTick()usedfor (int d = 1; d <= 9; d++), skippingGLFW.GLFW_KEY_0 - Fix: Added separate digit 0 detection
🟡 BlockAction Ignored setBlockState Return Value
- Symptom: Undo/Redo reported success even when
world.setBlockState()failed (out of bounds, block replaced, etc.) - Cause:
BlockAction.undo()andredo()ignored the boolean return value ofsetBlockState() - Fix: Methods now return the actual result of
setBlockState()
🟡 placedState Used Default Block State
- Symptom: Stairs, slabs, and walls lost their orientation and shape on redo
- Cause:
UndoEventListenersusedBlockItem.getBlock().getDefaultState()instead of the actual placed state - Fix: Updated
placeAction.setPlacedState(actualState)in the placement confirmation callback
🔵 commitTransaction Hard-coded doneCount=0
- Fix:
syncHistoryCount(playerUuid, 0)→syncHistoryCount(playerUuid, pending.size())
🔵 WorldMixin Reference Comparison
- Fix:
currentState == newState→currentState.equals(newState)for safer BlockState comparison
🔵 UndoEventListeners Reference Comparison
- Fix:
previousState != currentState→!previousState.equals(currentState)
🔧 Other Changes
- Removed
withSourcesJar()— build output is release JARs only - Fixed
DEFAULT_JVM_OPTSembedded quotes in 26.1.2gradlew(Git Bash compatibility) - CHANGELOG.md updated for all three versions
📦 Build Artifacts
| MC Version | Main JAR | Bundled JAR |
|---|---|---|
| 26.1.2 | Undo1.0.5-beta+fabric26.1.2.jar |
Undo1.0.5-beta+fabric26.1.2-bundled.jar |
| 1.21.1 | Undo1.0.5-beta+fabric1.21.1.jar |
Undo1.0.5-beta+fabric1.21.1-bundled.jar |
| 1.21.2 | Undo1.0.5-beta+fabric1.21.2.jar |
Undo1.0.5-beta+fabric1.21.2-bundled.jar |
All JARs are in the
release/directory of each project.
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:I13AmOJJ:LFCkVqL3"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:I13AmOJJ:LFCkVqL3"
}

