Skip to content

Configuration

The plugin uses config.json for all settings. This page documents every available option.

:::info Version 1.6.0+ Starting with version 1.6.0, the Achievement Plugin uses a new organized folder structure that separates standard configurations from custom configurations. :::

Key Features:

  • Versioned Standard Configs - All standard configs have version numbers for automatic updates
  • Individual Toggle - Each standard config can be disabled individually
  • Custom Overrides - Custom configs are always loaded and never overwritten
KyuubiAchievements/
├── config.json # Main plugin configuration
├── README.md # Documentation
├── configs/ # Standard configs (DO NOT MODIFY!)
│ ├── achievements.json # Default achievements
│ ├── mmo_achievements.json # MMO Skill Tree achievements
│ ├── rpg_leveling_achievements.json # RPG Leveling achievements
│ └── lootbags.json # Lootbag definitions
├── custom/ # Custom configs for server admins
│ ├── custom_achievements.json # Your custom achievements
│ ├── custom_achievements.json.example # Template
│ ├── custom_mmo_achievements.json # Your custom MMO skill achievements
│ ├── custom_mmo_achievements.json.example # Template
│ ├── custom_rpg_leveling_achievements.json # Your custom RPG leveling achievements
│ ├── custom_rpg_leveling_achievements.json.example # Template
│ ├── custom_lootbags.json # Your custom lootbags
│ └── custom_lootbags.json.example # Template
└── localization/ # Language files
├── en-US.json # English (default)
├── de-DE.json # German
├── fr-FR.json # French
├── custom_en-US.json # Custom English translations
├── custom_de-DE.json # Custom German translations
├── custom_en-US.json.example # Custom translation template
└── custom_de-DE.json.example # Custom translation template
  • config.json - Main plugin configuration (language, display settings, notifications, etc.)
  • README.md - Quick reference documentation

Contains standard achievement definitions that ship with the plugin. These files should NOT be modified as they may be overwritten during plugin updates.

FileDescription
achievements.jsonCore achievements (combat, progression, exploration, social)
mmo_achievements.jsonAchievements for MMO Skill Tree integration (skill levels)
rpg_leveling_achievements.jsonAchievements for RPG Leveling integration (character level, XP, mob kills)
lootbags.jsonLootbag definitions with item pools and weighted chances

Contains custom achievement definitions created by server administrators. These files are NEVER overwritten by plugin updates.

FileDescription
custom_achievements.jsonGeneral custom achievements
custom_mmo_achievements.jsonCustom MMO skill achievements
custom_rpg_leveling_achievements.jsonCustom RPG leveling achievements
custom_lootbags.jsonCustom lootbag definitions
*.exampleTemplate files showing the correct format

:::info Version 1.8.5+ Starting with version 1.8.5, all language files are stored in the localization/ folder. :::

Contains language files for the plugin UI and messages. Standard files may be updated during plugin updates, but custom files are NEVER overwritten.

FileDescription
en-US.jsonEnglish translations (default)
de-DE.jsonGerman translations
fr-FR.jsonFrench translations
custom_*.jsonCustom translation overrides (never overwritten)
custom_*.json.exampleTemplates for custom translations

Custom translation files allow you to override or add translations without losing them during updates:

  1. Copy custom_en-US.json.example to custom_en-US.json
  2. Add only the keys you want to override
  3. Custom translations are merged on top of standard translations

Example: Custom Lootbag Translations

{
"lootbag.name.my_custom_bag": "Epic Treasure Chest",
"lootbag.desc.my_custom_bag": "Contains rare treasures from the depths!"
}

Adding New Achievements:

  1. Copy the .example template to remove the .example extension
  2. Add your achievements to the achievements array
  3. Reload the plugin with /achievements reload

Overriding Existing Achievements: Custom achievements with the same ID as a standard achievement will override it. This allows you to:

  • Change rewards for existing achievements
  • Modify difficulty or requirements
  • Add custom titles to standard achievements

Example: Custom MMO Achievement

{
"configVersion": 3,
"achievements": [
{
"id": "custom_mining_150",
"category": "mmo_skills",
"iconItem": "Tool_Pickaxe_Adamantite",
"difficulty": "epic",
"requires": "mining_100",
"title": { "id": "legendary_miner", "color": "#FFD700" },
"trigger": { "type": "skill_level", "target": "mining", "count": 150 },
"rewards": [
{ "type": "item", "itemId": "Currency_Coin_Gold", "amount": 50 }
]
}
]
}

Achievements are loaded in this order:

  1. configs/achievements.json (if loadDefaultAchievements is true)
  2. custom/custom_achievements.json (merges/overrides)
  3. configs/mmo_achievements.json (if loadMmoAchievements is true)
  4. custom/custom_mmo_achievements.json (merges/overrides)
  5. configs/rpg_leveling_achievements.json (if loadRpgLevelingAchievements is true)
  6. custom/custom_rpg_leveling_achievements.json (merges/overrides)

Lootbags are loaded in this order:

  1. configs/lootbags.json (standard lootbags)
  2. custom/custom_lootbags.json (merges/overrides)

Localization is loaded in this order:

  1. localization/{language}.json (e.g., en-US.json)
  2. localization/custom_{language}.json (merges/overrides)

If upgrading from v1.5.x:

  1. The plugin will automatically create the new folder structure
  2. Existing achievements.json in the root folder will be migrated to configs/
  3. Existing custom achievements will need to be manually moved to custom/

Each standard config can be individually disabled in config.json. When disabled, only the corresponding custom config will be loaded.

{
"loadDefaultAchievements": true, // configs/achievements.json
"loadMmoAchievements": true, // configs/mmo_achievements.json
"loadRpgLevelingAchievements": true // configs/rpg_leveling_achievements.json
}

Examples:

Use only custom achievements (disable all standard):

{
"loadDefaultAchievements": false,
"loadMmoAchievements": false,
"loadRpgLevelingAchievements": false
}

Use standard achievements but custom MMO/RPG:

{
"loadDefaultAchievements": true,
"loadMmoAchievements": false,
"loadRpgLevelingAchievements": false
}

All standard configs include a version number (configVersion). When the plugin updates a config structure:

  1. The plugin detects the outdated version
  2. Creates a backup (e.g., achievements.json.backup-v1)
  3. Extracts the new version from the plugin
  4. Reloads the updated config

This ensures you always have the latest achievements and fixes without manual intervention.


{
"language": "en-US",
"loadDefaultAchievements": true,
"loadMmoAchievements": true,
"loadRpgLevelingAchievements": true,
"display": {
"displayMode": "both",
"titlePosition": "prefix",
"nametagFormat": "{title}\\n{name}",
"chatFormat": "[{title}] {name}: {message}",
"titleColor": "#FFD700",
"showRpgLevel": false,
"rpgLevelFormat": "Lv.{level}",
"rpgLevelColor": "#55FFFF",
"rpgLevelPosition": "after_name"
},
"notifications": {
"enabled": true,
"displayMode": "chat",
"displayDurationMs": 5000,
"showRewardsInBanner": true,
"broadcastToChat": false,
"broadcastFormat": "{player} unlocked: {achievement}"
},
"tracking": {
"saveIntervalSeconds": 300,
"ignoreCreativeMode": true,
"enableExploration": true,
"enableCombat": true,
"enableProgression": true,
"enableSocial": true
},
"admin": {
"cascadeRevoke": false,
"cascadeRevokeWarning": true,
"bypassPrerequisites": false
},
"export": {
"enabled": true,
"intervalSeconds": 300,
"exportGlobalStats": true,
"exportLeaderboards": true,
"exportRecentUnlocks": true,
"leaderboardSize": 100,
"recentUnlocksSize": 50,
"includePlayerTotals": true
},
"item": {
"enabled": true,
"itemId": "AchievementBook",
"giveOnFirstJoin": true,
"giveOnEveryJoin": false,
"hotbarSlot": 7,
"giveDelaySeconds": 3
},
"trackerHud": {
"enabled": true,
"position": "right"
},
"groupPrefixes": {
"admin": {
"prefix": "<red>[Admin]</red> ",
"priority": 100
},
"vip": {
"prefix": "<gold>[VIP]</gold> ",
"priority": 50
}
}
}
OptionTypeDefaultDescription
languagestring"en-US"Default server language for UI and messages. Options: "en-US", "de-DE", "fr-FR", "es-ES", "pt-BR", "it-IT", "pl-PL", "ru-RU", "ja-JP"
loadDefaultAchievementsbooleantrueLoad configs/achievements.json. Set to false for fully custom setups
loadMmoAchievementsbooleantrueLoad configs/mmo_achievements.json (MMO Skill Tree achievements)
loadRpgLevelingAchievementsbooleantrueLoad configs/rpg_leveling_achievements.json (RPG Leveling achievements)

:::info Per-Player Language (v2.5.0+) Since version 2.5.0, players can override the server language with their own preference using /kslang <language>. The language setting in config.json serves as the default for players who have not set a preference. All 9 languages listed above are supported per-player. :::

Controls how titles appear on player nametags and in chat.

:::warning Hytale Nameplate Limitations Due to Hytale engine restrictions, nameplates have the following limitations:

  • No colors - Nameplates only support plain text. Color codes (legacy &a, hex #FF0000, MiniMessage <red>) are ignored
  • No multiline - Newline characters (\n) are ignored. Text cannot be displayed on multiple lines above a player

Color formatting only works in chat messages (via chatFormat). The titleColor and rpgLevelColor settings only affect chat display. :::

"display": {
"displayMode": "both",
"titlePosition": "prefix",
"nametagFormat": "{title} {name}",
"chatFormat": "{title} {name}: {message}",
"titleColor": "#FFD700",
"showRpgLevel": false,
"rpgLevelFormat": "Lv.{level}",
"rpgLevelColor": "#55FFFF",
"rpgLevelPosition": "after_name"
}
OptionTypeDefaultDescription
displayModestring"both"Where to show titles: "nametag", "chat", or "both"
titlePositionstring"prefix"Title position (see table below)
nametagFormatstring"\{title\} \{name\}"Format for nametag display
chatFormatstring"\{title\} \{name\}: \{message\}"Format for chat messages
titleColorstring"#FFD700"Color for titles in chat (hex). Chat only
showRpgLevelbooleanfalseShow player level from RPGLeveling plugin
rpgLevelFormatstring"Lv.\{level\}"Format for level display. \{level\} is replaced with the actual level
rpgLevelColorstring"#55FFFF"Color for level in chat (hex). Chat only
rpgLevelPositionstring"after_name"Level position: "before_name", "after_name", or "after_title"
Config ValueNametag ResultChat Result
"prefix"[Title] Username[Title] Username: message
"suffix"Username [Title]Username [Title]: message
"above"[Title] Username (same as prefix)[Title] Username: message
"below"Username [Title] (same as suffix)Username [Title]: message

Placeholders:

  • \{title\} - Player’s active title
  • \{name\} - Player’s username
  • \{message\} - Chat message content (chat format only)
  • \{level\} - Player’s RPG level (in rpgLevelFormat only)
PositionNametag ExampleChat Example
before_name[Title] [Lv.15] Username[Title] [Lv.15] Username: message
after_name[Title] Username [Lv.15][Title] Username [Lv.15]: message
after_title[Title] [Lv.15] Username[Title] [Lv.15] Username: message

:::note RPGLeveling Required The showRpgLevel feature requires the RPGLeveling plugin to be installed. If not present, the level will not be displayed regardless of this setting. :::

Controls achievement unlock notifications.

"notifications": {
"enabled": true,
"displayMode": "chat",
"displayDurationMs": 5000,
"showRewardsInBanner": true,
"broadcastToChat": false,
"broadcastFormat": "{player} unlocked: {achievement}"
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable notifications
displayModestring"chat"Notification type: "chat", "banner", or "both"
displayDurationMsnumber5000Toast banner duration in milliseconds
showRewardsInBannerbooleantrueShow rewards in toast notification
broadcastToChatbooleanfalseAnnounce unlocks to all players
broadcastFormatstring"\{player\} unlocked: \{achievement\}"Broadcast message format

Controls which achievement categories are tracked.

"tracking": {
"saveIntervalSeconds": 300,
"ignoreCreativeMode": true,
"enableExploration": true,
"enableCombat": true,
"enableProgression": true,
"enableSocial": true
}
OptionTypeDefaultDescription
saveIntervalSecondsnumber300Auto-save interval (5 minutes default)
ignoreCreativeModebooleantrueIgnore achievement progress when player is in creative mode
enableExplorationbooleantrueTrack exploration achievements
enableCombatbooleantrueTrack combat achievements
enableProgressionbooleantrueTrack progression achievements
enableSocialbooleantrueTrack social achievements

Controls administrative behavior.

"admin": {
"cascadeRevoke": false,
"cascadeRevokeWarning": true,
"bypassPrerequisites": false
}
OptionTypeDefaultDescription
cascadeRevokebooleanfalseRevoke dependent achievements when parent is revoked
cascadeRevokeWarningbooleantrueWarn admin before cascade revoke
bypassPrerequisitesbooleanfalseAdmin grant bypasses prerequisites

Controls statistics export for external tools.

"export": {
"enabled": true,
"intervalSeconds": 300,
"exportGlobalStats": true,
"exportLeaderboards": true,
"exportRecentUnlocks": true,
"leaderboardSize": 100,
"recentUnlocksSize": 50,
"includePlayerTotals": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable statistics export
intervalSecondsnumber300Export frequency
exportGlobalStatsbooleantrueInclude global statistics
exportLeaderboardsbooleantrueInclude player leaderboards
exportRecentUnlocksbooleantrueInclude recent unlock history
leaderboardSizenumber100Number of top players
recentUnlocksSizenumber50Number of recent unlocks
includePlayerTotalsbooleantrueInclude per-player totals

Configure custom prefixes per LuckPerms group.

"groupPrefixes": {
"admin": {
"prefix": "<red>[Admin]</red> ",
"priority": 100
},
"moderator": {
"prefix": "<blue>[Mod]</blue> ",
"priority": 75
},
"vip": {
"prefix": "<gold>[VIP]</gold> ",
"priority": 50
},
"default": {
"prefix": "",
"priority": 0
}
}
OptionTypeDescription
prefixstringPrefix text with MiniMessage formatting
colorstringHex color code for the prefix (e.g., "#FF5555")
prioritynumberHigher priority takes precedence

Supported Color Formats:

  • MiniMessage tags: <red>, <gold>, <#FF5555>
  • Gradients: <gradient:#FF0000:#00FF00>Text</gradient>
  • Rainbow: <rainbow>Text</rainbow>
  • Legacy codes: &a, &b, &c, etc.

:::tip LuckPerms Integration If LuckPerms is installed, the plugin automatically retrieves prefixes from LuckPerms groups. The groupPrefixes config serves as a fallback or override. :::

Controls the Achievement Book item that opens the gallery when used.

"item": {
"enabled": true,
"itemId": "AchievementBook",
"giveOnFirstJoin": true,
"giveOnEveryJoin": false,
"hotbarSlot": 7,
"giveDelaySeconds": 3
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the Achievement Book item
itemIdstring"AchievementBook"Item ID for the achievement book
giveOnFirstJoinbooleantrueGive the book to players on their first join
giveOnEveryJoinbooleanfalseGive the book to players on every join
hotbarSlotnumber7Hotbar slot where the book is placed (0-8)
giveDelaySecondsnumber3Delay in seconds before giving the book after join

If giveOnEveryJoin is true, players will receive the book each time they log in. If giveOnFirstJoin is true (and giveOnEveryJoin is false), players only receive it on their very first login.

Controls the on-screen achievement tracker HUD. See Tracker HUD for detailed documentation.

"trackerHud": {
"enabled": true,
"position": "right"
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the tracker HUD globally
positionstring"right"Default side of the screen: "left" or "right"

Individual players can customize their HUD position through the in-game settings page. The position setting here is the server-wide default.