All versions
2.1.0
Release
AllItemsMini – Mini All Items Challenge 2.1.06 months ago 30
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Folia
Paper
Purpur
Spigot
Changes
[2.1.0] - 2026-04-24
🎉 New Features
Folia Support
- Added: Full Folia compatibility via runtime detection - the plugin now works on both Paper and Folia servers
- Added:
SchedulerUtilutility class that automatically selects the correct scheduler API (BukkitScheduler on Paper, regionized schedulers on Folia)
Modrinth Update Checker
- Added: Automatic update check against the Modrinth API on server startup
- Added: Semantic version comparison (SemVer) - correctly determines if a remote version is newer
- Added: In-game update notification for admins (players with
allitems.admin) on join - Added: Configurable via
update-check: true/falseinconfig.yml - Added: Update messages in all 4 languages (DE, EN, FR, ES)
Tab-Complete
- Added: Tab-completion for
/aicsubcommands (start,stop,reset,show,skip,timer,reload) - Added: Tab-completion for
/aic timeroptions (on,off,start,stop,reset)
bStats Metrics
- Added: bStats integration for anonymous usage statistics
🐛 Bug Fixes
- Fixed: Race condition in offhand item submission - items are now tracked in a pending map and restored via
PlayerQuitEventif the player disconnects during the 1-tick restoration window - Fixed: Invalid materials in
progress.yml(e.g., after a Minecraft version update) are now counted and logged with a summary warning instead of being silently dropped - Fixed: BossBar is now explicitly removed via
Bukkit.removeBossBar()on plugin disable instead of just clearing players
🔧 Changes
- Changed: Plugin now officially supports all 1.21.x versions (1.21, 1.21.1, ... 1.21.11+) via
api-version: "1.21"andfolia-supported: true - Changed: Unobtainable item filter is now string-based instead of hardcoded enum references - automatically adapts to the running server version
- Changed: Config automatically merges missing keys on startup via
copyDefaults- new config options are added without overwriting existing values
🗑️ Removed
- Removed: Unused
exportDefaultLanguageFiles()method fromMessageProvider
📁 New Files
src/main/java/org/example/allitems/SchedulerUtil.java- Platform-agnostic scheduler wrappersrc/main/java/org/example/allitems/UpdateChecker.java- Async Modrinth update checker
[2.0.0] - 2026-01-11
🎉 Major Features
YAML-Based Multi-Language System
- Added: Complete YAML-based translation system replacing hardcoded messages
- Added: French (fr_FR) language support
- Added: Spanish (es_ES) language support
- Added: Live-reloadable translations via
/aic reloadwithout server restart - Added: Automatic fallback to English for missing translation keys
- Added: Lazy loading and in-memory caching for optimal performance
- Added: Thread-safe language file operations using ConcurrentHashMap
Developer Documentation
- Added: Comprehensive Javadoc (in English) for all classes and methods
- Added: Class-level documentation for AllItemsMini with features overview
- Added: Detailed method documentation for MessageProvider (237 lines)
- Added: Complete documentation for ChallengeTimer state management
- Added: Full Javadoc for CommandHandler routing logic
- Added: Enhanced documentation for Lang enum with locale detection
- Added: Documented Msg enum with YAML key conversion
Code Modernization
- Improved: MessageProvider now uses modern Java 21 features
- Improved: Added @NotNull and @Nullable annotations throughout codebase
- Improved: Enhanced null-safety with explicit checks and fallbacks
- Improved: Modernized stream operations and lambda expressions
- Improved: Better error handling with proper exception logging
- Improved: Improved code organization and separation of concerns
🔧 Changes
- Changed: Default language is now English (was German) - BREAKING CHANGE
- Changed: Msg enum simplified to pure key enum (removed hardcoded translations)
- Changed: Lang enum expanded with fileName field for YAML file mapping
- Changed: MessageProvider constructor now requires JavaPlugin instance
- Changed: Language loading moved to runtime instead of compile-time
📁 New Files
src/main/resources/lang/de_DE.yml- German translations (47 keys)src/main/resources/lang/en_US.yml- English translations (47 keys)src/main/resources/lang/fr_FR.yml- French translations (47 keys)src/main/resources/lang/es_ES.yml- Spanish translations (47 keys)
🐛 Bug Fixes
- Fixed: Language reload now properly clears cache and reloads all files
- Fixed: Invalid format strings now log warnings instead of crashing
- Fixed: Missing translation keys now show placeholder instead of null
📚 Documentation
- Updated: README.md with comprehensive language system documentation
- Updated: README.md with developer documentation section
- Updated: README.md with language customization instructions
- Added: Reference to CHANGELOG.md in README
⚠️ Breaking Changes
- Default language changed from German to English
Migration: Add
language: deto yourconfig.ymlto restore German
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:5Nm7bW8u:SuiEqUoQ"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:5Nm7bW8u:SuiEqUoQ"
}

