Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Tags
Creators
Details
Create Ore Excavation Deposits
Multi-chunk ore deposits for Create Ore Excavation — distance-driven richness, Xaero map overlay, per-player reveal policies, full multi-dimension support.
What you get
- Multi-chunk deposits — irregular Perlin-shaped blobs of 2–40 chunks, all sharing one ore type.
- Distance gradient — log-curve drives deposit size, richness, and which ores are eligible.
- Per-chunk gradient — the core chunk is peak yield; outer chunks fade down to a configurable floor (default 30 %).
- Biome-aware — You can configure spawn biomes (In default config: iron in mountains/taiga, gold in badlands/savanna, nether_quartz in nether biomes, etc.).
- Multi-dimension — You can configure recipie's dimensions
- Reveal policies — four modes per type:
always/on_discovery(walk near) /on_proximity(visible while close) /on_prospect(Vein Finder reveals). Per-player tracking. - World-map overlay — coloured chunks on Xaero's World Map with diagonal stripes, alpha-fade as the vein depletes, and a hover tooltip showing remaining / initial units per chunk.
- Reproducible patterns — per-dimension
depositSeedoverride lets you copy a layout from one world to another via/coedeposits regenerate <seed>. - Per-type placement mode —
managed(our blob algorithm) orcoe(let vanilla COE place, we just track for the map). - Server-authoritative — all state in SavedData, full client-side sync.
Required
- Create Ore Excavation — the host mod it extend. Required.
- Which in turn requires Create.
Recommended
- Xaero's World Map — needed for the deposit overlay on the map. Soft dependency: if absent, generation works fine but you lose the visual.
The mod's mixin is gated client-only, so dedicated servers without Xaero won't crash.
Commands
All /coedeposits subcommands require permission level 2 (standard OP via /op <player>).
| Command | What it does |
|---|---|
/coedeposits tier |
Show distance + tier fraction at the player's position. |
/coedeposits list |
Top-10 nearest known deposits in the current dimension. |
/coedeposits here |
Info about the deposit owning the player's current chunk. |
/coedeposits scan |
Re-prospect around the player (no wipe). |
/coedeposits regenerate [seed] |
Wipe the current dimension + fresh prospect-scan. Optional seed override locks placement for reproducible patterns. |
/coedeposits seed |
Print effective deposit seed + whether it's an override or world seed. |
/coedeposits refill / refill all |
Restore the deposit at the current chunk / every deposit in the dimension. |
/coedeposits delete here / delete chunk |
Remove a whole deposit / single chunk from a deposit. |
/coedeposits place [<type> [<pos> [<amount> [<chunks>]]]] |
Admin-place a deposit. amount<0 → infinite vein, amount>0 → exact unit budget. |
/coedeposits replenish <rate> / replenish all <rate> |
Set the per-hour replenish rate for the deposit under the player, or for every deposit in the dimension. 0 disables. |
Configuration
All three config files auto-create on first launch with sensible defaults. You don't need to touch them to play — they exist for tuning and per-server customization.
Deposit registry
config/coedeposits/deposits.json — top-level JSON map of deposit ids → type bodies. Edit + /reload to refresh in-game. Per-entry parse errors are logged but don't break the rest.
Real entry from the bundled defaults — iron ore in overworld mountains/taiga/hills:
{
"coedeposits:iron": {
"vein_recipe": "coedeposits:iron_vein",
"items": [{"item": "minecraft:raw_iron", "weight": 1, "min": 1, "max": 1}],
"placement": "managed",
"dimensions": "minecraft:overworld",
"distance": {"min": 0, "max": 99999},
"size_chunks": {"min": 4, "max": 30},
"per_chunk_units": {"min": 20000, "max": 200000},
"weight": 150,
"map_color": 12895428,
"biome_filter": ["c:is_mountain", "minecraft:is_taiga", "minecraft:is_hill"]
}
}
A more advanced example — nether quartz, restricted to the nether dimension, hidden until found with a Vein Finder:
{
"coedeposits:nether_quartz": {
"vein_recipe": "coedeposits:nether_quartz_vein",
"dimensions": "minecraft:the_nether",
"size_chunks": {"min": 4, "max": 25},
"per_chunk_units": {"min": 25000, "max": 220000},
"weight": 220,
"map_color": 15790824,
"biome_filter": ["minecraft:is_nether"],
"reveal": "on_prospect"
}
}
Field reference:
| Field | Purpose |
|---|---|
vein_recipe |
COE VeinRecipe id applied to the chunk's OreData. |
placement |
managed (our blob algorithm) or coe (vanilla COE places, we track for the map). Default managed. |
dimensions |
Allow-list of dimension ids. "minecraft:overworld" or ["minecraft:the_nether", "minecraft:the_end"]. Empty = any enabled dimension. |
distance |
Block distance window from spawn (managed only). |
size_chunks |
Blob size range; tier-lerped between min and max. |
per_chunk_units |
Per-chunk unit budget. max optional — without it, budget grows as min × (1 + tier × unbounded_growth). |
weight |
Weight in the weighted pick among eligible managed types. |
map_color |
RGB int for the world-map overlay. |
biome_filter |
Any-of biome tag list. Empty = any biome. |
reveal |
always / on_discovery / on_proximity / on_prospect. Defaults to the global reveal_mode. |
vein_recipes |
Alternative to vein_recipe — pool of [{recipe, weight}, …] for per-chunk weighted picks across multiple ores. |
vein |
Inline VeinRecipe (display_name, amount_multiplier_min/max, icon). Synthesised by the bundled virtual datapack — no separate file needed. |
drilling |
Inline DrillingRecipe (outputs: [{item, chance, count}], ticks, stress). Synthesised alongside vein. |
fillers |
Optional [{weight}] — adds patchy empty "tailings" chunks. Default off. |
replenish_rate_per_hour |
Units restored per hour to drilled chunks while loaded. Capped at each chunk's original yield. Default 0 (off). |
Server tuning
config/coedeposits-common.toml:
# Distance curve — log-scale: tier ≈ 0.5 at base_radius, ≈ 1.0 at max_radius
base_radius = 1000.0
max_radius = 25000.0
# Per-chunk roll to become a deposit core
core_spawn_probability = 0.02
# Per-chunk gradient floor — edges get this fraction of the core's peak
edge_amount_mul = 0.3
# Pre-scan radius around spawn on server start (0 = disabled, max 16000)
prospect_radius = 2000
# Open-ended growth when per_chunk_units.max is absent
unbounded_growth = 50.0
# Default reveal policy (per-type override in deposits.json)
reveal_mode = "ALWAYS"
proximity_reveal_blocks = 256
discovery_radius_blocks = 24
# Dimensions where the mod is active
enabled_dimensions = ["minecraft:overworld", "minecraft:the_nether", "minecraft:the_end"]
# Max pending placements materialised on the main thread per tick from the
# async prospect queue. Dry-run picking runs off-thread; this only throttles
# the hand-off step. Raise to drain the queue faster after a large /regenerate;
# lower if you see tick spikes on weak CPUs.
prospect_chunks_per_tick = 256
# ── Logging toggles ─────────────────────────────────────────────────────
log_placement = true # new deposit placed
log_discovery = true # ON_DISCOVERY / ON_PROSPECT reveal triggered
log_depletion = true # chunk fully extracted, OreData wiped
log_replenish_actions = false # very noisy — per-(deposit, chunk) replenish lines
log_scan_summary = true # one-line summary per prospect-scan job
log_scan_rejections = false # per-chunk diagnostic for failed deposit-type matches
log_lifecycle = true # picker install, types loaded, queue drain
Client UI
config/coedeposits-client.toml:
# Show the toggle widget on Xaero's world map. Disable if it overlaps
# another mod's UI (e.g. Create: Steam 'n' Rails' Train Routes button).
# The Options → Controls keybind still works either way.
map_button_enabled = true
map_button_x_offset = 21
map_button_y_offset = 5
map_button_anchor = "LEFT" # LEFT or RIGHT — which edge the widget anchors to
# Client-cache sync packets log ("cache: +N → total M"). Noisy — off by default.
log_client_sync = false
Full schema and design notes in the GitHub README.
Compatibility
- Third-party COE veins coexist — recipes you don't declare in
deposits.jsonspawn via vanilla COE behaviour when aplacement: "coe"entry exists; otherwise they're suppressed in enabled dimensions. - JEI / Jade — drilling recipes appear in the Drilling category and in-world tooltips.
- Create: Steam 'n' Rails — no conflict. Both mods place a map widget though;
coedeposits-client.tomllets you move/disable ours. - c2me — works. The picker runs on the chunk's worker thread. (Avoid the Fabric+Connector port with Lootr — use native NeoForge c2me.)
Pattern sharing
Generation is deterministic on (depositSeed, chunkX, chunkZ) + biome + distance-from-spawn:
# In world A:
/coedeposits seed
→ deposit seed: 4823651729 (world seed) | dim: minecraft:overworld
# In world B with the same deposits.json:
/coedeposits regenerate 4823651729
→ regenerated: placed 47 new in 2000-block radius
→ deposit seed is now 4823651729
Same seed + same deposits.json + similar biome layout → same pattern. The seed is per-dimension and persisted in SavedData.
Links
- Source code & issues: github.com/RandomCodeGuys/create-ore-excavation-deposits
- License: MIT
For bug reports, feature requests, or PRs — please use GitHub Issues.



