-
Notifications
You must be signed in to change notification settings - Fork 0
Configuration
RPGMood ships four config files, generated automatically in plugins/RPGMood/ on first start: config.yml, subzones.yml, triggers.yml, and farming.yml. Edit them and run /rpgmood reload to apply changes.
-
subzones.yml— cave/structure subzone titles. See Zones → Subzones. -
triggers.yml— time/weather/block-break events. See Ambient Events. -
farming.yml— crops, seasons, recipes, and animals. See Farming. -
config.yml— everything else, detailed below (mob scaling, zone clusters, Squaremap, villages, messages, death messages).
As of v1.10.0, there is no zones.yml. The curated biome/WorldGuard zone list it held was
removed — zones are now entirely organic zone clusters, generated at
runtime and persisted to dynamiczones.yml (not hand-edited). See Zones.
New keys auto-merge into your existing files. As of v1.7.0, config.yml, subzones.yml,
and triggers.yml/farming.yml gain any config key added by a newer plugin version
automatically on startup (and on /rpgmood reload) — nothing you've already customized is
touched, only genuinely missing keys get filled in with their default value. One trade-off: the
first time a file is merged, it loses its comments (Bukkit's YAML writer doesn't preserve them)
— every value, yours and the new defaults, is kept exactly.
As of v1.8.0, a handful of the most commonly-tuned config.yml keys — spawn_protection.radius
and mob_scaling.early_game_fraction/parity_level/night_bonus/thunder_bonus — can also be
adjusted in-game without touching YAML at all, via the Admin Config panel in the
GUI menu (rpgmood.admin). It writes straight back to config.yml on disk,
same effect as hand-editing the file and reloading. (The panel briefly also had a
weather_effects.enabled toggle; that config section was removed in v1.10.0, see below.)
| Key | Type | Default | Description |
|---|---|---|---|
zone_change_cooldown |
Integer (seconds) | 45 |
Minimum time between zone-change feedback for the same player |
particle_update_interval |
Integer (ticks) | 40 |
Reserved for future ambient particle scheduling — not yet read by any feature |
Governs the organic zone cluster system that replaced the old fixed 256×256 grid in v1.10.0 — see Zones for the full flood-fill/naming explanation.
| Key | Type | Default | Description |
|---|---|---|---|
max_cluster_chunks |
Integer (chunks) | 576 |
Max chunks a single flood-fill will claim into one cluster (576 ≈ 24×24 chunks, ~384×384 blocks) |
creation_throttle_ms |
Integer (ms) | 750 |
Minimum time between a single player's own cluster creations. Only gates creating a brand-new cluster for a never-before-seen chunk — looking up an already-known chunk is never throttled |
dynamic_zones:
max_cluster_chunks: 576
creation_throttle_ms: 750Optional Squaremap integration — no effect if the squaremap plugin isn't installed. See Zones → Squaremap integration and Compatibility.
| Key | Type | Default | Description |
|---|---|---|---|
layer_priority |
Integer | 3 |
Squaremap layer ordering priority for the "RPGMood Zones" layer |
zone_fill_opacity |
Decimal (0–1) | 0.18 |
Fill opacity of each zone cluster's rectangle on the map |
square_map:
layer_priority: 3
zone_fill_opacity: 0.18Low-probability day/night flavor sound near each player, checked on the same ~1s tick as everything else in AmbientTask — purely cosmetic, no chat/action-bar message, and independent of the time_events/weather_events in triggers.yml. See Ambient Events.
| Key | Type | Default | Description |
|---|---|---|---|
enabled |
Boolean | true |
Master switch |
chance |
Decimal (0–1) | 0.02 |
Chance per player per ~1s tick that a sound plays at all |
day |
List<Sound> | [entity.parrot.ambient] |
Sound pool picked from at random during vanilla day |
night |
List<Sound> | [ambient.cave] |
Sound pool picked from at random during vanilla night (13000–23000 ticks) |
ambient_sounds:
enabled: true
chance: 0.02
day:
- "entity.parrot.ambient"
night:
- "ambient.cave"Add more entries to day/night (any Bukkit Sound name, or a resource-pack custom key) to widen the pool — one is picked at random each time the chance roll succeeds.
Removed in v1.10.0: the weather_effects section (fog/wind mechanical effects during storms) was removed from config.yml entirely, alongside the curated zones.yml system. See Ambient Events.
| Key | Default |
|---|---|
delivery |
ACTION_BAR — ambient messages (time/weather events, farming/animal feedback) go to the action bar instead of chat. Set to CHAT for the traditional behavior. This is the server-wide default; a player can override it for themselves with the Action Bar Delivery toggle in the GUI menu's Settings panel (writes player_actionbar.<uuid>). Doesn't affect zone entry — that's Title/Subtitle only, see Zones
|
no_permission |
&c[RPGMood] You do not have permission to use this command. |
plugin_reloaded |
&a[RPGMood] Configuration reloaded successfully. |
toggle_enabled |
&a[RPGMood] Effects enabled. |
toggle_disabled |
&e[RPGMood] Effects disabled. |
player_join |
&a→ {player} joined the world. |
player_join_first_time |
&6✨ {player} arrived for the very first time! |
player_quit |
&7← {player} left the world. |
join_sound |
entity.player.levelup |
join_first_time_sound |
ui.toast.challenge_complete |
quit_sound |
entity.villager.no |
player_join/player_join_first_time/player_quit replace the vanilla join/quit chat
broadcast entirely (the vanilla message is suppressed). {player} is replaced with the
player's name. Each is sent through broadcastAmbient, so every online player receives it via
their own delivery preference (action bar or chat, per the delivery setting/toggle above),
along with the matching sound played to every online player. First-time joins
(!player.hasPlayedBefore()) use player_join_first_time + join_first_time_sound instead of
the regular join template. Set any *_sound key blank to disable just the sound for that
event.
Every message routed through delivery (all of AmbientTask's time/weather events, plus all
farming/animal interaction feedback) is centralized in MessageService, and action-bar
messages are sticky — resent twice, a second apart, so a short vanilla fade or a different
message a moment later doesn't erase it before it's been read. If a newer message is sent to
the same player before a resend fires, the stale resend is skipped instead of flashing old
text back over the new one.
Achievement unlocks always go to chat regardless of delivery — see Achievements → Notifications.
| Key | Type | Default | Description |
|---|---|---|---|
enabled |
Boolean | true |
Master switch |
radius |
Decimal (blocks) | 64 |
Hostile mobs never naturally spawn within this distance of world spawn |
spawn_protection:
enabled: true
radius: 64Only blocks natural spawns of Monster entities (same gate mob_scaling.hostile-only uses) —
passive mobs and plugin/command-summoned entities are unaffected. Keeps the immediate spawn
area/starter base safe without meaningfully delaying the first real encounter with danger once
you leave it.
See Mob Scaling for the full formula. Quick reference:
| Key | Type | Default | Description |
|---|---|---|---|
enabled |
Boolean | true |
Master switch |
hostile-only |
Boolean | true |
Only scale Monster entities |
max-level |
Integer | 40 |
Upper clamp on the computed level |
early_game_fraction |
Decimal | 0.85 |
Health/damage/follow-range multiplier at level 1, relative to each mob's own vanilla stat (non-boss mobs) |
parity_level |
Integer | 8 |
Level at which the health/damage/follow-range multiplier reaches exactly 1.0 (vanilla-equivalent), non-boss mobs |
armor_per_level |
Decimal | 0.25 |
Armor added per level (non-boss mobs) |
speed_per_level |
Decimal | 0.0015 |
Movement speed added per level |
boss_scaling.* |
— | see below | Separate hard curve for the 4 major bosses — see Mob Scaling → Boss hard curve |
follow_range_cap |
Decimal (blocks) | 36 |
Hard cap on FOLLOW_RANGE after level scaling — pathfinding safety net |
knockback_resist.* |
— | see below | Progressive KNOCKBACK_RESISTANCE from level 25+ |
attack_speed.* |
— | see below | Light ATTACK_SPEED bonus from level 20+ |
smart_aggro.* |
— | see below | Forced-aggro AI for mid/high-level mobs — see Mob Scaling → Smart aggro |
archery.* |
— | see below | Bow/crossbow aim quality by level — see Mob Scaling → Dynamic archery |
advanced_ai.* |
— | see below | Pack assist / archer kite / creeper fuse — see Mob Scaling → Advanced AI |
seasonal.* |
— | see below | Seasonal combat modifiers — see Mob Scaling → Seasonal combat |
elite_glow.* |
— | see below | Combat-gated colored glow for elites/bosses — see Mob Scaling → Elite glow |
elite_equipment.* |
— | see below | Offhand shield/totem/torch loadouts — see Mob Scaling → Elite equipment |
corrupt_sounds.enabled |
Boolean | true |
Warden-hurt-sound flavor for L20+ zombies/skeletons taking damage in deep biomes |
environment.* |
— | see below | Fire immunity + spider dodge for high-level mobs — see Mob Scaling → Elite environment effects |
night_bonus |
Integer | 2 |
Extra flat level added while it's vanilla night (13000–23000 ticks) where the level is computed |
thunder_bonus |
Integer | 2 |
Extra flat level added while that world is currently thundering. Stacks with night_bonus
|
radius.step_distance |
Decimal (blocks) | 180 |
Distance per "ring" of difficulty from spawn |
players_bonus_per_player |
Integer | 1 |
Level added per nearby player (within ~30 blocks) |
name_format |
String | "&cLv. {level} {name}" |
Custom name shown above scaled mobs. Supports {level} and {name}
|
show_name_tags |
Boolean | false |
Show the floating name tag above scaled mobs. Off by default — RPGMood shows level via particle auras instead |
particle_aura |
Boolean | true |
Level-tiered coloured particles around scaled mobs (blue → yellow → orange → red as level rises), only rendered for mobs within ~30 blocks of a player |
bonus_xp_per_level |
Integer | 2 |
Bonus XP granted per level when a player kills a scaled mob. 0 disables |
base-levels |
Map<EntityType, Integer> | see below | Per-mob-type difficulty seed. As of v1.18.0 also seeds the 4 bosses (ELDER_GUARDIAN: 14, WITHER: 18, WARDEN: 20, ENDER_DRAGON: 22) well above parity_level so they only ever get buffed |
biome-bonuses |
Map<Biome, Integer> | see below | Flat bonus per biome |
structure-bonuses |
Map<structure key, Integer> | see below | Flat bonus near a vanilla structure |
announcement.* |
— | see below | Server-wide broadcast when a high-level mob spawns |
affixes.* |
— | see below | RPG modifiers (Swift, Wraith, Bleeding, etc.) scaled mobs can roll — see Mob Scaling → Affixes |
mob_scaling:
boss_scaling:
enabled: true
growth_per_level_above_base: 0.12
max_multiplier: 4.0
armor_per_level: 0.75
follow_range_cap: 36
knockback_resist:
min-level: 25
per-level: 0.02
max: 0.85
attack_speed:
min-level: 20
per-level: 0.02
max-bonus: 0.4
smart_aggro:
enabled: true
los-min-level: 15
los-radius: 28
omniscient-min-level: 30
omniscient-radius: 36
max-retargets-per-tick: 40
cooldown-ticks: 40
archery:
enabled: true
clumsy-max-level: 7
clumsy-spread: 0.35
laser-min-level: 15
predictive-min-level: 30
arrow-speed: 1.6
tracer-particles: true
advanced_ai:
enabled: true
pack:
min-level: 20
radius: 20
max-allies: 5
chunk-cooldown-seconds: 3
kite:
min-level: 30
keep-distance: 8
creeper:
min-level: 25
base-fuse-ticks: 30
min-fuse-ticks: 12
advance-while-ignited: true
seasonal:
enabled: true
winter:
armor-bonus: 2.0
arrow-slowness-ticks: 40
arrow-slowness-amplifier: 0
autumn:
swift-chance-bonus: 0.20
summer:
burn-chance: 0.35
burn-ticks: 60
elite_glow:
enabled: true
min-level: 35
combat-only: true
max-active: 64
combat-timeout-seconds: 10
elite_equipment:
enabled: true
shield-chance: 0.25
shield-min-level: 20
shield-damage-reduce: 0.30
totem-chance: 0.08
totem-min-level: 30
torch-chance: 0.40
torch-min-level: 15
corrupt_sounds:
enabled: true
environment:
enabled: true
fire-immune-min-level: 25
spider-dodge-min-level: 25
spider-dodge-chance-per-level: 0.02
spider-dodge-max-chance: 0.35
base-levels:
ZOMBIE: 1
SKELETON: 2
SPIDER: 2
CREEPER: 3
ENDERMAN: 4
WITHER_SKELETON: 5
ELDER_GUARDIAN: 14
WITHER: 18
WARDEN: 20
ENDER_DRAGON: 22
biome-bonuses:
PLAINS: 0
FOREST: 1
MOUNTAINS: 3
DEEP_DARK: 5
SOUL_SAND_VALLEY: 4
structure-bonuses:
stronghold: 3
desert_pyramid: 2
jungle_temple: 2
woodland_mansion: 4
ocean_monument: 4
fortress: 3
ancient_city: 5
announcement:
enabled: true
min-level: 25
cooldown-seconds: 120
message: "&c⚠ A Level {level} {name} has emerged in {biome}!"Any EntityType / Biome not listed defaults to 0 (or 1 for base-levels) — you don't need to list every enum value, only the ones you want to deviate from baseline. See Mob Scaling for the rewards, announcement, combat AI, and boss-curve behavior in detail.
Fixed in v1.9.0: structure-bonuses used the dead keys jungle_pyramid/nether_fortress, which never matched anything in Minecraft's real StructureType registry (jungle_temple/fortress) — mobs near those two structures silently never got their configured bonus. Renamed to the correct keys above; ancient_city was added later as a new key.
Seasonal villager trades, a Deep Dark wandering-trader offer, per-village reputation, and light cartographer crop/emerald quests — emeralds and crops only, no custom currency. See Villages for the full behavior.
| Key | Type | Default | Description |
|---|---|---|---|
enabled |
Boolean | true |
Master switch for the whole village trading/reputation/quest system |
seasonal_trades.enabled |
Boolean | true |
Inject seasonal buy/sell offers into Farmer and Cleric trade menus |
seasonal_trades.buy_price_emeralds |
Integer | 2 |
Emeralds a Cleric charges per seasonal crop bought |
seasonal_trades.sell_crop_count |
Integer | 8 |
Crops a Farmer buys per trade use |
seasonal_trades.sell_reward_emeralds |
Integer | 1 |
Emeralds a Farmer pays per trade use |
seasonal_trades.max_uses |
Integer | 12 |
Max uses before a seasonal trade slot is exhausted (resets when trades are re-injected) |
seasonal_trades.spring/summer/autumn/winter
|
List<Material> | see config.yml
|
Crop materials in season for that quarter (e.g. spring: CARROT, POTATO, SWEET_BERRIES) |
wandering_deep_dark.enabled |
Boolean | true |
Offer Echo Shard / Sculk Sensor trades from a wandering trader in (or near a player in) the Deep Dark |
wandering_deep_dark.max_uses |
Integer | 4 |
Max uses per Deep Dark trade slot |
wandering_deep_dark.echo_price |
Integer | 12 |
Emeralds per Echo Shard |
wandering_deep_dark.sensor_price |
Integer | 8 |
Emeralds per Sculk Sensor |
rep.per_trade |
Integer | 1 |
Reputation gained per completed trade with a villager (not a wandering trader) in a detected village |
rep.show_overlay |
Boolean | true |
Show a chat message with the rep gained/total after each trade |
quests.enabled |
Boolean | true |
Offer a cartographer crop-delivery or emerald-spend quest when trading with a Cartographer near a village |
quests.deliver_count |
Integer | 16 |
Crops required for a DELIVER_CROP quest |
quests.emerald_spend |
Integer | 8 |
Emeralds required for a SPEND_EMERALDS quest |
quests.rep_reward |
Integer | 5 |
Reputation awarded on quest completion |
villagers:
enabled: true
seasonal_trades:
enabled: true
buy_price_emeralds: 2
sell_crop_count: 8
sell_reward_emeralds: 1
max_uses: 12
spring: [CARROT, POTATO, SWEET_BERRIES]
summer: [MELON_SLICE, WHEAT, APPLE]
autumn: [PUMPKIN, SWEET_BERRIES, APPLE]
winter: [BROWN_MUSHROOM, RED_MUSHROOM, SWEET_BERRIES]
wandering_deep_dark:
enabled: true
max_uses: 4
echo_price: 12
sensor_price: 8
rep:
per_trade: 1
show_overlay: true
quests:
enabled: true
deliver_count: 16
emerald_spend: 8
rep_reward: 5Fully documented on the Death Messages page. Top-level keys: fallback, causes (includes killers.player for PvP), biomes, killers, killer_synonyms, armed, modifiers, location_name_templates, location_name_descriptors (ships per-biome pools for common biomes plus default), location_names.
Not hand-edited — RPGMood writes player_effects.<uuid>: true|false, player_titles.<uuid>: true|false, and (as of v1.8.0) player_scoreboard.<uuid>: true|false here automatically when a player runs /rpgmood toggle, /rpgmood toggle titles, or /rpgmood toggle scoreboard respectively. See Zones → Sidebar scoreboard.
None of these are hand-edited — each is written automatically by its owning feature and read back on startup / /rpgmood reload.
| File | Backs |
|---|---|
stats.yml |
/rpgmood leaderboard — per-player deaths, zone changes, highest mob level killed. See Commands
|
achievements.yml |
/rpgmood achievements — unlock timestamps and progress counters. See Achievements
|
season.yml |
Current season and day-in-season. See Farming → Seasons |
recipes.yml |
Per-player discovered recipes. See Farming → Cooking & recipes |
animals.yml |
Owned animals and their affection/health/hunger/sickness state. See Farming → Animal husbandry |
playerdata/<uuid>.yml |
/diary entries. See Commands
|
zonediscovery.yml |
/rpgmood zones — per-player discovered zones (display name, first-seen date, favorite flag). See Zones → Zone discovery
|
dynamiczones.yml |
Every zone cluster ever created — id, world, biome group, display name, center point, and member chunks. Permanent; a cluster is never removed or re-generated once written. See Zones |
villagerep.yml |
Per-player, per-village reputation and any active cartographer quest. See Villages |
playerlevel.yml |
/rpgmood level — per-player progression XP/level. See Commands → /rpgmood level
|