Changelog
Changelog
Section titled “Changelog”Version 2.6.0 - LevelingCore, ShowcaseCompat & Objective Expansion
Section titled “Version 2.6.0 - LevelingCore, ShowcaseCompat & Objective Expansion”New Features
Section titled “New Features”Per-Player Language (Full Implementation)
Section titled “Per-Player Language (Full Implementation)”All achievement notifications, gallery UI, title display, and admin popups now respect each player’s individual language setting (via /kslang). Supported languages: en-US, de-DE, fr-FR, es-ES, pt-BR, it-IT, pl-PL, ru-RU, ja-JP.
LevelingCore Integration
Section titled “LevelingCore Integration”Replaced the direct RPGLeveling dependency with the new LevelingCore abstraction layer. This allows the achievement system to work with any leveling plugin that implements the LevelingCore API.
9-Language Admin Popup
Section titled “9-Language Admin Popup”The admin achievement management popup now renders in all 9 supported languages based on the admin’s language setting.
ShowcaseCompat
Section titled “ShowcaseCompat”Added compatibility layer for the Showcase mod. Achievements can now be displayed in Showcase displays and interacted with through the Showcase UI.
10 New Objective Types
Section titled “10 New Objective Types”Added the following missing objective trigger types:
items_consumed— Track food/potion consumptionitems_dropped— Track items droppeditems_picked_up— Track items picked updeaths— Track player deathsdamage_dealt— Track total damage dealtdamage_taken— Track total damage takenjumps— Track player jumpssprinting_distance— Track sprinting distanceswimming_distance— Track swimming distancefishing_catches— Track fishing catches
Bug Fixes
Section titled “Bug Fixes”- Memory Leak Fix — Additional cleanup pass for cached UI state that was not being released on player disconnect
- Custom Achievement Persistence Fix — Custom achievements defined in
custom/*.jsonare now correctly preserved across server restarts when using MySQL storage - Localization After Save Fix — Language strings are now correctly resolved after a player data save/reload cycle (previously fell back to
en-USafter save)
Version 2.5.0 - Per-Player Language & Memory Fixes
Section titled “Version 2.5.0 - Per-Player Language & Memory Fixes”New Features
Section titled “New Features”Per-Player Language Support
Section titled “Per-Player Language Support”Players can now set their preferred language with /kslang. Achievement notifications, gallery UI, and title display all respect the player’s language setting.
Bug Fixes
Section titled “Bug Fixes”- Memory Leak Fix — Player achievement data is now properly cleaned up on disconnect. Prevents memory growth on long-running servers.
- Endless Level Tracker — Fixed cumulative XP threshold tracking for Endless leveling integration.
Version 2.4.0 - Endless Leveling Integration
Section titled “Version 2.4.0 - Endless Leveling Integration”New Features
Section titled “New Features”Endless Leveling Support
Section titled “Endless Leveling Support”Full integration with the Endless leveling system. New trigger type endless_xp tracks cumulative XP thresholds. New reward type endless_xp grants Endless XP from achievement rewards.
Improvements
Section titled “Improvements”- Announcement Padding Fix — Info Hub announcement display padding corrected.
Version 2.3.0 - MySQL Storage, Tracker Config & Performance
Section titled “Version 2.3.0 - MySQL Storage, Tracker Config & Performance”New Features
Section titled “New Features”Tracker HUD Toggle
Section titled “Tracker HUD Toggle”The Achievement Tracker HUD can now be globally disabled via configuration.
"trackerHud": { "enabled": true, "position": "right"}Set enabled to false to completely disable the tracker for all players.
MySQL Storage Backend
Section titled “MySQL Storage Backend”Player achievement data can optionally be stored in MySQL for cross-server setups. Requires Core v1.4.0+ with MySQL storage configured.
- Automatic legacy file migration on first load
- Table:
ks_achievement_players(UUID, Username, JSON-Blob, Timestamp) - Fully backwards compatible — file storage remains the default
Improvements
Section titled “Improvements”Debug Gate (Performance)
Section titled “Debug Gate (Performance)”Over 20 files updated to gate detail-level logging behind CoreAPI.isDebug(). This massively reduces console spam in production. Only startup summaries, shutdown messages, and achievement unlock notifications remain ungated.
Bug Fixes
Section titled “Bug Fixes”- RPG Level Chat Display — Player level now shows correctly in chat (cache was not populated on join)
- Nameplate Cleanup — Achievement titles are cleared from nameplates on plugin shutdown (no more orphaned titles)
- Language Propagation — Language changes in the admin panel now correctly propagate to all mods
- WARN Spam — Playtime tick warnings and toast HUD conflict warnings downgraded to FINE level
Version 1.8.7 - UI Fix
Section titled “Version 1.8.7 - UI Fix”Bug Fixes
Section titled “Bug Fixes”- Fixed UI crash when MMO Skill Tree or RPG Leveling mods are not installed
- Filter buttons now correctly check if the mod is actually available
- Fixed incorrect UI visibility property usage
Documentation
Section titled “Documentation”- Documented Hytale nameplate limitations
- Nameplates only support plain text (no colors)
- Multiline text is not supported in nameplates
titlePositionoptions"above"and"below"behave like"prefix"and"suffix"- Color settings (
titleColor,rpgLevelColor) only work in chat
Version 1.8.6 - Custom Localization Support
Section titled “Version 1.8.6 - Custom Localization Support”New Features
Section titled “New Features”Custom Translation Files
Section titled “Custom Translation Files”Server admins can now add their own translations without losing them during updates.
- New template files:
custom_en-US.json.example,custom_de-DE.json.example - Copy to
custom_en-US.jsonand add your translations - Custom translations are NEVER overwritten by plugin updates
- Keys starting with
_are treated as comments and ignored
Example:
{ "lootbag.name.my_server_reward": "Server Reward", "lootbag.desc.my_server_reward": "A special gift from our server!", "achievements.name.custom_quest": "Custom Quest", "achievements.desc.custom_quest": "Complete the server quest"}See Localization for complete documentation.
Version 1.8.5 - Lootbag Localization
Section titled “Version 1.8.5 - Lootbag Localization”New Features
Section titled “New Features”Lootbag i18n Support
Section titled “Lootbag i18n Support”All lootbag names, descriptions, and rarities are now fully localizable.
Translation Keys:
| Key Pattern | Description |
|---|---|
lootbag.name.<id> | Lootbag name |
lootbag.desc.<id> | Lootbag description |
lootbag.rarity.<rarity> | Rarity label (common, uncommon, rare, epic, legendary) |
If no translation exists, the plugin falls back to the value from lootbags.json.
Technical Changes
Section titled “Technical Changes”- Localization version bumped to v4 (auto-updates existing installations)
- Lootbag translations moved from
.langfiles to JSON (localization/*.json)
Version 1.8.3 - French Language Support
Section titled “Version 1.8.3 - French Language Support”New Features
Section titled “New Features”- Added French language support (
fr-FR) - All three languages (en-US, de-DE, fr-FR) are now auto-extracted on first start
Version 1.8.2 - Multi-Target & Filter Improvements
Section titled “Version 1.8.2 - Multi-Target & Filter Improvements”New Features
Section titled “New Features”Multi-Target Support
Section titled “Multi-Target Support”Achievement triggers now support comma-separated targets for matching multiple entities or items:
{ "trigger": { "type": "kills", "target": "Spider,Spider_Cave,Spider_Frost", "count": 100 }}Smart Filter Visibility
Section titled “Smart Filter Visibility”- MMO Skills filter auto-hides when MMO SkillTree plugin is not installed
- RPG Leveling filter auto-hides when RPG Leveling plugin is not installed
Bug Fixes
Section titled “Bug Fixes”- Fixed Config Migration - Version constants updated to trigger auto-updates correctly
- Fixed 16+ Invalid Item IDs - All items validated against server item list
Version 1.8.1 - Config Migration Fix
Section titled “Version 1.8.1 - Config Migration Fix”Bug Fixes
Section titled “Bug Fixes”- Config version fix (migration now works correctly)
Version 1.8.0 - API & UI Updates
Section titled “Version 1.8.0 - API & UI Updates”Summary
Section titled “Summary”This version adds three major features: Unlock dates are now displayed in the achievement gallery UI, a public API allows external plugins to interact with the achievement system, and player levels from RPGLeveling can optionally be shown in nametags and chat.
New Features
Section titled “New Features”Unlock Date Display
Section titled “Unlock Date Display”Completed achievements now show the unlock date in the achievement gallery.
- German (de-DE):
dd.MM.yyyy(e.g., “02.02.2026”) - English (en-US):
MM/dd/yyyy(e.g., “02/02/2026”)
Public API
Section titled “Public API”External plugins can now interact with the Achievement System through a stable API.
import com.hytale.achievements.api.AchievementAPI;
// Get API instanceAchievementAPI api = AchievementAPI.getInstance();
// Check availabilityif (AchievementAPI.isAvailable()) { // Use API methods}Available API Features:
- Query achievement status, progress, and statistics
- Grant/revoke achievements programmatically
- Listen for unlock and progress events
- Access player statistics (blocks mined, mob kills, playtime)
See API Reference for complete documentation.
RPG Level Display
Section titled “RPG Level Display”Player levels from the RPGLeveling plugin can optionally be displayed in nametags and chat.
Configuration:
{ "display": { "showRpgLevel": true, "rpgLevelFormat": "Lv.{level}", "rpgLevelColor": "#55FFFF", "rpgLevelPosition": "after_name" }}Available Positions:
| Position | Example |
|---|---|
before_name | [Title] [Lv.15] Username |
after_name | [Title] Username [Lv.15] |
after_title | [Title] [Lv.15] Username |
Requirements:
- RPGLeveling plugin must be installed
showRpgLevelmust be set totrue
File Changes
Section titled “File Changes”| File | Changes |
|---|---|
AchievementGallery.ui | Added #UnlockedDate label to all entry elements |
AchievementGalleryPage.java | Added formatUnlockDate() method and display logic |
api/AchievementAPI.java | NEW - Complete public API class |
AchievementPlugin.java | API initialization in setup(), RPGLevelingIntegration passed to TitleDisplayManager |
AchievementService.java | Unlock notifications to API listeners |
AchievementConfig.java | New display options for RPG Level |
TitleDisplayManager.java | Level display integrated in nametag and chat |
Migration
Section titled “Migration”For Server Admins:
- No action required
- UI update loads automatically
- API is immediately available for other plugins
For Plugin Developers:
- API available via
AchievementAPI.getInstance() - Always check
isAvailable()before calling API methods - Listeners are automatically called when achievements unlock
Version 1.7.0 - Item Validation & Bug Fixes
Section titled “Version 1.7.0 - Item Validation & Bug Fixes”Summary
Section titled “Summary”Comprehensive overhaul of all Item IDs in configuration files. All Minecraft-style Item IDs have been replaced with valid Hytale Item IDs. Additionally, two important bugs were fixed.
Bug Fixes
Section titled “Bug Fixes”Weekend Warrior Achievement Not Unlocking - FIXED
Section titled “Weekend Warrior Achievement Not Unlocking - FIXED”- Root Cause: Trigger was set to
"type": "manual"- no automatic detection - Solution: New trigger type
weekend_loginimplemented - Weekend check on player login in
AchievementPlugin.java - Achievement now automatically unlocks when player logs in on Saturday or Sunday
Chat Broadcasts for All Achievements - FIXED
Section titled “Chat Broadcasts for All Achievements - FIXED”- Problem:
broadcastToChatwas sending broadcasts for ALL unlocked achievements - Desired Behavior: Broadcasts only for achievements with title unlocks
- Solution: Added condition in
AchievementService.javato check for title presence
Item ID Corrections
Section titled “Item ID Corrections”Corrected 150+ invalid item IDs across all configuration files.
Global Naming Conventions (Minecraft → Hytale)
Section titled “Global Naming Conventions (Minecraft → Hytale)”| Minecraft-Style | Hytale-Style | Description |
|---|---|---|
Tool_Axe_* | Tool_Hatchet_* | Axes are called Hatchets |
Food_Apple | Plant_Fruit_Apple | Fruits under Plant_ |
Food_Bread | Consumable_Food_Bread | Food under Consumable_ |
Armor_Chestplate_* | Armor_*_Chest | Armor pieces named differently |
Armor_Helmet_* | Armor_*_Head | |
Shield_* | Weapon_Shield_* | Shields under Weapon_ |
Weapon_Bow_* | Weapon_Shortbow_* | Bows called Shortbow |
Weapon_Dagger_* | Weapon_Daggers_* | Daggers are plural |
Potion_* | Consumable_Potion_* | Potions under Consumable_ |
Material_* | Ingredient_* | Materials called Ingredients |
Diamond Tier | Adamantite Tier | No Diamond in Hytale |
Specific Corrections
Section titled “Specific Corrections”Materials → Ingredients:
Material_String→Ingredient_FibreMaterial_Poison→Ingredient_VenomMaterial_Fur→Ingredient_Hide_ThickMaterial_Leather→Ingredient_Hide_MediumMaterial_Bone→Ingredient_Bone_FragmentIngredient_Feather→Ingredient_Feathers_Light
Gems:
Gem_Ruby→Rock_Gem_RubyGem_Emerald→Rock_Gem_EmeraldGem_Sapphire→Rock_Gem_Sapphire
Workstations:
Bench_Carpenter→Bench_WorkBenchBench_Stonecutter→Bench_BuildersBench_Anvil→Bench_Armory
Potions:
Consumable_Potion_Health_Weak→Potion_Health_LesserConsumable_Potion_Health_Strong→Potion_Health_GreaterConsumable_Potion_Health→Potion_Health
Wood:
Wood_Oak_Log→Wood_Oak_TrunkWood_Birch_Log→Wood_Birch_Trunk
File Changes
Section titled “File Changes”| File | Changes |
|---|---|
lootbags.json | ~45 Item IDs corrected |
achievements.json | iconItems corrected, weekend trigger fixed |
mmo_skills_achievements.json | Weapon/Tool/Bench corrections |
rpg_leveling_achievements.json | Material→Ingredient corrections |
AchievementPlugin.java | Weekend-login trigger added |
AchievementService.java | Broadcast condition for title-only |
New Trigger Type
Section titled “New Trigger Type”{ "trigger": { "type": "weekend_login", "count": 1 }}Triggers when a player logs in on Saturday or Sunday.
Migration
Section titled “Migration”For Server Admins:
- Configs are automatically updated on server start
- Old configs backed up as
.backup-vX - Check your
custom/files for the same item errors
For Players:
- No action required
- Existing achievements are preserved
- Weekend Warrior now unlocks automatically on weekend login
Known Limitations
Section titled “Known Limitations”Material_Orb_Experiencedoesn’t exist → Replaced withRock_Gem_SapphireMaterial_Orb_Timedoesn’t exist → Replaced withRock_Gem_Sapphire- No
Flesh_Rottenitem → Replaced withFood_Wildmeat_Raw - No
Paperitem → Replaced withDeco_Book_Pile_Small
Version 1.6.1 - Event-Based RPG Leveling & Filter Icon Fixes
Section titled “Version 1.6.1 - Event-Based RPG Leveling & Filter Icon Fixes”Summary
Section titled “Summary”Critical update that completely rewrites the RPG Leveling integration from polling-based to event-based, fixing achievements not triggering on level-up. Also fixes missing filter icons in the Achievement Gallery.
:::warning Breaking Changes RPG Leveling Plugin Version Requirement:
- Minimum: v0.2.0-beta-5 (or newer)
- Older versions (e.g., 0.1.10) do NOT have the required event API
- The event-based integration requires
LevelUpListenerandExperienceGainedListenerinterfaces :::
Bug Fixes
Section titled “Bug Fixes”RPG Leveling Achievements Not Triggering - FIXED
Section titled “RPG Leveling Achievements Not Triggering - FIXED”- Root Cause: Previous implementation used wrong API class paths
- Old (broken):
org.zuxaw.plugin.api.events.LevelUpEvent - New (correct):
org.zuxaw.plugin.api.LevelUpEvent - Old (broken): Used
Consumer<T>for listener registration - New (correct): Uses
LevelUpListenerandExperienceGainedListenerinterfaces - Solution: Complete rewrite using Java Dynamic Proxy for interface implementation
Achievement Gallery Filter Icons Not Showing - FIXED
Section titled “Achievement Gallery Filter Icons Not Showing - FIXED”- Root Cause: Invalid ItemIds for filter icons
- Old (broken):
Material_Experience_Orb,Weapon_Sword_Adamantite,Greenscreen - New (correct):
Tool_Pickaxe_Cobalt,Weapon_Sword_Cobalt,Ore_Prisma - Affected filters: MMO Skills, RPG Leveling, Completed
Localization JSON Parse Failure - FIXED
Section titled “Localization JSON Parse Failure - FIXED”- Root Cause: Duplicate key
bug_squasherin localization files - Renamed conflicting title to
bug_squasher_title - Added localization versioning system (now v3) with auto-update and backup
Technical Changes
Section titled “Technical Changes”RPGLevelingIntegration.java - COMPLETE REWRITE
Section titled “RPGLevelingIntegration.java - COMPLETE REWRITE”| Aspect | Old (v1.6.0) | New (v1.6.1) |
|---|---|---|
| Approach | Polling (every 5s) | Event-based (real-time) |
| API Version | Unknown | 0.2.0-beta-5 |
| Event Classes | .api.events.LevelUpEvent | .api.LevelUpEvent |
| Listener Type | Consumer<T> | LevelUpListener interface |
| PlayerLevelInfo | .api.PlayerLevelInfo | .api.RPGLevelingAPI$PlayerLevelInfo |
| Registration | Direct Consumer | Java Dynamic Proxy |
New Implementation Details:
// Java Dynamic Proxy for interface implementationInvocationHandler levelUpHandler = (proxy, method, args) -> { if ("onLevelUp".equals(method.getName())) { handleLevelUpEvent(args[0]); } return null;};levelUpListenerProxy = Proxy.newProxyInstance( levelUpListenerClass.getClassLoader(), new Class<?>[] { levelUpListenerClass }, levelUpHandler);registerLevelUpListenerMethod.invoke(apiInstance, levelUpListenerProxy);File Changes
Section titled “File Changes”| File | Change | Description |
|---|---|---|
RPGLevelingIntegration.java | REWRITTEN | Event-based API, Dynamic Proxy |
RPGLevelTracker.java | MODIFIED | Removed polling, added event handlers |
AchievementPlugin.java | MODIFIED | Removed scheduler, added listener registration |
AchievementGalleryPage.java | MODIFIED | Fixed filter icon ItemIds |
PluginI18n.java | MODIFIED | Added versioning system |
en-US.json | MODIFIED | Fixed duplicate key, added version |
de-DE.json | MODIFIED | Fixed duplicate key, added version |
Server Log Examples
Section titled “Server Log Examples”Successful Initialization:
[KyuubiSoft Achievements] RPGLevelingAPI class loaded successfully[KyuubiSoft Achievements] Loading event and listener classes...[KyuubiSoft Achievements] Caching listener methods...[KyuubiSoft Achievements] RPGLeveling API integration enabled![KyuubiSoft Achievements] Registered LevelUp listener with RPGLevelingAPI (dynamic proxy)[KyuubiSoft Achievements] Registered ExperienceGained listener with RPGLevelingAPI (dynamic proxy)Level-Up Achievement Trigger:
[KyuubiSoft Achievements] [RPGLeveling] LevelUp event: PlayerName leveled up from 1 to 2[KyuubiSoft Achievements] [RPGLevelTracker] LevelUp: PlayerName from 1 to 2[KyuubiSoft Achievements] Unlocking achievement test_rpg_level_2 for PlayerName[KyuubiSoft Achievements] PlayerName reached RPG Level 2!Upgrade Notes
Section titled “Upgrade Notes”- Update RPGLeveling Plugin to v0.2.0-beta-5 or newer
- Delete old
localization/folder (will be regenerated with v3) - Restart server
- Verify in logs: “Registered LevelUp listener with RPGLevelingAPI (dynamic proxy)“
Version 1.6.0 - Config Folder Structure & RPG Leveling Integration
Section titled “Version 1.6.0 - Config Folder Structure & RPG Leveling Integration”Summary
Section titled “Summary”Major update introducing a new organized folder structure for configurations and full RPG Leveling plugin integration with 35 new achievements.
New Features
Section titled “New Features”New Config Folder Structure
Section titled “New Config Folder Structure”- Separated Standard and Custom Configs - Clear distinction between plugin defaults and server customizations
- configs/ Folder - Standard configs that ship with the plugin (DO NOT MODIFY!)
achievements.json- Core achievementsmmo_achievements.json- MMO Skill Tree achievementsrpg_leveling_achievements.json- RPG Leveling achievements
- custom/ Folder - Server admin customizations (NEVER overwritten!)
custom_achievements.json- General custom achievementscustom_mmo_achievements.json- Custom MMO skill achievementscustom_rpg_leveling_achievements.json- Custom RPG leveling achievements.exampletemplate files for each type
- Automatic Folder Creation - Folders are created automatically on first start
- Safe Updates - Standard configs can be updated without losing custom achievements
- Individual Config Toggle - Each standard config can be disabled individually:
loadDefaultAchievements- Toggle core achievementsloadMmoAchievements- Toggle MMO Skill Tree achievementsloadRpgLevelingAchievements- Toggle RPG Leveling achievements
- Config Versioning - All standard configs have version numbers for automatic updates
RPG Leveling Integration
Section titled “RPG Leveling Integration”- Soft Dependency - Works without RPGLeveling installed (achievements just won’t trigger)
- Reflection-Based API - No hard dependency, graceful fallback
- Polling-Based Tracker - Checks player level/XP every 5 seconds
- 35 New Achievements:
- 6 Level Milestones (5, 10, 25, 50, 75, 100)
- 3 XP Milestones (1,000 / 10,000 / 100,000)
- 26 Mob Kill Achievements (Trork, Skeleton, Zombie, Scarak, Goblin chains)
New Trigger Types
Section titled “New Trigger Types”rpg_level- Triggers when reaching a specific character levelrpg_xp- Triggers when accumulating total XP
Custom MMO Achievements
Section titled “Custom MMO Achievements”- New File:
custom_mmo_achievements.json- Server admins can now add custom MMO skill achievements - Template Included -
.examplefile with usage examples - Override Support - Custom achievements can override default MMO achievements
New Files
Section titled “New Files”| File | Location | Description |
|---|---|---|
RPGLevelingIntegration.java | integration/ | Reflection-based API wrapper |
RPGLevelTracker.java | tracking/ | Polling tracker for level/XP changes |
rpg_leveling_achievements.json | defaults/ | 35 default RPG Leveling achievements |
custom_rpg_leveling_achievements.json.example | defaults/ | Template for custom RPG achievements |
custom_mmo_achievements.json.example | defaults/ | Template for custom MMO achievements |
Configuration
Section titled “Configuration”New Folder Structure
Section titled “New Folder Structure”KyuubiAchievements/├── config.json # Main config (root)├── README.md├── configs/ # Standard configs (DO NOT MODIFY!)│ ├── achievements.json│ ├── mmo_achievements.json│ └── rpg_leveling_achievements.json└── custom/ # Custom configs (safe from updates) ├── custom_achievements.json ├── custom_achievements.json.example ├── custom_mmo_achievements.json ├── custom_mmo_achievements.json.example ├── custom_rpg_leveling_achievements.json └── custom_rpg_leveling_achievements.json.exampleCustom RPG Leveling Achievement Example
Section titled “Custom RPG Leveling Achievement Example”{ "configVersion": 3, "achievements": [ { "id": "rpg_level_150", "category": "rpg_leveling", "iconItem": "Weapon_Sword_Adamantite", "difficulty": "epic", "requires": "rpg_level_100", "title": { "id": "transcendent", "color": "#FF00FF" }, "trigger": { "type": "rpg_level", "target": "150", "count": 1 }, "rewards": [ { "type": "item", "itemId": "Currency_Coin_Gold", "amount": 100 } ] } ]}Default RPG Leveling Achievements
Section titled “Default RPG Leveling Achievements”Level Milestones
Section titled “Level Milestones”| ID | Level | Title | Difficulty |
|---|---|---|---|
rpg_level_5 | 5 | - | Easy |
rpg_level_10 | 10 | Adventurer | Normal |
rpg_level_25 | 25 | Veteran | Normal |
rpg_level_50 | 50 | Elite | Hard |
rpg_level_75 | 75 | Champion | Hard |
rpg_level_100 | 100 | Legend | Epic |
XP Milestones
Section titled “XP Milestones”| ID | XP Required | Title | Difficulty |
|---|---|---|---|
rpg_xp_1000 | 1,000 | - | Easy |
rpg_xp_10000 | 10,000 | - | Normal |
rpg_xp_100000 | 100,000 | XP Hunter | Hard |
Mob Kill Chains (10 → 50 → 100 → 500 → 1000)
Section titled “Mob Kill Chains (10 → 50 → 100 → 500 → 1000)”- Trork Chain - Titles: Trork Hunter, Trork Slayer, Trork Bane
- Skeleton Chain - Titles: Bone Collector, Undead Hunter, Skeleton Bane
- Zombie Chain - Titles: Zombie Hunter, Zombie Slayer, Zombie Bane
- Scarak Chain - Titles: Bug Squasher, Scarak Slayer, Scarak Bane
- Goblin Chain - Titles: Goblin Hunter, Goblin Slayer, Goblin Bane
Migration from v1.5.x
Section titled “Migration from v1.5.x”- The plugin will automatically create the new folder structure on first start
- Existing configs in root folder should be manually moved:
achievements.json→configs/achievements.jsonmmo_achievements.json→configs/mmo_achievements.jsoncustom_achievements.json→custom/custom_achievements.json
- Or simply delete old configs and let the plugin regenerate them
Version 1.5.2 - Lootbag & Pending Rewards System
Section titled “Version 1.5.2 - Lootbag & Pending Rewards System”Summary
Section titled “Summary”Major update introducing the Lootbag Reward System and Pending Rewards UI. Players can now receive lootbags from achievements and collect rewards manually via the new /rewards command.
New Features
Section titled “New Features”Lootbag Reward System
Section titled “Lootbag Reward System”- New Reward Type: Lootbag - Achievements can now reward lootbags instead of direct items
- Lootbag Templates - Reusable lootbag definitions in
lootbags.json - Three Lootbag Types:
- Fixed Items: Player receives all defined items
- Random Pool: Player receives X weighted random items
- Hybrid: Guaranteed items + random picks
- Weighted Random Algorithm - Each pool item has a weight for probability control
- 14 Default Templates - Ready-to-use lootbags (starter packs, ore bundles, food crates, etc.)
- Auto-Export -
lootbags.jsonis auto-generated in server config on first start
Pending Rewards UI (/rewards)
Section titled “Pending Rewards UI (/rewards)”- New Rewards Command - View and collect all pending rewards
- Support for All Reward Types - Items, Lootbags, Commands
- Interactive Buttons:
- “Collect” for items and commands
- “Open” for lootbags (reveals contents, then collect)
- “Collect All” to grab everything at once
- Visual Feedback - Item icons, rarity colors, source achievement display
- Chat Notifications - When opening a lootbag, contents are shown in chat
Achievement Toast Improvements
Section titled “Achievement Toast Improvements”- Lootbag Display - Toast now shows “Lootbag” in rewards line when achievement grants a lootbag
Block Tracking Fix
Section titled “Block Tracking Fix”- Grass Block Fix -
Soil_Grass_Fulland similar soil blocks now correctly count for mining achievements - Previous filter was too aggressive, excluding all blocks containing “grass”
Creative Mode Ignore
Section titled “Creative Mode Ignore”- New Config Option -
tracking.ignoreCreativeMode(default:true) - Players in Creative mode don’t earn achievement progress
- Prevents “cheating” achievements via Creative mode
Configuration
Section titled “Configuration”New File: lootbags.json
Section titled “New File: lootbags.json”{ "lootbags": { "welcome_gift": { "name": "Willkommensgeschenk", "description": "Ein kleines Startpaket für neue Spieler", "icon": "Chest_Wood", "rarity": "common", "items": [ { "itemId": "Food_Bread", "amount": 10 }, { "itemId": "Torch", "amount": 16 } ] }, "random_gems": { "name": "Gem Lottery", "rarity": "rare", "pickCount": 2, "allowDuplicates": false, "pool": [ { "itemId": "Gem_Ruby", "amount": 1, "weight": 20 }, { "itemId": "Gem_Emerald", "amount": 1, "weight": 30 } ] } }}Achievement Reward Example
Section titled “Achievement Reward Example”{ "id": "welcome_achievement", "rewards": [ { "type": "lootbag", "lootbagId": "welcome_gift" } ]}Config Option
Section titled “Config Option”"tracking": { "ignoreCreativeMode": true}Default Lootbag Templates
Section titled “Default Lootbag Templates”| ID | Name | Rarity | Type |
|---|---|---|---|
starter_pack | Starter Pack | Common | Fixed |
welcome_gift | Willkommensgeschenk | Common | Fixed |
copper_bundle | Kupfer-Erzbündel | Uncommon | Fixed |
iron_tools | Eisen-Werkzeugset | Rare | Fixed |
miner_reward | Miner’s Treasure | Uncommon | Fixed |
ore_bundle_common | Erzbündel (Basis) | Common | Fixed |
ore_bundle_rare | Erzbündel (Selten) | Rare | Fixed |
ore_bundle_epic | Erzbündel (Episch) | Epic | Fixed |
food_crate | Proviantkiste | Common | Random Pool |
combat_loot | Warrior’s Cache | Rare | Hybrid |
explorer_chest | Explorer’s Chest | Epic | Random Pool |
legendary_hoard | Dragon’s Hoard | Legendary | Hybrid |
playtime_bronze | Bronze-Treuebelohnung | Common | Fixed |
playtime_silver | Silber-Treuebelohnung | Uncommon | Fixed |
playtime_gold | Gold-Treuebelohnung | Rare | Hybrid |
Version 1.5.1 - Gradient & Rainbow Support
Section titled “Version 1.5.1 - Gradient & Rainbow Support”New Feature
Section titled “New Feature”- Gradient & Rainbow on Username - Trailing
<gradient:...>or<rainbow>tags from LuckPerms prefix now apply to the username - Gradient & Rainbow on Chat Message - Trailing
<gradient:...>or<rainbow>tags from LuckPerms suffix now apply to the chat message - Each character gets individually colored for smooth gradient/rainbow effects
- Example: Prefix
<gradient:#ff85fb:#85fbff>→ Username appears with pink-to-cyan gradient - Example: Prefix
<rainbow>→ Username appears with rainbow colors
Technical
Section titled “Technical”- New
AdventureConverter.TrailingGradientclass for extracting gradient/rainbow info - New
AdventureConverter.applyGradient()method for per-character color interpolation - New
AdventureConverter.applyRainbow()method for HSV-based rainbow coloring - HSV to RGB conversion for smooth color transitions
Version 1.5.0 - LuckPerms & MHUD Release
Section titled “Version 1.5.0 - LuckPerms & MHUD Release”Summary
Section titled “Summary”This is a major release consolidating all 1.4.x improvements into a stable version.
New Features
Section titled “New Features”LuckPerms Integration (since 1.4.0)
Section titled “LuckPerms Integration (since 1.4.0)”- Automatic Prefix Retrieval - LuckPerms prefixes are fetched automatically from the API
- Full Color Support - Rainbow, gradients, legacy codes (&a, &b), hex colors
- Trailing Style Support - Active styles at the end of prefix apply to username (color, bold, italic, underlined, strikethrough)
- Separate Prefix/Suffix Styling - Prefix styles → Username, Suffix styles → Message color
- Combined Chat Format -
[LuckPerms-Prefix] [Achievement-Title] Username: message - Lazy Initialization - Works regardless of plugin load order
MHUD Integration (since 1.4.7)
Section titled “MHUD Integration (since 1.4.7)”- Multiple HUD Support - Full integration with MHUD plugin
- Conflict Prevention - No more crashes when multiple plugins use Custom HUDs
- Graceful Fallback - Works with or without MHUD installed
- Smart Detection - Automatically detects and uses MHUD when available
Technical
Section titled “Technical”- Adventure MiniMessage library for color parsing (same as LuckPerms uses)
AdventureConverterutility class for MiniMessage → Hytale Message conversionMHUDIntegrationclass for MHUD communication via reflection- Shadow JAR includes relocated Adventure libraries
Bug Fixes
Section titled “Bug Fixes”- Fixed color inheritance for complex LuckPerms prefixes
- Fixed LuckPerms load order issues with lazy initialization
- Fixed “Failed to apply CustomUI HUD commands” crash with MHUD
- Fixed crash when multiple plugins use Custom HUD without MHUD
- Removed debug logging (now uses FINE level)
Dependencies
Section titled “Dependencies”Optional:
- LuckPerms (for prefix/suffix integration)
- MHUD (for multiple HUD support)
Version 1.4.9 - MHUD Double-Show Fix
Section titled “Version 1.4.9 - MHUD Double-Show Fix”Bugfix
Section titled “Bugfix”- Fixed “Failed to apply CustomUI HUD commands” crash when using MHUD - Removed duplicate
show()call - MHUD internally calls
build()andupdate()when adding a HUD - Calling
show()after that caused conflicting UI commands and client crash - Now: When using MHUD, only
setCustomHud()is called, no additionalshow()
Version 1.4.8 - HUD Crash Prevention
Section titled “Version 1.4.8 - HUD Crash Prevention”Bugfix
Section titled “Bugfix”- Fixed crash when multiple plugins use Custom HUD without MHUD - Toasts are now completely skipped if another plugin’s HUD is active
- Early detection: Toast queue is not even started if conflict is detected
- Clear warning in server log recommending MHUD installation
- No more retry loops that could cause crashes
- Chat notifications still work (from AchievementService) when toast is skipped
Version 1.4.7 - MHUD Integration
Section titled “Version 1.4.7 - MHUD Integration”New Feature
Section titled “New Feature”- MHUD Integration - Full support for MHUD (Multiple HUD) plugin
- When MHUD is installed, toast notifications use the MHUD system allowing multiple HUDs simultaneously
- No more conflicts with other plugins that use Custom HUDs
- Automatic detection and lazy initialization of MHUD at runtime
- Falls back to standard HUD system if MHUD is not available
- Added MHUD as optional dependency in manifest.json
Technical
Section titled “Technical”- New
MHUDIntegrationclass handles MHUD communication via reflection ToastManagernow prefers MHUD when available, with graceful fallback- HUD identifier:
KyuubiSoft_Achievements
Version 1.4.6 - HUD Conflict Prevention & Debug Logging
Section titled “Version 1.4.6 - HUD Conflict Prevention & Debug Logging”Bugfix
Section titled “Bugfix”- Fixed HUD conflict with other plugins - Toast notifications now check if another plugin’s HUD is active
- If another plugin has a Custom HUD active, our toast waits and retries after 2 seconds
- Prevents server crashes when multiple plugins try to use Custom HUD simultaneously
- Only our own HUDs (AchievementToastHud, EmptyHud) are replaced - other plugins’ HUDs are respected
- Added detailed logging for suffix color extraction - Helps debug
<#ffffff>format parsing - Logs now show step-by-step extraction: input, positions, intermediate values
Version 1.4.5 - Separate Prefix/Suffix Styling
Section titled “Version 1.4.5 - Separate Prefix/Suffix Styling”Change
Section titled “Change”- Prefix styles → Username - Trailing styles from LuckPerms Prefix are applied to the username
- Suffix styles → Message color - Trailing color from LuckPerms Suffix is applied to the chat message
- Style inheritance - Unclosed styles (bold, italic) from Prefix carry over to the message
- Example: Prefix
<bold>[Mythic] <#be8fff>→ Username purple + bold, Message also bold - Example: Suffix
<#aaaaaa>→ Message appears in gray
Version 1.4.4 - LuckPerms Load Order Fix
Section titled “Version 1.4.4 - LuckPerms Load Order Fix”Bugfix
Section titled “Bugfix”- Fixed LuckPerms load order - Added
OptionalDependenciesin manifest.json - Plugin now always loads AFTER LuckPerms (if installed)
- Works with
--accept-early-pluginsflag - Combined with lazy initialization from 1.4.3 for maximum compatibility
Version 1.4.3 - Lazy LuckPerms Initialization
Section titled “Version 1.4.3 - Lazy LuckPerms Initialization”Bugfix
Section titled “Bugfix”- Fixed LuckPerms loading order issue - LuckPerms integration now uses lazy initialization
- Previously:
LuckPerms found but not yet loaded - prefix integration disabled - Now: LuckPerms API is initialized on first use (when player sends first chat message)
- Works regardless of plugin load order - no more
--accept-early-pluginsneeded
Version 1.4.2 - Trailing Styles for Username
Section titled “Version 1.4.2 - Trailing Styles for Username”New Feature
Section titled “New Feature”- Trailing Style Support - All active styles at the end of the LuckPerms prefix are applied to the username
- Supported styles: color, bold, italic, underlined, strikethrough
- Example:
<bold><#2b2b2b>[<gradient:#ff85fb:#85fbff>Mythic</gradient><#2b2b2b>] <#be8fff>→ Username appears in#be8fff(purple) and bold - New
AdventureConverter.TrailingStyleclass contains all trailing formatting info - New
AdventureConverter.getTrailingStyle()method extracts color + styles from formatted text
Version 1.4.1 - Color Inheritance Fix
Section titled “Version 1.4.1 - Color Inheritance Fix”Bugfix
Section titled “Bugfix”- Fixed color inheritance for complex LuckPerms prefixes - Colors now properly inherit to child elements
- Example:
<bold><#2b2b2b>[<gradient>Mythic</gradient><#2b2b2b>]now correctly colors the closing bracket - Adventure Component styles (color, bold, italic) are now properly passed down to children
Version 1.4.0 - LuckPerms Integration
Section titled “Version 1.4.0 - LuckPerms Integration”New: LuckPerms Chat Prefix Integration
Section titled “New: LuckPerms Chat Prefix Integration”- Automatic Prefix Retrieval - LuckPerms prefixes are now automatically fetched from the API
- Full Color Support - All LuckPerms color formats are supported:
<rainbow>Text</rainbow>- Rainbow effect<gradient:#FF0000:#00FF00>Text</gradient>- Color gradients&a,&b,&c, etc. - Legacy Minecraft color codes<color:#FF5555>Text</color>- Hex colors
- Combined Chat Format - LuckPerms prefix + Achievement title in one line:
[LuckPerms-Prefix] [Achievement-Title] Username: message
- Soft-Dependency - Works with or without LuckPerms installed
- No Manual Config Required - Prefixes are pulled directly from LuckPerms groups
Technical Changes
Section titled “Technical Changes”- Added Adventure MiniMessage library for color parsing (same as LuckPerms uses)
- New
AdventureConverterutility class for MiniMessage → Hytale Message conversion LuckPermsIntegrationnow retrieves prefixes via multiple fallback methods:- User cached metadata (contextual)
- User cached metadata (non-contextual)
- Primary group cached metadata
- Direct group node parsing (
meta.prefix.*format)
- Shadow JAR now includes relocated Adventure libraries (
com.hytale.achievements.lib.kyori)
Version 1.3.0 - Display Options & Localization
Section titled “Version 1.3.0 - Display Options & Localization”New Features
Section titled “New Features”Achievement Toast Banner
Section titled “Achievement Toast Banner”- Display Mode Config - Choose how achievement unlocks are displayed:
chat- Classic chat message (default)banner- Toast notification in the top-right cornerboth- Both chat and banner
- Toast Features:
- Shows achievement name, title reward, item rewards
- Achievement icon on the left
- Auto-hides after configurable duration
- New toast cancels previous one (no stacking)
- Fixed width (300px), dynamic height
Default Achievements Toggle
Section titled “Default Achievements Toggle”loadDefaultAchievementsconfig option- Set to
falseto use only custom achievements - Perfect for servers with fully custom achievement sets
Localization Improvements
Section titled “Localization Improvements”- Chat messages now localized (“Achievement Unlocked”, “Title Unlocked”)
- All notification messages support DE/EN
Version 1.2.0 - Complete Overhaul
Section titled “Version 1.2.0 - Complete Overhaul”Custom Achievements System
Section titled “Custom Achievements System”- Custom Achievements File - Server operators can define custom achievements in
custom_achievements.json - Custom achievements can override default achievements (same ID)
- Automatically merged with default achievements on load
- Template file
custom_achievements.json.exampleis auto-generated
New Field: additionalInfo
- Displays additional information below the reward line in the gallery
- Ideal for event hints, special conditions, etc.
- Configurable with text and color
{ "id": "summer_event_special", "additionalInfo": { "text": "Only available during the summer event!", "color": "#FF9900" }}Session-Based Playtime Tracking
Section titled “Session-Based Playtime Tracking”Before (Scheduler-based)
- Playtime was incremented every minute via scheduler
- On server crash: Loss of entire session since last save
Now (Session-based)
- Session start time is saved on player connect
- Playtime is calculated on player disconnect
- 15-minute checkpoints: Automatic intermediate saves every 15 minutes
- Live calculation: UI always shows current playtime in real-time
- Maximum data loss: 15 minutes instead of entire session
Achievement Gallery (/achievements)
Section titled “Achievement Gallery (/achievements)”New Features
- Search Field - Search achievements by name, description, ID, and category
- “Completed” Filter Tab - New filter shows all unlocked achievements
- Smart Chain Display - For achievement chains, only the next incomplete achievement is shown (completed ones appear in the “Completed” tab)
- Chain Progress Counter - Shows progress like
[2/5]for chains - Progress with Units - Progress now shows units (e.g., “162 / 300 Minutes”, “25 / 50 Messages”)
- Live Playtime - Playtime achievements always show current session time
- AdditionalInfo Display - Shows extra info for custom achievements (highlighted in orange)
- Hover Effects - All filter buttons and pagination buttons
Chain Detection
- Now supports both naming patterns:
- Numeric:
spider_hunter_1->spider_hunter_2->spider_hunter_3 - Requires-based:
first_hour->five_hours->ten_hours
- Numeric:
- Chain counter now correctly increases (1/4, 2/4, 3/4) when completing achievements
UI Improvements
- Entry height increased to 85px for better readability
- Status column widened to 95px (no text truncation)
- Chain display shows “Current:” instead of “Next:” label
- Trigger descriptions now show actual progress (e.g., “0 / 50 Messages” instead of “0/4 completed”)
Title Selection (/title)
Section titled “Title Selection (/title)”Full Localization (DE/EN)
- Title, current label, no title, clear button
- Pagination: Prev, Next, Page
- Statistics: “Titles: X/Y unlocked”
- Origin: “From: {Achievement}”
- Select button, active indicator
UI Improvements
- Pagination buttons widened to 180px (no text truncation)
- Proper spacing from top border
Bug Fixes
Section titled “Bug Fixes”- Fixed double-colon in reward display (“Reward:: Title” -> “Reward: Title”)
- Fixed chain counter going down instead of up when completing achievements
- Fixed various German translation issues (umlauts, numbers)
Version 1.1.0 - Initial Release
Section titled “Version 1.1.0 - Initial Release”Features
Section titled “Features”- 487 built-in achievements across 6 categories
- Achievement Gallery UI
- Title Selection UI
- Player commands (
/achievements,/titles) - Admin commands (
/achievementadmin) - Progress tracking for all trigger types
- Item and command rewards
- Multi-language support (EN, DE)
- Statistics export
Categories
Section titled “Categories”- Combat (49 achievements)
- Progression (102 achievements)
- Exploration (32 achievements)
- Social (20 achievements)
- Husbandry (29 achievements)
- Secret (37 achievements)
Upgrade Notes
Section titled “Upgrade Notes”Upgrading to 2.6.0
Section titled “Upgrading to 2.6.0”- LevelingCore replaces the direct RPGLeveling dependency. If you use RPGLeveling, ensure LevelingCore is also installed.
- 10 new trigger types are available — no migration needed, they are additive.
- ShowcaseCompat is automatic if the Showcase mod is present.
Upgrading to 2.3.0
Section titled “Upgrading to 2.3.0”- MySQL Storage is optional. File storage remains the default. To enable MySQL, configure the Core plugin’s MySQL settings first.
- Tracker HUD can be disabled via
trackerHud.enabled: falseinconfig.json.
Upgrading to 1.6.1
Section titled “Upgrading to 1.6.1”- Update RPGLeveling Plugin to v0.2.0-beta-5 or newer (required for event API)
- Delete old
localization/folder (will be regenerated with v3) - Restart server
- Verify in logs: “Registered LevelUp listener with RPGLevelingAPI (dynamic proxy)“
Upgrading to 1.6.0
Section titled “Upgrading to 1.6.0”Automatic Migration: The plugin will automatically:
- Create the new folder structure (
configs/,custom/) - Generate default achievement files
- Create template files for custom achievements
Manual Steps:
- Move existing custom achievements to
custom/custom_achievements.json - Review new config options (
loadMmoAchievements,loadRpgLevelingAchievements)
Upgrading to 1.5.0
Section titled “Upgrading to 1.5.0”No breaking changes. The plugin is fully backwards compatible.
Optional: Install MHUD for better HUD compatibility with other plugins.
Upgrading to 1.2.0
Section titled “Upgrading to 1.2.0”Recommendation: When updating from 1.1.x, we recommend deleting the existing
achievements.jsonfile and restarting the server. The plugin will automatically generate a new default file. Custom achievements should be moved to thecustom_achievements.jsonfile so they are not overwritten by future updates.
Fresh Install
Section titled “Fresh Install”- Place the JAR in your plugins folder
- Start the server
- Configure
config.jsonas needed - Add custom achievements to
custom/custom_achievements.json