
Christmas Season
Lightweight Christmas event plugin for Paper and Spigot 1.21 with biome snow, global snowstorms, decoration drops, gifts, elves and snowmen, controlled via the /xmas command, requires Java 21.
[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 compareand/xmas biome fix-difffor 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 -
clearsnapblocked 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
regionIntegrationconfig section - Intelligent backup rotation (largest backup never deleted)
[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 offFixed
-
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
perTickBudgetrespect - 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
- Fixed
-
Client-side biome caching after
/xmas off- Fixed default value for
biome.playerBubble.refreshClientfromfalsetotrue - 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)
- Fixed default value for
-
CRITICAL: Biome snapshot bug in
/xmas biome setcommand- Fixed chunks not being restored correctly after manual biome changes
- Root cause:
setBiomeAroundPlayer()added chunks toknownSnapshotChunkscache BEFORE callingsnapshotIfAbsent() - 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 setwere not restored to original biomes
-
CRITICAL: Chunks not loaded during
/xmas onwere 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
chunkRetryCounttracking 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
languagesetting in config.yml - Verified: Zero hardcoded German strings remaining in user-facing logs
-
CRITICAL: Folia thread safety violations in biome restore
- Fixed
IllegalStateExceptioncrash during/xmas offbiome 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
- Fixed
-
CRITICAL: Folia thread safety violations in cleanup methods
- Fixed
IllegalStateExceptioncrash when running/xmas offon Folia servers - Root cause: Using
world.getEntitiesByClass()and directentity.remove()calls access entities from other regions, violating Folia's thread ownership model - DecorationManager.java: Replaced unsafe entity iteration with UUID tracking
- Added
trackedDecorationsConcurrentHashMap for thread-safe entity tracking - Track decorations when spawned, untrack when lifetime expires
- cleanup() now uses
Bukkit.getEntity(uuid)+scheduler.runForEntity()pattern
- Added
- SnowmanManager.java: Replaced unsafe entity iteration and counting
- Added
trackedSnowmenConcurrentHashMap for thread-safe entity tracking - Replaced
getEntitiesByClass()loop withtrackedSnowmen.size()for counting - cleanup() now schedules removal on each entity's owning region thread
- Properly cancels attack tasks before entity removal
- Added
- 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)
- Fixed
Changed
-
Enhanced Language Files
- Added 70+ new translation keys to
messages_de.yml:log.biome.*- 35+ keys for biome restore operations, errors, and statuslog.database.*- 35+ keys for database operations, compression, errorslog.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
- Added 70+ new translation keys to
-
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
LanguageManagernow 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
.ymland.yamlfiles are properly packaged in JAR - Language files (
messages_de.yml,messages_en.yml) now correctly included
- Added explicit Maven resources configuration in
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.xmlwith 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
-
[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 lifetimesGiftManager: Location scheduler for chest placement/removalSnowstormManager: Global scheduler for weather controlWichtelManager: Entity scheduler for mob managementSnowmanManager: Entity scheduler for snowman behaviorXmasCommand: Global scheduler for delayed operations
-
New Scheduler Helper
- Created
FoliaSchedulerHelperutility class - Platform-agnostic API for scheduling tasks
- Automatic platform detection (isFolia() method)
- Supports all scheduler types: Global, Region, Entity, Location, Async
- Created
-
Task Types Updated
- Replaced
BukkitTaskwithWrappedTask(FoliaLib wrapper) - Replaced
BukkitRunnablewith lambda expressions - All scheduler calls now go through FoliaSchedulerHelper
- Replaced
-
Performance Improvements
perTickBudgetincreased from 6 → 12 (2x faster biome updates)- Cache management optimized (processedChunks, knownSnapshotChunks)
- Chunk queue prevents processing duplicates
Fixed
-
CRITICAL: Multi-Platform Teleport Incompatibility
- Fixed
NoSuchMethodErroron Spigot (teleportAsync doesn't exist) - Fixed
UnsupportedOperationExceptionon Folia (must use teleportAsync) - Platform-dependent teleport:
teleportAsync()on Folia,teleport()on Spigot/Paper/Purpur - Wichtel can now teleport correctly on all platforms
- Fixed
-
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-apitopaper-api(1.21.3-R0.1-SNAPSHOT) - Added
FoliaLib0.4.3 (com.tcoded:FoliaLib) - Added tcoded-releases repository (https://repo.tcoded.com/releases)
- FoliaLib is shaded and relocated to avoid conflicts
- Updated from
-
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: trueflag 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+
-
[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 clearsnapto delete corrupted database - Detection of stream misalignment with detailed logging
- Clear instructions:
-
[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 format0x3D(ordinal-based) still readable
-
Fixed Y-level misalignment in biome restoration
- Restore now uses the correct
yStepvalue from the snapshot instead of config - Prevents biomes from being restored at wrong vertical positions
- Restore now uses the correct
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) toname()(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
-
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 ofw.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 migratemigrates 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 offuntil 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 debugCommand: 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
processedChunksSet with max 5,000 entries - Chunks are only processed if not in cache
- Cache size is automatically limited (oldest 20% removed)
SQLite Database Schema:
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 restorerestoreALLAsync(): 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:
-
Stop Server
stop -
Replace Plugin JAR
- Delete old
ChristmasSeason-1.2.x.jar - Copy new
ChristmasSeason-1.3.0.jartoplugins/
- Delete old
-
Start Server
# Plugin automatically creates biome-snapshot.db -
Optional: Migrate Old YAML Snapshots
/xmas biome migrate- Migrates
biome-snapshot.yml→biome-snapshot.db - Creates backup:
biome-snapshot.yml.backup-<timestamp> - Deletes old YAML file after successful migration
- Migrates
-
Done!
- SQLite system runs automatically
- Unlimited chunks possible
- Better performance
Config Changes (optional):
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.ymlis no longer automatically loaded- Solution: Use
/xmas biome migrate
- Solution: Use
- ✅ Config Option:
restoreOnEvictis ignored (no longer needed)- No adjustment needed - simply ignored
- ✅ All Other Configs: 100% compatible!
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
continuestatement 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 ✅
- 🔴 Problem: Frozen lakes remained frozen after
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(orde) in config.yml - 🔄 Live reload: Language switching with
/xmas reloadwithout server restart - 📦 Language files:
messages_de.ymlandmessages_en.ymlin 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.namefrom config.yml (now handled by language system)
Stability & Performance
- 🛑
/xmas biome restoredisabled: Command has been disabled as it synchronously loads reference world chunks, causing server freezes (30+ seconds) - ✅ Alternative usage: Use
/xmas offfor safe, asynchronous biome reset - 🔒 YAML Boolean fix: Keys like
on,offare now quoted ("on":,"off":) to prevent YAML boolean interpretation
🐛 Fixed Bugs
- 🔴 Translation keys not found: YAML was interpreting
on/offas booleans (true/false) - fixed by quoting - 🔴 Server freeze on biome restore:
/xmas biome restoreblocked main thread - command disabled with warning - ⚪ Hardcoded entity names: All managers now use LanguageManager instead of hardcoded strings
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 CleanupWhen 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 ResetSnow 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_PLAINSwas 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.
Нет описания изменений
