File Details
customperm-1.0.0.jar
- B
- May 18, 2026
- 48.58 KB
- 4
- 1.21.1
- NeoForge
File Name
customperm-1.0.0.jar
Supported Versions
- 1.21.1
Curse Maven Snippet
# CustomPerm Changelog ## 1.0.0 - Stable Public Release This version stabilizes the intermediate `0.9.0` release for official public distribution. It focuses on security hardening, final configuration paths, release documentation, validation, and fixes found during manual testing. ### Added - Final server configuration path: `config/arcadia/customperm/` - Non-destructive migration from the old `config/customperm/` directory - New `settings.json` runtime safety configuration - `luckPermsFallbackMode` setting: - `deny`: default and recommended for public servers - `internal`: compatibility mode that falls back to `grades.json` - Secure fail-closed behavior when LuckPerms is present but unavailable - New deny backend for LuckPerms failure cases - New per-command `preserveOriginalRequires` map in `commands.json` - Support for preserving original Brigadier `requires` predicates on sensitive commands - Expanded dark manual test procedure - Dedicated manual test categories with and without LuckPerms - Detailed expected results and cleanup phases in the manual test procedure - Manual checks for LuckPerms fallback modes, config migration, backups, and `preserveOriginalRequires` ### Fixed - Removing an alias that shadows an existing command now restores the original command in the dispatcher - Removing an exposed command now also removes its `preserveOriginalRequires` entry - Deleting a grade now removes it from player assignments - Unassigning a player's last grade now removes the empty `userGrades` entry - LuckPerms initialization and runtime failure handling now follows the configured fallback mode - README troubleshooting now documents the actual LuckPerms fallback behavior - README version badges now show `1.0.0` ### Changed - Mod version updated to `1.0.0` - README files now document: - `config/arcadia/customperm/` - `settings.json` - `luckPermsFallbackMode` - `preserveOriginalRequires` - Changelog converted to English - Release documentation now treats `0.9.0` as the intermediate feature release and `1.0.0` as the stable public release ### Validation - `./gradlew clean build --no-daemon`: passed - `./gradlew runGameTestServer --no-daemon`: 28/28 GameTests passed - Manual test procedure: 24/24 tests passed - Tested with LuckPerms `5.4.150` - Generated jar: `customperm-1.0.0.jar` --- ## 0.9.0 - Intermediate Feature Release This version introduced most of CustomPerm's code, mechanics, and operational behavior. It added the internal permission system, command exposure, aliases, LuckPerms integration, diagnostics, automated tests, benchmarks, CI checks, and the first complete documentation pass. **Note:** version `0.9.0` is not available on CurseForge because it required additional security testing before public distribution. The first CurseForge-ready release is `1.0.0`. ### Added - Internal JSON-backed permission system - Internal grade system - Multi-grade permission resolution - Explicit `DENY` priority over `ALLOW` - Wildcard permissions: - `*` - `customperm.command.*` - `customperm.alias.*` - Deny-by-default permission model - Automatic creation of: - `config/customperm/grades.json` - `config/customperm/aliases.json` - `config/customperm/commands.json` - Atomic configuration snapshot through `ConfigManager` - Transactional `/customperm reload` - Timestamped configuration backups - Config normalization for missing files, `{}` files, unknown fields, and explicit `null` collections - Grade management commands: - `/customperm grade create` - `/customperm grade delete` - `/customperm grade list` - `/customperm grade addperm` - `/customperm grade removeperm` - `/customperm grade assign` - `/customperm grade unassign` - Command exposure commands: - `/customperm command add` - `/customperm command remove` - `/customperm command list` - Brigadier command wrapping through `CommandTreeRewriter` - Preservation of real op level 2+ access - Client command-tree resync after configuration changes - Alias and macro commands: - `/customperm alias add` - `/customperm alias remove` - `/customperm alias list` - `/customperm alias addstep` - `/customperm alias removestep` - `/customperm alias steps` - Multi-step aliases using `;` separators - Sequential alias step execution with op level 4 - Alias execution continues after a step error - Live alias add/remove/replace on the command dispatcher - Reserved-name protection for `customperm` - Warning when an alias shadows an existing command - LuckPerms soft-dependency - Automatic LuckPerms detection - LuckPerms backend selection when compatible - Minimum LuckPerms version gate: `5.4.150+` - Rejection of prerelease-style LuckPerms versions such as `5.4.150-SNAPSHOT` - Internal backend when LuckPerms is absent - Internal fallback when LuckPerms is incompatible or unavailable - LuckPerms `UserDataRecalculateEvent` subscription for command-tree resync - Blocking of internal grade commands while LuckPerms is active - Diagnostic commands: - `/customperm status` - `/customperm test ` - `/customperm debug <command></command>` - `/customperm scan [pattern]` - Backend labels: - `Internal` - `LuckPerms` - `Internal - fallback from LuckPerms` - JUnit 5 test suite - NeoForge GameTest suite - JMH benchmarks - Performance baseline documentation - Dark HTML manual test procedure with JSON/Markdown export - GitHub Actions CI for GameTests, Gradle build, and jar metadata verification - English and French README documentation - Internal behavior documentation - Known limitations documentation - NeoForge version update process ### Fixed - Added config normalization to prevent NPEs with explicit JSON `null` values - Preserved stack traces for dispatcher wrapping failures - Unknown Brigadier child nodes are ignored with a warning - Exposed commands no longer bypass CustomPerm when the original Brigadier predicate is always true - `LuckPermsService.hooksReady` made `volatile` - Improved logs for fallback and LuckPerms subscription failures - Added final guard when backend selection results in `permissions == null` - GameTest registration now skips invalid non-`public static` `@GameTest` methods - `/customperm scan` sanitizes the displayed pattern when no result is found - `alias addstep customperm` is rejected as a reserved name - Separator-only aliases are covered by regression tests - JMH configured with `fork = 3` - CI verifies `META-INF/neoforge.mods.toml` and `META-INF/MANIFEST.MF` in the jar ### Changed - Mod version updated to `0.9.0` - README files now point users to GitHub Releases instead of generated local artifacts - `.gitignore` now excludes local tooling artifacts, test exports, logs, builds, and unreferenced local media - Changelog now separates the initial base version from the intermediate feature release ### Validation - `./gradlew clean build --no-daemon`: passed - `./gradlew runGameTestServer --no-daemon`: 26/26 GameTests passed - Generated jar: `customperm-0.9.0.jar` - Jar metadata verified: - `META-INF/MANIFEST.MF` - `META-INF/neoforge.mods.toml`

