Christmas SeasonСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачать
ВЕРСИИ (13)
release
Christmas Season 2.4.1
2.4.112 окт. 2026 г.605Minecraft: 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3folia, paper, purpur
Что нового
## [2.4.1] - 2026-10-12
### Fixed
- **Paper/Purpur:** biome conversion now runs nearest chunk first and spread over the ticks, like on Folia.
### Changed
- **Faster defaults:** `tickIntervalTicks` 40 → 10, `perTickBudget` 12 → 8 (16 instead of 6 chunks/s); existing configs keep their values.
release
Christmas Season 2.4.0
2.4.023 сент. 2026 г.264Minecraft: 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3folia, paper, purpur
Что нового
## [2.4.0] - 2026-09-22
**Reliability and feature release:** major backup and biome-safety fixes, thread-safe biome tools, restart-safe tracking, a full English language pass, and several long-requested features.
### Added
- **Schedule** (`schedule.*`) - the event activates and deactivates itself by date; windows may span New Year (`12-01` → `01-06`); acts on transitions only so a manual `/xmas off` is respected until the next transition
- **Advent calendar** - `/advent` opens one door per player and day (`advent.*`): default items, a weighted random pool, per-day overrides, console commands, optional catch-up of missed days; claims in `data/advent.yml`, reset each year; `AdventClaimEvent`
- **Multiple snow worlds** - `snowWorlds` list next to the legacy `snowWorld`; all managers, cleanup, adoption and the snowstorm honour every listed world
- **Biome exclusion zones** (`biome.exclude.*`) - rectangles, WorldGuard region IDs (`id` or `world:id`) or all GriefPrevention claims are skipped by the biome bubble and by convert-all
- **`/xmas biome convert-all [radius] [world] confirm`** - budgeted conversion of every generated chunk around spawn (for maps); `cancel` stops it; progress in `/xmas status`
- **Weighted loot entries** - every loot list accepts `{material, amount: "1-3", weight, name, lore, enchantments, glow}` besides `MATERIAL:amount`; chest item counts and rare chances configurable (`gifts.contents.*`)
- **Gift opening** - first opener is recorded (`data/stats.yml`), `/xmas stats [player]`, optional `gifts.broadcastOnOpen`, sounds/particles on spawn and open (`gifts.effects.*`), `GiftOpenEvent`; `GiftSpawnEvent` is cancellable
- **Runtime feature toggles** - `/xmas feature <biome|snowstorm|decoration|gifts|wichtel|elves|snowmen|advent> on|off` (persisted)
- **Per-player spawn caps** - `wichtel/elves/snowmen.maxNearPlayer` within `spawning.nearRadius` (0 = off, world caps unchanged)
- **Permissions** - `xmas.advent` (default true), `xmas.bypass.snowmen`; snowmen also ignore spectators
- **PlaceholderAPI** expansion `%xmas_...%` (active, snowstorm, days_until_start, days_left, gifts_opened, gifts_opened_total, advent_claimed, advent_today, tracked_mobs, tracked_gifts)
- **API events** in `de.boondocksulfur.christmas.api`: `XmasStateChangeEvent`, `GiftSpawnEvent`, `GiftOpenEvent`, `AdventClaimEvent`
- **Announcements** on activation/deactivation (`announcements.*`), richer `/xmas status` (worlds, tracked objects, snapshot chunks, restore/conversion progress, schedule, gifts opened)
- Snowstorm mode `none` now really leaves the weather alone (was documented but not implemented)
- `biome.changeMinY` / `biome.changeMaxY` - the Y range of biome changes is configurable (was fixed to 50-200); the snow/ice clean-up on restore is limited to the same range plus an 8-block margin, so natural altitude snow above it is left alone
- `/xmas biome info` - shows current and original biome, snapshot state and exclusion for the spot you stand on
- `elves.lifetimeSeconds` / `elves.world` (default to the wichtel values)
- Custom or partial language files fall back to the bundled English texts instead of `[Missing: key]`
### Fixed
- **CRITICAL: Backups were incomplete.** The snapshot database runs in WAL mode; timestamp backups (`/xmas off`), emergency backups (server stop) and SAFE backups taken while the event was running copied only the main file and silently lost every chunk still in the write-ahead log. All copies now force a WAL checkpoint first, and the emergency backup is written after the database has been closed.
- **CRITICAL: Custom biomes restored as PLAINS.** Snapshots stored biome keys without their namespace, so Terralith/data-pack biomes could not be resolved on restore. New snapshots (format 0x3F) store the full key; old snapshots are still read as `minecraft:` biomes.
- **CRITICAL: `/xmas biome compare` and `fix-diff` accessed the world from an async thread** (`IllegalStateException: Asynchronous chunk load!` on Paper, region violations on Folia). The backup database is still read asynchronously, but every chunk comparison/restore now runs on the chunk's owning thread with `biome.restore.perTick` chunks in flight.
- **`/xmas reload` (and a second `/xmas on`) orphaned gift chests permanently** - lifetime tasks were cancelled and the tracker cleared. Stopping a manager no longer drops its tracking.
- **Event objects were lost after a server restart** - mobs, decorations and gift chests had no cap, no lifetime and were not removed by `/xmas off`. They are now recognised by their tags/markers and adopted on startup and on chunk load; `/xmas off` additionally sweeps all loaded chunks.
- **Emergency backups piled up** - one full database copy per normal shutdown, never rotated. Only the newest three are kept.
- **`ChunkLoadEvent` bypassed the per-tick budget** - every loaded chunk was snapshotted and converted synchronously, including pre-generated chunks far from any player. Chunks are now only queued when a player is within the bubble radius (Folia: handled by the per-player timer).
- **Wichtel and elves deleted every dropped item in reach**, including player death drops. They now only collect the plugin's decoration items (`wichtel.stealOnlyDecorations: true`; `false` allows other items but never player drops). Random hops no longer teleport mobs into blocks or off ledges.
- Spawn helper no longer falls back to the player's own position; a candidate more than 24 blocks above the player is rejected instead of a fixed `Y > 100` rule (worked badly on high worlds).
- Gift chests are never placed next to another chest (no accidental double chests with player storage).
- On Folia, region tasks still in flight after `/xmas off` could re-convert chunks the restore had just reset (leftover snow); chunk processing now stops as soon as the event is off or a restore runs
- Snow/ice removal on restore checks the surface of every column (WORLD_SURFACE heightmap) instead of every block between Y 50 and 200 - the whole world height is covered at a fraction of the cost; `fix-diff` cleans snow/ice as well
- Minecraft blurs biome borders by a few blocks, so snow also fell on the edges of chunks that were never converted and were therefore never cleaned; the restore now cleans a four-block strip of every untouched neighbouring chunk
- Snapshots are stored per 4x4 biome cell (format 0x41, 16 entries per layer instead of 256) - 16x less data to compress and write per chunk; all older formats are still read
- Snow layers and ice that already existed on the surface when a chunk was snapshotted (natural or player-placed) are recorded per column and kept on restore
- Snow layers and ice placed by players while the event is active are recorded in the database (`placed_columns`) and kept on restore - also inside the cleaned border strips
- Grass, podzol and mycelium under removed snow layers lost their white `snowy` top only after a block update - the state is reset explicitly now
- Folia: chunks around a fast-moving player no longer leave gaps - every chunk seen in the bubble radius stays in a per-player queue (nearest first) until it is converted, and chunks that were not loaded yet are retried instead of being marked as done
- `/xmas storm off` is a hard override: it pauses the auto phases and resends clear weather even if the server flag was already off
- Region plugins are now declared as `softdepend`, so the WorldGuard/GriefPrevention hook is available on the first start.
- `/xmas storm pulse` uses the manager's pulse instead of a duplicated implementation.
### Changed
- `api-version` raised to `1.21.3` - servers below the real minimum now refuse the plugin with a clear message instead of crashing later
- Biome writes and samples work per 4x4x4 cell (16x fewer `setBiome` calls per chunk)
- Chunks set with `/xmas biome set` are protected from the automatic bubble until the next stop/restore
- Update checker: `updateChecker.enabled`/`notifyOps` config keys, only Modrinth *release* versions count, notifications with clickable Modrinth/GitHub links
- New config keys: `biome.restore.removeSnowLayers`, `biome.restore.removeIce`, `wichtel.stealOnlyDecorations`, `snowmen.lifetimeSeconds` (default 600, 0 = never)
- Default `language` is now `en`
- All source comments, Javadoc, debug output and hardcoded messages are English; every player/console message goes through the language files (both files reworked, unused keys removed)
- Database statistics report MB/KB with matching units
### Removed
- Empty `GiftOpenListener`; `OrphanedMobCleanupListener` replaced by `TrackedObjectListener` (adopt or remove)
release
Christmas Season 2.3.0
2.3.03 июл. 2026 г.275Minecraft: 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2folia, paper, purpur
Что нового
## [2.3.0] - 2026-07-03
**Major Update:** Minecraft 26.x support, full Adventure API migration, and a deep thread-safety/reliability overhaul of the entire 2.2.0 feature set.
**Upgrade Priority:** HIGH - contains critical Folia fixes and data-safety hardening
### Added
- **Minecraft 26.x support** - one JAR covers 1.21.3-1.21.11 (Java 21) AND the year-based 26.x versions (Java 25); compiled against Paper API `26.1.2.build.72-stable`, `api-version: "1.21"` remains the minimum
- **Gift chest protection** - hoppers and explosions can no longer empty/destroy gift chests; gift chests carry a PersistentDataContainer marker so cleanup can never delete player chests (configurable via `gifts.protectChests`)
- **Orphaned mob cleanup** - event mobs whose chunks were unloaded during `/xmas off` are removed automatically when their chunks load while the event is inactive
- **Config validation on startup/reload** - warns about unknown materials in loot tables and an invalid `biome.target`
- Tab completion for `/xmas` now includes biome names from the registry
### Changed
- **Full Adventure API migration** - Component-based entity/item/chest names and broadcasts, `RegistryAccess` instead of `Registry.BIOME`, zero deprecated API usage in the build
- **Reliable `/xmas off` restore** - completion is tracked per chunk (atomic counters); failed chunks keep their snapshots and are retried on the next run; accurate final statistics; reentrancy guard against double `/xmas off`; `/xmas on` during a running restore can no longer leak the database
- **Folia hardening of the 2.2.0 feature line** - all entity-scheduler tasks use retired-callbacks (killed event mobs no longer clog the spawn caps), one shared FoliaLib instance, spawn limits re-checked inside region tasks
- JAR size reduced from ~13.6 MB to ~5 MB (excluded unused SQLite natives)
- `/xmas reload` restarts ALL managers, so new config values apply immediately
- Language files normalized to `&` color codes; literal `&` ("Wichtel & Elfen") no longer mangled; console logs free of raw color codes
- Removed ~200 lines of dead code (legacy 2D snapshot format, disabled seed-restore machinery)
### Compatibility
- **Paper/Purpur/Folia only** - plain Spigot is no longer supported (Adventure API required)
- **Minimum is Minecraft 1.21.3** - on 1.21.1/1.21.2 the plugin fails with `IncompatibleClassChangeError` (Biome changed from enum to interface in 1.21.3)
### Verified
- Live function tests on Paper 26.2 (Java 25), Paper 1.21.11 and Folia 1.21.11 with bot-driven end-to-end runs: biome bubble, 180-208-chunk restores without errors, backup commands, kill-wave spawn-cap test - zero exceptions
release
Christmas Season 2.2.0
2.2.025 апр. 2026 г.120Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11folia, paper, purpur, spigot
Что нового
## [2.2.0] - 2026-04-25
**Major Update:** Region protection, backup system, update checker, bug fixes, data safety, tab completion, and bStats.
**Upgrade Priority:** HIGH - Critical thread-safety and data integrity fixes
### Added
- **WorldGuard & GriefPrevention** - No spawns in protected regions/claims (soft dependency, configurable)
- **Automatic Backup System** - SAFE/Timestamp/Emergency backups in `world/christmas_backups/`
- **Update Checker** - Modrinth + GitHub fallback, OP notifications on join
- **Biome Compare & Fix** - `/xmas biome compare` and `/xmas biome fix-diff` for recovery
- **Full Tab Completion** - Context-aware suggestions for all commands
- **bStats Metrics** (Plugin ID: 30930)
- **Startup Safety Checks** - DB integrity check, crash detection, missing-DB warnings
- **Data Loss Protection** - `clearsnap` blocked when active, backup failure warnings, smart rotation
- Entity spawn fixes: No more spawns on roofs, in trees, or in water
### Fixed (17 Bugs)
- **CRITICAL:** Backup system non-functional (wrong DB filename)
- **CRITICAL:** Folia crash on start/join (`Bukkit.getScheduler()` → `FoliaSchedulerHelper`)
- **HIGH:** 6 thread-safety issues (restore counters, restore guard, HashSets, SQLite, LanguageManager)
- **HIGH:** Restore permanently blocked after empty snapshot or null DB
- **MEDIUM:** Cave biomes overwritten during seed-restore (Y=64 only → per Y-level)
- **MEDIUM:** NPE in `stopFeatures()` on failed startup
- **MEDIUM:** SnowstormManager orphaned tasks after `stop()`
- **LOW:** DB header EOF check, version parse fix, SnowmanDamageListener cleanup
### Changed
- `softdepend: [WorldGuard, GriefPrevention]` in plugin.yml
- New `regionIntegration` config section
- Intelligent backup rotation (largest backup never deleted)
release
Christmas Season 2.1.0
2.1.025 дек. 2025 г.549Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11folia, paper, purpur, spigot
Что нового
## [2.1.0] - 2025-12-25
**Minor Update:** Critical Folia compatibility fixes and complete internationalization overhaul.
This release fixes multiple critical thread-safety violations on Folia servers and completes the internationalization system. The biome restore mechanism has been completely rewritten to work correctly with Folia's regionalized threading model.
**Upgrade Priority:** HIGH - Recommended for all Folia servers experiencing crashes during `/xmas off`
### Fixed
- **CRITICAL: Folia performance issue - TPS drops to 16 during biome changes**
- Fixed `ensureAroundPlayerFolia()` scheduling all chunks around player simultaneously
- **Root cause**: With radius=2, all 25 chunks were scheduled in parallel every tick (no budget limit)
- **Result**: Massive TPS spike when processing 25 chunks × 9,728 biomes each = 240k+ biome changes
- **Solution**: Added `perTickBudget` respect - only schedules max 12 chunks per player tick
- Chunks now distributed across multiple ticks (e.g., 25 chunks over 3 ticks instead of instant)
- Performance now matches Paper/Spigot budget-based system
- **Client-side biome caching after `/xmas off`**
- Fixed default value for `biome.playerBubble.refreshClient` from `false` to `true`
- Clients now correctly see restored biomes without needing to move away and return
- Chunk refresh packets now sent by default (can be disabled in config for performance)
- **CRITICAL: Biome snapshot bug in `/xmas biome set` command**
- Fixed chunks not being restored correctly after manual biome changes
- **Root cause**: `setBiomeAroundPlayer()` added chunks to `knownSnapshotChunks` cache BEFORE calling `snapshotIfAbsent()`
- **Result**: No snapshot was created for manually changed chunks → wrong biome restored on `/xmas off`
- **Solution**: Removed premature cache addition, let `snapshotIfAbsent()` manage the cache correctly
- Fixes issue where chunks changed with `/xmas biome set` were not restored to original biomes
- **CRITICAL: Chunks not loaded during `/xmas on` were never processed**
- Implemented automatic retry mechanism for chunks that fail to load
- Chunks are now retried up to 3 times before being skipped
- Prevents "missing chunks" issue where distant/unloaded chunks stay unchanged
- Added `chunkRetryCount` tracking map with automatic cleanup to prevent memory leaks
- Debug logging for chunks that are skipped after max retries
- **CRITICAL: Complete internationalization of all console logs**
- Fixed English language module not being loaded correctly from JAR
- Replaced ALL 68 hardcoded German strings with LanguageManager calls:
- **BiomeSnapshotDatabase.java**: 34 strings replaced
- **BiomeSnowManager.java**: 33 strings replaced
- **SnowmanManager.java**: 1 string replaced
- All console log messages now properly respect the `language` setting in config.yml
- Verified: Zero hardcoded German strings remaining in user-facing logs
- **CRITICAL: Folia thread safety violations in biome restore**
- Fixed `IllegalStateException` crash during `/xmas off` biome restoration on Folia servers
- **Root cause**: Batch processing accessed chunks from different regions in single Location Scheduler task
- **Error**: "Thread failed main thread check: Async chunk retrieval"
- **Solution**: Each chunk now processed on its own Location Scheduler task (prevents cross-region access)
- Removed batch optimization that violated Folia's region threading model
- Improved chunk loading: Now uses blocking load (`generate=true`) for higher success rate
- Added double-check verification to ensure chunks are actually loaded before restore
- Fixed error counting to accurately track failed chunk restores
- **CRITICAL: Folia thread safety violations in cleanup methods**
- Fixed `IllegalStateException` crash when running `/xmas off` on Folia servers
- **Root cause**: Using `world.getEntitiesByClass()` and direct `entity.remove()` calls access entities from other regions, violating Folia's thread ownership model
- **DecorationManager.java**: Replaced unsafe entity iteration with UUID tracking
- Added `trackedDecorations` ConcurrentHashMap for thread-safe entity tracking
- Track decorations when spawned, untrack when lifetime expires
- cleanup() now uses `Bukkit.getEntity(uuid)` + `scheduler.runForEntity()` pattern
- **SnowmanManager.java**: Replaced unsafe entity iteration and counting
- Added `trackedSnowmen` ConcurrentHashMap for thread-safe entity tracking
- Replaced `getEntitiesByClass()` loop with `trackedSnowmen.size()` for counting
- cleanup() now schedules removal on each entity's owning region thread
- Properly cancels attack tasks before entity removal
- **WichtelManager.java**: Fixed direct entity.remove() calls in cleanup()
- cleanup() now schedules Wichtel/Elfen removal on each entity's owning region thread
- Properly cancels steal tasks before entity removal
- Uses same UUID tracking + entity scheduler pattern
- All entity removals now scheduled on correct region threads (Folia-safe)
- **GiftManager**: Already Folia-safe (uses Location Scheduler for block operations)
### Changed
- **Enhanced Language Files**
- Added 70+ new translation keys to `messages_de.yml`:
- `log.biome.*` - 35+ keys for biome restore operations, errors, and status
- `log.database.*` - 35+ keys for database operations, compression, errors
- `log.cleanup.snowman-world-not-found` - Snowman cleanup error
- Added matching English translations to `messages_en.yml`
- All formatting codes (§6, §7, §a, §c, §f, etc.) preserved in translations
- **Improved Translation Coverage**
- Database operations (open, close, clear, compression, decompression)
- Biome restore operations (start, progress, completion, errors)
- Error messages and warnings with detailed context
- Statistics and progress information
- Chunk loading/restoration errors with coordinates
- **Improved Language Loading Diagnostics**
- `LanguageManager` now logs:
- Current language being loaded
- Absolute file path of language file
- File existence status and size in bytes
- Source of language data (disk vs JAR)
- Number of keys loaded successfully
- Better error messages when resources are missing from JAR
- Added resource enumeration in severe error cases for debugging
- **Build Configuration**
- Added explicit Maven resources configuration in `pom.xml`
- Ensures all `.yml` and `.yaml` files are properly packaged in JAR
- Language files (`messages_de.yml`, `messages_en.yml`) now correctly included
### Technical
- All log messages now use `plugin.getLanguageManager().getMessage()` or `.get()`
- Proper placeholder support with {0}, {1}, {2} format for dynamic values
- Technical/internal logs (resource loading, language manager) intentionally kept in English
- Updated `pom.xml` with explicit `<resources>` section
- Added better exception handling in `ChristmasSeason.saveResourceIfAbsent()`
- Enhanced logging shows resource extraction status with file sizes
- Maintains backward compatibility with existing configurations
release
Christmas Season 2.0.0
2.0.019 дек. 2025 г.276Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10folia, paper, purpur, spigot
Что нового
## [2.0.0] - 2025-12-19
### Added
- **🎄 Multi-Platform Support** - Plugin now runs on Spigot, Paper, Purpur AND Folia!
- Automatic platform detection at runtime
- Single JAR works on all server types (no separate builds needed)
- Zero configuration required - works out of the box
- **Smart Scheduler Strategy:**
- **Paper/Spigot/Purpur:** Global timer (preserves v1.4.1 architecture & performance)
- **Folia:** Player-based Entity Scheduler (regionalized threading)
- **FoliaLib Integration**
- Added FoliaLib 0.4.3 dependency (shaded & relocated)
- Seamless multi-platform scheduler abstraction
- Automatic fallback to Bukkit scheduler on non-Folia servers
- **Folia-Specific Optimizations**
- Region-based scheduling for biome processing (uses Global/Region Scheduler)
- Entity-based scheduling for mobs (Wichtel, Elfen, Schneemänner)
- Location-based scheduling for blocks (Gifts, Decorations)
- Full support for Folia's regionalized multithreading
- **Chunk Queue System** (NEW!)
- Budget-based chunk processing prevents TPS spikes
- Config option: `perTickBudget` (default: 12 chunks/tick)
- Prevents lag when players move quickly into new areas
- Queue distributes chunk updates across multiple ticks
- **Manual Biome Correction Command**
- `/xmas biome set <biome> [radius]` - Manually fix biome issues
- Only works when ChristmasSeason is active (prevents permanent changes)
- Includes automatic snapshot creation
- Protection against global timer conflicts
### Changed
- **Complete Scheduler Migration**
- All managers migrated from Bukkit scheduler to FoliaLib
- `BiomeSnowManager`: Multi-platform scheduler strategy (Global on Paper, Entity on Folia)
- `DecorationManager`: Entity scheduler for item lifetimes
- `GiftManager`: Location scheduler for chest placement/removal
- `SnowstormManager`: Global scheduler for weather control
- `WichtelManager`: Entity scheduler for mob management
- `SnowmanManager`: Entity scheduler for snowman behavior
- `XmasCommand`: Global scheduler for delayed operations
- **New Scheduler Helper**
- Created `FoliaSchedulerHelper` utility class
- Platform-agnostic API for scheduling tasks
- Automatic platform detection (isFolia() method)
- Supports all scheduler types: Global, Region, Entity, Location, Async
- **Task Types Updated**
- Replaced `BukkitTask` with `WrappedTask` (FoliaLib wrapper)
- Replaced `BukkitRunnable` with lambda expressions
- All scheduler calls now go through FoliaSchedulerHelper
- **Performance Improvements**
- `perTickBudget` increased from 6 → 12 (2x faster biome updates)
- Cache management optimized (processedChunks, knownSnapshotChunks)
- Chunk queue prevents processing duplicates
### Fixed
- **CRITICAL: Multi-Platform Teleport Incompatibility**
- Fixed `NoSuchMethodError` on Spigot (teleportAsync doesn't exist)
- Fixed `UnsupportedOperationException` on Folia (must use teleportAsync)
- Platform-dependent teleport: `teleportAsync()` on Folia, `teleport()` on Spigot/Paper/Purpur
- Wichtel can now teleport correctly on all platforms
- **CRITICAL: Race Condition in `/xmas biome set`**
- Fixed global timer overwriting manual biome changes
- Chunks are now marked as processed BEFORE async tasks start
- Manual changes are now persistent until `/xmas off`
- **CRITICAL: Chunk Stripes Not Restored**
- Fixed chunks being deleted from database even when restore failed
- Chunks now only deleted after successful restoration
- Failed chunks remain in DB for retry on next `/xmas off`
- Added logging for failed chunk loads
- **Database Management**
- Improved cache clearing before/after restore operations
- Better error handling for chunk loading failures
- Success-only database cleanup prevents data loss
### Technical
- **Dependencies**
- Updated from `spigot-api` to `paper-api` (1.21.3-R0.1-SNAPSHOT)
- Added `FoliaLib` 0.4.3 (com.tcoded:FoliaLib)
- Added tcoded-releases repository (https://repo.tcoded.com/releases)
- FoliaLib is shaded and relocated to avoid conflicts
- **Build Configuration**
- Updated Maven Shade plugin to include FoliaLib
- Relocation: `com.tcoded.folialib` → `de.boondocksulfur.christmas.libs.folialib`
- SQLite JDBC driver still bundled (3.45.0.0)
- **Version Bump**
- Major version bump to 2.0.0 (breaking changes in internal APIs)
- Updated version in pom.xml, plugin.yml, and READMEs
- Platform description updated to "Spigot/Paper/Purpur/Folia"
- Added `folia-supported: true` flag to plugin.yml (required for Folia)
### Migration Notes
- **No action required for server admins** - plugin auto-detects platform
- **For developers**: Internal scheduler API changed (use FoliaSchedulerHelper)
- **Compatible with existing configs** - no configuration changes needed
- **Works on Folia 1.20+** and all Paper/Spigot versions supporting 1.21+
release
Christmas Season 1.4.1
1.4.112 дек. 2025 г.438Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10paper, purpur, spigot
Что нового
## [1.4.1] - 2025-12-12
### Fixed
- **CRITICAL: Fixed database corruption during biome snapshot save/load**
- Fixed stream misalignment causing garbled biome names (e.g., "MEADOWMEADOWMEADOW", "SNOWY_SLOPESFROZEN_PEAKS")
- Fixed MEADOW biomes being incorrectly restored as PLAINS
- Root cause: `InputStream.read()` can return fewer bytes than requested (partial reads)
- Solution: Read in loop until all bytes are received to maintain stream alignment
- Added validation for biome name length (max 50 bytes) to detect corruption early
- **Fixed "Unerwartetes Ende in 3D Biome-Daten!" errors**
- Stream now properly handles partial reads without losing alignment
- One corrupted biome no longer corrupts all following biomes (no more domino effect)
### Changed
- Improved error messages for database corruption
- Clear instructions: `/xmas biome clearsnap` to delete corrupted database
- Detection of stream misalignment with detailed logging
release
Christmas Season 1.4.0
1.4.012 дек. 2025 г.20Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10paper, purpur, spigot
Что нового
## [1.4.0] - 2025-12-12
### Fixed
- **CRITICAL: Fixed biome restoration corruption** - Biomes are now correctly restored after `/xmas off`
- Changed biome serialization from ordinal-based (unstable) to name-based (stable)
- Fixes issue where biomes were completely scrambled (e.g., JUNGLE became BIRCH_FOREST, OCEAN became FROZEN_PEAKS)
- Old snapshots using ordinal format are still supported for backwards compatibility
- **Database format updated:** New snapshots use magic byte `0x3E` (name-based), old format `0x3D` (ordinal-based) still readable
- **Fixed Y-level misalignment in biome restoration**
- Restore now uses the correct `yStep` value from the snapshot instead of config
- Prevents biomes from being restored at wrong vertical positions
### Added
- Extensive debug logging for biome snapshot/restore operations
- Shows which biomes are stored in snapshots
- Shows which biomes are restored from snapshots
- Helps diagnose biome-related issues
### Technical Details
- Biome storage format changed from `ordinal()` (2 bytes) to `name()` (length-prefixed UTF-8 string)
- Rationale: `Biome.values()` order is not guaranteed to be stable across server restarts/reloads
- New format ensures biome names like "JUNGLE", "OCEAN" are stored exactly as they are
- Database automatically migrates old snapshots when loading
release
Christmas Season 1.3.0
1.3.02 дек. 2025 г.415Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10paper, purpur, spigot
Что нового
### Version 1.3.0 (2025-12-02)
**🚀 Massive Performance Update!** - Fixed critical performance issues + SQLite database system for unlimited chunks!
#### ⚡ Performance Optimizations
**Chunk Processing Optimized (99% less re-processing)**
- ✅ **Chunk Processing Cache**: Chunks are now processed only **once**, not repeatedly every tick
- ✅ **Smart Sample Check**: 4-point sampling skips already correct chunks (~95% faster)
- ✅ **Removed Double Processing**: `tick()` method no longer processes player bubbles twice
- 📊 **Effect**: From 24,576 API calls per chunk → 4-100 calls (-99%)
**Event Listeners Throttled (-90% Events)**
- ✅ **PlayerMove Cooldown**: 3-second cooldown per player instead of every chunk change
- ✅ **ChunkLoad Caching**: Already processed chunks are skipped
- 📊 **Effect**: ~90% fewer event triggers for moving players
**Entity Optimizations**
- ✅ **SnowmanManager**: Uses `getEntitiesByClass()` instead of `w.getEntities()` (~10x faster)
- ✅ **DecorationManager Cleanup**: Iterates only over items instead of all entities
- ✅ **GiftManager Tracking**: New location tracking instead of chunk iteration (~100x faster)
- ✅ **Wichtel/Elf Lifetime**: Automatic removal after 240 seconds (configurable)
- 📊 **Effect**: Cleanup reduced from seconds to milliseconds
**Scheduler Optimizations**
- ✅ **SnowstormManager Auto-Mode**: Changed from runTaskTimer (every tick) to runTaskLater
- 📊 **Effect**: From 20 TPS overhead to 0 TPS (only runs every 45-150 seconds)
**Chunk Reload Removed**
- ✅ **refreshChunkSafe()**: Removed expensive chunk unload/reload
- 📊 **Effect**: ~50% less CPU load during biome changes
#### 🗄️ SQLite Database System (BREAKING: replaces YAML)
**Completely New Snapshot System**
- ✅ **SQLite instead of YAML**: Biome snapshots stored in `biome-snapshot.db`
- ✅ **GZIP Compression**: Biome data is compressed
- ✅ **Unlimited Chunks**: No more 2,000-chunk limit!
- ✅ **Minimal Storage**: 10,000 chunks = ~5-10 MB (instead of 156 MB with YAML)
- ✅ **Millisecond Performance**: Load/save in <10ms per chunk
- ✅ **No Memory Overhead**: Data not held in RAM
- ✅ **WAL Mode**: Write-Ahead Logging for better concurrent performance
- 📊 **Effect**: -94% storage space, unlimited scaling
**YAML to SQLite Migration**
- ✅ **Automatic Migration**: `/xmas biome migrate` migrates old YAML snapshots
- ✅ **Backup Creation**: Old YAML saved as `.backup-<timestamp>`
- ✅ **Backwards Compatible**: Old configs continue to work
- 📊 **Effect**: Seamless upgrade from v1.2.x to v1.3.0
**Biome Restore Completely Reworked**
- 🔴 **Critical Bug Fixed**: Database was closed BEFORE restore, restore found no data
- ✅ **New Timing Logic**: DB stays open during `/xmas off` until restore finishes
- ✅ **Detailed Logging**: Progress every 50 chunks, error tracking
- ✅ **Intelligent Block Removal**: Only removes snow/ice in non-winter biomes
- ✅ **Chunk Loading**: Chunks loaded on-demand for restore
- ✅ **Auto-Cleanup**: DB cleared and closed after successful restore
- 📊 **Effect**: Restore now works reliably!
**Debug Mode Added**
- ✅ **`/xmas debug` Command**: Enables verbose debug logs
- ✅ **Snapshot Tracking**: See which chunks are being snapshotted
- ✅ **Restore Details**: Shows biome data and block removal statistics
- ✅ **DB Status**: Shows database open/close and chunk counts
- ✅ **Performance Info**: Time measurements and chunk processing
- 📊 **Effect**: Easier debugging and troubleshooting
#### 📊 Compatibility
**Server Software**
- ✅ **Spigot 1.21+**: Fully compatible
- ✅ **Paper 1.21+**: Fully compatible (recommended for best performance)
- ✅ **Purpur 1.21+**: Fully compatible
- ⚠️ **Folia**: Partially compatible (possible threading issues)
**Dependencies**
- ✅ **SQLite JDBC 3.45.0.0**: Automatically included in JAR (Maven Shade)
- ✅ **No Other Dependencies**: Plug & Play
#### 🎯 New Commands
- `/xmas debug` - Enable/disable debug mode
- `/xmas biome migrate` - Migrate YAML snapshots to SQLite
- `/xmas biome status` - Now shows DB statistics (chunks, size)
#### 📊 Performance Improvements (Measurements)
| Metric | Before (v1.2.5) | After (v1.3.0) | Improvement |
|--------|-----------------|----------------|-------------|
| **CPU Load at 1000 Chunks** | ~80% | ~10-15% | **-85%** |
| **RAM Usage (Snapshot)** | 156 MB (YAML) | 5-10 MB (SQLite) | **-94%** |
| **Non-Heap Usage** | 432/456 MB (95%) | ~200/456 MB (44%) | **-54%** |
| **Chunk Limit** | 2,000 (YAML) | Unlimited (SQLite) | **∞** |
| **Chunk Processing Calls** | 24,576/chunk | 4-100/chunk | **-99%** |
| **PlayerMove Events** | Every chunk change | Every 3 seconds | **-90%** |
| **Entity Cleanup Time** | 5-10 seconds | <100ms | **-98%** |
| **TPS During Long Runtime** | 10-15 TPS | 19-20 TPS | **Stable!** |
| **Startup Time (with Snapshot)** | 30-60 seconds (YAML) | <1 second (SQLite) | **-98%** |
| **Snapshot Load/Save** | Seconds | Milliseconds | **1000x faster** |
#### 🐛 Fixed Bugs
- 🔴 **Critical: Biome Restore Didn't Work**: DB was closed BEFORE restore started
- 🔴 **Critical: YAML System Didn't Scale**: 10,000+ chunks = 156+ MB, server crashes
- 🔴 **Critical: Chunk Limit Too Low**: 2,000 chunks reached quickly on large servers
- 🔴 **Chunk Re-Processing Loop**: Chunks were processed repeatedly instead of once
- 🔴 **Double Player-Bubble Processing**: tick() and playerBubbleTask did the same work
- 🔴 **PlayerMove Event Spam**: Hundreds of events per second when moving fast
- 🔴 **SnowstormManager Auto-Mode**: Ran every tick (20x/second) instead of only on toggle
- 🔴 **Inefficient Entity Iteration**: w.getEntities() instead of getEntitiesByClass()
- 🔴 **Wichtel/Elves Never Despawn**: setRemoveWhenFarAway(false) without lifetime enforcement
- 🔴 **YAML Startup Time**: Loading large snapshot files took 30-60 seconds
#### ⚙️ Technical Details
**Chunk Processing Cache:**
- New `processedChunks` Set with max 5,000 entries
- Chunks are only processed if not in cache
- Cache size is automatically limited (oldest 20% removed)
**SQLite Database Schema:**
```sql
CREATE TABLE chunks (
world TEXT NOT NULL,
x INTEGER NOT NULL,
z INTEGER NOT NULL,
biomes BLOB NOT NULL, -- GZIP-compressed biome data (256 bytes → ~50-100 bytes)
timestamp INTEGER NOT NULL,
PRIMARY KEY (world, x, z)
);
CREATE INDEX idx_timestamp ON chunks(timestamp);
```
**GZIP Compression:**
- Original: 256 biomes as enum ordinals (1 byte per biome)
- Compressed: ~50-100 bytes (compression rate 50-60%)
- Effect: 10,000 chunks = ~5-10 MB instead of 156 MB (YAML)
**SQLite Optimizations:**
- WAL mode (Write-Ahead Logging): Better concurrent performance
- PRAGMA synchronous = NORMAL: Faster writes
- PRAGMA cache_size = 10000: 10 MB cache
- PRAGMA temp_store = MEMORY: Temp data in RAM
**PlayerMove Event Throttling:**
- HashMap with LastUpdate timestamps per player
- 3-second cooldown between updates
- Prevents spam during fast chunk changes
**Biome Restore Timing Fix:**
- `stopFeatures(false)`: DB stays open for restore
- `restoreALLAsync()`: Iterates through DB, restores chunks
- At the end: DB is cleared and closed
- Progress logging every 50 chunks
#### 🎓 Migration Guide (v1.2.x → v1.3.0)
**Upgrade Steps:**
1. **Stop Server**
```bash
stop
```
2. **Replace Plugin JAR**
- Delete old `ChristmasSeason-1.2.x.jar`
- Copy new `ChristmasSeason-1.3.0.jar` to `plugins/`
3. **Start Server**
```bash
# Plugin automatically creates biome-snapshot.db
```
4. **Optional: Migrate Old YAML Snapshots**
```bash
/xmas biome migrate
```
- Migrates `biome-snapshot.yml` → `biome-snapshot.db`
- Creates backup: `biome-snapshot.yml.backup-<timestamp>`
- Deletes old YAML file after successful migration
5. **Done!**
- SQLite system runs automatically
- Unlimited chunks possible
- Better performance
**Config Changes (optional):**
```yaml
biome:
# Old config options can be removed:
# restoreOnEvict: true ← DEPRECATED, no longer needed!
# enableSnapshot remains the same:
enableSnapshot: true # true = SQLite DB, false = no restore
```
#### ⚠️ Breaking Changes
**Minimal Breaking Changes:**
- ✅ **YAML Format**: Old `biome-snapshot.yml` is no longer automatically loaded
- Solution: Use `/xmas biome migrate`
- ✅ **Config Option**: `restoreOnEvict` is ignored (no longer needed)
- No adjustment needed - simply ignored
- ✅ **All Other Configs**: 100% compatible!
---
release
Christmas Season 1.2.5
1.2.528 нояб. 2025 г.139Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10paper, spigot
Что нового
### Version 1.2.5 (2025-11-29)
Critical bugfix for ice reset when deactivating the event.
#### 🐛 Fixed Bugs
**Ice reset did not work correctly**
- 🔴 **Problem**: Frozen lakes remained frozen after `/xmas off`, even though they should turn to water
- 🔍 **Cause**: Missing `continue` statement in the loop after converting ice to water
- ✅ **Solution**: Loop now explicitly searches from top to bottom through the entire block column
- 🌊 **Effect**: All ice layers in a lake are now correctly converted to water (not just the top layer)
**Technical Details:**
- The loop now converts **all** ice blocks in a column (multiple layers)
- Stops only at the first solid block (Stone, Dirt, Sand, etc.)
- Natural ice biomes (FROZEN_OCEAN, SNOWY_PLAINS, etc.) remain protected ✅
release
Christmas Season 1.2.4
1.2.428 нояб. 2025 г.36Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10paper, spigot
Что нового
### Version 1.2.4 (2025-11-28)
Language system update with full multi-language support and important stability improvements.
#### 🌍 New Features
**Complete Multi-Language System**
- 🎯 **LanguageManager**: New system for managing translations
- 🇩🇪 **German (de)**: Full German localization (default)
- 🇬🇧 **English (en)**: Full English translation
- 📝 **All texts translated**: Commands, messages, entity names, broadcasts, error messages, console logs
- 🎭 **Translated entity names**: Wichtel, Elves, Snowmen, Gifts, Decorations - all names are now multilingual
- 🔧 **Config option**: `language: en` (or `de`) in config.yml
- 🔄 **Live reload**: Language switching with `/xmas reload` without server restart
- 📦 **Language files**: `messages_de.yml` and `messages_en.yml` in plugin folder
- 💾 **Performance cache**: Loaded translations are cached
- 🎨 **Placeholder support**: Dynamic values in messages (e.g., chunk count, biome names, coordinates)
**Documentation**
- 📖 **README_EN.md**: Complete English documentation added
- 🔗 **Language links**: Both READMEs link to each other
- ✨ **Enhanced changelog structure**: Detailed descriptions of all changes
#### 🔧 Technical Improvements
**Language System**
- **Modular design**: LanguageManager as standalone utility class
- **Fallback system**: Missing translations are logged and displayed
- **YAML-based**: Easy customization and extension through YAML format
- **Color code support**: Automatic conversion from `&` to `§`
- **Config cleanup**: Removed `decoration.name` from config.yml (now handled by language system)
**Stability & Performance**
- 🛑 **`/xmas biome restore` disabled**: Command has been disabled as it synchronously loads reference world chunks, causing server freezes (30+ seconds)
- ✅ **Alternative usage**: Use `/xmas off` for safe, asynchronous biome reset
- 🔒 **YAML Boolean fix**: Keys like `on`, `off` are now quoted (`"on":`, `"off":`) to prevent YAML boolean interpretation
#### 🐛 Fixed Bugs
- 🔴 **Translation keys not found**: YAML was interpreting `on`/`off` as booleans (`true`/`false`) - fixed by quoting
- 🔴 **Server freeze on biome restore**: `/xmas biome restore` blocked main thread - command disabled with warning
- ⚪ **Hardcoded entity names**: All managers now use LanguageManager instead of hardcoded strings
release
Christmas Season 1.2.3
1.2.328 нояб. 2025 г.29Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10paper, spigot
Что нового
Version 1.2.3 (2025-11-28)
A comprehensive update for a complete, intelligent event reset without damaging natural terrain.
🎁 New Features
Full Entity & Loot Cleanup
When resetting the event (`/xmas off`), all spawned event entities and items are now removed automatically:
- 🎨 Decoration items (items with custom display name)
- 🎁 Gift chests (chests named "Weihnachts-Geschenk")
- 👤 Elves & helpers (tracked via the internal tracker system)
- ⛄ Snowmen (tracked via `ScoreboardTags`)
Details:
- Cleanup now runs **before** `stopFeatures()`, so all trackers are still populated
- Console log shows exactly how many entities/items were removed
⚡ Improvements
Smarter Biome-Specific Reset
Snow removal:
- Snow is only removed in biomes that naturally **do not** have snow (e.g. `PLAINS`, `FOREST`, `DESERT`)
- In natural snow biomes (`SNOWY_PLAINS`, `SNOWY_TAIGA`, `GROVE`, etc.) snow is preserved ✅
- Improved logic: snow above water is now detected and removed as well (fixed break condition on fluids)
Ice handling:
- Ice is only turned back into water in biomes that naturally **don’t** have ice (e.g. `PLAINS`, `FOREST`)
- In icy/cold biomes, ice is preserved ✅
- Supported examples: `FROZEN_OCEAN`, `FROZEN_RIVER`, `ICE_SPIKES`, `SNOWY_PLAINS`, `SNOWY_TAIGA`, `GROVE`, `JAGGED_PEAKS`, etc.
Technical improvements:
- 🔧 Chunks are automatically loaded if they aren’t loaded during reset
- 📊 Detailed debug output for easier troubleshooting
- 🎯 Optimized order: **Cleanup → StopFeatures → BiomeReset**
🐛 Bug Fixes
Critical fixes:
- 🔴 Elves & helpers were not removed reliably → fixed by running cleanup before `stopFeatures()`
- 🔴 Ice in `SNOWY_PLAINS` was removed → `isNaturallyIcyBiome()` extended to include all relevant snowy biomes
- 🔴 Snow above water stayed behind → loop logic corrected, break now only on solid blocks
Additional fixes:
- Ice is no longer left behind in non-icy biomes (e.g. `PLAINS`, `FOREST`)
- Natural snow in snow biomes is now correctly preserved
- Event entities and items are removed completely during reset
- Biome reset now works correctly even with previously unloaded chunks
### Known issues
- ⚠️ Currently, even manually placed regular ice (not packed or blue ice) in non-icy biomes will also be turned back into water during the reset. I’ll try to improve this behavior in a future update, but the logic to reliably distinguish natural from player-placed ice is quite complex.
release
Christmas Season 1.2.2
1.2.223 нояб. 2025 г.94Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10paper, spigot