Skip to content

Use DaisyConfig with DaisySeries

DaisyConfig and DaisySeries are meant to fit together.

Use DaisySeries-backed codecs for values like:

  • materials
  • sounds
  • item flags
  • enchantments
  • potion effects
  • biomes
  • villager professions
  • attributes
  • entity types
  • game modes
  • difficulties
  • block faces
  • damage causes
  • operations
  • pattern types
  • particles
  • statistics
val profileUiCodec =
objectCodec {
ProfileUiConfig(
icon = required("icon", materialCodec()),
feedbackSound = required("feedback_sound", soundCodec()),
flags = defaulted("flags", itemFlagsCodec(), emptySet()),
enchantment = required("enchantment", enchantmentCodec()),
effect = required("effect", potionEffectCodec()),
biome = required("biome", biomeCodec()),
profession = required("profession", villagerProfessionCodec()),
attribute = required("attribute", attributeCodec()),
entity = required("entity", entityTypeCodec()),
gameMode = required("game_mode", gameModeCodec()),
difficulty = required("difficulty", difficultyCodec()),
facing = required("facing", blockFaceCodec()),
damageCause = required("damage_cause", damageCauseCodec()),
operation = required("operation", operationCodec()),
pattern = required("pattern", patternTypeCodec()),
particle = required("particle", particleCodec()),
statistic = required("statistic", statisticCodec()),
sidebarTitle = defaulted("sidebar_title", stringCodec(), "<gradient:#7dd3fc:#c4b5fd>Profile</gradient>"),
)
}

That same codec surface is valid in all three DaisyConfig layers:

  • one-file unmanaged handles
  • managed YAML files with config_version
  • module settings bundles under modules/<category>/<module>/settings.yml
val storeSettings =
DaisyManagedYamlFile(
id = "guis/store/settings",
path = "modules/guis/store/settings.yml",
codec = storeModuleConfigCodec,
currentVersion = 2,
)

If the managed file contains:

config_version: 2
store:
icon: emerald
open_sound: block_ender_chest_open

then DaisyConfig is still decoding those values through DaisySeries-owned parser rules.

DaisyConfig does not re-own parser logic.

It uses DaisySeries so:

  • canonical keys stay stable
  • aliases stay centralized
  • managed migrations do not need plugin-local parser wrappers

When config values stop being primitive, DaisySeries remains the parser owner even inside the managed and module layers.