Changelog
Version 2.6.0 - LevelingCore, ShowcaseCompat & Objective Expansion
New Features
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
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
The admin achievement management popup now renders in all 9 supported languages based on the admin's language setting.
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
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
- 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
New Features
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
- 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
New Features
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
- Announcement Padding Fix — Info Hub announcement display padding corrected.
Version 2.3.0 - MySQL Storage, Tracker Config & Performance
New Features
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
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
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
- 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
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
- 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
New Features
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
New Features
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
- 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
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
New Features
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
- 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
- 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
Bug Fixes
- Config version fix (migration now works correctly)
Version 1.8.0 - API & UI Updates
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
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
External plugins can now interact with the Achievement System through a stable API.
import com.hytale.achievements.api.AchievementAPI;
// Get API instance
AchievementAPI api = AchievementAPI.getInstance();
// Check availability
if (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
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
| 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
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
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
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
- 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
Corrected 150+ invalid item IDs across all configuration files.
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
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
| 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
{
"trigger": {
"type": "weekend_login",
"count": 1
}
}
Triggers when a player logs in on Saturday or Sunday.
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
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
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.
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
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
- 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
- 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
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 implementation
InvocationHandler 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
| 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
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
- 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
Summary
Major update introducing a new organized folder structure for configurations and full RPG Leveling plugin integration with 35 new achievements.
New Features
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
- 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
rpg_level- Triggers when reaching a specific character levelrpg_xp- Triggers when accumulating total XP
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
| 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
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.example
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
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
| 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)
- 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
- 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
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
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)
- 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
- Lootbag Display - Toast now shows "Lootbag" in rewards line when achievement grants a lootbag
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
- New Config Option -
tracking.ignoreCreativeMode(default:true) - Players in Creative mode don't earn achievement progress
- Prevents "cheating" achievements via Creative mode
Configuration
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
{
"id": "welcome_achievement",
"rewards": [
{ "type": "lootbag", "lootbagId": "welcome_gift" }
]
}
Config Option
"tracking": {
"ignoreCreativeMode": true
}
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
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
- 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
Summary
This is a major release consolidating all 1.4.x improvements into a stable version.
New Features
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)
- 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
- 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
- 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
Optional:
- LuckPerms (for prefix/suffix integration)
- MHUD (for multiple HUD support)
Version 1.4.9 - MHUD Double-Show Fix
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
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
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
- 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
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
Debug
- 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
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
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
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
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
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
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
- 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
New Features
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
loadDefaultAchievementsconfig option- Set to
falseto use only custom achievements - Perfect for servers with fully custom achievement sets
Localization Improvements
- Chat messages now localized ("Achievement Unlocked", "Title Unlocked")
- All notification messages support DE/EN
Version 1.2.0 - Complete Overhaul
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
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)
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)
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
- 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
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
- Combat (49 achievements)
- Progression (102 achievements)
- Exploration (32 achievements)
- Social (20 achievements)
- Husbandry (29 achievements)
- Secret (37 achievements)
Upgrade Notes
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
- 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
- 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
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
No breaking changes. The plugin is fully backwards compatible.
Optional: Install MHUD for better HUD compatibility with other plugins.
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
- Place the JAR in your plugins folder
- Start the server
- Configure
config.jsonas needed - Add custom achievements to
custom/custom_achievements.json