Skip to main content

Configuration

KS Dungeons' configuration is stored in the mod's data folder. The main file is config.json, with additional folders for biomes, rooms, and loot tables.

File Structure

dungeons/
config.json — Main configuration
biomes/
caverns.json — Caverns biome definition
jungle.json — Jungle biome definition
frost.json — Frost biome definition
void.json — Void biome definition
undead.json — Undead biome definition
rooms/
caverns/ — Room templates for Caverns
jungle/ — Room templates for Jungle
...
loot/
caverns.json — Loot tables for Caverns
jungle.json — Loot tables for Jungle
...
localization/
en-US.json — English translations
de-DE.json — German translations

config.json

{
"_info": "KyuubiSoft Dungeons Configuration",
"enabled": true,
"language": "en-US",
"dungeon": {
"maxConcurrentInstances": 10,
"maxPlayersPerRun": 4,
"defaultLives": 5,
"entryCoordinates": { "x": 0, "y": 80, "z": 0 },
"returnCoordinates": { "x": 0, "y": 64, "z": 0 },
"entryCooldownSeconds": 300,
"timeoutMinutes": 45,
"cleanupDelaySeconds": 30
},
"party": {
"maxPartySize": 4,
"inviteTimeoutSeconds": 60,
"allowPublicParties": true
},
"difficulty": {
"default": "NORMAL",
"modifierCount": {
"NORMAL": 0,
"HARD": 1,
"NIGHTMARE": 2,
"MYTHIC": 3
},
"livesMultiplier": {
"NORMAL": 1.0,
"HARD": 1.0,
"NIGHTMARE": 0.6,
"MYTHIC": 0.4
}
},
"scoring": {
"baseScore": 1000,
"timeBonus": true,
"timeBonusMaxSeconds": 1200,
"killPoints": 10,
"deathPenalty": 50,
"modifierMultiplier": 0.25,
"bossKillBonus": 500
},
"tokens": {
"enabled": true,
"baseReward": 50,
"difficultyMultiplier": {
"NORMAL": 1.0,
"HARD": 1.5,
"NIGHTMARE": 2.5,
"MYTHIC": 4.0
}
},
"permissions": {
"adminPermission": "kyuubisoft.dungeons.admin",
"playPermission": "kyuubisoft.dungeons.play"
}
}

Settings Reference

Dungeon

SettingTypeDefaultDescription
maxConcurrentInstancesint10Maximum dungeon instances running at once
maxPlayersPerRunint4Maximum players per dungeon run
defaultLivesint5Team lives pool per run
entryCoordinatesobject{0,80,0}Dungeon world spawn point
returnCoordinatesobject{0,64,0}Return point after dungeon ends
entryCooldownSecondsint300Cooldown between dungeon entries
timeoutMinutesint45Maximum dungeon run duration
cleanupDelaySecondsint30Delay before dungeon instance is cleaned up

Party

SettingTypeDefaultDescription
maxPartySizeint4Maximum party members
inviteTimeoutSecondsint60Time before party invite expires
allowPublicPartiesbooleantrueAllow players to join parties without invite

Difficulty

SettingTypeDefaultDescription
defaultstring"NORMAL"Default difficulty for new runs
modifierCountobjectvariesNumber of random modifiers per difficulty
livesMultiplierobjectvariesMultiplier applied to defaultLives per difficulty

Scoring

SettingTypeDefaultDescription
baseScoreint1000Starting score for a run
timeBonusbooleantrueEnable time-based bonus
timeBonusMaxSecondsint1200Time window for maximum bonus
killPointsint10Points per mob kill
deathPenaltyint50Points deducted per death
modifierMultiplierfloat0.25Score bonus per active modifier (25% each)
bossKillBonusint500Bonus points for boss kill

Tokens

SettingTypeDefaultDescription
enabledbooleantrueEnable token rewards
baseRewardint50Base token reward per completion
difficultyMultiplierobjectvariesToken multiplier per difficulty

Biome Configuration

Each biome has its own JSON file in the biomes/ folder.

{
"id": "caverns",
"name": "The Caverns",
"description": "Dark underground tunnels filled with lava and stone traps.",
"icon": "caverns.png",
"minRooms": 6,
"maxRooms": 12,
"mobPool": [
{ "npcId": "Trork_Warrior", "weight": 40 },
{ "npcId": "Trork_Archer", "weight": 30 },
{ "npcId": "Trork_Shaman", "weight": 15 },
{ "npcId": "Cave_Spider", "weight": 15 }
],
"bossId": "stone_golem",
"bossRoom": "caverns_boss_arena",
"traps": ["lava_pit", "falling_rocks", "spike_floor"],
"ambientEffects": ["dripping_lava", "cave_echo"],
"unlockRequirement": null
}
FieldTypeDescription
idstringUnique biome identifier
namestringDisplay name
descriptionstringFlavor text shown in UI
iconstringIcon file in assets
minRooms / maxRoomsintRoom count range per run
mobPoolarrayWeighted mob spawn pool
bossIdstringBoss encounter ID
bossRoomstringRoom template used for boss fight
trapsarrayAvailable trap types
ambientEffectsarrayAmbient particle/sound effects
unlockRequirementstring/nullRequirement to unlock (e.g., "clear_caverns_hard")

Room Templates

Room templates are structure files in the rooms/<biome>/ folders. Each room is a JSON file describing layout, spawn points, and connections.

{
"id": "caverns_corridor_01",
"type": "CORRIDOR",
"size": { "x": 32, "y": 16, "z": 32 },
"connections": ["NORTH", "SOUTH"],
"spawnPoints": [
{ "x": 8, "y": 1, "z": 16, "type": "MOB" },
{ "x": 24, "y": 1, "z": 16, "type": "MOB" },
{ "x": 16, "y": 1, "z": 8, "type": "TRAP" }
],
"lootSpawns": [
{ "x": 16, "y": 1, "z": 24, "table": "caverns_chest" }
]
}

Room Types

TypeDescription
ENTRANCEStarting room (one per run)
CORRIDORConnecting passage between rooms
ARENACombat encounter room
TREASUREBonus loot room (optional spawn)
BOSSBoss encounter arena (one per run, always last)
TRAPEnvironmental hazard room

Loot Tables

Loot tables are defined per biome in the loot/ folder. Each table supports difficulty-scaled entries.

{
"tables": {
"caverns_chest": {
"picks": 3,
"entries": [
{ "item": "Iron_Ingot", "amount": [2, 5], "weight": 40 },
{ "item": "Gold_Ingot", "amount": [1, 3], "weight": 25 },
{ "item": "Diamond", "amount": 1, "weight": 10 },
{ "item": "Health_Potion", "amount": [1, 2], "weight": 25 }
]
},
"caverns_boss": {
"picks": 5,
"guaranteed": [
{ "item": "Dungeon_Token", "amount": [10, 25] }
],
"entries": [
{ "item": "Stone_Golem_Core", "amount": 1, "weight": 5, "minDifficulty": "HARD" },
{ "item": "Rare_Ore", "amount": [3, 8], "weight": 30 },
{ "item": "Epic_Weapon_Crate", "amount": 1, "weight": 10, "minDifficulty": "NIGHTMARE" }
]
}
}
}
FieldTypeDescription
picksintNumber of random items to pick
guaranteedarrayItems always given (on top of picks)
entries[].itemstringItem ID
entries[].amountint/arrayFixed amount or [min, max] range
entries[].weightintRandom weight
entries[].minDifficultystringMinimum difficulty required for this entry to appear