Перейти к содержимому
Mineforgian

AllItemsMini – Mini All Items Challenge

Lightweight all-items challenge with bossbar & timer

Загрузки
158
Подписчики
0
Обновлён
3 июля 2026 г.
Лицензия
MIT

Опубликован 25 ноября 2025 г.

AllItemsMini

AllItemsMini is a small, lightweight "All Items Challenge" plugin for Paper 1.21.
The server gets a shared list of all valid items, and players have to hand them in one by one.
The plugin shows progress and the current target via a bossbar and commands – with an optional timer.

It is intentionally minimal: no database, no external libraries, just a progress.yml and a simple config.yml.


Features

  • Mini all-items challenge

    • Uses the full Material list from the Paper/Bukkit API
    • Automatically filters out unfair or nonsensical items (e.g. spawn eggs, INFESTED_*, bedrock, command blocks, etc.)
    • Optional additional blacklist via config.yml
  • 🎯 Shared goal for the whole server

    • At any time there is exactly one current target item
    • Progress is stored in progress.yml (persists across restarts)
    • /aic show displays: Items: completed / total | time | current target
  • 🕒 Built-in challenge timer (optional)

    • Tracks total time and can be paused/resumed
    • Controlled via /aic timer <on|off|start|stop|reset>
    • Timer can be globally disabled via timers.enabled in config.yml
  • 📊 Bossbar display

    • Uses the Paper bossbar API
    • Shows progress & current target on a bossbar
    • Players are automatically added while the challenge is running
  • 🌍 Multilingual (EN/DE)

    • Config option language: en or language: de in config.yml
    • All messages (commands, errors, help) are available in both English and German

Commands

All commands are under /aic and require allitems.admin by default (so only server operators can use them unless you change permissions).

  • /aic start
    Starts the all-items challenge or resumes it.
    Broadcasts the start and shows the first target.

  • /aic stop
    Pauses the challenge.
    Progress is kept, timer can be paused.

  • /aic reset
    Resets challenge progress and timer.
    Rebuilds the item list from scratch.

  • /aic show
    Shows a quick overview:

    • Number of completed items
    • Total number of items
    • (if active) time
    • current target item
  • /aic skip
    Skips the current target and moves it to the end of the list.
    Useful if an item is too hard to obtain in the current world/seed.

  • /aic timer <on|off|start|stop|reset>

    • on / off: globally enable/disable the timer feature
    • start: start / resume the timer
    • stop: pause the timer
    • reset: reset timer to 0
  • /aic reload
    Reloads config.yml and progress.yml.
    Handy after changing the blacklist or language.


Permissions

allitems.admin  # default: OP-only

Ченджлог

2.3.0Релиз26.1.1, 26.1.2, 26.2 · 3 июля 2026 г.

[2.3.0] - 2026-07-03

🎉 New Features

  • Added: Support for the year-based Minecraft 26.x line (26.1 "Tiny Takeover", 26.2). One JAR covers both version lines — api-version stays "1.21" as the minimum.

🔧 Changes

  • Changed: Now compiled against the Paper 26.1.2 API (new artifact scheme 26.1.2.build.N-stable; Paper dropped -R0.1-SNAPSHOT with the year-based Minecraft versioning). No code changes were required — zero compile errors and zero deprecation warnings.
  • Verified: Boot-tested on Paper 26.1.2 (challenge starts, 1383 items, GOLDEN_DANDELION included, spawn eggs/TRIAL_SPAWNER/VAULT filtered) and on Paper 1.21.10 (loads via plugin remapper, challenge starts, update check OK).
  • Note: 26.x content needs no filter updates — 26.1's golden dandelion is survival-obtainable, 26.2's cinnabar/sulfur families are survival-obtainable, and the SULFUR_CUBE_SPAWN_EGG is already caught by the _SPAWN_EGG suffix rule.
2.2.1Релиз1.21.9, 1.21.10, 1.21.11 · 2 июля 2026 г.

[2.2.1] - 2026-07-02

🎉 New Features

  • Added: Language files are now exported to plugins/AllItemsMini/lang/ on startup and can be edited there; /aic reload picks up changes live. Edited files are layered over the bundled translations, so missing/new keys fall back to the JAR version. This makes the long-documented "live-reloadable translations" feature actually work — previously translations were only ever read from inside the JAR.

🐛 Bug Fixes

  • Fixed: Timers now continue automatically after /aic stop/aic start and across server restarts. stopGame(), resetGame() and onDisable() previously called ChallengeTimer.pause(), which set the user-facing pause flag — after resuming the challenge (or rebooting), the timer silently stayed paused until a manual /aic timer start. They now use the new suspend(), which folds elapsed time without touching the pause flag. Note when upgrading from ≤ 2.2.0: the old save may carry paused: true once — a single /aic timer start clears it.
  • Fixed: /aic reload no longer discards timer time accrued since the last save. performReload() persisted after restoring from progress.yml, so any running time since the last event (start, hand-in, timer command) was lost; it now saves the live state first.
  • Fixed: Nine additional survival-unobtainable items are excluded from the challenge so it can actually be completed on 1.21.x: TRIAL_SPAWNER, VAULT, TEST_BLOCK, TEST_INSTANCE_BLOCK (1.21.5+), FARMLAND, DIRT_PATH, SUSPICIOUS_SAND, SUSPICIOUS_GRAVEL, CHORUS_PLANT.
  • Fixed: The hand-in double-submission guard no longer uses Bukkit.getCurrentTick(), which is not reliable on Folia's region threads — replaced with a 50 ms per-player time-based debounce.
  • Fixed: onDisable() now restores items still in the 1-tick offhand-restore window, closing a narrow item-loss path when the server shuts down in the same tick as a submission.
  • Fixed: buildNewOrder() resets index before filtering (defensive — a stale index could otherwise mark random items as already done).
2.2.0Релиз1.21.9, 1.21.10, 1.21.11 · 26 мая 2026 г.

[2.2.0] - 2026-05-26

🎉 New Features

  • Added: Update checker now filters by the running Minecraft version. Modrinth versions whose game_versions array does not include the server's exact or major.minor line are skipped, so a 1.22 release is never advertised to a 1.21 server.

🐛 Bug Fixes

  • Fixed: /aic reload after a blacklist change no longer inflates or deflates the submitted-count. Already-handed-in items that survive the new filter remain "done"; the order is repartitioned (done first, pending after) and index is recomputed accordingly.
  • Fixed: pendingOffhand and the new tick-dedup map are now ConcurrentHashMap — on Folia, events for different players fire on different region threads, and the previous HashMap could corrupt under concurrent put/remove.
  • Fixed: Explicit guard against double submission when both HAND and OFF_HAND events fire in the same physical right-click. Previously this was implicitly prevented by nulling the offhand mid-handler — fragile if the API ever changes.
  • Fixed: mergeDefaults() now explicitly loads the packaged config.yml and calls setDefaults() before copyDefaults(true), so new config keys are actually written on update (the old call had no defaults set on second start and silently no-op'd).
  • Fixed: Msg.getKey() now uses Locale.ROOT for lowercasing, avoiding the Turkish-locale I → ı bug that would break every translation lookup on tr_TR servers.
  • Fixed: PlayerQuitEvent offhand-restore now falls back to Inventory.addItem() / drop if the offhand was somehow refilled between submission and quit — no item loss.
  • Fixed: Eliminated the double saveState() call at challenge completion (stopGame() already persists).
  • Fixed: UpdateChecker.isNewer() now considers a remote release newer than a local pre-release with the same numeric components (e.g. 2.1.0 > 2.1.0-rc.1).
  • Fixed: /aic usage in plugin.yml now lists the timer subcommand.
  • Fixed: Offhand-restore lambda no longer silently drops a submitted item if the offhand slot was refilled by another plugin / auto-pickup between submission and the next tick — falls back to Inventory.addItem() and drops any overflow at the player's feet, mirroring the PlayerQuitEvent handler.

🔧 Changes

  • Changed: Replaced deprecated Bukkit.broadcastMessage(String) with an Adventure Component-based broadcast() helper using LegacyComponentSerializer.legacySection().
  • Changed: Replaced deprecated Player.sendActionBar(String) with the Component overload.
  • Changed: Replaced deprecated JavaPlugin.getDescription().getVersion() with getPluginMeta().getVersion() (Paper 1.20.6+ migration).
  • Changed: loadBlacklistFromConfig() no longer also loads the language — split into loadBlacklistFromConfig() and loadLanguageFromConfig(). Method names now match what they do.
  • Changed: Broadcast of BROADCAST_START moved from CommandHandler into AllItemsMini.startGame() so the safe() wrapper covers the full effect of the /aic start command (no more "Error" message after a successful start if broadcast throws).
  • Changed: Logger messages unified to English throughout (AllItemsMini, UpdateChecker) — previously a mix of German and English.
  • Changed: Gson now declared explicitly as a provided dependency in pom.xml (was relied on transitively from Paper).
  • Changed: /aic timer tab-completion now also suggests the German aliases an/aus/pause/resume that the command already accepted.

🗑️ Removed

  • Removed: Unused Lang.fromSystemLocale() method.
2.1.0Релиз1.21.9, 1.21.10, 1.21.11 · 24 апреля 2026 г.

[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: SchedulerUtil utility 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/false in config.yml
  • Added: Update messages in all 4 languages (DE, EN, FR, ES)

Tab-Complete

  • Added: Tab-completion for /aic subcommands (start, stop, reset, show, skip, timer, reload)
  • Added: Tab-completion for /aic timer options (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 PlayerQuitEvent if 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" and folia-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 from MessageProvider

📁 New Files

  • src/main/java/org/example/allitems/SchedulerUtil.java - Platform-agnostic scheduler wrapper
  • src/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 reload without 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: de to your config.yml to restore German
1.3.1Релиз1.21.8, 1.21.9, 1.21.10 · 19 декабря 2025 г.

[1.3.1] - 2025-12-18

Fixed

  • CRITICAL: Fixed item duplication bug where items were duplicated upon submission due to the offhand item not being removed before restoration in the next tick.
  • CRITICAL: Fixed armor piece swap bug where armor pieces would swap with equipped armor and disappear instead of being properly submitted. Items are now immediately removed from the offhand before restoration to prevent Minecraft's auto-equip behavior.
  • Fixed race condition where players disconnecting or changing their offhand between submission and restoration could cause issues. Added online check and offhand state validation before restoration.
  • Removed redundant null checks for ItemStack instances (modern Bukkit never returns null, only AIR).
  • Fixed encoding issue in code comment.
1.3.0Релиз1.21.8, 1.21.9, 1.21.10 · 25 ноября 2025 г.
- Initial public release on Modrinth
- Built against Paper 1.21.10 / Java 21
- Bossbar-based all-items challenge
- Basic English/German language support
- Configurable blacklist for items
- Optional global timer with `/aic timer <on|off|start|stop|reset>`
- Progress persisted in `progress.yml`

Комментарии

Загружаем…