✅ BubbleReset ⚡ icon

✅ BubbleReset ⚡ -----

Modern Resource World Plugin




Fixed
- **World resets working again** — Reverted the `WorldCreator.ofKey()` change introduced in 1.1.6. In Paper 26.1, after a world is unloaded via `Bukkit.unloadWorld()`, its dimension key remains registered internally for the session. Re-creating with the same custom-namespace key (e.g. `bubblereset:resource_world`) was silently rejected by Paper, causing `Bukkit.createWorld()` to return `null` and leaving the world permanently missing — players received the "under Maintenance" message on every teleport attempt.

Clarified (no code change)
- **World folder location is correct** — Paper 26.1 follows Minecraft's dimension storage architecture: all worlds are stored as dimensions inside the primary server level (`world/dimensions/minecraft/<name>/`). Root-level world folders are no longer created by Paper 26.x. This is expected behavior; worlds function identically — teleports, resets, borders, and game rules all work as before.
----------, Jun 1, 2026

Fixed
- **World folders now created at server root** — `WorldCreator` was using an implicit `minecraft:` namespace, causing newer Paper/Purpur builds to store resource worlds as sub-dimensions inside `world/dimensions/minecraft/` instead of as top-level folders. Switched to `WorldCreator.ofKey(new NamespacedKey(plugin, name))` so the dimension key becomes `bubblereset:resource_world`, which Paper correctly resolves to a standalone world folder at the server root. Fix applies to both initial world creation and post-reset recreation.
----------, Jun 1, 2026

Updated
  • Paper API updated to 26.1.2.build.63-stable (latest stable build)
  • Updated api-version in plugin.yml to 26.1.2
----------, May 17, 2026

Updated
  • Paper API updated to 26.1.2 (build 53, stable) — new Paper version scheme (26.1.2.build.53-stable)
  • plugin.yml api-version updated to '26.1.2' (required format for Paper 26.1+)
  • Java compiler target bumped from 21 → 25 to match Paper 26.1 recommended baseline
  • MockBukkit updated from MockBukkit-v1.20:3.15.1 → MockBukkit-v1.21:3.133.2
Improved (resource world regeneration)
  • Player eviction uses teleportAsync() — players are now kicked from the world via Paper's async teleport API before reset, reducing main-thread stall during chunk unloading
  • Spawn chunk pre-warming after recreation — after a new resource world is generated, a configurable radius of chunks around spawn is pre-loaded with getChunkAtAsync() so the world is immediately ready for players (performance.spawn-preload-radius, default 3)
  • preloadChunksAsync() simplified — removed a redundant CompletableFuture wrapper; getChunkAtAsync() is already non-blocking and handles its own threading
  • deleteWorldFolder() rewritten with NIO — now uses Files.walk(...).sorted(reverseOrder()) to guarantee files are deleted before their parent directories, fixing the silent-failure case where non-empty directories were not deleted
----------, May 2, 2026

This is a maintenance release focused on versioning and improving maintainability. No functional behavior has changed.

Changes:
- Bump project version to 1.1.3.
- Refactor complex methods to reduce cyclomatic complexity.

Issues:
- Complex Method (cyclomatic complexity = 19)
- Context: Scheduler tick ` run()` inside ` startAutoResetScheduler()`

- Complex Method (cyclomatic complexity = 16)
- Context: ` onInventoryClick(InventoryClickEvent event)`

- Complex Method (cyclomatic complexity = 16)
- Context: ` createCustomSkull(String textureBase64)`

Actions (Implemented)
- BubbleReset.java (scheduler ` run()`)
- Extracted fixed-time vs interval scheduling into separate private methods.
- Reduced nesting with guard clauses.
- Extracted warning broadcast + reset scheduling helpers.

- ResourceWorldMenu.java (` onInventoryClick`)
- Centralized action extraction (PDC first, lore fallback).
- Simplified click handler using helpers + early returns.

- ResourceWorldMenu.java (` createCustomSkull`)
- Extracted texture normalization + profile application helpers.
- Isolated base64/url parsing + skin application.
----------, Jan 20, 2026

Added
- New `/rwadmin reload` command - Dedicated reload command with enhanced feedback
- Displays reload time in milliseconds
- Reports number of reset timers cleared
- Shows cached worlds cleared count
- Confirms config cache rebuild status

- New `/rwadmin test <feature>` command - Comprehensive testing system for diagnostics
- ` cache` - View world and config cache contents with entry counts
- ` timer` - Display next reset times for all worlds (shows remaining hours/minutes)
- ` performance` - Show operation performance metrics (teleport, reset timings)
- ` tps` - Check current server TPS with color-coded health indicators (green/yellow/red)
- ` config` - Verify configuration loading for all worlds (displays name, auto-reset status, interval/time_of_day mode)

- Enhanced tab completion - Added full tab completion support for ` /rwadmin` subcommands and test features

Improved
- Reload command feedback - More detailed output showing exactly what was cleared and recalculated
- World cache management - Reload now properly clears world cache in addition to config cache and reset timers
- Admin panel access - ` /rwadmin` with no arguments opens admin panel, or use ` /rwadmin panel` explicitly
- Console compatibility - Reload and test commands now work from console, not just in-game

Fixed
- Continued fix from v1.1.2: Reset timers properly clear on reload, ensuring ` time_of_day` changes take effect immediately

Technical
- Refactored command handler to support subcommands (panel, reload, test)
- Added dedicated test methods for each diagnostic feature
- Updated ResourceTabCompleter to handle both ` /resource` and ` /rwadmin` commands
- Improved error handling and permission checks for admin commands
----------, Jan 7, 2026

✨ New Features

Time-of-day automated resets

- Added `automated_resets.time_of_day` (format `HH:mm`) under each dimension.
- When set, the auto-reset schedule runs at that local server time instead of using the interval timer.
- Existing interval-based scheduling still works as a fallback when `time_of_day` is blank.


️ Fixes

Custom menu heads (Base64 textures)
- Fixed ` /resource` menu custom head textures showing as Steve.
- Head textures are now applied using the Base64 ` textures` value reliably (preferred) with URL/JSON fallback.
- Config now documents that ` menu.items.<slot>.texture` supports Base64 (recommended) or a textures URL.
----------, Jan 6, 2026

✨ New Features

Datapacks support (custom structures / loot tables)
- New ` datapacks` config section to automatically copy datapacks into freshly created resource worlds.
- Optional ` /minecraft:reload` after copying so datapacks apply without a full restart.
- Configurable source (` world:<name>` or ` folder:<path>`) and per-dimension apply toggles.

Per-world teleport toggle
- New ` teleport_enabled` option per dimension:
- ` world.teleport_enabled`
- ` nether.teleport_enabled`
- ` end.teleport_enabled`
- Blocks teleports from both ` /resource tp <world>` and the ` /resource` GUI when disabled.

️ Improvements
- Added clear notes in ` config.yml` explaining default ` /resource` GUI behavior and permissions.
- Improved GUI click handling to identify the BubbleReset menu reliably (uses a dedicated inventory holder).
- Added a fallback to read the menu action from item lore when PDC is unavailable.
----------, Jan 6, 2026

✅ World caching with ConcurrentHashMap
✅ Config value pre-caching
✅ Async chunk pre-loading
✅ CompletableFuture async operations
✅ Performance timing tracker
✅ Statistics logging on shutdown
✅ Slow operation warnings
✅ Load time display
✅ Reload time display
✅ Support for Minecraft 1.19-1.21
----------, Dec 15, 2025

Resource Information
Author:
----------
Total Downloads: 70
First Release: Dec 15, 2025
Last Update: Jun 1, 2026
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings