Skip to content

Changelog

Version 2.6.0 - LevelingCore, ShowcaseCompat & Objective Expansion

Section titled “Version 2.6.0 - LevelingCore, ShowcaseCompat & Objective Expansion”

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.

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.

The admin achievement management popup now renders in all 9 supported languages based on the admin’s language setting.

Added compatibility layer for the Showcase mod. Achievements can now be displayed in Showcase displays and interacted with through the Showcase UI.

Added the following missing objective trigger types:

  • items_consumed — Track food/potion consumption
  • items_dropped — Track items dropped
  • items_picked_up — Track items picked up
  • deaths — Track player deaths
  • damage_dealt — Track total damage dealt
  • damage_taken — Track total damage taken
  • jumps — Track player jumps
  • sprinting_distance — Track sprinting distance
  • swimming_distance — Track swimming distance
  • fishing_catches — Track fishing catches
  • 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/*.json are 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-US after save)

Version 2.5.0 - Per-Player Language & Memory Fixes

Section titled “Version 2.5.0 - Per-Player Language & Memory Fixes”

Players can now set their preferred language with /kslang. Achievement notifications, gallery UI, and title display all respect the player’s language setting.

  • 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”

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.

  • 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”

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.

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

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.

  • 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

  • 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
  • Documented Hytale nameplate limitations
    • Nameplates only support plain text (no colors)
    • Multiline text is not supported in nameplates
    • titlePosition options "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”

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.json and 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.


All lootbag names, descriptions, and rarities are now fully localizable.

Translation Keys:

Key PatternDescription
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.

  • Localization version bumped to v4 (auto-updates existing installations)
  • Lootbag translations moved from .lang files to JSON (localization/*.json)

  • 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”

Achievement triggers now support comma-separated targets for matching multiple entities or items:

{
"trigger": {
"type": "kills",
"target": "Spider,Spider_Cave,Spider_Frost",
"count": 100
}
}
  • MMO Skills filter auto-hides when MMO SkillTree plugin is not installed
  • RPG Leveling filter auto-hides when RPG Leveling plugin is not installed
  • Fixed Config Migration - Version constants updated to trigger auto-updates correctly
  • Fixed 16+ Invalid Item IDs - All items validated against server item list

  • Config version fix (migration now works correctly)

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.

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”)

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.

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:

PositionExample
before_name[Title] [Lv.15] Username
after_name[Title] Username [Lv.15]
after_title[Title] [Lv.15] Username

Requirements:

  • RPGLeveling plugin must be installed
  • showRpgLevel must be set to true
FileChanges
AchievementGallery.uiAdded #UnlockedDate label to all entry elements
AchievementGalleryPage.javaAdded formatUnlockDate() method and display logic
api/AchievementAPI.javaNEW - Complete public API class
AchievementPlugin.javaAPI initialization in setup(), RPGLevelingIntegration passed to TitleDisplayManager
AchievementService.javaUnlock notifications to API listeners
AchievementConfig.javaNew display options for RPG Level
TitleDisplayManager.javaLevel display integrated in nametag and chat

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”

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.

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_login implemented
  • 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: broadcastToChat was sending broadcasts for ALL unlocked achievements
  • Desired Behavior: Broadcasts only for achievements with title unlocks
  • Solution: Added condition in AchievementService.java to check for title presence

Corrected 150+ invalid item IDs across all configuration files.

Global Naming Conventions (Minecraft → Hytale)

Section titled “Global Naming Conventions (Minecraft → Hytale)”
Minecraft-StyleHytale-StyleDescription
Tool_Axe_*Tool_Hatchet_*Axes are called Hatchets
Food_ApplePlant_Fruit_AppleFruits under Plant_
Food_BreadConsumable_Food_BreadFood under Consumable_
Armor_Chestplate_*Armor_*_ChestArmor 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 TierAdamantite TierNo Diamond in Hytale

Materials → Ingredients:

  • Material_StringIngredient_Fibre
  • Material_PoisonIngredient_Venom
  • Material_FurIngredient_Hide_Thick
  • Material_LeatherIngredient_Hide_Medium
  • Material_BoneIngredient_Bone_Fragment
  • Ingredient_FeatherIngredient_Feathers_Light

Gems:

  • Gem_RubyRock_Gem_Ruby
  • Gem_EmeraldRock_Gem_Emerald
  • Gem_SapphireRock_Gem_Sapphire

Workstations:

  • Bench_CarpenterBench_WorkBench
  • Bench_StonecutterBench_Builders
  • Bench_AnvilBench_Armory

Potions:

  • Consumable_Potion_Health_WeakPotion_Health_Lesser
  • Consumable_Potion_Health_StrongPotion_Health_Greater
  • Consumable_Potion_HealthPotion_Health

Wood:

  • Wood_Oak_LogWood_Oak_Trunk
  • Wood_Birch_LogWood_Birch_Trunk
FileChanges
lootbags.json~45 Item IDs corrected
achievements.jsoniconItems corrected, weekend trigger fixed
mmo_skills_achievements.jsonWeapon/Tool/Bench corrections
rpg_leveling_achievements.jsonMaterial→Ingredient corrections
AchievementPlugin.javaWeekend-login trigger added
AchievementService.javaBroadcast condition for title-only
{
"trigger": {
"type": "weekend_login",
"count": 1
}
}

Triggers when a player logs in on Saturday or Sunday.

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
  • Material_Orb_Experience doesn’t exist → Replaced with Rock_Gem_Sapphire
  • Material_Orb_Time doesn’t exist → Replaced with Rock_Gem_Sapphire
  • No Flesh_Rotten item → Replaced with Food_Wildmeat_Raw
  • No Paper item → Replaced with Deco_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”

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 LevelUpListener and ExperienceGainedListener interfaces :::

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 LevelUpListener and ExperienceGainedListener interfaces
  • Solution: Complete rewrite using Java Dynamic Proxy for interface implementation
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
  • Root Cause: Duplicate key bug_squasher in localization files
  • Renamed conflicting title to bug_squasher_title
  • Added localization versioning system (now v3) with auto-update and backup

RPGLevelingIntegration.java - COMPLETE REWRITE

Section titled “RPGLevelingIntegration.java - COMPLETE REWRITE”
AspectOld (v1.6.0)New (v1.6.1)
ApproachPolling (every 5s)Event-based (real-time)
API VersionUnknown0.2.0-beta-5
Event Classes.api.events.LevelUpEvent.api.LevelUpEvent
Listener TypeConsumer<T>LevelUpListener interface
PlayerLevelInfo.api.PlayerLevelInfo.api.RPGLevelingAPI$PlayerLevelInfo
RegistrationDirect ConsumerJava 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);
FileChangeDescription
RPGLevelingIntegration.javaREWRITTENEvent-based API, Dynamic Proxy
RPGLevelTracker.javaMODIFIEDRemoved polling, added event handlers
AchievementPlugin.javaMODIFIEDRemoved scheduler, added listener registration
AchievementGalleryPage.javaMODIFIEDFixed filter icon ItemIds
PluginI18n.javaMODIFIEDAdded versioning system
en-US.jsonMODIFIEDFixed duplicate key, added version
de-DE.jsonMODIFIEDFixed duplicate key, added version

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!
  1. Update RPGLeveling Plugin to v0.2.0-beta-5 or newer
  2. Delete old localization/ folder (will be regenerated with v3)
  3. Restart server
  4. 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”

Major update introducing a new organized folder structure for configurations and full RPG Leveling plugin integration with 35 new achievements.

  • 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 achievements
    • mmo_achievements.json - MMO Skill Tree achievements
    • rpg_leveling_achievements.json - RPG Leveling achievements
  • custom/ Folder - Server admin customizations (NEVER overwritten!)
    • custom_achievements.json - General custom achievements
    • custom_mmo_achievements.json - Custom MMO skill achievements
    • custom_rpg_leveling_achievements.json - Custom RPG leveling achievements
    • .example template 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 achievements
    • loadMmoAchievements - Toggle MMO Skill Tree achievements
    • loadRpgLevelingAchievements - Toggle RPG Leveling achievements
  • Config Versioning - All standard configs have version numbers for automatic updates
  • 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)
  • rpg_level - Triggers when reaching a specific character level
  • rpg_xp - Triggers when accumulating total XP
  • New File: custom_mmo_achievements.json - Server admins can now add custom MMO skill achievements
  • Template Included - .example file with usage examples
  • Override Support - Custom achievements can override default MMO achievements
FileLocationDescription
RPGLevelingIntegration.javaintegration/Reflection-based API wrapper
RPGLevelTracker.javatracking/Polling tracker for level/XP changes
rpg_leveling_achievements.jsondefaults/35 default RPG Leveling achievements
custom_rpg_leveling_achievements.json.exampledefaults/Template for custom RPG achievements
custom_mmo_achievements.json.exampledefaults/Template for custom MMO achievements
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
{
"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 }
]
}
]
}
IDLevelTitleDifficulty
rpg_level_55-Easy
rpg_level_1010AdventurerNormal
rpg_level_2525VeteranNormal
rpg_level_5050EliteHard
rpg_level_7575ChampionHard
rpg_level_100100LegendEpic
IDXP RequiredTitleDifficulty
rpg_xp_10001,000-Easy
rpg_xp_1000010,000-Normal
rpg_xp_100000100,000XP HunterHard

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
  1. The plugin will automatically create the new folder structure on first start
  2. Existing configs in root folder should be manually moved:
    • achievements.jsonconfigs/achievements.json
    • mmo_achievements.jsonconfigs/mmo_achievements.json
    • custom_achievements.jsoncustom/custom_achievements.json
  3. 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”

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 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.json is auto-generated in server config on first start
  • 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
  • Lootbag Display - Toast now shows “Lootbag” in rewards line when achievement grants a lootbag
  • Grass Block Fix - Soil_Grass_Full and similar soil blocks now correctly count for mining achievements
  • Previous filter was too aggressive, excluding all blocks containing “grass”
  • New Config Option - tracking.ignoreCreativeMode (default: true)
  • Players in Creative mode don’t earn achievement progress
  • Prevents “cheating” achievements via Creative mode
{
"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 }
]
}
}
}
{
"id": "welcome_achievement",
"rewards": [
{ "type": "lootbag", "lootbagId": "welcome_gift" }
]
}
"tracking": {
"ignoreCreativeMode": true
}
IDNameRarityType
starter_packStarter PackCommonFixed
welcome_giftWillkommensgeschenkCommonFixed
copper_bundleKupfer-ErzbündelUncommonFixed
iron_toolsEisen-WerkzeugsetRareFixed
miner_rewardMiner’s TreasureUncommonFixed
ore_bundle_commonErzbündel (Basis)CommonFixed
ore_bundle_rareErzbündel (Selten)RareFixed
ore_bundle_epicErzbündel (Episch)EpicFixed
food_crateProviantkisteCommonRandom Pool
combat_lootWarrior’s CacheRareHybrid
explorer_chestExplorer’s ChestEpicRandom Pool
legendary_hoardDragon’s HoardLegendaryHybrid
playtime_bronzeBronze-TreuebelohnungCommonFixed
playtime_silverSilber-TreuebelohnungUncommonFixed
playtime_goldGold-TreuebelohnungRareHybrid

Version 1.5.1 - Gradient & Rainbow Support

Section titled “Version 1.5.1 - Gradient & Rainbow Support”
  • 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
  • New AdventureConverter.TrailingGradient class 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

This is a major release consolidating all 1.4.x improvements into a stable version.

  • 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
  • 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
  • Adventure MiniMessage library for color parsing (same as LuckPerms uses)
  • AdventureConverter utility class for MiniMessage → Hytale Message conversion
  • MHUDIntegration class for MHUD communication via reflection
  • Shadow JAR includes relocated Adventure libraries
  • 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)

Optional:

  • LuckPerms (for prefix/suffix integration)
  • MHUD (for multiple HUD support)

  • Fixed “Failed to apply CustomUI HUD commands” crash when using MHUD - Removed duplicate show() call
  • MHUD internally calls build() and update() when adding a HUD
  • Calling show() after that caused conflicting UI commands and client crash
  • Now: When using MHUD, only setCustomHud() is called, no additional show()

  • 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

  • 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
  • New MHUDIntegration class handles MHUD communication via reflection
  • ToastManager now 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”
  • 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”
  • 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

  • Fixed LuckPerms load order - Added OptionalDependencies in manifest.json
  • Plugin now always loads AFTER LuckPerms (if installed)
  • Works with --accept-early-plugins flag
  • 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”
  • 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-plugins needed

Version 1.4.2 - Trailing Styles for Username

Section titled “Version 1.4.2 - Trailing Styles for Username”
  • 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.TrailingStyle class contains all trailing formatting info
  • New AdventureConverter.getTrailingStyle() method extracts color + styles from formatted text

  • 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

  • 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
  • Added Adventure MiniMessage library for color parsing (same as LuckPerms uses)
  • New AdventureConverter utility class for MiniMessage → Hytale Message conversion
  • LuckPermsIntegration now retrieves prefixes via multiple fallback methods:
    1. User cached metadata (contextual)
    2. User cached metadata (non-contextual)
    3. Primary group cached metadata
    4. 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”
  • Display Mode Config - Choose how achievement unlocks are displayed:
    • chat - Classic chat message (default)
    • banner - Toast notification in the top-right corner
    • both - 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
  • loadDefaultAchievements config option
  • Set to false to use only custom achievements
  • Perfect for servers with fully custom achievement sets
  • Chat messages now localized (“Achievement Unlocked”, “Title Unlocked”)
  • All notification messages support DE/EN

  • 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.example is 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"
}
}

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

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
  • 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”)

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
  • 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)

  • 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
  • Combat (49 achievements)
  • Progression (102 achievements)
  • Exploration (32 achievements)
  • Social (20 achievements)
  • Husbandry (29 achievements)
  • Secret (37 achievements)

  • 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.
  • 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: false in config.json.
  1. Update RPGLeveling Plugin to v0.2.0-beta-5 or newer (required for event API)
  2. Delete old localization/ folder (will be regenerated with v3)
  3. Restart server
  4. Verify in logs: “Registered LevelUp listener with RPGLevelingAPI (dynamic proxy)“

Automatic Migration: The plugin will automatically:

  1. Create the new folder structure (configs/, custom/)
  2. Generate default achievement files
  3. Create template files for custom achievements

Manual Steps:

  • Move existing custom achievements to custom/custom_achievements.json
  • Review new config options (loadMmoAchievements, loadRpgLevelingAchievements)

No breaking changes. The plugin is fully backwards compatible.

Optional: Install MHUD for better HUD compatibility with other plugins.

Recommendation: When updating from 1.1.x, we recommend deleting the existing achievements.json file and restarting the server. The plugin will automatically generate a new default file. Custom achievements should be moved to the custom_achievements.json file so they are not overwritten by future updates.

  1. Place the JAR in your plugins folder
  2. Start the server
  3. Configure config.json as needed
  4. Add custom achievements to custom/custom_achievements.json