Links
Creators
Details
1.2.0
Compatibility
Changes
CancelBlockUpdate 1.2.0
Changes
- Strict configuration and locale validation. Reload commits both together; failures keep the previous working state.
- Atomic configuration saves with external-edit conflict detection. Failed writes never report success or change active rules.
- Faster event handling with fewer block reads and no temporary material arrays in the event paths.
- Per-world material lists with explicit inheritance, optional global/per-world event selection, and named-world console commands.
- New commands:
/cbu status,/cbu validate,/cbu block list,/cbu block remove,/cbu block inherit,/cbu stats, and/cbu inspect. - Statistics are opt-in, limited to 1–300 seconds, and stop automatically. Inspection does not load chunks.
Compatibility and upgrading
- This release is verified on Paper 26.3 (Java 25), with Multiverse-Core 5.8.1, Multiverse-Portals 5.3.0, LuckPerms 5.5.71 and FAWE 2.16.1.
- Stop the server, back up the old JAR, and keep only one CancelBlockUpdate JAR in
plugins/. - Valid legacy configuration and the existing command/permission meanings are preserved. New cross-world and scoped edits require their own permissions;
cbu.adminincludes all management commands. - Existing v1 files are not rewritten on load. The first command that introduces a per-world whitelist backs up v1 and upgrades to v2. Restore the matching configuration backup before downgrading to an older plugin.
- Invalid fields and malformed configuration are now rejected instead of silently ignored. Invalid startup configuration leaves protection inactive; fix the file and fully restart the server. A failed reload while running preserves the previous state.
- Existing locale overrides remain intact. New messages are provided in English, Simplified Chinese and Traditional Chinese; other bundled locales use English for missing new messages.
- No world-file, block-state, NBT, PDC or gamerule writes. Protection applies while the plugin is running; it is not permanent freezing after removal or singleplayer export.
Verification
437 integration checks and 14 lifecycle checks passed. Protected fixture blocks and chest contents remained unchanged after a restart and 600 ticks; region/NBT parsing passed. Performance measurements used an isolated local Paper server, not a multiplayer TPS benchmark.
中文更新说明
- 修复并强化配置保存与重载:校验全部配置和语言文件后一起应用;写入失败保持旧规则,不再误报成功,也不会覆盖未加载的外部修改。
- 优化高频事件处理,减少方块读取与临时数组分配。
- 新增每世界白名单、恢复继承、事件筛选、指定世界的控制台管理,以及状态、校验、白名单查看/移除、限时统计和方块检查命令。
- 保留有效旧配置、旧权限含义及自定义语言文本;新增跨世界操作独立检查权限。首次引入每世界白名单时自动备份 v1 配置。
- 新消息提供英语、简体中文和繁体中文;其他语言缺少的新消息使用英语。
- Paper 26.3 实测通过 437 项集成检查、14 项启停检查和 600 tick 重启观察。不写入额外 NBT/PDC,不改写世界或游戏规则。
- 注意:旧版静默忽略的错误配置现在会明确拒绝;启动配置有误时需修复后完整重启。运行中的重载失败则保留旧规则。
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:iCIBf92Q:vR0vdxzX"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:iCIBf92Q:vR0vdxzX"
}

