premium banner
Data-driven ore generation framework for Hytale

Description

alt text

Ore Generator Framework

Data-driven ore generation framework with per-zone and per-biome overrides.

How it works

  • The framework loads every Server/OreGeneration/*.json it finds in mods/packs.
  • Each config maps replaceable rock blocks to ore variants.
  • Zone/biome keys must match engine names (use /player zone to check).

Add ores via a pack (JSON only)

  • Create a pack with Server/OreGeneration/your_ore.json.
  • Drop the pack into mods/ and restart.
  • The framework auto-loads all configs from packs at startup.

Add ores via a plugin (Java + JSON)

  • Add the framework as a dependency in your plugin manifest: "LYIVX:OreGenerator": "*"
  • Bundle your configs in src/main/resources/Server/OreGeneration/.
  • Optional: use config/OreGenerator/*.json to override configs at runtime.

Runtime overrides (framework)

  • Overrides are created on first run: config/OreGenerator/*.json
  • Extra configs can be added to: config/OreGenerator/ores/

Example config (new format: surface + cave)

{
  "defaults": {
    "surface": {
      "height": { "min": 60, "max": 120 },
      "veinsPerChunk": 2,
      "veinSize": { "min": 5, "max": 10 },
      "heightExponent": 1.0,
      "spawnChance": 0.8
    },
    "cave": {
      "height": { "min": 10, "max": 60 },
      "repeat": { "min": 15, "max": 20 },
      "veinSize": { "min": 5, "max": 10 },
      "heightExponent": 1.0,
      "spawnChance": 1.0
    }
  },
  "oreByBlock": {
    "Rock_Stone": "Ore_Coal_Stone",
    "Rock_Sandstone": "Ore_Coal_Sandstone",
    "Rock_Slate": "Ore_Coal_Slate",
    "Rock_Shale": "Ore_Coal_Shale",
    "Rock_Basalt": "Ore_Coal_Basalt",
    "Rock_Volcanic": "Ore_Coal_Volcanic"
  }
}

Example config (legacy format)

{
  "defaults": {
    "minY": 10,
    "maxY": 60,
    "veinsPerChunk": 2,
    "minVeinSize": 3,
    "maxVeinSize": 7,
    "spawnChance": 0.6,
    "replaceableBlocks": [
      "Rock_Stone",
      "Rock_Stone_Cobble",
      "Rock_Stone_Mossy",
      "Rock_Sandstone",
      "Rock_Sandstone_Cobble",
      "Rock_Slate",
      "Rock_Slate_Cobble",
      "Rock_Shale",
      "Rock_Basalt",
      "Rock_Basalt_Cobble",
      "Rock_Volcanic"
    ]
  },
  "oreByBlock": {
    "Rock_Stone": "Ore_Coal_Stone",
    "Rock_Sandstone": "Ore_Coal_Sandstone",
    "Rock_Slate": "Ore_Coal_Slate",
    "Rock_Shale": "Ore_Coal_Shale",
    "Rock_Basalt": "Ore_Coal_Basalt",
    "Rock_Volcanic": "Ore_Coal_Volcanic"
  },
  "zones": {
    "Zone1": {
      "Plains1_Oak": {},
      "Plains1_Gorges": {},
      "Plains1_Deeproot": {
        "spawnChance": 0.4
      }
    }
  }
}

Height distribution

  • height controls the min/max Y range.
  • heightExponent controls vertical bias: 1.0 is uniform, > 1.0 skews lower, < 1.0 skews higher.

Surface vs cave blocks

  • surface is the biome/overground pass (lower density, biome-tuned).
  • cave is the cave pass (repeat-style attempts, denser underground).