From e206664b3dd47cf869a4f0c771ec4b18dd66c3d9 Mon Sep 17 00:00:00 2001 From: claude Date: Mon, 9 Nov 2026 12:45:44 +0100 Subject: [PATCH] Phase 9 begins: bigger, sparser veins, a mine-through respawn block, left-out lines Phase 8 approved (2026-11-09). Adrian's Phase 9 answers: left-out Pokemon rare in fitting zones; legendaries from crafted summons; no public release. - Ore veins more sporadic but bigger: nodes about 40 % rarer, veins about 30 % further apart, each one block larger in radius. 1.5-3x the ore overall; a new island is needed to see it. World check on the regenerated island passes. - The respawn block (Regenerating Ore Veins' regenerator): the aim passes through it unless sneaking (mixin, the pack's first), so ore behind it can be mined; much fainter glass through KubeJS assets. Self-test regenerator_lets_the_aim_through casts a real ray. - 31 lines (67 species) with no matching island biome, or no spawn data (Rotom), get rare homes in fitting zones (world/zones.json -> homeless). Existing spawns and guardians don't change. JEI data and quests regenerated. - surface_nodes_lie_in_the_ground checks the node's centre column: a wider node's edge can lie under a tree or a slope. - Roadmap: every implemented Pokemon obtainable; Iris and Complementary Reimagined as the default shader. Self-tests and the island check pass. Co-Authored-By: Claude Opus 5.5 --- README.md | 2 +- .../data/cobblesurvival/ore_nodes/island.json | 84 +- .../spawn_pool_world/basalt.json | 16 + .../spawn_pool_world/deep_dark.json | 50 + .../spawn_pool_world/deep_sea.json | 105 ++ .../spawn_pool_world/dripstone.json | 36 + .../spawn_pool_world/frostpeak.json | 126 ++ .../spawn_pool_world/highlands.json | 62 + .../spawn_pool_world/jungle.json | 64 + .../spawn_pool_world/lush_caves.json | 16 + .../cobblesurvival/spawn_pool_world/mire.json | 64 + .../spawn_pool_world/southwold.json | 79 + .../spawn_pool_world/sunscorch.json | 80 + .../spawn_pool_world/westmarch.json | 62 + docs/balance.md | 6 +- docs/checklists/phase-8.md | 2 + docs/checklists/phase-9.md | 21 + docs/design.md | 13 + docs/roadmap.md | 3 + docs/zone-species.md | 48 +- .../mixin/RegeneratorBlockMixin.java | 25 + .../cobblesurvival/selftest/OreNodeTests.kt | 6 +- .../dev/cobblesurvival/selftest/VeinTests.kt | 25 + .../resources/META-INF/neoforge.mods.toml | 3 + .../cobblesurvival/jei/drop_sources.json | 1488 +++++++++++++++++ .../main/resources/cobblesurvival.mixins.json | 8 + .../ftbquests/quests/chapters/basalt.snbt | 2 +- .../ftbquests/quests/chapters/deep_dark.snbt | 2 +- .../ftbquests/quests/chapters/deep_sea.snbt | 2 +- .../ftbquests/quests/chapters/dripstone.snbt | 2 +- .../ftbquests/quests/chapters/frostpeak.snbt | 2 +- .../ftbquests/quests/chapters/highlands.snbt | 2 +- .../ftbquests/quests/chapters/jungle.snbt | 2 +- .../ftbquests/quests/chapters/lush_caves.snbt | 2 +- .../ftbquests/quests/chapters/mire.snbt | 2 +- .../ftbquests/quests/chapters/southwold.snbt | 2 +- .../ftbquests/quests/chapters/sunscorch.snbt | 2 +- .../ftbquests/quests/chapters/westmarch.snbt | 2 +- pack/config/regenerating_ore_veins/veins.json | 246 +-- pack/index.toml | 34 +- .../models/block/regenerator_block.json | 54 + .../textures/block/regenerator_glass.png | Bin 0 -> 112 bytes pack/pack.toml | 2 +- tools/zone_spawns.py | 51 +- world/zones.json | 60 +- 45 files changed, 2723 insertions(+), 242 deletions(-) create mode 100644 docs/checklists/phase-9.md create mode 100644 mod/src/main/java/dev/cobblesurvival/mixin/RegeneratorBlockMixin.java create mode 100644 mod/src/main/resources/cobblesurvival.mixins.json create mode 100644 pack/kubejs/assets/regenerating_ore_veins/models/block/regenerator_block.json create mode 100644 pack/kubejs/assets/regenerating_ore_veins/textures/block/regenerator_glass.png diff --git a/README.md b/README.md index cb3eef8..3c10f0b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A free NeoForge 1.21.1 modpack on Cobblemon 1.8: one large island with soft-gated, Palworld/ARK-style progression, plus a companion mod for the mechanics no addon covers. The plan is in [docs/roadmap.md](docs/roadmap.md); decisions taken so far are in [docs/design.md](docs/design.md). -**Status:** Phases 0–7 approved (2026-11-03); Phase 8 (questbook as a research tree, drop sources in JEI) in progress. Checks per phase: `docs/checklists/`. +**Status:** Phases 0–8 approved (2026-11-09); Phase 9 (balancing and release) in progress. Checks per phase: `docs/checklists/`. ## What's in the pack diff --git a/datapacks/core/data/cobblesurvival/ore_nodes/island.json b/datapacks/core/data/cobblesurvival/ore_nodes/island.json index 96ef20e..0edac3a 100644 --- a/datapacks/core/data/cobblesurvival/ore_nodes/island.json +++ b/datapacks/core/data/cobblesurvival/ore_nodes/island.json @@ -5,57 +5,57 @@ "vein": "coal_node", "zone": "button_isle", "where": "surface", - "chance": 0.5, - "radius": 1 + "chance": 0.3, + "radius": 2 }, { "vein": "copper_node", "zone": "southwold", "where": "surface", - "chance": 0.2, - "radius": 1 + "chance": 0.12, + "radius": 2 }, { "vein": "iron_node", "zone": "westmarch", "where": "surface", - "chance": 0.2, - "radius": 1 + "chance": 0.12, + "radius": 2 }, { "vein": "redstone_node", "zone": "jungle", "where": "surface", - "chance": 0.2, - "radius": 1 + "chance": 0.12, + "radius": 2 }, { "vein": "lapis_node", "zone": "highlands", "where": "surface", - "chance": 0.15, - "radius": 1 + "chance": 0.09, + "radius": 2 }, { "vein": "gold_node", "zone": "sunscorch", "where": "surface", - "chance": 0.3, - "radius": 1 + "chance": 0.18, + "radius": 2 }, { "vein": "emerald_node", "zone": "frostpeak", "where": "surface", - "chance": 0.15, - "radius": 1 + "chance": 0.09, + "radius": 2 }, { "vein": "amethyst_node", "zone": "dripstone", "where": "cave", - "chance": 0.5, - "radius": 1, + "chance": 0.3, + "radius": 2, "biome": "minecraft:dripstone_caves", "tries": 8, "y": [ @@ -67,8 +67,8 @@ "vein": "diamond_node", "zone": "deep_dark", "where": "cave", - "chance": 0.15, - "radius": 1, + "chance": 0.09, + "radius": 2, "biome": "minecraft:deep_dark", "tries": 8, "y": [ @@ -80,8 +80,8 @@ "vein": "quartz_node", "zone": "basalt", "where": "cave", - "chance": 0.5, - "radius": 1, + "chance": 0.3, + "radius": 2, "biome": "minecraft:basalt_deltas", "tries": 8, "y": [ @@ -93,8 +93,8 @@ "vein": "netherite_node", "zone": "basalt", "where": "cave", - "chance": 0.06, - "radius": 0, + "chance": 0.036, + "radius": 1, "biome": "minecraft:basalt_deltas", "tries": 8, "y": [ @@ -106,15 +106,15 @@ "vein": "thunder_stone_node", "zone": "westmarch", "where": "surface", - "chance": 0.03, - "radius": 0 + "chance": 0.018, + "radius": 1 }, { "vein": "shiny_stone_node", "zone": "lush_caves", "where": "cave", - "chance": 0.15, - "radius": 1, + "chance": 0.09, + "radius": 2, "biome": "minecraft:lush_caves", "tries": 8, "y": [ @@ -126,22 +126,22 @@ "vein": "leaf_stone_node", "zone": "jungle", "where": "surface", - "chance": 0.04, - "radius": 0 + "chance": 0.024, + "radius": 1 }, { "vein": "water_stone_node", "zone": "mire", "where": "surface", - "chance": 0.04, - "radius": 0 + "chance": 0.024, + "radius": 1 }, { "vein": "moon_stone_node", "zone": "dripstone", "where": "cave", - "chance": 0.25, - "radius": 1, + "chance": 0.15, + "radius": 2, "biome": "minecraft:dripstone_caves", "tries": 8, "y": [ @@ -153,36 +153,36 @@ "vein": "sun_stone_node", "zone": "highlands", "where": "surface", - "chance": 0.02, - "radius": 0 + "chance": 0.012, + "radius": 1 }, { "vein": "fire_stone_node", "zone": "sunscorch", "where": "surface", - "chance": 0.08, - "radius": 0 + "chance": 0.048, + "radius": 1 }, { "vein": "ice_stone_node", "zone": "frostpeak", "where": "surface", - "chance": 0.06, - "radius": 0 + "chance": 0.036, + "radius": 1 }, { "vein": "dawn_stone_node", "zone": "frostpeak", "where": "surface", - "chance": 0.04, - "radius": 0 + "chance": 0.024, + "radius": 1 }, { "vein": "dusk_stone_node", "zone": "deep_dark", "where": "cave", - "chance": 0.1, - "radius": 1, + "chance": 0.06, + "radius": 2, "biome": "minecraft:deep_dark", "tries": 8, "y": [ diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/basalt.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/basalt.json index 70a833f..cf58468 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/basalt.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/basalt.json @@ -48,6 +48,22 @@ "multiplier": 1.25 } }, + { + "id": "basalt-armarouge-16", + "type": "pokemon", + "pokemon": "armarouge", + "presets": [], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "55-70", + "weight": 10, + "condition": { + "zone": "basalt", + "biomes": [ + "minecraft:basalt_deltas" + ] + } + }, { "bucket": "common", "condition": { diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/deep_dark.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/deep_dark.json index ed1a117..9f90b18 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/deep_dark.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/deep_dark.json @@ -90,6 +90,22 @@ "multiplier": 1.25 } }, + { + "id": "deep_dark-chandelure-36", + "type": "pokemon", + "pokemon": "chandelure", + "presets": [], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "45-60", + "weight": 10, + "condition": { + "zone": "deep_dark", + "biomes": [ + "minecraft:deep_dark" + ] + } + }, { "bucket": "common", "condition": { @@ -455,6 +471,24 @@ } ] }, + { + "id": "deep_dark-grimmsnarl-34", + "type": "pokemon", + "pokemon": "grimmsnarl", + "presets": [ + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "45-60", + "weight": 10, + "condition": { + "zone": "deep_dark", + "biomes": [ + "minecraft:deep_dark" + ] + } + }, { "anticondition": { "structures": [ @@ -539,6 +573,22 @@ "multiplier": 2.0 } }, + { + "id": "deep_dark-lampent-35", + "type": "pokemon", + "pokemon": "lampent", + "presets": [], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "45-60", + "weight": 10, + "condition": { + "zone": "deep_dark", + "biomes": [ + "minecraft:deep_dark" + ] + } + }, { "bucket": "common", "condition": { diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/deep_sea.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/deep_sea.json index 8a18a1b..8a4fae4 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/deep_sea.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/deep_sea.json @@ -538,6 +538,21 @@ } ] }, + { + "id": "deep_sea-dewgong-141", + "type": "pokemon", + "pokemon": "dewgong", + "presets": [ + "water" + ], + "spawnablePositionType": "submerged", + "bucket": "rare", + "level": "34-50", + "weight": 10, + "condition": { + "zone": "deep_sea" + } + }, { "anticondition": { "biomes": [ @@ -974,6 +989,21 @@ "multiplier": 5.0 } }, + { + "id": "deep_sea-empoleon-139", + "type": "pokemon", + "pokemon": "empoleon", + "presets": [ + "water" + ], + "spawnablePositionType": "submerged", + "bucket": "rare", + "level": "36-50", + "weight": 10, + "condition": { + "zone": "deep_sea" + } + }, { "bucket": "common", "condition": { @@ -2312,6 +2342,21 @@ "type": "pokemon", "weight": 60.0 }, + { + "id": "deep_sea-piplup-137", + "type": "pokemon", + "pokemon": "piplup", + "presets": [ + "water" + ], + "spawnablePositionType": "submerged", + "bucket": "rare", + "level": "30-50", + "weight": 10, + "condition": { + "zone": "deep_sea" + } + }, { "anticondition": { "biomes": [ @@ -2408,6 +2453,21 @@ "type": "pokemon", "weight": 4.0 }, + { + "id": "deep_sea-prinplup-138", + "type": "pokemon", + "pokemon": "prinplup", + "presets": [ + "water" + ], + "spawnablePositionType": "submerged", + "bucket": "rare", + "level": "30-50", + "weight": 10, + "condition": { + "zone": "deep_sea" + } + }, { "bucket": "common", "condition": { @@ -2628,6 +2688,36 @@ } ] }, + { + "id": "deep_sea-sealeo-142", + "type": "pokemon", + "pokemon": "sealeo", + "presets": [ + "water" + ], + "spawnablePositionType": "submerged", + "bucket": "rare", + "level": "32-50", + "weight": 10, + "condition": { + "zone": "deep_sea" + } + }, + { + "id": "deep_sea-seel-140", + "type": "pokemon", + "pokemon": "seel", + "presets": [ + "water" + ], + "spawnablePositionType": "submerged", + "bucket": "rare", + "level": "30-50", + "weight": 10, + "condition": { + "zone": "deep_sea" + } + }, { "anticondition": { "biomes": [ @@ -3598,6 +3688,21 @@ }, "multiplier": 3.0 } + }, + { + "id": "deep_sea-walrein-143", + "type": "pokemon", + "pokemon": "walrein", + "presets": [ + "water" + ], + "spawnablePositionType": "submerged", + "bucket": "rare", + "level": "44-50", + "weight": 10, + "condition": { + "zone": "deep_sea" + } } ] } diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/dripstone.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/dripstone.json index 802122d..cabb4e4 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/dripstone.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/dripstone.json @@ -64,6 +64,24 @@ "multiplier": 1.25 } }, + { + "id": "dripstone-aron-49", + "type": "pokemon", + "pokemon": "aron", + "presets": [ + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "22-38", + "weight": 10, + "condition": { + "zone": "dripstone", + "biomes": [ + "minecraft:dripstone_caves" + ] + } + }, { "bucket": "ultra-rare", "condition": { @@ -619,6 +637,24 @@ "type": "pokemon", "weight": 60.0 }, + { + "id": "dripstone-lairon-50", + "type": "pokemon", + "pokemon": "lairon", + "presets": [ + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "32-38", + "weight": 10, + "condition": { + "zone": "dripstone", + "biomes": [ + "minecraft:dripstone_caves" + ] + } + }, { "bucket": "uncommon", "condition": { diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/frostpeak.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/frostpeak.json index 920eb0e..e3ed34e 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/frostpeak.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/frostpeak.json @@ -121,6 +121,21 @@ "type": "pokemon", "weight": 4.8 }, + { + "id": "frostpeak-avalugg-84", + "type": "pokemon", + "pokemon": "avalugg", + "presets": [ + "natural" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "40-55", + "weight": 10, + "condition": { + "zone": "frostpeak" + } + }, { "bucket": "common", "condition": { @@ -455,6 +470,22 @@ "type": "pokemon", "weight": 21.6 }, + { + "id": "frostpeak-beartic-86", + "type": "pokemon", + "pokemon": "beartic", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "40-55", + "weight": 10, + "condition": { + "zone": "frostpeak" + } + }, { "bucket": "uncommon", "condition": { @@ -528,6 +559,22 @@ } ] }, + { + "id": "frostpeak-cetitan-85", + "type": "pokemon", + "pokemon": "cetitan", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "40-55", + "weight": 10, + "condition": { + "zone": "frostpeak" + } + }, { "anticondition": { "biomes": [ @@ -869,6 +916,21 @@ "type": "pokemon", "weight": 87.5 }, + { + "id": "frostpeak-eiscue-87", + "type": "pokemon", + "pokemon": "eiscue", + "presets": [ + "natural" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "40-55", + "weight": 10, + "condition": { + "zone": "frostpeak" + } + }, { "bucket": "common", "condition": { @@ -1532,6 +1594,22 @@ "multiplier": 0.25 } }, + { + "id": "frostpeak-mamoswine-91", + "type": "pokemon", + "pokemon": "mamoswine", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "40-55", + "weight": 10, + "condition": { + "zone": "frostpeak" + } + }, { "bucket": "ultra-rare", "condition": { @@ -1659,6 +1737,22 @@ "type": "pokemon", "weight": 21.6 }, + { + "id": "frostpeak-piloswine-90", + "type": "pokemon", + "pokemon": "piloswine", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "40-55", + "weight": 10, + "condition": { + "zone": "frostpeak" + } + }, { "bucket": "common", "condition": { @@ -2033,6 +2127,22 @@ "type": "pokemon", "weight": 99.0 }, + { + "id": "frostpeak-stantler-88", + "type": "pokemon", + "pokemon": "stantler", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "40-55", + "weight": 10, + "condition": { + "zone": "frostpeak" + } + }, { "anticondition": { "biomes": [ @@ -2383,6 +2493,22 @@ }, "multiplier": 1.25 } + }, + { + "id": "frostpeak-wyrdeer-89", + "type": "pokemon", + "pokemon": "wyrdeer", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "42-55", + "weight": 10, + "condition": { + "zone": "frostpeak" + } } ] } diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/highlands.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/highlands.json index e44983b..bf49e8a 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/highlands.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/highlands.json @@ -121,6 +121,22 @@ "multiplier": 2.0 } }, + { + "id": "highlands-blitzle-128", + "type": "pokemon", + "pokemon": "blitzle", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "25-35", + "weight": 10, + "condition": { + "zone": "highlands" + } + }, { "bucket": "common", "condition": { @@ -525,6 +541,36 @@ "multiplier": 2.0 } }, + { + "id": "highlands-dodrio-131", + "type": "pokemon", + "pokemon": "dodrio", + "presets": [ + "natural" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "31-35", + "weight": 10, + "condition": { + "zone": "highlands" + } + }, + { + "id": "highlands-doduo-130", + "type": "pokemon", + "pokemon": "doduo", + "presets": [ + "natural" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "25-35", + "weight": 10, + "condition": { + "zone": "highlands" + } + }, { "anticondition": { "biomes": [ @@ -3926,6 +3972,22 @@ "multiplier": 1.5 } }, + { + "id": "highlands-zebstrika-129", + "type": "pokemon", + "pokemon": "zebstrika", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "27-35", + "weight": 10, + "condition": { + "zone": "highlands" + } + }, { "anticondition": { "biomes": [ diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/jungle.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/jungle.json index ff97b4d..4ea66f7 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/jungle.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/jungle.json @@ -58,6 +58,21 @@ "multiplier": 1.25 } }, + { + "id": "jungle-bewear-84", + "type": "pokemon", + "pokemon": "bewear", + "presets": [ + "natural" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "27-30", + "weight": 10, + "condition": { + "zone": "jungle" + } + }, { "bucket": "common", "condition": { @@ -499,6 +514,24 @@ "type": "pokemon", "weight": 100.0 }, + { + "id": "jungle-komala-81", + "type": "pokemon", + "pokemon": "komala", + "presets": [ + "natural", + "foliage", + "treetop", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "23-30", + "weight": 10, + "condition": { + "zone": "jungle" + } + }, { "anticondition": { "structures": [ @@ -552,6 +585,22 @@ "multiplier": 2.0 } }, + { + "id": "jungle-pancham-82", + "type": "pokemon", + "pokemon": "pancham", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "18-30", + "weight": 10, + "condition": { + "zone": "jungle" + } + }, { "bucket": "uncommon", "condition": { @@ -1003,6 +1052,21 @@ "multiplier": 2.0 } }, + { + "id": "jungle-stufful-83", + "type": "pokemon", + "pokemon": "stufful", + "presets": [ + "natural" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "18-30", + "weight": 10, + "condition": { + "zone": "jungle" + } + }, { "bucket": "common", "condition": { diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/lush_caves.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/lush_caves.json index 3bc2b1d..8686c41 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/lush_caves.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/lush_caves.json @@ -219,6 +219,22 @@ "multiplier": 2.0 } }, + { + "id": "lush_caves-foongus-35", + "type": "pokemon", + "pokemon": "foongus", + "presets": [], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "12-28", + "weight": 10, + "condition": { + "zone": "lush_caves", + "biomes": [ + "minecraft:lush_caves" + ] + } + }, { "bucket": "common", "condition": { diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/mire.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/mire.json index 7665a94..e5996d1 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/mire.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/mire.json @@ -960,6 +960,38 @@ "type": "pokemon", "weight": 4.0 }, + { + "id": "mire-hatenna-82", + "type": "pokemon", + "pokemon": "hatenna", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "25-38", + "weight": 10, + "condition": { + "zone": "mire" + } + }, + { + "id": "mire-hattrem-83", + "type": "pokemon", + "pokemon": "hattrem", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "32-38", + "weight": 10, + "condition": { + "zone": "mire" + } + }, { "anticondition": { "biomes": [ @@ -2115,6 +2147,38 @@ "multiplier": 3.0 } }, + { + "id": "mire-toedscool-84", + "type": "pokemon", + "pokemon": "toedscool", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "25-38", + "weight": 10, + "condition": { + "zone": "mire" + } + }, + { + "id": "mire-toedscruel-85", + "type": "pokemon", + "pokemon": "toedscruel", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "30-38", + "weight": 10, + "condition": { + "zone": "mire" + } + }, { "bucket": "common", "condition": { diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/southwold.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/southwold.json index c4e15a4..5c6fc29 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/southwold.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/southwold.json @@ -2202,6 +2202,70 @@ "multiplier": 5.0 } }, + { + "id": "southwold-nidoranf-124", + "type": "pokemon", + "pokemon": "nidoranf", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "8-18", + "weight": 10, + "condition": { + "zone": "southwold" + } + }, + { + "id": "southwold-nidoranm-126", + "type": "pokemon", + "pokemon": "nidoranm", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "8-18", + "weight": 10, + "condition": { + "zone": "southwold" + } + }, + { + "id": "southwold-nidorina-125", + "type": "pokemon", + "pokemon": "nidorina", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "16-18", + "weight": 10, + "condition": { + "zone": "southwold" + } + }, + { + "id": "southwold-nidorino-127", + "type": "pokemon", + "pokemon": "nidorino", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "16-18", + "weight": 10, + "condition": { + "zone": "southwold" + } + }, { "anticondition": { "biomes": [ @@ -2593,6 +2657,21 @@ "multiplier": 2.0 } }, + { + "id": "southwold-smoliv-128", + "type": "pokemon", + "pokemon": "smoliv", + "presets": [ + "natural" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "8-18", + "weight": 10, + "condition": { + "zone": "southwold" + } + }, { "anticondition": { "biomes": [ diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/sunscorch.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/sunscorch.json index ac3506c..f80adf2 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/sunscorch.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/sunscorch.json @@ -581,6 +581,22 @@ } ] }, + { + "id": "sunscorch-farigiraf-78", + "type": "pokemon", + "pokemon": "farigiraf", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "32-45", + "weight": 10, + "condition": { + "zone": "sunscorch" + } + }, { "bucket": "common", "condition": { @@ -748,6 +764,22 @@ "type": "pokemon", "weight": 0.6 }, + { + "id": "sunscorch-girafarig-77", + "type": "pokemon", + "pokemon": "girafarig", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "30-45", + "weight": 10, + "condition": { + "zone": "sunscorch" + } + }, { "bucket": "common", "condition": { @@ -827,6 +859,22 @@ "multiplier": 5.0 } }, + { + "id": "sunscorch-kangaskhan-79", + "type": "pokemon", + "pokemon": "kangaskhan", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "30-45", + "weight": 10, + "condition": { + "zone": "sunscorch" + } + }, { "bucket": "uncommon", "condition": { @@ -950,6 +998,22 @@ "multiplier": 2.0 } }, + { + "id": "sunscorch-litleo-80", + "type": "pokemon", + "pokemon": "litleo", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "30-45", + "weight": 10, + "condition": { + "zone": "sunscorch" + } + }, { "bucket": "uncommon", "condition": { @@ -1369,6 +1433,22 @@ "multiplier": 1.25 } }, + { + "id": "sunscorch-pyroar-81", + "type": "pokemon", + "pokemon": "pyroar female", + "presets": [ + "natural", + "wild" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "35-45", + "weight": 10, + "condition": { + "zone": "sunscorch" + } + }, { "bucket": "common", "condition": { diff --git a/datapacks/core/data/cobblesurvival/spawn_pool_world/westmarch.json b/datapacks/core/data/cobblesurvival/spawn_pool_world/westmarch.json index 477603d..2cfa941 100644 --- a/datapacks/core/data/cobblesurvival/spawn_pool_world/westmarch.json +++ b/datapacks/core/data/cobblesurvival/spawn_pool_world/westmarch.json @@ -481,6 +481,21 @@ } ] }, + { + "id": "westmarch-dedenne-142", + "type": "pokemon", + "pokemon": "dedenne", + "presets": [ + "natural" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "18-25", + "weight": 10, + "condition": { + "zone": "westmarch" + } + }, { "anticondition": { "biomes": [ @@ -923,6 +938,22 @@ "type": "pokemon", "weight": 16.8 }, + { + "id": "westmarch-emolga-143", + "type": "pokemon", + "pokemon": "emolga", + "presets": [ + "natural", + "treetop" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "18-25", + "weight": 10, + "condition": { + "zone": "westmarch" + } + }, { "bucket": "common", "condition": { @@ -3937,6 +3968,37 @@ } ] }, + { + "id": "westmarch-pineco-144", + "type": "pokemon", + "pokemon": "pineco", + "presets": [ + "natural", + "treetop" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "15-25", + "weight": 10, + "condition": { + "zone": "westmarch" + } + }, + { + "id": "westmarch-rotom-145", + "type": "pokemon", + "pokemon": "rotom", + "presets": [ + "natural" + ], + "spawnablePositionType": "grounded", + "bucket": "rare", + "level": "15-25", + "weight": 10, + "condition": { + "zone": "westmarch" + } + }, { "anticondition": { "biomes": [ diff --git a/docs/balance.md b/docs/balance.md index 74155f7..9be4fbe 100644 --- a/docs/balance.md +++ b/docs/balance.md @@ -49,9 +49,11 @@ Every tunable lives in a config file or in this table. **Placeholder** means gue | High zone for strong flyers | band starts at Lv 30 or more (Sunscorch, Frostpeak, Deep Sea, Deep Dark, Basalt Furnace) | Decided (Adrian, 2026-10-30) | `tools/zone_spawns.py` (`HIGH_ZONE_LEVEL`) | | | Ore tiers per zone | Button Isle: coal; Southwold: copper; Westmarch: iron, thunder stone; Verdant Jungle: redstone, leaf stone; Highland Meadows: lapis, sun stone; Sunscorch: gold, fire stone; Frostpeak Range: emerald, ice stone, dawn stone; Dripstone Depths: amethyst, moon stone; Deep Dark: diamond, dusk stone; Basalt Furnace: quartz, netherite; Lush Caves: shiny stone; Mangrove Mire: water stone | Fine for now (Adrian, 2026-10-30) | `world/zones.json` → `ores` → `tools/zone_ores.py` | Each tier in exactly one zone; evolution stones are tiers (their natural ores are off) | | Vein regrowth | 20 min: coal; 30 min: copper; 40 min: iron; 45 min: redstone, lapis; 60 min: gold, quartz, thunder stone, shiny stone, leaf stone, water stone, moon stone, sun stone, fire stone, ice stone; 75 min: emerald, dawn stone, dusk stone; 90 min: diamond; 120 min: amethyst; 180 min: netherite; ±10 % jitter; real time | Fine for now (Adrian, 2026-10-30) | `world/zones.json` → `ores` (`regen_minutes`, `ore_defaults.jitter`) | Counts while the server is off too | -| Ore nodes | chance per chunk of the zone — surface: coal 50 %, copper 20 %, iron 20 %, redstone 20 %, lapis 15 %, gold 30 %, emerald 15 %, thunder stone 3 %, leaf stone 4 %, water stone 4 %, sun stone 2 %, fire stone 8 %, ice stone 6 %, dawn stone 4 %; cave floor (8 columns searched): amethyst 50 %, diamond 15 %, quartz 50 %, netherite 6 %, shiny stone 15 %, moon stone 25 %, dusk stone 10 %. Radius 0–1 (evolution stones and netherite one block), 80 % filled | Placeholder (Adrian, 2026-10-30: small on the surface) | `world/zones.json` → `ores` → `nodes` | | -| Underground veins (surface tiers) | radius 2–4 (stones 1–2), spacing 6–11 chunks between candidate chunks, 70 % filled, 1–2 tries per candidate chunk | Placeholder (Adrian, 2026-10-30: larger but harder to find) | `world/zones.json` → `ores` → `veins` | Ore blocks in the template (2026-10-31, nodes and veins): copper 33,211, iron 18,275, quartz 13,366, coal 7,363, lapis 6,092, amethyst 3,640, redstone 3,406, gold 2,223, emerald 1,404, shiny stone 1,270, diamond 1,078, moon stone 970, sun stone 684, thunder stone 667, ice stone 435, dusk stone 425, water stone 404, dawn stone 380, leaf stone 352, fire stone 317, netherite 290. Per zone in `build/island-report.json` after `tools/make_world.py` | +| Ore nodes | chance per chunk of the zone — surface: coal 30 %, copper 12 %, iron 12 %, redstone 12 %, lapis 9 %, gold 18 %, emerald 9 %, thunder stone 1.8 %, leaf stone 2.4 %, water stone 2.4 %, sun stone 1.2 %, fire stone 4.8 %, ice stone 3.6 %, dawn stone 2.4 %; cave floor (8 columns searched): amethyst 30 %, diamond 9 %, quartz 30 %, netherite 3.6 %, shiny stone 9 %, moon stone 15 %, dusk stone 6 %. Radius 1–2 (evolution stones and netherite 0–1), 80 % filled | Placeholder (Adrian, 2026-11-09: more sporadic but bigger; 2026-10-30: small on the surface) | `world/zones.json` → `ores` → `nodes` | New numbers apply to a newly generated island only | +| Underground veins (surface tiers) | radius 3–5 (stones 2–3), spacing 8–14 chunks between candidate chunks, 70 % filled, 1–2 tries per candidate chunk | Placeholder (Adrian, 2026-11-09: more sporadic but bigger) | `world/zones.json` → `ores` → `veins` | Ore blocks on the island (2026-11-09, nodes and veins): copper 53,334, iron 28,509, quartz 21,350, lapis 12,319, coal 11,652, redstone 7,536, amethyst 5,839, gold 4,973, shiny stone 3,514, emerald 3,290, moon stone 2,936, diamond 2,015, thunder stone 1,800, sun stone 1,612, dusk stone 1,261, leaf stone 849, dawn stone 814, water stone 696, ice stone 660, fire stone 536, netherite 533: 1.5–3× the old totals, since the larger size outweighs the wider spacing. Per zone in `build/island-report.json` after `tools/make_world.py` | | Regenerators breakable by players | no; explosions don't hurt veins | Fine for now (Adrian, 2026-10-30) | `tools/zone_ores.py` → `global.json` | Otherwise a player could remove a vein for good | +| Respawn block (regenerator) | the player's aim passes through it unless sneaking, so ore behind it can be mined; no collision (the mod's own); glass about 9 % opaque with a 27 % edge (was stained glass, about 50 %) | Adrian, 2026-11-09 | `mod/src/main/java/.../RegeneratorBlockMixin.java`; `pack/kubejs/assets/regenerating_ore_veins/` | Sneak-use still shows its info | +| Homeless lines | 31 lines with no matching biome on the island: rare bucket, weight 10, at the zone's levels, anywhere in the zone | Placeholder (Adrian, 2026-11-09: rare, in fitting zones) | `world/zones.json` → `homeless` → `tools/zone_spawns.py` | Which zone each lives in is listed there and in `docs/zone-species.md` | | Vein Locator | compass + copper ingot; 75 % chance to break per use (the mod's default) | Fine for now (Adrian, 2026-10-30) | `tools/zone_ores.py` → `vein_locator.json` | The mod's default recipe needs netherite | | Drops for mobs the island lacks | Blaze Rod: Carkol 10 %, Torkoal 25 % ×1–2; Ghast Tear: Drifloon 5 %, Dusclops 10 %; Breeze Rod: Whimsicott 10 %; Shulker Shell: Shuckle 10 %, Cloyster 10 %; Nether Star: Charizard 5 % | Fine for now (Adrian, 2026-10-30) | `datapacks/core/data/cobblesurvival/species_additions/` | Every drop and what consumes it: `docs/pokemon-drops.md` (`tools/drop_audit.py`) | | Cobblebase skill gates | start: gatherer, harvester, irrigator, producer, furnace fuel, water fill, extinguisher, scout, guard; Button Isle: fishing, forager, botanist, collector, snow fill, brewing fuel, craftsman; Southwold: pharmacist, scholar, mentor (passive XP), lava fill; Westmarch: mining, excavator, architect, armorer, diving; Verdant Jungle: alchemist, trainer, smith, prospector, growth aura; Highland Meadows: speed, jump, haste, night vision, water breathing, saturation buffs; Mangrove Mire: resistance, strength buffs; Sunscorch: friend recruiter, aura boost; Frostpeak: healer, lucky charm; Deep Dark: breeder, egg hatcher | Placeholder | `datapacks/core/data/cobblesurvival/progression_gates/base.json` → `cobblebase_skills` | A zone means its soft gate, checked on the pastured Pokémon (see "Soft gate levels and materials") | diff --git a/docs/checklists/phase-8.md b/docs/checklists/phase-8.md index 581d96d..9afa166 100644 --- a/docs/checklists/phase-8.md +++ b/docs/checklists/phase-8.md @@ -25,4 +25,6 @@ ## Ask Adrian +**Phase 8 approved 2026-11-09** ("Approved, next phase"; after the JEI pages were restyled to match Cobblemon Info's). + - (after the first chapters) Does the layout read well? Move nodes freely in the editor; the next generation keeps your positions. diff --git a/docs/checklists/phase-9.md b/docs/checklists/phase-9.md new file mode 100644 index 0000000..425aa72 --- /dev/null +++ b/docs/checklists/phase-9.md @@ -0,0 +1,21 @@ +# Phase 9 – checks for Adrian + +## Decided + +**2026-11-09:** Pokémon with no biome on the island spawn rarely in fitting zones; legendaries come from crafted summons; ore veins more sporadic but bigger; the respawn block is see-through and mine-through; no public release (Adrian hands the pack out privately). Roadmap additions: every implemented Pokémon obtainable; a shader pack by default (Complementary Reimagined through Iris). Details: `docs/design.md` → "Phase 9". + +## Built so far + +- **Ore veins:** rarer nodes and wider vein spacing, one block larger in radius. Needs a new island: the save "Cobblemon Survival Island (new veins)" has it. Your other saves keep their old veins. +- **Respawn block:** much fainter glass; you aim through it unless sneaking. Automated: `regenerator_lets_the_aim_through`. +- **Left-out Pokémon:** 31 lines (67 species) spawn rarely in fitting zones (`docs/zone-species.md`). Automated: `spawn_pools_are_zoned`, `drop_sources_match_the_server`. + +## In game (Prism instance) + +- [ ] In the new save, mine into an ore node or vein: the mined blocks turn into faint glass, and you can keep aiming and mining the ore behind them. Sneak and use one: its info still shows. +- [ ] Do nodes and veins feel right: fewer, bigger? The island has 1.5–3× the old ore; tell me if that's too much. +- [ ] Spend time in Frostpeak or the Deep Sea: now and then a Beartic, Mamoswine, Empoleon or Walrein turns up. JEI's Island Drops page names the zone. + +## Ask Adrian + +- All numbers are placeholders (`docs/balance.md`). diff --git a/docs/design.md b/docs/design.md index f5fa5d4..e6c642e 100644 --- a/docs/design.md +++ b/docs/design.md @@ -322,6 +322,19 @@ The pages sit next to Cobblemon Info's own, and Adrian likes having both, so the JEI runs on the client, which on a dedicated server doesn't have the server's data, so the pages are built from `assets/cobblesurvival/jei/drop_sources.json` inside the mod, written by `tools/jei_sources.py` from the pack's own files (Cobblemon's species drops with the pack's species additions, the zone spawn pools, guardians, the End boss, the machines, `world/zones.json` ores, Cobblebase's zone tables). Which ore a vein gives now lives in `world/zones.json` → `ores` → `item` (the quest book reads it too). Self-tests: `drop_sources_match_the_server` compares the file with the live server (every listed Pokémon's drops and zones, spawns with own drops, guardians, the End boss, altar tiers) and fails when it's stale; `jei_pages_build` builds every page with the same code JEI calls and checks every item exists. +## Phase 9: balancing and release (Adrian, 2026-11-09) + +Adrian's choices: Pokémon with no biome on the island become rare spawns in fitting zones; legendaries come from crafted summons; no public release: he hands the pack out himself through a private channel to select people. The Modrinth/CurseForge split therefore stays unresolved on purpose. + +**Every implemented Pokémon is obtainable** (roadmap). Of 905 implemented species, 95 were out of reach by wild spawn or by evolving a wild line (2026-11-09): +- 5 fossils (Aerodactyl, Arctovish, Arctozolt, Dracovish, Dracozolt): already obtainable. The field guide lists their fossils as found on the island, and the fossil machines are craftable. +- 67 species in 31 lines that spawn only in biomes the island lacks, or not at all (Rotom): each line gets a home in the closest-fitting zone (`world/zones.json` → `homeless`), as a rare spawn anywhere in that zone at its levels. Conditions tied to the missing biomes are dropped. Existing spawns and homes don't move. They show in `docs/zone-species.md` and in JEI. +- 23 legendaries, mythicals, Ultra Beasts and Paradox Pokémon, with no spawn data: crafted summons (to do). + +**Ore veins** (Adrian, 2026-11-09: more sporadic but bigger). Nodes are about 40 % rarer and veins about 30 % further apart, each one block larger in radius; the bigger size outweighs the spacing, so the island holds 1.5–3× the ore. Veins are laid down when chunks generate, so this needs a newly generated island. + +**The respawn block** (Regenerating Ore Veins' regenerator, the placeholder where a mined vein block grows back) no longer stops the player's aim, so the ore behind it can be mined; it never had collision. While sneaking the player can still target it, which is how its info opens. A mixin returns an empty outline shape (`RegeneratorBlockMixin.java`, the mod's only one, targeting the class by name). Its model and glass come from `pack/kubejs/assets/regenerating_ore_veins/`, much fainter than the stained glass it had. Self-test `regenerator_lets_the_aim_through` casts a real ray at it. + ## Open decisions for Adrian (proceeding with the default, flagged) | Decision | Default used for now | diff --git a/docs/roadmap.md b/docs/roadmap.md index 298adca..e880ae2 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -191,6 +191,7 @@ Goal: a quest book that points players onward, laid out like a research tree who - **Balance pass** on levels, drop rates, vein timers, job cooldowns, hazard damage and machine output, all from `docs/balance.md`. - **Every implemented Pokémon is obtainable** (Adrian, 2026-11-09). Every species Cobblemon has a model for must be reachable somewhere in the world, even if rarely or through crafting: a wild spawn, evolving a wild line, a fossil, or a crafted or summoned encounter. Legendaries and the like count too; they can be very rare or expensive. Checked on 2026-11-09: 95 of 905 implemented species are not reachable by a wild spawn or by evolving a wild line (legendaries, fossils, and lines the zone assignment left out, such as Aron, Litwick and Piplup). Report what is missing with a tool or self-test so new Cobblemon versions can't reopen the gap. +- **A shader pack by default** (Adrian, 2026-11-09). Ship [Iris](https://modrinth.com/mod/iris) (client only) and [Complementary Reimagined](https://modrinth.com/shader/complementary-reimagined), switched on for new players; players can turn it off or pick a lower profile. Iris 1.8.14-beta.1+1.21.1-neoforge (MR `KduFYu4t`) is built against Sodium 0.8.13, which the pack already pins; it is the only NeoForge 1.21.1 build for Sodium 0.8, and a beta. Complementary r5.9.3 (MR `Bqen1mJX`) has the most downloads of the common shader packs and keeps a vanilla-like look, which suits Cobblemon's models. Its license allows modpacks if it is credited where the pack is described, left unmodified, and added through Modrinth or CurseForge's own systems, never as an uploaded file: the private pack has to download it from Modrinth. Check that Cobblemon's models, the machine and boss particles and the see-through blocks render properly with it on, and measure the frame-rate cost. - **Performance.** Profile with spark on a server with realistic pen and machine counts; cap entity density through pasture config if needed. - **Multiplayer test** with Adrian's group. - **Release.** Final `docs/licenses.md`, credits and non-affiliation disclaimer; publish client and server packs on Modrinth and CurseForge as dependency-based packs. @@ -233,3 +234,5 @@ The agent should proceed with the default in each row and flag it, rather than b - [Cobblemon Auto-Battle changelog (CurseForge)](https://www.curseforge.com/minecraft/mc-mods/cobblemon-auto-battle/files/7999259) - [FTB Quests NeoForge files (CurseForge)](https://www.curseforge.com/minecraft/mc-mods/ftb-quests-forge/files/all) - [FTB Quests flexible-mode fix (Modrinth)](https://modrinth.com/project/SWZGEk5x) +- [Iris Shaders (Modrinth)](https://modrinth.com/mod/iris) +- [Complementary Reimagined (Modrinth)](https://modrinth.com/shader/complementary-reimagined), [its license](https://github.com/ComplementaryDevelopment/ComplementaryReimagined/blob/main/License.txt) diff --git a/docs/zone-species.md b/docs/zone-species.md index cacbd26..f22fceb 100644 --- a/docs/zone-species.md +++ b/docs/zone-species.md @@ -6,57 +6,57 @@ Generated by `tools/zone_spawns.py` from Cobblemon's spawn data and `world/zones Bidoof, Bonsly, Caterpie (Butterfree, Caterpie, Metapod), Combee, Gimmighoul, Hoothoot, Kricketot (Kricketot, Kricketune), Ledyba, Meditite, Meowth, Morpeko, Nincada, Pachirisu, Rattata, Sableye, Scatterbug (Scatterbug, Spewpa), Skitty, Smeargle, Spinarak, Sunkern, Tarountula, Weedle (Beedrill, Kakuna, Weedle), Wooper, Wurmple (Beautifly, Cascoon, Dustox, Silcoon, Wurmple), Wynaut -## Frostpeak Range (Lv 40–55, 43 lines) +## Frostpeak Range (Lv 40–55, 49 lines) -Axew (Fraxure, Haxorus), Basculin (Basculegion, Basculin), Budew (Roselia, Roserade), Cherubi (Cherrim), Chespin (Chesnaught, Quilladin), Chikorita (Bayleef, Meganium), Chimchar (Infernape, Monferno), Cryogonal, Cufant (Copperajah), Delibird, Duraludon (Archaludon, Duraludon), Elekid (Electabuzz, Electivire), Gossifleur (Eldegoss), Larvitar (Pupitar, Tyranitar), Machop (Machamp, Machoke), Makuhita (Hariyama), Mankey (Annihilape, Primeape), Mienfoo (Mienshao), Minior, Rhyhorn (Rhydon, Rhyperior), Riolu (Lucario), Rockruff (Lycanroc), Rowlet (Dartrix, Decidueye), Rufflet (Braviary), Salandit, Sawk, Skiddo (Gogoat), Smoochum (Jynx), Sneasel (Sneasel, Sneasler), Snom (Frosmoth), Snorunt (Froslass, Glalie), Snover (Abomasnow), Spinda, Spoink (Grumpig), Sprigatito (Floragato, Meowscarada), Spritzee (Aromatisse), Starly (Staraptor), Throh, Togedemaru, Togepi (Togekiss, Togetic), Tyrogue (Hitmonchan, Hitmonlee, Hitmontop), Vanillite (Vanillish, Vanilluxe), Wooloo (Dubwool) +Axew (Fraxure, Haxorus), Basculin (Basculegion, Basculin), Bergmite (Avalugg), Budew (Roselia, Roserade), Cetoddle (Cetitan), Cherubi (Cherrim), Chespin (Chesnaught, Quilladin), Chikorita (Bayleef, Meganium), Chimchar (Infernape, Monferno), Cryogonal, Cubchoo (Beartic), Cufant (Copperajah), Delibird, Duraludon (Archaludon, Duraludon), Eiscue, Elekid (Electabuzz, Electivire), Gossifleur (Eldegoss), Larvitar (Pupitar, Tyranitar), Machop (Machamp, Machoke), Makuhita (Hariyama), Mankey (Annihilape, Primeape), Mienfoo (Mienshao), Minior, Rhyhorn (Rhydon, Rhyperior), Riolu (Lucario), Rockruff (Lycanroc), Rowlet (Dartrix, Decidueye), Rufflet (Braviary), Salandit, Sawk, Skiddo (Gogoat), Smoochum (Jynx), Sneasel (Sneasel, Sneasler), Snom (Frosmoth), Snorunt (Froslass, Glalie), Snover (Abomasnow), Spinda, Spoink (Grumpig), Sprigatito (Floragato, Meowscarada), Spritzee (Aromatisse), Stantler (Stantler, Wyrdeer), Starly (Staraptor), Swinub (Mamoswine, Piloswine), Throh, Togedemaru, Togepi (Togekiss, Togetic), Tyrogue (Hitmonchan, Hitmonlee, Hitmontop), Vanillite (Vanillish, Vanilluxe), Wooloo (Dubwool) -## Sunscorch (Lv 30–45, 33 lines) +## Sunscorch (Lv 30–45, 36 lines) -Bramblin (Brambleghast), Cacnea (Cacnea, Cacturne), Capsakid (Capsakid, Scovillain), Cubone (Cubone, Marowak), Drampa, Dwebble (Crustle, Dwebble), Ekans (Arbok), Falinks, Fennekin (Braixen, Delphox, Fennekin), Flittle (Espathra), Fuecoco (Crocalor, Fuecoco, Skeledirge), Helioptile (Heliolisk), Hippopotas (Hippopotas, Hippowdon), Klawf, Larvesta, Maractus, Nacli (Garganacl, Naclstack), Numel (Camerupt, Numel), Pawniard, Phanpy (Donphan, Phanpy), Poltchageist (Poltchageist, Sinistcha), Rellor (Rabsca), Sandile (Krokorok, Krookodile), Sandshrew (Sandshrew, Sandslash), Scraggy (Scrafty, Scraggy), Shinx (Luxio, Luxray), Silicobra (Sandaconda, Silicobra), Skarmory, Skorupi (Drapion, Skorupi), Spearow (Fearow), Totodile (Croconaw, Feraligatr, Totodile), Trapinch (Flygon, Vibrava), Tympole (Palpitoad, Seismitoad) +Bramblin (Brambleghast), Cacnea (Cacnea, Cacturne), Capsakid (Capsakid, Scovillain), Cubone (Cubone, Marowak), Drampa, Dwebble (Crustle, Dwebble), Ekans (Arbok), Falinks, Fennekin (Braixen, Delphox, Fennekin), Flittle (Espathra), Fuecoco (Crocalor, Fuecoco, Skeledirge), Girafarig (Farigiraf, Girafarig), Helioptile (Heliolisk), Hippopotas (Hippopotas, Hippowdon), Kangaskhan, Klawf, Larvesta, Litleo (Litleo, Pyroar), Maractus, Nacli (Garganacl, Naclstack), Numel (Camerupt, Numel), Pawniard, Phanpy (Donphan, Phanpy), Poltchageist (Poltchageist, Sinistcha), Rellor (Rabsca), Sandile (Krokorok, Krookodile), Sandshrew (Sandshrew, Sandslash), Scraggy (Scrafty, Scraggy), Shinx (Luxio, Luxray), Silicobra (Sandaconda, Silicobra), Skarmory, Skorupi (Drapion, Skorupi), Spearow (Fearow), Totodile (Croconaw, Feraligatr, Totodile), Trapinch (Flygon, Vibrava), Tympole (Palpitoad, Seismitoad) -## Mangrove Mire (Lv 25–38, 18 lines) +## Mangrove Mire (Lv 25–38, 20 lines) -Arrokuda (Arrokuda, Barraskewda), Croagunk (Croagunk, Toxicroak), Dondozo, Ducklett (Ducklett, Swanna), Flamigo, Froakie (Froakie, Frogadier, Greninja), Illumise, Karrablast (Escavalier, Karrablast), Misdreavus, Mudkip (Marshtomp, Mudkip, Swampert), Shelmet (Accelgor, Shelmet), Slowpoke, Sobble (Drizzile, Inteleon, Sobble), Surskit (Masquerain, Surskit), Tadbulb (Bellibolt, Tadbulb), Tatsugiri, Volbeat, Yanma (Yanma, Yanmega) +Arrokuda (Arrokuda, Barraskewda), Croagunk (Croagunk, Toxicroak), Dondozo, Ducklett (Ducklett, Swanna), Flamigo, Froakie (Froakie, Frogadier, Greninja), Hatenna (Hatenna, Hattrem), Illumise, Karrablast (Escavalier, Karrablast), Misdreavus, Mudkip (Marshtomp, Mudkip, Swampert), Shelmet (Accelgor, Shelmet), Slowpoke, Sobble (Drizzile, Inteleon, Sobble), Surskit (Masquerain, Surskit), Tadbulb (Bellibolt, Tadbulb), Tatsugiri, Toedscool (Toedscool, Toedscruel), Volbeat, Yanma (Yanma, Yanmega) -## Verdant Jungle (Lv 18–30, 26 lines) +## Verdant Jungle (Lv 18–30, 29 lines) -Aipom, Bellsprout (Bellsprout, Weepinbell), Bounsweet (Bounsweet, Steenee, Tsareena), Bulbasaur (Bulbasaur, Ivysaur), Chatot, Darumaka, Exeggcute (Exeggcute, Exeggutor), Fomantis, Grookey (Grookey, Thwackey), Jangmo-o, Kecleon, Litten (Litten, Torracat), Natu (Natu, Xatu), Panpour (Panpour, Simipour), Pansage (Pansage, Simisage), Pansear (Pansear, Simisear), Pikipek (Pikipek, Toucannon, Trumbeak), Shroodle (Grafaiai, Shroodle), Slakoth (Slakoth, Vigoroth), Snivy (Servine, Snivy), Stunfisk, Tangela (Tangela, Tangrowth), Treecko (Grovyle, Treecko), Tropius, Unown, Woobat (Swoobat, Woobat) +Aipom, Bellsprout (Bellsprout, Weepinbell), Bounsweet (Bounsweet, Steenee, Tsareena), Bulbasaur (Bulbasaur, Ivysaur), Chatot, Darumaka, Exeggcute (Exeggcute, Exeggutor), Fomantis, Grookey (Grookey, Thwackey), Jangmo-o, Kecleon, Komala, Litten (Litten, Torracat), Natu (Natu, Xatu), Pancham, Panpour (Panpour, Simipour), Pansage (Pansage, Simisage), Pansear (Pansear, Simisear), Pikipek (Pikipek, Toucannon, Trumbeak), Shroodle (Grafaiai, Shroodle), Slakoth (Slakoth, Vigoroth), Snivy (Servine, Snivy), Stufful (Bewear, Stufful), Stunfisk, Tangela (Tangela, Tangrowth), Treecko (Grovyle, Treecko), Tropius, Unown, Woobat (Swoobat, Woobat) -## Highland Meadows (Lv 25–35, 39 lines) +## Highland Meadows (Lv 25–35, 41 lines) -Abra (Abra, Alakazam, Kadabra), Bouffalant, Buizel (Buizel, Floatzel), Chewtle (Chewtle, Drednaw), Cottonee (Cottonee, Whimsicott), Cyclizar, Cyndaquil (Cyndaquil, Quilava), Electrike (Electrike, Manectric), Fletchling (Fletchinder, Fletchling, Talonflame), Golett, Hoppip (Hoppip, Jumpluff, Skiploom), Igglybuff (Jigglypuff, Wigglytuff), Lechonk (Lechonk, Oinkologne), Lickitung (Lickilicky, Lickitung), Mareep (Ampharos, Flaaffy, Mareep), Miltank, Mudbray (Mudbray, Mudsdale), Nymble (Lokix), Oddish (Bellossom, Gloom, Oddish, Vileplume), Pidgey (Pidgeotto, Pidgey), Poliwag (Politoed, Poliwag, Poliwhirl, Poliwrath), Ponyta, Poochyena (Mightyena), Psyduck (Golduck, Psyduck), Quaxly (Quaxly, Quaxwell), Scorbunny (Cinderace, Raboot, Scorbunny), Seviper, Sinistea (Polteageist, Sinistea), Spiritomb, Squirtle (Squirtle, Wartortle), Stonjourner, Tauros, Tepig (Pignite, Tepig), Tinkatink (Tinkatink, Tinkatuff), Torchic (Combusken, Torchic), Turtwig (Grotle, Torterra, Turtwig), Vulpix (Ninetales, Vulpix), Zangoose, Zorua (Zoroark, Zorua) +Abra (Abra, Alakazam, Kadabra), Blitzle (Blitzle, Zebstrika), Bouffalant, Buizel (Buizel, Floatzel), Chewtle (Chewtle, Drednaw), Cottonee (Cottonee, Whimsicott), Cyclizar, Cyndaquil (Cyndaquil, Quilava), Doduo (Dodrio, Doduo), Electrike (Electrike, Manectric), Fletchling (Fletchinder, Fletchling, Talonflame), Golett, Hoppip (Hoppip, Jumpluff, Skiploom), Igglybuff (Jigglypuff, Wigglytuff), Lechonk (Lechonk, Oinkologne), Lickitung (Lickilicky, Lickitung), Mareep (Ampharos, Flaaffy, Mareep), Miltank, Mudbray (Mudbray, Mudsdale), Nymble (Lokix), Oddish (Bellossom, Gloom, Oddish, Vileplume), Pidgey (Pidgeotto, Pidgey), Poliwag (Politoed, Poliwag, Poliwhirl, Poliwrath), Ponyta, Poochyena (Mightyena), Psyduck (Golduck, Psyduck), Quaxly (Quaxly, Quaxwell), Scorbunny (Cinderace, Raboot, Scorbunny), Seviper, Sinistea (Polteageist, Sinistea), Spiritomb, Squirtle (Squirtle, Wartortle), Stonjourner, Tauros, Tepig (Pignite, Tepig), Tinkatink (Tinkatink, Tinkatuff), Torchic (Combusken, Torchic), Turtwig (Grotle, Torterra, Turtwig), Vulpix (Ninetales, Vulpix), Zangoose, Zorua (Zoroark, Zorua) -## Westmarch (Lv 15–25, 23 lines) +## Westmarch (Lv 15–25, 27 lines) -Applin (Appletun, Applin, Dipplin, Flapple), Buneary, Corphish, Deerling, Dewpider (Araquanid, Dewpider), Dratini, Flabébé (Flabébé, Floette), Gible (Gabite, Gible), Goomy, Magikarp (Gyarados, Magikarp), Munchlax, Nickit (Nickit, Thievul), Petilil (Lilligant, Petilil), Phantump, Pichu (Pichu, Pikachu), Scyther, Seedot (Nuzleaf, Seedot), Sewaddle (Sewaddle, Swadloon), Shroomish (Breloom, Shroomish), Skwovet (Greedent, Skwovet), Stunky, Tandemaus (Maushold, Tandemaus), Teddiursa +Applin (Appletun, Applin, Dipplin, Flapple), Buneary, Corphish, Dedenne, Deerling, Dewpider (Araquanid, Dewpider), Dratini, Emolga, Flabébé (Flabébé, Floette), Gible (Gabite, Gible), Goomy, Magikarp (Gyarados, Magikarp), Munchlax, Nickit (Nickit, Thievul), Petilil (Lilligant, Petilil), Phantump, Pichu (Pichu, Pikachu), Pineco, Rotom, Scyther, Seedot (Nuzleaf, Seedot), Sewaddle (Sewaddle, Swadloon), Shroomish (Breloom, Shroomish), Skwovet (Greedent, Skwovet), Stunky, Tandemaus (Maushold, Tandemaus), Teddiursa -## Southwold (Lv 8–18, 50 lines) +## Southwold (Lv 8–18, 53 lines) -Audino, Azurill (Azumarill, Azurill, Marill), Bunnelby, Burmy, Chingling, Corsola, Drifloon, Dunsparce, Eevee, Farfetch'd, Furfrou, Gastly, Glameow, Goldeen, Grimer, Grubbin, Happiny (Chansey, Happiny), Hawlucha, Heracross, Koffing, Lillipup (Herdier, Lillipup), Lotad (Lombre, Lotad), Magnemite, Minccino, Minun, Noibat, Patrat, Pidove, Pinsir, Plusle, Porygon, Pumpkaboo, Relicanth, Sentret (Furret, Sentret), Shuppet, Squawkabilly, Swablu, Taillow, Tentacool, Timburr, Toxel, Tynamo, Venonat, Voltorb, Whismur, Wimpod, Yamask, Yamper, Yungoos, Zigzagoon +Audino, Azurill (Azumarill, Azurill, Marill), Bunnelby, Burmy, Chingling, Corsola, Drifloon, Dunsparce, Eevee, Farfetch'd, Furfrou, Gastly, Glameow, Goldeen, Grimer, Grubbin, Happiny (Chansey, Happiny), Hawlucha, Heracross, Koffing, Lillipup (Herdier, Lillipup), Lotad (Lombre, Lotad), Magnemite, Minccino, Minun, Nidoran♀ (Nidoran♀, Nidorina), Nidoran♂ (Nidoran♂, Nidorino), Noibat, Patrat, Pidove, Pinsir, Plusle, Porygon, Pumpkaboo, Relicanth, Sentret (Furret, Sentret), Shuppet, Smoliv, Squawkabilly, Swablu, Taillow, Tentacool, Timburr, Toxel, Tynamo, Venonat, Voltorb, Whismur, Wimpod, Yamask, Yamper, Yungoos, Zigzagoon ## Shallows (Lv 5–20, 21 lines) Alomomola, Bruxish, Carvanha, Chinchou, Clobbopus, Crabrawler, Cramorant, Finizen, Finneon, Inkay, Krabby, Luvdisc, Mareanie, Pincurchin, Pyukumuku, Qwilfish, Sandygast, Shellos, Wiglett, Wingull, Wishiwashi -## Deep Sea (Lv 30–50, 18 lines) +## Deep Sea (Lv 30–50, 21 lines) -Binacle (Barbaracle, Binacle), Clamperl (Clamperl, Gorebyss, Huntail), Clauncher (Clauncher, Clawitzer), Dhelmise, Dreepy (Drakloak), Frillish (Frillish, Jellicent), Horsea (Horsea, Kingdra, Seadra), Lapras, Mantyke (Mantine, Mantyke), Oshawott (Dewott, Oshawott, Samurott), Popplio (Brionne, Popplio, Primarina), Remoraid (Octillery, Remoraid), Shellder (Cloyster, Shellder), Skrelp (Dragalge, Skrelp), Staryu (Starmie, Staryu), Veluza, Wailmer (Wailmer, Wailord), Wattrel (Kilowattrel) +Binacle (Barbaracle, Binacle), Clamperl (Clamperl, Gorebyss, Huntail), Clauncher (Clauncher, Clawitzer), Dhelmise, Dreepy (Drakloak), Frillish (Frillish, Jellicent), Horsea (Horsea, Kingdra, Seadra), Lapras, Mantyke (Mantine, Mantyke), Oshawott (Dewott, Oshawott, Samurott), Piplup (Empoleon, Piplup, Prinplup), Popplio (Brionne, Popplio, Primarina), Remoraid (Octillery, Remoraid), Seel (Dewgong, Seel), Shellder (Cloyster, Shellder), Skrelp (Dragalge, Skrelp), Spheal (Sealeo, Walrein), Staryu (Starmie, Staryu), Veluza, Wailmer (Wailmer, Wailord), Wattrel (Kilowattrel) -## Lush Caves (Lv 12–28, 21 lines) +## Lush Caves (Lv 12–28, 22 lines) -Amaura, Anorith, Archen, Barboach, Carnivine, Cranidos, Cutiefly (Cutiefly, Ribombee), Ferroseed, Joltik, Kabuto, Lileep, Morelull (Morelull, Shiinotic), Omanyte, Paras (Paras, Parasect), Shieldon, Shuckle, Snubbull (Granbull, Snubbull), Tirtouga, Trubbish, Tyrunt, Venipede (Venipede, Whirlipede) +Amaura, Anorith, Archen, Barboach, Carnivine, Cranidos, Cutiefly (Cutiefly, Ribombee), Ferroseed, Foongus, Joltik, Kabuto, Lileep, Morelull (Morelull, Shiinotic), Omanyte, Paras (Paras, Parasect), Shieldon, Shuckle, Snubbull (Granbull, Snubbull), Tirtouga, Trubbish, Tyrunt, Venipede (Venipede, Whirlipede) -## Dripstone Depths (Lv 22–38, 21 lines) +## Dripstone Depths (Lv 22–38, 22 lines) -Bagon (Bagon, Shelgon), Baltoy (Baltoy, Claydol), Beldum (Beldum, Metang), Cleffa (Clefable, Clefairy, Cleffa), Comfey, Drowzee (Drowzee, Hypno), Druddigon, Elgyem, Espurr (Espurr, Meowstic), Fidough (Dachsbun, Fidough), Geodude (Geodude, Golem, Graveler), Indeedee, Klefki, Lunatone, Milcery (Alcremie, Milcery), Munna (Munna, Musharna), Orthworm, Sigilyph, Solosis (Duosion, Solosis), Solrock, Swirlix (Slurpuff, Swirlix) +Aron (Aron, Lairon), Bagon (Bagon, Shelgon), Baltoy (Baltoy, Claydol), Beldum (Beldum, Metang), Cleffa (Clefable, Clefairy, Cleffa), Comfey, Drowzee (Drowzee, Hypno), Druddigon, Elgyem, Espurr (Espurr, Meowstic), Fidough (Dachsbun, Fidough), Geodude (Geodude, Golem, Graveler), Indeedee, Klefki, Lunatone, Milcery (Alcremie, Milcery), Munna (Munna, Musharna), Orthworm, Sigilyph, Solosis (Duosion, Solosis), Solrock, Swirlix (Slurpuff, Swirlix) -## Deep Dark (Lv 45–60, 22 lines) +## Deep Dark (Lv 45–60, 24 lines) -Bronzor (Bronzong), Carbink, Deino (Zweilous), Ditto, Duskull (Dusclops, Dusknoir), Feebas (Milotic), Glimmet (Glimmora), Greavard (Houndstone), Honedge (Aegislash, Doublade), Klink (Klinklang), Maschiff (Mabosstiff), Mime Jr. (Mr. Mime, Mr. Rime), Mimikyu, Murkrow (Honchkrow), Nosepass (Probopass), Onix (Steelix), Ralts (Gallade, Gardevoir), Roggenrola (Gigalith), Rolycoly (Coalossal), Rookidee (Corviknight), Varoom (Revavroom), Zubat (Crobat, Golbat) +Bronzor (Bronzong), Carbink, Deino (Zweilous), Ditto, Duskull (Dusclops, Dusknoir), Feebas (Milotic), Glimmet (Glimmora), Greavard (Houndstone), Honedge (Aegislash, Doublade), Impidimp (Grimmsnarl), Klink (Klinklang), Litwick (Chandelure, Lampent), Maschiff (Mabosstiff), Mime Jr. (Mr. Mime, Mr. Rime), Mimikyu, Murkrow (Honchkrow), Nosepass (Probopass), Onix (Steelix), Ralts (Gallade, Gardevoir), Roggenrola (Gigalith), Rolycoly (Coalossal), Rookidee (Corviknight), Varoom (Revavroom), Zubat (Crobat, Golbat) -## Basalt Furnace (Lv 55–70, 16 lines) +## Basalt Furnace (Lv 55–70, 17 lines) -Absol, Charmander (Charizard), Diglett (Dugtrio), Drilbur (Excadrill), Durant, Gligar (Gliscor), Growlithe (Arcanine), Heatmor, Houndour (Houndoom), Magby (Magmortar), Mawile, Purrloin (Liepard), Sizzlipede (Centiskorch), Slugma (Magcargo), Torkoal, Turtonator +Absol, Charcadet (Armarouge), Charmander (Charizard), Diglett (Dugtrio), Drilbur (Excadrill), Durant, Gligar (Gliscor), Growlithe (Arcanine), Heatmor, Houndour (Houndoom), Magby (Magmortar), Mawile, Purrloin (Liepard), Sizzlipede (Centiskorch), Slugma (Magcargo), Torkoal, Turtonator ## The End (Lv 50–70, 7 lines) diff --git a/mod/src/main/java/dev/cobblesurvival/mixin/RegeneratorBlockMixin.java b/mod/src/main/java/dev/cobblesurvival/mixin/RegeneratorBlockMixin.java new file mode 100644 index 0000000..9b3f956 --- /dev/null +++ b/mod/src/main/java/dev/cobblesurvival/mixin/RegeneratorBlockMixin.java @@ -0,0 +1,25 @@ +package dev.cobblesurvival.mixin; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +/** + * A mined vein block waiting to grow back (Regenerating Ore Veins' regenerator) no longer stops the player's aim, so the + * ore behind it can be mined (Adrian, 2026-11-09). It keeps its outline while sneaking: that's how its info is opened. + * Named by string, so the companion mod needs the vein mod only at run time. + */ +@Mixin(targets = "net.stargazer.regenerating_ore_veins.RegeneratorBlock", remap = false) +abstract class RegeneratorBlockMixin { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void cobblesurvival$aimThrough(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context, CallbackInfoReturnable result) { + if (!context.isDescending()) result.setReturnValue(Shapes.empty()); + } +} diff --git a/mod/src/main/kotlin/dev/cobblesurvival/selftest/OreNodeTests.kt b/mod/src/main/kotlin/dev/cobblesurvival/selftest/OreNodeTests.kt index 04a4fb1..361180a 100644 --- a/mod/src/main/kotlin/dev/cobblesurvival/selftest/OreNodeTests.kt +++ b/mod/src/main/kotlin/dev/cobblesurvival/selftest/OreNodeTests.kt @@ -7,6 +7,7 @@ import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.gametest.framework.GameTestAssertException import net.minecraft.world.level.ChunkPos +import net.minecraft.world.level.levelgen.Heightmap /** * Ore nodes on the island (Adrian, 2026-10-30): a surface node is a small lump of ore in the ground of its zone with @@ -44,8 +45,9 @@ object OreNodeTests { if (cave) { s.check(level.getBiome(ground.above()).`is`(node.biome!!)) { "the ${node.vein} at ${ground.toShortString()} isn't in ${node.biome}" } } else { - val top = blocks.maxBy { it.y } - s.check(level.canSeeSky(top.above())) { "the ${node.vein} at ${ground.toShortString()} is under cover" } + // Open ground over the node's centre (leaves don't count): a wide node's edge may lie under a tree or a slope. + val surface = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ground.x, ground.z) + s.check(surface <= ground.y + 2) { "the ${node.vein} at ${ground.toShortString()} is under cover (ground at $surface)" } s.check(blocks.all { Zones.at(level, it)?.id == zone }) { "the ${node.vein} at ${ground.toShortString()} reaches out of $zone" } } } diff --git a/mod/src/main/kotlin/dev/cobblesurvival/selftest/VeinTests.kt b/mod/src/main/kotlin/dev/cobblesurvival/selftest/VeinTests.kt index fe70e38..6daf7c7 100644 --- a/mod/src/main/kotlin/dev/cobblesurvival/selftest/VeinTests.kt +++ b/mod/src/main/kotlin/dev/cobblesurvival/selftest/VeinTests.kt @@ -7,6 +7,7 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer import net.minecraft.world.level.ChunkPos +import net.minecraft.world.level.ClipContext import net.minecraft.world.level.GameType import net.minecraft.world.level.block.Blocks import net.minecraft.world.phys.Vec3 @@ -26,11 +27,35 @@ object VeinTests { private val REGENERATOR = ResourceLocation.fromNamespaceAndPath("regenerating_ore_veins", "regenerator_block") fun all() = listOf( + SelfTestCase("regenerator_lets_the_aim_through", 20, ::aimThrough), SelfTestCase("vein_regrows_after_unload", 1200, ::afterUnload), SelfTestCase("vein_mined_before_restart", 400, ::beforeRestart), SelfTestCase("vein_regrows_after_restart", 400, ::afterRestart, afterRestart = true), ) + /** + * A mined vein block waiting to grow back doesn't stop the player's aim, so the ore behind it can be mined (Adrian, + * 2026-11-09; mixin/RegeneratorBlockMixin.java); while sneaking the player can target it, which opens its info. + */ + private fun aimThrough(s: Scenario) { + val regenerator = BuiltInRegistries.BLOCK.get(ResourceLocation.parse("regenerating_ore_veins:regenerator_block")) + s.check(regenerator != Blocks.AIR) { "Regenerating Ore Veins' regenerator isn't installed" } + val player = s.player() + val pos = s.helper.absolutePos(BlockPos(7, 2, 7)) + val behind = pos.east() + s.level.setBlockAndUpdate(pos, regenerator.defaultBlockState()) + s.level.setBlockAndUpdate(behind, Blocks.STONE.defaultBlockState()) + fun aimedAt(): BlockPos { + val from = Vec3(pos.x - 2.5, pos.y + 0.5, pos.z + 0.5) + return s.level.clip(ClipContext(from, from.add(6.0, 0.0, 0.0), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).blockPos + } + s.check(aimedAt() == behind) { "the aim stops at ${aimedAt().toShortString()}, not at the block behind the regenerator" } + player.isShiftKeyDown = true + s.check(aimedAt() == pos) { "sneaking, the aim doesn't find the regenerator (it stops at ${aimedAt().toShortString()})" } + player.isShiftKeyDown = false + s.helper.succeed() + } + private fun afterUnload(s: Scenario) { val level = s.level val pos = spot(level, UNLOAD_OFFSET) diff --git a/mod/src/main/resources/META-INF/neoforge.mods.toml b/mod/src/main/resources/META-INF/neoforge.mods.toml index 2c53b92..2837153 100644 --- a/mod/src/main/resources/META-INF/neoforge.mods.toml +++ b/mod/src/main/resources/META-INF/neoforge.mods.toml @@ -12,6 +12,9 @@ Mechanics for the Cobblemon Survival Pack that no existing addon covers. Not affiliated with Cobblemon, The Pokémon Company, Nintendo, Game Freak or Creatures Inc. ''' +[[mixins]] +config = "cobblesurvival.mixins.json" + [[dependencies.${mod_id}]] modId = "minecraft" type = "required" diff --git a/mod/src/main/resources/assets/cobblesurvival/jei/drop_sources.json b/mod/src/main/resources/assets/cobblesurvival/jei/drop_sources.json index eb9f885..c79fcae 100644 --- a/mod/src/main/resources/assets/cobblesurvival/jei/drop_sources.json +++ b/mod/src/main/resources/assets/cobblesurvival/jei/drop_sources.json @@ -234,6 +234,32 @@ } ] }, + { + "species": "cobblemon:aggron", + "drops": [ + { + "item": "minecraft:raw_iron", + "count": "0-3" + }, + { + "item": "cobblemon:hard_stone", + "count": "1", + "chance": 10.0 + }, + { + "item": "cobblemon:chople_berry", + "count": "1", + "chance": 10.0 + } + ], + "zones": [], + "line": [ + { + "zone": "dripstone", + "species": "cobblemon:aron" + } + ] + }, { "species": "cobblemon:aipom", "drops": [ @@ -378,6 +404,27 @@ } ] }, + { + "species": "cobblemon:amoonguss", + "drops": [ + { + "item": "minecraft:red_mushroom", + "count": "0-2" + }, + { + "item": "cobblemon:cheri_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [], + "line": [ + { + "zone": "lush_caves", + "species": "cobblemon:foongus" + } + ] + }, { "species": "cobblemon:ampharos", "drops": [ @@ -512,6 +559,28 @@ } ] }, + { + "species": "cobblemon:arboliva", + "drops": [ + { + "item": "cobblemon:big_root", + "count": "1", + "chance": 10.0 + }, + { + "item": "cobblemon:kebia_berry", + "count": "1", + "chance": 10.0 + } + ], + "zones": [], + "line": [ + { + "zone": "southwold", + "species": "cobblemon:smoliv" + } + ] + }, { "species": "cobblemon:arcanine", "drops": [ @@ -609,6 +678,36 @@ } ] }, + { + "species": "cobblemon:armarouge", + "drops": [ + { + "item": "minecraft:charcoal", + "count": "0-2" + }, + { + "item": "cobblemon:charcoal_stick", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:auspicious_armor", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:rawst_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "basalt", + "levels": "55-70" + } + ] + }, { "species": "cobblemon:aromatisse", "drops": [ @@ -630,6 +729,31 @@ } ] }, + { + "species": "cobblemon:aron", + "drops": [ + { + "item": "minecraft:raw_iron", + "count": "0-1" + }, + { + "item": "cobblemon:hard_stone", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:chople_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "dripstone", + "levels": "22-38" + } + ] + }, { "species": "cobblemon:arrokuda", "drops": [ @@ -688,6 +812,27 @@ } ] }, + { + "species": "cobblemon:avalugg", + "drops": [ + { + "item": "cobblemon:never_melt_ice", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "frostpeak", + "levels": "40-55" + } + ] + }, { "species": "cobblemon:axew", "drops": [ @@ -948,6 +1093,30 @@ } ] }, + { + "species": "cobblemon:beartic", + "drops": [ + { + "item": "minecraft:snowball", + "count": "0-2" + }, + { + "item": "minecraft:cod", + "count": "0-2" + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "frostpeak", + "levels": "40-55" + } + ] + }, { "species": "cobblemon:beautifly", "drops": [ @@ -1108,6 +1277,44 @@ } ] }, + { + "species": "cobblemon:bergmite", + "drops": [ + { + "item": "cobblemon:never_melt_ice", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [], + "line": [ + { + "zone": "frostpeak", + "species": "cobblemon:avalugg" + } + ] + }, + { + "species": "cobblemon:bewear", + "drops": [ + { + "item": "cobblemon:chople_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "jungle", + "levels": "27-30" + } + ] + }, { "species": "cobblemon:bibarel", "drops": [ @@ -1260,6 +1467,26 @@ } ] }, + { + "species": "cobblemon:blitzle", + "drops": [ + { + "item": "minecraft:leather", + "count": "0-1" + }, + { + "item": "cobblemon:cheri_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "highlands", + "levels": "25-35" + } + ] + }, { "species": "cobblemon:boldore", "drops": [ @@ -2074,6 +2301,103 @@ } ] }, + { + "species": "cobblemon:ceruledge", + "drops": [ + { + "item": "minecraft:charcoal", + "count": "0-2" + }, + { + "item": "cobblemon:charcoal_stick", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:malicious_armor", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:rawst_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [], + "line": [ + { + "zone": "basalt", + "species": "cobblemon:armarouge" + } + ] + }, + { + "species": "cobblemon:cetitan", + "drops": [ + { + "item": "minecraft:bone_block", + "count": "0-2" + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "frostpeak", + "levels": "40-55" + } + ] + }, + { + "species": "cobblemon:cetoddle", + "drops": [ + { + "item": "minecraft:bone_block", + "count": "0-1" + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [], + "line": [ + { + "zone": "frostpeak", + "species": "cobblemon:cetitan" + } + ] + }, + { + "species": "cobblemon:chandelure", + "drops": [ + { + "item": "minecraft:candle", + "count": "1-3" + }, + { + "item": "cobblemon:dusk_stone", + "count": "1", + "chance": 10.0 + }, + { + "item": "cobblemon:rawst_berry", + "count": "1", + "chance": 10.0 + } + ], + "zones": [ + { + "zone": "deep_dark", + "levels": "45-60" + } + ] + }, { "species": "cobblemon:chansey", "drops": [ @@ -2100,6 +2424,32 @@ } ] }, + { + "species": "cobblemon:charcadet", + "drops": [ + { + "item": "minecraft:charcoal", + "count": "0-2" + }, + { + "item": "cobblemon:charcoal_stick", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:rawst_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [], + "line": [ + { + "zone": "basalt", + "species": "cobblemon:armarouge" + } + ] + }, { "species": "cobblemon:charizard", "drops": [ @@ -3156,6 +3506,31 @@ } ] }, + { + "species": "cobblemon:cubchoo", + "drops": [ + { + "item": "minecraft:snowball", + "count": "0-1" + }, + { + "item": "minecraft:cod", + "count": "0-1" + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [], + "line": [ + { + "zone": "frostpeak", + "species": "cobblemon:beartic" + } + ] + }, { "species": "cobblemon:cubone", "drops": [ @@ -3372,6 +3747,22 @@ } ] }, + { + "species": "cobblemon:dedenne", + "drops": [ + { + "item": "cobblemon:cheri_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "westmarch", + "levels": "18-25" + } + ] + }, { "species": "cobblemon:deerling", "drops": [ @@ -3483,6 +3874,31 @@ } ] }, + { + "species": "cobblemon:dewgong", + "drops": [ + { + "item": "minecraft:cod", + "count": "0-2" + }, + { + "item": "cobblemon:never_melt_ice", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "deep_sea", + "levels": "34-50" + } + ] + }, { "species": "cobblemon:dewott", "drops": [ @@ -3630,6 +4046,86 @@ } ] }, + { + "species": "cobblemon:dodrio", + "drops": [ + { + "item": "minecraft:feather", + "count": "0-2" + }, + { + "item": "minecraft:chicken", + "count": "1" + }, + { + "item": "cobblemon:sharp_beak", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:wacan_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "highlands", + "levels": "31-35" + } + ] + }, + { + "species": "cobblemon:doduo", + "drops": [ + { + "item": "minecraft:feather", + "count": "0-1" + }, + { + "item": "minecraft:chicken", + "count": "1" + }, + { + "item": "cobblemon:sharp_beak", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:wacan_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "highlands", + "levels": "25-35" + } + ] + }, + { + "species": "cobblemon:dolliv", + "drops": [ + { + "item": "cobblemon:big_root", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:kebia_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [], + "line": [ + { + "zone": "southwold", + "species": "cobblemon:smoliv" + } + ] + }, { "species": "cobblemon:dondozo", "drops": [ @@ -4430,6 +4926,38 @@ } ] }, + { + "species": "cobblemon:eiscue", + "drops": [ + { + "item": "minecraft:feather", + "count": "0-1" + }, + { + "item": "minecraft:chicken", + "count": "1" + }, + { + "item": "minecraft:cod", + "count": "0-1" + }, + { + "item": "minecraft:blue_ice", + "count": "1" + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "frostpeak", + "levels": "40-55" + } + ] + }, { "species": "cobblemon:ekans", "drops": [ @@ -4629,6 +5157,46 @@ } ] }, + { + "species": "cobblemon:emolga", + "drops": [ + { + "item": "cobblemon:yache_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "westmarch", + "levels": "18-25" + } + ] + }, + { + "species": "cobblemon:empoleon", + "drops": [ + { + "item": "minecraft:feather", + "count": "0-3" + }, + { + "item": "minecraft:chicken", + "count": "1" + }, + { + "item": "cobblemon:mystic_water", + "count": "1", + "chance": 25.0 + } + ], + "zones": [ + { + "zone": "deep_sea", + "levels": "36-50" + } + ] + }, { "species": "cobblemon:escavalier", "drops": [ @@ -4864,6 +5432,31 @@ } ] }, + { + "species": "cobblemon:farigiraf", + "drops": [ + { + "item": "minecraft:leather", + "count": "0-2" + }, + { + "item": "cobblemon:razor_fang", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:persim_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "sunscorch", + "levels": "32-45" + } + ] + }, { "species": "cobblemon:fearow", "drops": [ @@ -5379,6 +5972,52 @@ } ] }, + { + "species": "cobblemon:foongus", + "drops": [ + { + "item": "minecraft:red_mushroom", + "count": "0-1" + }, + { + "item": "cobblemon:cheri_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "lush_caves", + "levels": "12-28" + } + ] + }, + { + "species": "cobblemon:forretress", + "drops": [ + { + "item": "minecraft:string", + "count": "0-2" + }, + { + "item": "cobblemon:occa_berry", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:iron_ball", + "count": "1", + "chance": 5.0 + } + ], + "zones": [], + "line": [ + { + "zone": "westmarch", + "species": "cobblemon:pineco" + } + ] + }, { "species": "cobblemon:fraxure", "drops": [ @@ -5936,6 +6575,31 @@ } ] }, + { + "species": "cobblemon:girafarig", + "drops": [ + { + "item": "minecraft:leather", + "count": "0-1" + }, + { + "item": "cobblemon:razor_fang", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:persim_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "sunscorch", + "levels": "30-45" + } + ] + }, { "species": "cobblemon:glaceon", "drops": [ @@ -6705,6 +7369,22 @@ } ] }, + { + "species": "cobblemon:grimmsnarl", + "drops": [ + { + "item": "cobblemon:roseli_berry", + "count": "1", + "chance": 10.0 + } + ], + "zones": [ + { + "zone": "deep_dark", + "levels": "45-60" + } + ] + }, { "species": "cobblemon:grookey", "drops": [ @@ -6967,6 +7647,55 @@ } ] }, + { + "species": "cobblemon:hatenna", + "drops": [ + { + "item": "cobblemon:babiri_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "mire", + "levels": "25-38" + } + ] + }, + { + "species": "cobblemon:hatterene", + "drops": [ + { + "item": "cobblemon:babiri_berry", + "count": "1", + "chance": 10.0 + } + ], + "zones": [], + "line": [ + { + "zone": "mire", + "species": "cobblemon:hatenna" + } + ] + }, + { + "species": "cobblemon:hattrem", + "drops": [ + { + "item": "cobblemon:babiri_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "mire", + "levels": "32-38" + } + ] + }, { "species": "cobblemon:haunter", "drops": [ @@ -7518,6 +8247,23 @@ } ] }, + { + "species": "cobblemon:impidimp", + "drops": [ + { + "item": "cobblemon:roseli_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [], + "line": [ + { + "zone": "deep_dark", + "species": "cobblemon:grimmsnarl" + } + ] + }, { "species": "cobblemon:incineroar", "drops": [ @@ -7878,6 +8624,22 @@ } ] }, + { + "species": "cobblemon:kangaskhan", + "drops": [ + { + "item": "cobblemon:chilan_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "sunscorch", + "levels": "30-45" + } + ] + }, { "species": "cobblemon:karrablast", "drops": [ @@ -8159,6 +8921,26 @@ } ] }, + { + "species": "cobblemon:komala", + "drops": [ + { + "item": "minecraft:acacia_log", + "count": "1" + }, + { + "item": "cobblemon:chesto_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "jungle", + "levels": "23-30" + } + ] + }, { "species": "cobblemon:kommoo", "drops": [ @@ -8290,6 +9072,56 @@ } ] }, + { + "species": "cobblemon:lairon", + "drops": [ + { + "item": "minecraft:raw_iron", + "count": "0-2" + }, + { + "item": "cobblemon:hard_stone", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:chople_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "dripstone", + "levels": "32-38" + } + ] + }, + { + "species": "cobblemon:lampent", + "drops": [ + { + "item": "minecraft:candle", + "count": "1" + }, + { + "item": "cobblemon:dusk_stone", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:rawst_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "deep_dark", + "levels": "45-60" + } + ] + }, { "species": "cobblemon:lanturn", "drops": [ @@ -8658,6 +9490,31 @@ } ] }, + { + "species": "cobblemon:litleo", + "drops": [ + { + "item": "minecraft:rotten_flesh", + "count": "0-1" + }, + { + "item": "minecraft:blaze_powder", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:rawst_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "sunscorch", + "levels": "30-45" + } + ] + }, { "species": "cobblemon:litten", "drops": [ @@ -8679,6 +9536,32 @@ } ] }, + { + "species": "cobblemon:litwick", + "drops": [ + { + "item": "minecraft:candle", + "count": "0-1" + }, + { + "item": "cobblemon:dusk_stone", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:rawst_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [], + "line": [ + { + "zone": "deep_dark", + "species": "cobblemon:chandelure" + } + ] + }, { "species": "cobblemon:lokix", "drops": [ @@ -9381,6 +10264,35 @@ } ] }, + { + "species": "cobblemon:mamoswine", + "drops": [ + { + "item": "minecraft:porkchop", + "count": "2-3" + }, + { + "item": "minecraft:brown_wool", + "count": "2-3" + }, + { + "item": "cobblemon:never_melt_ice", + "count": "1", + "chance": 10.0 + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 10.0 + } + ], + "zones": [ + { + "zone": "frostpeak", + "levels": "40-55" + } + ] + }, { "species": "cobblemon:manectric", "drops": [ @@ -10212,6 +11124,23 @@ } ] }, + { + "species": "cobblemon:morgrem", + "drops": [ + { + "item": "cobblemon:roseli_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [], + "line": [ + { + "zone": "deep_dark", + "species": "cobblemon:grimmsnarl" + } + ] + }, { "species": "cobblemon:morpeko", "drops": [ @@ -10568,6 +11497,134 @@ } ] }, + { + "species": "cobblemon:nidoking", + "drops": [ + { + "item": "cobblemon:poison_barb", + "count": "1", + "chance": 10.0 + }, + { + "item": "cobblemon:pecha_berry", + "count": "1", + "chance": 10.0 + } + ], + "zones": [], + "line": [ + { + "zone": "southwold", + "species": "cobblemon:nidoranm" + } + ] + }, + { + "species": "cobblemon:nidoqueen", + "drops": [ + { + "item": "cobblemon:poison_barb", + "count": "1", + "chance": 10.0 + }, + { + "item": "cobblemon:pecha_berry", + "count": "1", + "chance": 10.0 + } + ], + "zones": [], + "line": [ + { + "zone": "southwold", + "species": "cobblemon:nidoranf" + } + ] + }, + { + "species": "cobblemon:nidoranf", + "drops": [ + { + "item": "cobblemon:poison_barb", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:pecha_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "southwold", + "levels": "8-18" + } + ] + }, + { + "species": "cobblemon:nidoranm", + "drops": [ + { + "item": "cobblemon:poison_barb", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:pecha_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "southwold", + "levels": "8-18" + } + ] + }, + { + "species": "cobblemon:nidorina", + "drops": [ + { + "item": "cobblemon:poison_barb", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:pecha_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "southwold", + "levels": "16-18" + } + ] + }, + { + "species": "cobblemon:nidorino", + "drops": [ + { + "item": "cobblemon:poison_barb", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:pecha_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "southwold", + "levels": "16-18" + } + ] + }, { "species": "cobblemon:nincada", "drops": [ @@ -11082,6 +12139,57 @@ } ] }, + { + "species": "cobblemon:pancham", + "drops": [ + { + "item": "minecraft:bamboo", + "count": "0-1" + }, + { + "item": "cobblemon:mental_herb", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:roseli_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "jungle", + "levels": "18-30" + } + ] + }, + { + "species": "cobblemon:pangoro", + "drops": [ + { + "item": "minecraft:bamboo", + "count": "0-2" + }, + { + "item": "cobblemon:mental_herb", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:roseli_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [], + "line": [ + { + "zone": "jungle", + "species": "cobblemon:pancham" + } + ] + }, { "species": "cobblemon:panpour", "drops": [ @@ -11579,6 +12687,60 @@ } ] }, + { + "species": "cobblemon:piloswine", + "drops": [ + { + "item": "minecraft:porkchop", + "count": "1-2" + }, + { + "item": "minecraft:brown_wool", + "count": "1-2" + }, + { + "item": "cobblemon:never_melt_ice", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "frostpeak", + "levels": "40-55" + } + ] + }, + { + "species": "cobblemon:pineco", + "drops": [ + { + "item": "minecraft:string", + "count": "0-1" + }, + { + "item": "cobblemon:occa_berry", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:iron_ball", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "westmarch", + "levels": "15-25" + } + ] + }, { "species": "cobblemon:pinsir", "drops": [ @@ -11595,6 +12757,30 @@ } ] }, + { + "species": "cobblemon:piplup", + "drops": [ + { + "item": "minecraft:feather", + "count": "0-1" + }, + { + "item": "minecraft:chicken", + "count": "1" + }, + { + "item": "cobblemon:mystic_water", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "deep_sea", + "levels": "30-50" + } + ] + }, { "species": "cobblemon:plusle", "drops": [ @@ -11888,6 +13074,30 @@ } ] }, + { + "species": "cobblemon:prinplup", + "drops": [ + { + "item": "minecraft:feather", + "count": "0-2" + }, + { + "item": "minecraft:chicken", + "count": "1" + }, + { + "item": "cobblemon:mystic_water", + "count": "1", + "chance": 10.0 + } + ], + "zones": [ + { + "zone": "deep_sea", + "levels": "30-50" + } + ] + }, { "species": "cobblemon:probopass", "drops": [ @@ -12026,6 +13236,31 @@ } ] }, + { + "species": "cobblemon:pyroar", + "drops": [ + { + "item": "minecraft:rotten_flesh", + "count": "0-2" + }, + { + "item": "minecraft:blaze_powder", + "count": "1", + "chance": 5.0 + }, + { + "item": "cobblemon:rawst_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "sunscorch", + "levels": "35-45" + } + ] + }, { "species": "cobblemon:pyukumuku", "drops": [ @@ -13386,6 +14621,26 @@ } ] }, + { + "species": "cobblemon:sealeo", + "drops": [ + { + "item": "minecraft:cod", + "count": "0-2" + }, + { + "item": "cobblemon:chesto_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "deep_sea", + "levels": "32-50" + } + ] + }, { "species": "cobblemon:seedot", "drops": [ @@ -13406,6 +14661,31 @@ } ] }, + { + "species": "cobblemon:seel", + "drops": [ + { + "item": "minecraft:cod", + "count": "0-1" + }, + { + "item": "cobblemon:never_melt_ice", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "deep_sea", + "levels": "30-50" + } + ] + }, { "species": "cobblemon:seismitoad", "drops": [ @@ -14421,6 +15701,27 @@ } ] }, + { + "species": "cobblemon:smoliv", + "drops": [ + { + "item": "cobblemon:big_root", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:kebia_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "southwold", + "levels": "8-18" + } + ] + }, { "species": "cobblemon:smoochum", "drops": [ @@ -14760,6 +16061,27 @@ } ] }, + { + "species": "cobblemon:spheal", + "drops": [ + { + "item": "minecraft:cod", + "count": "0-1" + }, + { + "item": "cobblemon:chesto_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [], + "line": [ + { + "zone": "deep_sea", + "species": "cobblemon:sealeo" + } + ] + }, { "species": "cobblemon:spidops", "drops": [ @@ -14957,6 +16279,26 @@ } ] }, + { + "species": "cobblemon:stantler", + "drops": [ + { + "item": "minecraft:leather", + "count": "0-1" + }, + { + "item": "cobblemon:persim_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "frostpeak", + "levels": "40-55" + } + ] + }, { "species": "cobblemon:staraptor", "drops": [ @@ -15137,6 +16479,22 @@ } ] }, + { + "species": "cobblemon:stufful", + "drops": [ + { + "item": "cobblemon:chople_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "jungle", + "levels": "18-30" + } + ] + }, { "species": "cobblemon:stunfisk", "drops": [ @@ -15389,6 +16747,36 @@ } ] }, + { + "species": "cobblemon:swinub", + "drops": [ + { + "item": "minecraft:porkchop", + "count": "1" + }, + { + "item": "minecraft:brown_wool", + "count": "1" + }, + { + "item": "cobblemon:never_melt_ice", + "count": "1", + "chance": 2.5 + }, + { + "item": "cobblemon:aspear_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [], + "line": [ + { + "zone": "frostpeak", + "species": "cobblemon:mamoswine" + } + ] + }, { "species": "cobblemon:swirlix", "drops": [ @@ -15922,6 +17310,46 @@ } ] }, + { + "species": "cobblemon:toedscool", + "drops": [ + { + "item": "minecraft:brown_mushroom", + "count": "0-1" + }, + { + "item": "cobblemon:yache_berry", + "count": "1", + "chance": 2.5 + } + ], + "zones": [ + { + "zone": "mire", + "levels": "25-38" + } + ] + }, + { + "species": "cobblemon:toedscruel", + "drops": [ + { + "item": "minecraft:brown_mushroom", + "count": "0-2" + }, + { + "item": "cobblemon:yache_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "mire", + "levels": "30-38" + } + ] + }, { "species": "cobblemon:togedemaru", "drops": [ @@ -17262,6 +18690,26 @@ } ] }, + { + "species": "cobblemon:walrein", + "drops": [ + { + "item": "minecraft:cod", + "count": "0-3" + }, + { + "item": "cobblemon:chesto_berry", + "count": "1", + "chance": 10.0 + } + ], + "zones": [ + { + "zone": "deep_sea", + "levels": "44-50" + } + ] + }, { "species": "cobblemon:wartortle", "drops": [ @@ -17732,6 +19180,26 @@ } ] }, + { + "species": "cobblemon:wyrdeer", + "drops": [ + { + "item": "minecraft:leather", + "count": "0-2" + }, + { + "item": "cobblemon:persim_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "frostpeak", + "levels": "42-55" + } + ] + }, { "species": "cobblemon:xatu", "drops": [ @@ -17881,6 +19349,26 @@ } ] }, + { + "species": "cobblemon:zebstrika", + "drops": [ + { + "item": "minecraft:leather", + "count": "0-2" + }, + { + "item": "cobblemon:cheri_berry", + "count": "1", + "chance": 5.0 + } + ], + "zones": [ + { + "zone": "highlands", + "levels": "27-35" + } + ] + }, { "species": "cobblemon:zigzagoon", "drops": [ diff --git a/mod/src/main/resources/cobblesurvival.mixins.json b/mod/src/main/resources/cobblesurvival.mixins.json new file mode 100644 index 0000000..ed14262 --- /dev/null +++ b/mod/src/main/resources/cobblesurvival.mixins.json @@ -0,0 +1,8 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "dev.cobblesurvival.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": ["RegeneratorBlockMixin"], + "injectors": {"defaultRequire": 1} +} diff --git a/pack/config/ftbquests/quests/chapters/basalt.snbt b/pack/config/ftbquests/quests/chapters/basalt.snbt index 5dbb825..ee5e7be 100644 --- a/pack/config/ftbquests/quests/chapters/basalt.snbt +++ b/pack/config/ftbquests/quests/chapters/basalt.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:absol,cobblemon:arcanine,cobblemon:centiskorch,cobblemon:charizard,cobblemon:dugtrio,cobblemon:durant,cobblemon:excadrill,cobblemon:gliscor,cobblemon:heatmor,cobblemon:houndoom,cobblemon:liepard,cobblemon:magcargo,cobblemon:magmortar,cobblemon:mawile,cobblemon:torkoal,cobblemon:turtonator" + pokemon: "cobblemon:absol,cobblemon:arcanine,cobblemon:armarouge,cobblemon:centiskorch,cobblemon:charizard,cobblemon:dugtrio,cobblemon:durant,cobblemon:excadrill,cobblemon:gliscor,cobblemon:heatmor,cobblemon:houndoom,cobblemon:liepard,cobblemon:magcargo,cobblemon:magmortar,cobblemon:mawile,cobblemon:torkoal,cobblemon:turtonator" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/deep_dark.snbt b/pack/config/ftbquests/quests/chapters/deep_dark.snbt index 9c2d40a..c96f971 100644 --- a/pack/config/ftbquests/quests/chapters/deep_dark.snbt +++ b/pack/config/ftbquests/quests/chapters/deep_dark.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:aegislash,cobblemon:bronzong,cobblemon:carbink,cobblemon:coalossal,cobblemon:corviknight,cobblemon:crobat,cobblemon:ditto,cobblemon:doublade,cobblemon:dusclops,cobblemon:dusknoir,cobblemon:gallade,cobblemon:gardevoir,cobblemon:gigalith,cobblemon:glimmora,cobblemon:golbat,cobblemon:honchkrow,cobblemon:houndstone,cobblemon:klinklang,cobblemon:mabosstiff,cobblemon:milotic,cobblemon:mimikyu,cobblemon:mrmime,cobblemon:mrrime,cobblemon:probopass,cobblemon:revavroom,cobblemon:steelix,cobblemon:zweilous" + pokemon: "cobblemon:aegislash,cobblemon:bronzong,cobblemon:carbink,cobblemon:chandelure,cobblemon:coalossal,cobblemon:corviknight,cobblemon:crobat,cobblemon:ditto,cobblemon:doublade,cobblemon:dusclops,cobblemon:dusknoir,cobblemon:gallade,cobblemon:gardevoir,cobblemon:gigalith,cobblemon:glimmora,cobblemon:golbat,cobblemon:grimmsnarl,cobblemon:honchkrow,cobblemon:houndstone,cobblemon:klinklang,cobblemon:lampent,cobblemon:mabosstiff,cobblemon:milotic,cobblemon:mimikyu,cobblemon:mrmime,cobblemon:mrrime,cobblemon:probopass,cobblemon:revavroom,cobblemon:steelix,cobblemon:zweilous" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/deep_sea.snbt b/pack/config/ftbquests/quests/chapters/deep_sea.snbt index 149ab8f..df972e8 100644 --- a/pack/config/ftbquests/quests/chapters/deep_sea.snbt +++ b/pack/config/ftbquests/quests/chapters/deep_sea.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:barbaracle,cobblemon:binacle,cobblemon:brionne,cobblemon:clamperl,cobblemon:clauncher,cobblemon:clawitzer,cobblemon:cloyster,cobblemon:dewott,cobblemon:dhelmise,cobblemon:dragalge,cobblemon:drakloak,cobblemon:frillish,cobblemon:gorebyss,cobblemon:horsea,cobblemon:huntail,cobblemon:jellicent,cobblemon:kilowattrel,cobblemon:kingdra,cobblemon:lapras,cobblemon:mantine,cobblemon:mantyke,cobblemon:octillery,cobblemon:oshawott,cobblemon:popplio,cobblemon:primarina,cobblemon:remoraid,cobblemon:samurott,cobblemon:seadra,cobblemon:shellder,cobblemon:skrelp,cobblemon:starmie,cobblemon:staryu,cobblemon:veluza,cobblemon:wailmer,cobblemon:wailord" + pokemon: "cobblemon:barbaracle,cobblemon:binacle,cobblemon:brionne,cobblemon:clamperl,cobblemon:clauncher,cobblemon:clawitzer,cobblemon:cloyster,cobblemon:dewgong,cobblemon:dewott,cobblemon:dhelmise,cobblemon:dragalge,cobblemon:drakloak,cobblemon:empoleon,cobblemon:frillish,cobblemon:gorebyss,cobblemon:horsea,cobblemon:huntail,cobblemon:jellicent,cobblemon:kilowattrel,cobblemon:kingdra,cobblemon:lapras,cobblemon:mantine,cobblemon:mantyke,cobblemon:octillery,cobblemon:oshawott,cobblemon:piplup,cobblemon:popplio,cobblemon:primarina,cobblemon:prinplup,cobblemon:remoraid,cobblemon:samurott,cobblemon:seadra,cobblemon:sealeo,cobblemon:seel,cobblemon:shellder,cobblemon:skrelp,cobblemon:starmie,cobblemon:staryu,cobblemon:veluza,cobblemon:wailmer,cobblemon:wailord,cobblemon:walrein" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/dripstone.snbt b/pack/config/ftbquests/quests/chapters/dripstone.snbt index b4dd0a8..974261b 100644 --- a/pack/config/ftbquests/quests/chapters/dripstone.snbt +++ b/pack/config/ftbquests/quests/chapters/dripstone.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:alcremie,cobblemon:bagon,cobblemon:baltoy,cobblemon:beldum,cobblemon:claydol,cobblemon:clefable,cobblemon:clefairy,cobblemon:cleffa,cobblemon:comfey,cobblemon:dachsbun,cobblemon:drowzee,cobblemon:druddigon,cobblemon:duosion,cobblemon:elgyem,cobblemon:espurr,cobblemon:fidough,cobblemon:geodude,cobblemon:golem,cobblemon:graveler,cobblemon:hypno,cobblemon:indeedee,cobblemon:klefki,cobblemon:lunatone,cobblemon:meowstic,cobblemon:metang,cobblemon:milcery,cobblemon:munna,cobblemon:musharna,cobblemon:orthworm,cobblemon:shelgon,cobblemon:sigilyph,cobblemon:slurpuff,cobblemon:solosis,cobblemon:solrock,cobblemon:swirlix" + pokemon: "cobblemon:alcremie,cobblemon:aron,cobblemon:bagon,cobblemon:baltoy,cobblemon:beldum,cobblemon:claydol,cobblemon:clefable,cobblemon:clefairy,cobblemon:cleffa,cobblemon:comfey,cobblemon:dachsbun,cobblemon:drowzee,cobblemon:druddigon,cobblemon:duosion,cobblemon:elgyem,cobblemon:espurr,cobblemon:fidough,cobblemon:geodude,cobblemon:golem,cobblemon:graveler,cobblemon:hypno,cobblemon:indeedee,cobblemon:klefki,cobblemon:lairon,cobblemon:lunatone,cobblemon:meowstic,cobblemon:metang,cobblemon:milcery,cobblemon:munna,cobblemon:musharna,cobblemon:orthworm,cobblemon:shelgon,cobblemon:sigilyph,cobblemon:slurpuff,cobblemon:solosis,cobblemon:solrock,cobblemon:swirlix" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/frostpeak.snbt b/pack/config/ftbquests/quests/chapters/frostpeak.snbt index 8609d18..53de8e4 100644 --- a/pack/config/ftbquests/quests/chapters/frostpeak.snbt +++ b/pack/config/ftbquests/quests/chapters/frostpeak.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:abomasnow,cobblemon:annihilape,cobblemon:archaludon,cobblemon:aromatisse,cobblemon:basculegion,cobblemon:basculin,cobblemon:bayleef,cobblemon:braviary,cobblemon:cherrim,cobblemon:chesnaught,cobblemon:copperajah,cobblemon:cryogonal,cobblemon:dartrix,cobblemon:decidueye,cobblemon:delibird,cobblemon:dubwool,cobblemon:duraludon,cobblemon:eldegoss,cobblemon:electabuzz,cobblemon:electivire,cobblemon:floragato,cobblemon:fraxure,cobblemon:froslass,cobblemon:frosmoth,cobblemon:glalie,cobblemon:gogoat,cobblemon:grumpig,cobblemon:hariyama,cobblemon:haxorus,cobblemon:hitmonchan,cobblemon:hitmonlee,cobblemon:hitmontop,cobblemon:infernape,cobblemon:jynx,cobblemon:lucario,cobblemon:lycanroc,cobblemon:machamp,cobblemon:machoke,cobblemon:meganium,cobblemon:meowscarada,cobblemon:mienshao,cobblemon:minior,cobblemon:monferno,cobblemon:primeape,cobblemon:pupitar,cobblemon:quilladin,cobblemon:rhydon,cobblemon:rhyperior,cobblemon:roselia,cobblemon:roserade,cobblemon:salandit,cobblemon:sawk,cobblemon:sneasel,cobblemon:sneasler,cobblemon:spinda,cobblemon:staraptor,cobblemon:throh,cobblemon:togedemaru,cobblemon:togekiss,cobblemon:togetic,cobblemon:tyranitar,cobblemon:vanillish,cobblemon:vanilluxe" + pokemon: "cobblemon:abomasnow,cobblemon:annihilape,cobblemon:archaludon,cobblemon:aromatisse,cobblemon:avalugg,cobblemon:basculegion,cobblemon:basculin,cobblemon:bayleef,cobblemon:beartic,cobblemon:braviary,cobblemon:cetitan,cobblemon:cherrim,cobblemon:chesnaught,cobblemon:copperajah,cobblemon:cryogonal,cobblemon:dartrix,cobblemon:decidueye,cobblemon:delibird,cobblemon:dubwool,cobblemon:duraludon,cobblemon:eiscue,cobblemon:eldegoss,cobblemon:electabuzz,cobblemon:electivire,cobblemon:floragato,cobblemon:fraxure,cobblemon:froslass,cobblemon:frosmoth,cobblemon:glalie,cobblemon:gogoat,cobblemon:grumpig,cobblemon:hariyama,cobblemon:haxorus,cobblemon:hitmonchan,cobblemon:hitmonlee,cobblemon:hitmontop,cobblemon:infernape,cobblemon:jynx,cobblemon:lucario,cobblemon:lycanroc,cobblemon:machamp,cobblemon:machoke,cobblemon:mamoswine,cobblemon:meganium,cobblemon:meowscarada,cobblemon:mienshao,cobblemon:minior,cobblemon:monferno,cobblemon:piloswine,cobblemon:primeape,cobblemon:pupitar,cobblemon:quilladin,cobblemon:rhydon,cobblemon:rhyperior,cobblemon:roselia,cobblemon:roserade,cobblemon:salandit,cobblemon:sawk,cobblemon:sneasel,cobblemon:sneasler,cobblemon:spinda,cobblemon:stantler,cobblemon:staraptor,cobblemon:throh,cobblemon:togedemaru,cobblemon:togekiss,cobblemon:togetic,cobblemon:tyranitar,cobblemon:vanillish,cobblemon:vanilluxe,cobblemon:wyrdeer" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/highlands.snbt b/pack/config/ftbquests/quests/chapters/highlands.snbt index 0ce01de..7350326 100644 --- a/pack/config/ftbquests/quests/chapters/highlands.snbt +++ b/pack/config/ftbquests/quests/chapters/highlands.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:abra,cobblemon:alakazam,cobblemon:ampharos,cobblemon:bellossom,cobblemon:bouffalant,cobblemon:buizel,cobblemon:chewtle,cobblemon:cinderace,cobblemon:combusken,cobblemon:cottonee,cobblemon:cyclizar,cobblemon:cyndaquil,cobblemon:drednaw,cobblemon:electrike,cobblemon:flaaffy,cobblemon:fletchinder,cobblemon:fletchling,cobblemon:floatzel,cobblemon:gloom,cobblemon:golduck,cobblemon:golett,cobblemon:grotle,cobblemon:hoppip,cobblemon:jigglypuff,cobblemon:jumpluff,cobblemon:kadabra,cobblemon:lechonk,cobblemon:lickilicky,cobblemon:lickitung,cobblemon:lokix,cobblemon:manectric,cobblemon:mareep,cobblemon:mightyena,cobblemon:miltank,cobblemon:mudbray,cobblemon:mudsdale,cobblemon:ninetales,cobblemon:oddish,cobblemon:oinkologne,cobblemon:pidgeotto,cobblemon:pidgey,cobblemon:pignite,cobblemon:politoed,cobblemon:poliwag,cobblemon:poliwhirl,cobblemon:poliwrath,cobblemon:polteageist,cobblemon:ponyta,cobblemon:psyduck,cobblemon:quaxly,cobblemon:quaxwell,cobblemon:quilava,cobblemon:raboot,cobblemon:scorbunny,cobblemon:seviper,cobblemon:sinistea,cobblemon:skiploom,cobblemon:spiritomb,cobblemon:squirtle,cobblemon:stonjourner,cobblemon:talonflame,cobblemon:tauros,cobblemon:tepig,cobblemon:tinkatink,cobblemon:tinkatuff,cobblemon:torchic,cobblemon:torterra,cobblemon:turtwig,cobblemon:vileplume,cobblemon:vulpix,cobblemon:wartortle,cobblemon:whimsicott,cobblemon:wigglytuff,cobblemon:zangoose,cobblemon:zoroark,cobblemon:zorua" + pokemon: "cobblemon:abra,cobblemon:alakazam,cobblemon:ampharos,cobblemon:bellossom,cobblemon:blitzle,cobblemon:bouffalant,cobblemon:buizel,cobblemon:chewtle,cobblemon:cinderace,cobblemon:combusken,cobblemon:cottonee,cobblemon:cyclizar,cobblemon:cyndaquil,cobblemon:dodrio,cobblemon:doduo,cobblemon:drednaw,cobblemon:electrike,cobblemon:flaaffy,cobblemon:fletchinder,cobblemon:fletchling,cobblemon:floatzel,cobblemon:gloom,cobblemon:golduck,cobblemon:golett,cobblemon:grotle,cobblemon:hoppip,cobblemon:jigglypuff,cobblemon:jumpluff,cobblemon:kadabra,cobblemon:lechonk,cobblemon:lickilicky,cobblemon:lickitung,cobblemon:lokix,cobblemon:manectric,cobblemon:mareep,cobblemon:mightyena,cobblemon:miltank,cobblemon:mudbray,cobblemon:mudsdale,cobblemon:ninetales,cobblemon:oddish,cobblemon:oinkologne,cobblemon:pidgeotto,cobblemon:pidgey,cobblemon:pignite,cobblemon:politoed,cobblemon:poliwag,cobblemon:poliwhirl,cobblemon:poliwrath,cobblemon:polteageist,cobblemon:ponyta,cobblemon:psyduck,cobblemon:quaxly,cobblemon:quaxwell,cobblemon:quilava,cobblemon:raboot,cobblemon:scorbunny,cobblemon:seviper,cobblemon:sinistea,cobblemon:skiploom,cobblemon:spiritomb,cobblemon:squirtle,cobblemon:stonjourner,cobblemon:talonflame,cobblemon:tauros,cobblemon:tepig,cobblemon:tinkatink,cobblemon:tinkatuff,cobblemon:torchic,cobblemon:torterra,cobblemon:turtwig,cobblemon:vileplume,cobblemon:vulpix,cobblemon:wartortle,cobblemon:whimsicott,cobblemon:wigglytuff,cobblemon:zangoose,cobblemon:zebstrika,cobblemon:zoroark,cobblemon:zorua" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/jungle.snbt b/pack/config/ftbquests/quests/chapters/jungle.snbt index 0fc73fd..fadf5c6 100644 --- a/pack/config/ftbquests/quests/chapters/jungle.snbt +++ b/pack/config/ftbquests/quests/chapters/jungle.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:aipom,cobblemon:bellsprout,cobblemon:bounsweet,cobblemon:bulbasaur,cobblemon:chatot,cobblemon:darumaka,cobblemon:exeggcute,cobblemon:exeggutor,cobblemon:fomantis,cobblemon:grafaiai,cobblemon:grookey,cobblemon:grovyle,cobblemon:ivysaur,cobblemon:jangmoo,cobblemon:kecleon,cobblemon:litten,cobblemon:natu,cobblemon:panpour,cobblemon:pansage,cobblemon:pansear,cobblemon:pikipek,cobblemon:servine,cobblemon:shroodle,cobblemon:simipour,cobblemon:simisage,cobblemon:simisear,cobblemon:slakoth,cobblemon:snivy,cobblemon:steenee,cobblemon:stunfisk,cobblemon:swoobat,cobblemon:tangela,cobblemon:tangrowth,cobblemon:thwackey,cobblemon:torracat,cobblemon:toucannon,cobblemon:treecko,cobblemon:tropius,cobblemon:trumbeak,cobblemon:tsareena,cobblemon:unown,cobblemon:vigoroth,cobblemon:weepinbell,cobblemon:woobat,cobblemon:xatu" + pokemon: "cobblemon:aipom,cobblemon:bellsprout,cobblemon:bewear,cobblemon:bounsweet,cobblemon:bulbasaur,cobblemon:chatot,cobblemon:darumaka,cobblemon:exeggcute,cobblemon:exeggutor,cobblemon:fomantis,cobblemon:grafaiai,cobblemon:grookey,cobblemon:grovyle,cobblemon:ivysaur,cobblemon:jangmoo,cobblemon:kecleon,cobblemon:komala,cobblemon:litten,cobblemon:natu,cobblemon:pancham,cobblemon:panpour,cobblemon:pansage,cobblemon:pansear,cobblemon:pikipek,cobblemon:servine,cobblemon:shroodle,cobblemon:simipour,cobblemon:simisage,cobblemon:simisear,cobblemon:slakoth,cobblemon:snivy,cobblemon:steenee,cobblemon:stufful,cobblemon:stunfisk,cobblemon:swoobat,cobblemon:tangela,cobblemon:tangrowth,cobblemon:thwackey,cobblemon:torracat,cobblemon:toucannon,cobblemon:treecko,cobblemon:tropius,cobblemon:trumbeak,cobblemon:tsareena,cobblemon:unown,cobblemon:vigoroth,cobblemon:weepinbell,cobblemon:woobat,cobblemon:xatu" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/lush_caves.snbt b/pack/config/ftbquests/quests/chapters/lush_caves.snbt index 9899d52..3ef615b 100644 --- a/pack/config/ftbquests/quests/chapters/lush_caves.snbt +++ b/pack/config/ftbquests/quests/chapters/lush_caves.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:amaura,cobblemon:anorith,cobblemon:archen,cobblemon:barboach,cobblemon:carnivine,cobblemon:cranidos,cobblemon:cutiefly,cobblemon:ferroseed,cobblemon:granbull,cobblemon:joltik,cobblemon:kabuto,cobblemon:lileep,cobblemon:morelull,cobblemon:omanyte,cobblemon:paras,cobblemon:parasect,cobblemon:ribombee,cobblemon:shieldon,cobblemon:shiinotic,cobblemon:shuckle,cobblemon:snubbull,cobblemon:tirtouga,cobblemon:trubbish,cobblemon:tyrunt,cobblemon:venipede,cobblemon:whirlipede" + pokemon: "cobblemon:amaura,cobblemon:anorith,cobblemon:archen,cobblemon:barboach,cobblemon:carnivine,cobblemon:cranidos,cobblemon:cutiefly,cobblemon:ferroseed,cobblemon:foongus,cobblemon:granbull,cobblemon:joltik,cobblemon:kabuto,cobblemon:lileep,cobblemon:morelull,cobblemon:omanyte,cobblemon:paras,cobblemon:parasect,cobblemon:ribombee,cobblemon:shieldon,cobblemon:shiinotic,cobblemon:shuckle,cobblemon:snubbull,cobblemon:tirtouga,cobblemon:trubbish,cobblemon:tyrunt,cobblemon:venipede,cobblemon:whirlipede" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/mire.snbt b/pack/config/ftbquests/quests/chapters/mire.snbt index 95a4342..3374f14 100644 --- a/pack/config/ftbquests/quests/chapters/mire.snbt +++ b/pack/config/ftbquests/quests/chapters/mire.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:accelgor,cobblemon:arrokuda,cobblemon:barraskewda,cobblemon:bellibolt,cobblemon:croagunk,cobblemon:dondozo,cobblemon:drizzile,cobblemon:ducklett,cobblemon:escavalier,cobblemon:flamigo,cobblemon:froakie,cobblemon:frogadier,cobblemon:greninja,cobblemon:illumise,cobblemon:inteleon,cobblemon:karrablast,cobblemon:marshtomp,cobblemon:masquerain,cobblemon:misdreavus,cobblemon:mudkip,cobblemon:shelmet,cobblemon:slowpoke,cobblemon:sobble,cobblemon:surskit,cobblemon:swampert,cobblemon:swanna,cobblemon:tadbulb,cobblemon:tatsugiri,cobblemon:toxicroak,cobblemon:volbeat,cobblemon:yanma,cobblemon:yanmega" + pokemon: "cobblemon:accelgor,cobblemon:arrokuda,cobblemon:barraskewda,cobblemon:bellibolt,cobblemon:croagunk,cobblemon:dondozo,cobblemon:drizzile,cobblemon:ducklett,cobblemon:escavalier,cobblemon:flamigo,cobblemon:froakie,cobblemon:frogadier,cobblemon:greninja,cobblemon:hatenna,cobblemon:hattrem,cobblemon:illumise,cobblemon:inteleon,cobblemon:karrablast,cobblemon:marshtomp,cobblemon:masquerain,cobblemon:misdreavus,cobblemon:mudkip,cobblemon:shelmet,cobblemon:slowpoke,cobblemon:sobble,cobblemon:surskit,cobblemon:swampert,cobblemon:swanna,cobblemon:tadbulb,cobblemon:tatsugiri,cobblemon:toedscool,cobblemon:toedscruel,cobblemon:toxicroak,cobblemon:volbeat,cobblemon:yanma,cobblemon:yanmega" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/southwold.snbt b/pack/config/ftbquests/quests/chapters/southwold.snbt index 003e8d0..f0dec9f 100644 --- a/pack/config/ftbquests/quests/chapters/southwold.snbt +++ b/pack/config/ftbquests/quests/chapters/southwold.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:audino,cobblemon:azumarill,cobblemon:azurill,cobblemon:bunnelby,cobblemon:burmy,cobblemon:chansey,cobblemon:chingling,cobblemon:corsola,cobblemon:drifloon,cobblemon:dunsparce,cobblemon:eevee,cobblemon:farfetchd,cobblemon:furfrou,cobblemon:furret,cobblemon:gastly,cobblemon:glameow,cobblemon:goldeen,cobblemon:grimer,cobblemon:grubbin,cobblemon:happiny,cobblemon:hawlucha,cobblemon:heracross,cobblemon:herdier,cobblemon:koffing,cobblemon:lillipup,cobblemon:lombre,cobblemon:lotad,cobblemon:magnemite,cobblemon:marill,cobblemon:minccino,cobblemon:minun,cobblemon:noibat,cobblemon:patrat,cobblemon:pidove,cobblemon:pinsir,cobblemon:plusle,cobblemon:porygon,cobblemon:pumpkaboo,cobblemon:relicanth,cobblemon:sentret,cobblemon:shuppet,cobblemon:squawkabilly,cobblemon:swablu,cobblemon:taillow,cobblemon:tentacool,cobblemon:timburr,cobblemon:toxel,cobblemon:tynamo,cobblemon:venonat,cobblemon:voltorb,cobblemon:whismur,cobblemon:wimpod,cobblemon:yamask,cobblemon:yamper,cobblemon:yungoos,cobblemon:zigzagoon" + pokemon: "cobblemon:audino,cobblemon:azumarill,cobblemon:azurill,cobblemon:bunnelby,cobblemon:burmy,cobblemon:chansey,cobblemon:chingling,cobblemon:corsola,cobblemon:drifloon,cobblemon:dunsparce,cobblemon:eevee,cobblemon:farfetchd,cobblemon:furfrou,cobblemon:furret,cobblemon:gastly,cobblemon:glameow,cobblemon:goldeen,cobblemon:grimer,cobblemon:grubbin,cobblemon:happiny,cobblemon:hawlucha,cobblemon:heracross,cobblemon:herdier,cobblemon:koffing,cobblemon:lillipup,cobblemon:lombre,cobblemon:lotad,cobblemon:magnemite,cobblemon:marill,cobblemon:minccino,cobblemon:minun,cobblemon:nidoranf,cobblemon:nidoranm,cobblemon:nidorina,cobblemon:nidorino,cobblemon:noibat,cobblemon:patrat,cobblemon:pidove,cobblemon:pinsir,cobblemon:plusle,cobblemon:porygon,cobblemon:pumpkaboo,cobblemon:relicanth,cobblemon:sentret,cobblemon:shuppet,cobblemon:smoliv,cobblemon:squawkabilly,cobblemon:swablu,cobblemon:taillow,cobblemon:tentacool,cobblemon:timburr,cobblemon:toxel,cobblemon:tynamo,cobblemon:venonat,cobblemon:voltorb,cobblemon:whismur,cobblemon:wimpod,cobblemon:yamask,cobblemon:yamper,cobblemon:yungoos,cobblemon:zigzagoon" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/sunscorch.snbt b/pack/config/ftbquests/quests/chapters/sunscorch.snbt index 2f61e1d..d41a5e6 100644 --- a/pack/config/ftbquests/quests/chapters/sunscorch.snbt +++ b/pack/config/ftbquests/quests/chapters/sunscorch.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:arbok,cobblemon:braixen,cobblemon:brambleghast,cobblemon:cacnea,cobblemon:cacturne,cobblemon:camerupt,cobblemon:capsakid,cobblemon:crocalor,cobblemon:croconaw,cobblemon:crustle,cobblemon:cubone,cobblemon:delphox,cobblemon:donphan,cobblemon:drampa,cobblemon:drapion,cobblemon:dwebble,cobblemon:espathra,cobblemon:falinks,cobblemon:fearow,cobblemon:fennekin,cobblemon:feraligatr,cobblemon:flygon,cobblemon:fuecoco,cobblemon:garganacl,cobblemon:heliolisk,cobblemon:hippopotas,cobblemon:hippowdon,cobblemon:klawf,cobblemon:krokorok,cobblemon:krookodile,cobblemon:larvesta,cobblemon:luxio,cobblemon:luxray,cobblemon:maractus,cobblemon:marowak,cobblemon:naclstack,cobblemon:numel,cobblemon:palpitoad,cobblemon:pawniard,cobblemon:phanpy,cobblemon:poltchageist,cobblemon:rabsca,cobblemon:sandaconda,cobblemon:sandshrew,cobblemon:sandslash,cobblemon:scovillain,cobblemon:scrafty,cobblemon:scraggy,cobblemon:seismitoad,cobblemon:silicobra,cobblemon:sinistcha,cobblemon:skarmory,cobblemon:skeledirge,cobblemon:skorupi,cobblemon:totodile,cobblemon:vibrava" + pokemon: "cobblemon:arbok,cobblemon:braixen,cobblemon:brambleghast,cobblemon:cacnea,cobblemon:cacturne,cobblemon:camerupt,cobblemon:capsakid,cobblemon:crocalor,cobblemon:croconaw,cobblemon:crustle,cobblemon:cubone,cobblemon:delphox,cobblemon:donphan,cobblemon:drampa,cobblemon:drapion,cobblemon:dwebble,cobblemon:espathra,cobblemon:falinks,cobblemon:farigiraf,cobblemon:fearow,cobblemon:fennekin,cobblemon:feraligatr,cobblemon:flygon,cobblemon:fuecoco,cobblemon:garganacl,cobblemon:girafarig,cobblemon:heliolisk,cobblemon:hippopotas,cobblemon:hippowdon,cobblemon:kangaskhan,cobblemon:klawf,cobblemon:krokorok,cobblemon:krookodile,cobblemon:larvesta,cobblemon:litleo,cobblemon:luxio,cobblemon:luxray,cobblemon:maractus,cobblemon:marowak,cobblemon:naclstack,cobblemon:numel,cobblemon:palpitoad,cobblemon:pawniard,cobblemon:phanpy,cobblemon:poltchageist,cobblemon:pyroar,cobblemon:rabsca,cobblemon:sandaconda,cobblemon:sandshrew,cobblemon:sandslash,cobblemon:scovillain,cobblemon:scrafty,cobblemon:scraggy,cobblemon:seismitoad,cobblemon:silicobra,cobblemon:sinistcha,cobblemon:skarmory,cobblemon:skeledirge,cobblemon:skorupi,cobblemon:totodile,cobblemon:vibrava" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/ftbquests/quests/chapters/westmarch.snbt b/pack/config/ftbquests/quests/chapters/westmarch.snbt index e14274f..8da5492 100644 --- a/pack/config/ftbquests/quests/chapters/westmarch.snbt +++ b/pack/config/ftbquests/quests/chapters/westmarch.snbt @@ -46,7 +46,7 @@ min_level: 0 natures: "" poke_ball_used: "" - pokemon: "cobblemon:appletun,cobblemon:applin,cobblemon:araquanid,cobblemon:breloom,cobblemon:buneary,cobblemon:corphish,cobblemon:deerling,cobblemon:dewpider,cobblemon:dipplin,cobblemon:dratini,cobblemon:flabebe,cobblemon:flapple,cobblemon:floette,cobblemon:gabite,cobblemon:gible,cobblemon:goomy,cobblemon:greedent,cobblemon:gyarados,cobblemon:lilligant,cobblemon:magikarp,cobblemon:maushold,cobblemon:munchlax,cobblemon:nickit,cobblemon:nuzleaf,cobblemon:petilil,cobblemon:phantump,cobblemon:pichu,cobblemon:pikachu,cobblemon:scyther,cobblemon:seedot,cobblemon:sewaddle,cobblemon:shroomish,cobblemon:skwovet,cobblemon:stunky,cobblemon:swadloon,cobblemon:tandemaus,cobblemon:teddiursa,cobblemon:thievul" + pokemon: "cobblemon:appletun,cobblemon:applin,cobblemon:araquanid,cobblemon:breloom,cobblemon:buneary,cobblemon:corphish,cobblemon:dedenne,cobblemon:deerling,cobblemon:dewpider,cobblemon:dipplin,cobblemon:dratini,cobblemon:emolga,cobblemon:flabebe,cobblemon:flapple,cobblemon:floette,cobblemon:gabite,cobblemon:gible,cobblemon:goomy,cobblemon:greedent,cobblemon:gyarados,cobblemon:lilligant,cobblemon:magikarp,cobblemon:maushold,cobblemon:munchlax,cobblemon:nickit,cobblemon:nuzleaf,cobblemon:petilil,cobblemon:phantump,cobblemon:pichu,cobblemon:pikachu,cobblemon:pineco,cobblemon:rotom,cobblemon:scyther,cobblemon:seedot,cobblemon:sewaddle,cobblemon:shroomish,cobblemon:skwovet,cobblemon:stunky,cobblemon:swadloon,cobblemon:tandemaus,cobblemon:teddiursa,cobblemon:thievul" pokemon_type: "" region: "" shiny: false diff --git a/pack/config/regenerating_ore_veins/veins.json b/pack/config/regenerating_ore_veins/veins.json index e1d3aec..07d87d5 100644 --- a/pack/config/regenerating_ore_veins/veins.json +++ b/pack/config/regenerating_ore_veins/veins.json @@ -14,8 +14,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -66,12 +66,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 4, + "min_radius": 3, + "max_radius": 5, "attempts": 2, "min_y": 0, "max_y": 100, - "chunk_minimum_generation_separation": 6, + "chunk_minimum_generation_separation": 8, "fill_factor": 0.7, "regeneration_interval_seconds": 1200, "regeneration_interval_jitter": { @@ -118,12 +118,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 4, + "min_radius": 3, + "max_radius": 5, "attempts": 2, "min_y": -32, "max_y": -1, - "chunk_minimum_generation_separation": 6, + "chunk_minimum_generation_separation": 8, "fill_factor": 0.7, "regeneration_interval_seconds": 1200, "regeneration_interval_jitter": { @@ -146,8 +146,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -292,12 +292,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 4, + "min_radius": 3, + "max_radius": 5, "attempts": 2, "min_y": 0, "max_y": 100, - "chunk_minimum_generation_separation": 8, + "chunk_minimum_generation_separation": 10, "fill_factor": 0.7, "regeneration_interval_seconds": 1800, "regeneration_interval_jitter": { @@ -438,12 +438,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 4, + "min_radius": 3, + "max_radius": 5, "attempts": 2, "min_y": -32, "max_y": -1, - "chunk_minimum_generation_separation": 8, + "chunk_minimum_generation_separation": 10, "fill_factor": 0.7, "regeneration_interval_seconds": 1800, "regeneration_interval_jitter": { @@ -466,8 +466,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -560,12 +560,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 4, + "min_radius": 3, + "max_radius": 5, "attempts": 2, "min_y": 0, "max_y": 90, - "chunk_minimum_generation_separation": 8, + "chunk_minimum_generation_separation": 10, "fill_factor": 0.7, "regeneration_interval_seconds": 2400, "regeneration_interval_jitter": { @@ -654,12 +654,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 4, + "min_radius": 3, + "max_radius": 5, "attempts": 2, "min_y": -48, "max_y": -1, - "chunk_minimum_generation_separation": 8, + "chunk_minimum_generation_separation": 10, "fill_factor": 0.7, "regeneration_interval_seconds": 2400, "regeneration_interval_jitter": { @@ -682,8 +682,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -782,12 +782,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 3, + "min_radius": 3, + "max_radius": 4, "attempts": 1, "min_y": 0, "max_y": 60, - "chunk_minimum_generation_separation": 9, + "chunk_minimum_generation_separation": 12, "fill_factor": 0.7, "regeneration_interval_seconds": 2700, "regeneration_interval_jitter": { @@ -882,12 +882,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 3, + "min_radius": 3, + "max_radius": 4, "attempts": 1, "min_y": -56, "max_y": -1, - "chunk_minimum_generation_separation": 9, + "chunk_minimum_generation_separation": 12, "fill_factor": 0.7, "regeneration_interval_seconds": 2700, "regeneration_interval_jitter": { @@ -910,8 +910,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -1093,12 +1093,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 3, + "min_radius": 3, + "max_radius": 4, "attempts": 1, "min_y": 0, "max_y": 80, - "chunk_minimum_generation_separation": 9, + "chunk_minimum_generation_separation": 12, "fill_factor": 0.7, "regeneration_interval_seconds": 2700, "regeneration_interval_jitter": { @@ -1276,12 +1276,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 3, + "min_radius": 3, + "max_radius": 4, "attempts": 1, "min_y": -56, "max_y": -1, - "chunk_minimum_generation_separation": 9, + "chunk_minimum_generation_separation": 12, "fill_factor": 0.7, "regeneration_interval_seconds": 2700, "regeneration_interval_jitter": { @@ -1304,8 +1304,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -1390,12 +1390,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 3, + "min_radius": 3, + "max_radius": 4, "attempts": 2, "min_y": 0, "max_y": 120, - "chunk_minimum_generation_separation": 7, + "chunk_minimum_generation_separation": 9, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -1476,12 +1476,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 2, - "max_radius": 3, + "min_radius": 3, + "max_radius": 4, "attempts": 2, "min_y": -48, "max_y": -1, - "chunk_minimum_generation_separation": 7, + "chunk_minimum_generation_separation": 9, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -1504,8 +1504,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -1631,12 +1631,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 2, "min_y": 0, "max_y": 320, - "chunk_minimum_generation_separation": 8, + "chunk_minimum_generation_separation": 10, "fill_factor": 0.7, "regeneration_interval_seconds": 4500, "regeneration_interval_jitter": { @@ -1758,12 +1758,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 2, "min_y": -16, "max_y": -1, - "chunk_minimum_generation_separation": 8, + "chunk_minimum_generation_separation": 10, "fill_factor": 0.7, "regeneration_interval_seconds": 4500, "regeneration_interval_jitter": { @@ -1789,7 +1789,7 @@ ], "shape": "sphere", "min_radius": 1, - "max_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -1817,7 +1817,7 @@ ], "shape": "sphere", "min_radius": 1, - "max_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -1845,7 +1845,7 @@ ], "shape": "sphere", "min_radius": 1, - "max_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -1873,12 +1873,12 @@ ], "shape": "sphere", "min_radius": 0, - "max_radius": 0, + "max_radius": 1, "attempts": 1, "min_y": 0, "max_y": 0, "chunk_minimum_generation_separation": 64, - "fill_factor": 1.0, + "fill_factor": 0.8, "regeneration_interval_seconds": 10800, "regeneration_interval_jitter": { "range_min": -1080, @@ -1901,12 +1901,12 @@ ], "shape": "sphere", "min_radius": 0, - "max_radius": 0, + "max_radius": 1, "attempts": 1, "min_y": 0, "max_y": 0, "chunk_minimum_generation_separation": 64, - "fill_factor": 1.0, + "fill_factor": 0.8, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { "range_min": -360, @@ -1994,12 +1994,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 1, "min_y": 0, "max_y": 100, - "chunk_minimum_generation_separation": 11, + "chunk_minimum_generation_separation": 14, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -2088,12 +2088,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 1, "min_y": -48, "max_y": -1, - "chunk_minimum_generation_separation": 11, + "chunk_minimum_generation_separation": 14, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -2116,8 +2116,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -2145,12 +2145,12 @@ ], "shape": "sphere", "min_radius": 0, - "max_radius": 0, + "max_radius": 1, "attempts": 1, "min_y": 0, "max_y": 0, "chunk_minimum_generation_separation": 64, - "fill_factor": 1.0, + "fill_factor": 0.8, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { "range_min": -360, @@ -2244,12 +2244,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 1, "min_y": 0, "max_y": 100, - "chunk_minimum_generation_separation": 11, + "chunk_minimum_generation_separation": 14, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -2344,12 +2344,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 1, "min_y": -48, "max_y": -1, - "chunk_minimum_generation_separation": 11, + "chunk_minimum_generation_separation": 14, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -2373,12 +2373,12 @@ ], "shape": "sphere", "min_radius": 0, - "max_radius": 0, + "max_radius": 1, "attempts": 1, "min_y": 0, "max_y": 0, "chunk_minimum_generation_separation": 64, - "fill_factor": 1.0, + "fill_factor": 0.8, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { "range_min": -360, @@ -2460,12 +2460,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 1, "min_y": 0, "max_y": 100, - "chunk_minimum_generation_separation": 11, + "chunk_minimum_generation_separation": 14, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -2548,12 +2548,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 1, "min_y": -48, "max_y": -1, - "chunk_minimum_generation_separation": 11, + "chunk_minimum_generation_separation": 14, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -2580,8 +2580,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, @@ -2609,12 +2609,12 @@ ], "shape": "sphere", "min_radius": 0, - "max_radius": 0, + "max_radius": 1, "attempts": 1, "min_y": 0, "max_y": 0, "chunk_minimum_generation_separation": 64, - "fill_factor": 1.0, + "fill_factor": 0.8, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { "range_min": -360, @@ -2791,12 +2791,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 1, "min_y": 0, "max_y": 100, - "chunk_minimum_generation_separation": 11, + "chunk_minimum_generation_separation": 14, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -2974,12 +2974,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 1, "min_y": -48, "max_y": -1, - "chunk_minimum_generation_separation": 11, + "chunk_minimum_generation_separation": 14, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -3003,12 +3003,12 @@ ], "shape": "sphere", "min_radius": 0, - "max_radius": 0, + "max_radius": 1, "attempts": 1, "min_y": 0, "max_y": 0, "chunk_minimum_generation_separation": 64, - "fill_factor": 1.0, + "fill_factor": 0.8, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { "range_min": -360, @@ -3088,12 +3088,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 2, "min_y": 0, "max_y": 120, - "chunk_minimum_generation_separation": 9, + "chunk_minimum_generation_separation": 12, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -3174,12 +3174,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 2, "min_y": -48, "max_y": -1, - "chunk_minimum_generation_separation": 9, + "chunk_minimum_generation_separation": 12, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -3203,12 +3203,12 @@ ], "shape": "sphere", "min_radius": 0, - "max_radius": 0, + "max_radius": 1, "attempts": 1, "min_y": 0, "max_y": 0, "chunk_minimum_generation_separation": 64, - "fill_factor": 1.0, + "fill_factor": 0.8, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { "range_min": -360, @@ -3329,12 +3329,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 2, "min_y": 0, "max_y": 320, - "chunk_minimum_generation_separation": 9, + "chunk_minimum_generation_separation": 12, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -3456,12 +3456,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 2, "min_y": -16, "max_y": -1, - "chunk_minimum_generation_separation": 9, + "chunk_minimum_generation_separation": 12, "fill_factor": 0.7, "regeneration_interval_seconds": 3600, "regeneration_interval_jitter": { @@ -3485,12 +3485,12 @@ ], "shape": "sphere", "min_radius": 0, - "max_radius": 0, + "max_radius": 1, "attempts": 1, "min_y": 0, "max_y": 0, "chunk_minimum_generation_separation": 64, - "fill_factor": 1.0, + "fill_factor": 0.8, "regeneration_interval_seconds": 4500, "regeneration_interval_jitter": { "range_min": -450, @@ -3611,12 +3611,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 2, "min_y": 0, "max_y": 320, - "chunk_minimum_generation_separation": 10, + "chunk_minimum_generation_separation": 13, "fill_factor": 0.7, "regeneration_interval_seconds": 4500, "regeneration_interval_jitter": { @@ -3738,12 +3738,12 @@ "minecraft:lush_caves" ], "shape": "sphere", - "min_radius": 1, - "max_radius": 2, + "min_radius": 2, + "max_radius": 3, "attempts": 2, "min_y": -16, "max_y": -1, - "chunk_minimum_generation_separation": 10, + "chunk_minimum_generation_separation": 13, "fill_factor": 0.7, "regeneration_interval_seconds": 4500, "regeneration_interval_jitter": { @@ -3766,8 +3766,8 @@ "selftest_nowhere" ], "shape": "sphere", - "min_radius": 0, - "max_radius": 1, + "min_radius": 1, + "max_radius": 2, "attempts": 1, "min_y": 0, "max_y": 0, diff --git a/pack/index.toml b/pack/index.toml index ad34a76..89cc939 100644 --- a/pack/index.toml +++ b/pack/index.toml @@ -34,7 +34,7 @@ hash = "e57d8311aec9f524911ed1313cabf138bb7fa5a2d3ba985a00a2a267ff35ef78" [[files]] file = "config/ftbquests/quests/chapters/basalt.snbt" -hash = "7e1b74aebae51bf0433bdd422b3ad9097e58abaf25cabaa5fcf03ca78d417bfd" +hash = "8a7eab2ca30f47109add6cfbf4eeb4717e3704bc85902ee8f4c5307b2b2eeb3c" [[files]] file = "config/ftbquests/quests/chapters/base.snbt" @@ -46,19 +46,19 @@ hash = "ce24fccd748e805ec617f7b571263c1af91377644a3fc17146bf38963e8b54ab" [[files]] file = "config/ftbquests/quests/chapters/deep_dark.snbt" -hash = "45a3992afb773ea5442dc536d18a6c7b2ed20befe1daf31f170e27d2b1c67324" +hash = "7208cd9166e11beed91086cd0a897f49cf31ecadd65acaa3b798169c86b0ae34" [[files]] file = "config/ftbquests/quests/chapters/deep_sea.snbt" -hash = "6c01131b458060cf69e11dae1f08ac9944ac77e2d6abcfb58a630137579cf9c3" +hash = "bd87d38b3ec40b408e1710d641ac9ce57824e2ebfd7cf3674a166521482acb76" [[files]] file = "config/ftbquests/quests/chapters/dripstone.snbt" -hash = "6de9aff416df5c916f00065c90ce64c57422ae4de4c415522178e090e5a5f830" +hash = "56886a1f390e9379672bde9190a0823cffdb3bb42cde043b4c772a1d0fa54e47" [[files]] file = "config/ftbquests/quests/chapters/frostpeak.snbt" -hash = "e0f380185bc9cb53c993e86d6fcb9a82ea14723bf211c5ad7d046aaeadd7c468" +hash = "150e60db7c18fbdb3c882cadc894813e3bc951c8adbfe42a30c38fc657c79a70" [[files]] file = "config/ftbquests/quests/chapters/getting_started.snbt" @@ -66,15 +66,15 @@ hash = "829aa67db8a39f6f43aa6076090c0040e4324be70abe0b30e0edcce48d924ab9" [[files]] file = "config/ftbquests/quests/chapters/highlands.snbt" -hash = "ed7e66df09969ac69acc0f12648c7fb71589c37a14f4530714c1a97ffb5dab17" +hash = "3724fa8a038561cc8965e6dfe5bc62718872d04f385bb636e984988762046670" [[files]] file = "config/ftbquests/quests/chapters/jungle.snbt" -hash = "bdfd541303d72bcfa0b8a28cf1a9277701be2f7d75edd5a95175e6cf3915fc39" +hash = "5afa0885dbd853ea973fb61881a14b97a98af4d0dd26b66d837541ba1b09c8c8" [[files]] file = "config/ftbquests/quests/chapters/lush_caves.snbt" -hash = "cd7dd0f47b33063d867f9f55c8b4307935ceda64509701886da75dbfb2ab92be" +hash = "bd5734f9df4e1dc1caa989c32b5dac797f5104a4c6c0987801d3650e12d1e491" [[files]] file = "config/ftbquests/quests/chapters/machines.snbt" @@ -82,7 +82,7 @@ hash = "dbeb43e993d27656f75e7a64a118e3592c40b5cbfc089bdf6a02069edae57011" [[files]] file = "config/ftbquests/quests/chapters/mire.snbt" -hash = "95bc5a97874794dff8d19cff04bfebe984c1d2fcefabcba15fc3b36a14e0880a" +hash = "c540889e8fe5432723f16c8cd8dbe63117e2b3b5523793b9872902d1837b4459" [[files]] file = "config/ftbquests/quests/chapters/shallows.snbt" @@ -90,11 +90,11 @@ hash = "1f3829f5f40e853673645d7ea250e646f97bbd79b3235bc6f2b119defb573423" [[files]] file = "config/ftbquests/quests/chapters/southwold.snbt" -hash = "7bec07cf30f2b218e7d89b617fb61f7077f692fe570694bb70aef8067052511a" +hash = "b3efaa514904c55f711c6c2565825bdd4866ce291e4810d975d1afc31d167f97" [[files]] file = "config/ftbquests/quests/chapters/sunscorch.snbt" -hash = "a975e58e4576456b574da8b51e76dc9f7f2e2c148c2c98a1af35469c522528b2" +hash = "f936a44de913816a869f29797f82f43c65f57e3f8b78cbe1d69aa1e98b76d136" [[files]] file = "config/ftbquests/quests/chapters/the_end.snbt" @@ -102,7 +102,7 @@ hash = "4a3aa5f1e3bed52e6c844284dec549367af01d4341aeefa460cdc135e2fba660" [[files]] file = "config/ftbquests/quests/chapters/westmarch.snbt" -hash = "d37a2c7743a9f38993c8d0d38f2f9c056bc760b68d04ea8bd91cc122e52e5d99" +hash = "8d9922fce0f84d0a3192eefb6924a17849c875a52144f6f032951e2d1137b4b5" [[files]] file = "config/ftbquests/quests/data.snbt" @@ -138,7 +138,7 @@ hash = "a6e9d717e2f73e463b25b1eacfbff43304fd8993937d8c002f9629f24ebcc221" [[files]] file = "config/regenerating_ore_veins/veins.json" -hash = "64053793b807d0376d14d418c35aadad712fa19c0c7e626620006047149106dc" +hash = "0b8bbd74b43ecd85183481405cfa80ec20c421ae41166b237463149b1c77d94e" [[files]] file = "config/worldgen_editor/presets/cobblesurvival_island.json" @@ -160,6 +160,14 @@ hash = "37f7469789d281cbd2ab40f483914eec29f5c82e2c3575854cd276f3296ebb24" file = "kubejs/assets/cobblesurvival/textures/item/revival_charm.png" hash = "084c0a7b17bb429c317843a7c45096dc8cb1ab61c748293475c1f3d6a5984086" +[[files]] +file = "kubejs/assets/regenerating_ore_veins/models/block/regenerator_block.json" +hash = "1ae6a922c225ec2e41778055975fb1b2f2fe1d72e6fa150c07a282743dd7531d" + +[[files]] +file = "kubejs/assets/regenerating_ore_veins/textures/block/regenerator_glass.png" +hash = "a92836513b16f1d5b872c8a3f888c5f340762bb2a9a3d54b56d5ef2a3fe44426" + [[files]] file = "kubejs/server_scripts/healing_machine.js" hash = "6b1b127b16a87b846a5abdbdb442edb8cbd9386562081309a3808eed1325ed1e" diff --git a/pack/kubejs/assets/regenerating_ore_veins/models/block/regenerator_block.json b/pack/kubejs/assets/regenerating_ore_veins/models/block/regenerator_block.json new file mode 100644 index 0000000..c5bb670 --- /dev/null +++ b/pack/kubejs/assets/regenerating_ore_veins/models/block/regenerator_block.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:block/block", + "render_type": "translucent", + "textures": { + "particle": "regenerating_ore_veins:block/regenerator_glass", + "glass": "regenerating_ore_veins:block/regenerator_glass" + }, + "elements": [ + { + "from": [ + 1, + 1, + 1 + ], + "to": [ + 15, + 15, + 15 + ], + "faces": { + "down": { + "texture": "#glass", + "cullface": "down", + "tintindex": 0 + }, + "up": { + "texture": "#glass", + "cullface": "up", + "tintindex": 0 + }, + "north": { + "texture": "#glass", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "texture": "#glass", + "cullface": "south", + "tintindex": 0 + }, + "west": { + "texture": "#glass", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "texture": "#glass", + "cullface": "east", + "tintindex": 0 + } + } + } + ] +} diff --git a/pack/kubejs/assets/regenerating_ore_veins/textures/block/regenerator_glass.png b/pack/kubejs/assets/regenerating_ore_veins/textures/block/regenerator_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..cecbb6b2e41911940bb6a03158f962d57ec3c54a GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7%spKkLn`JZ@2UISC(X>- z(AwD8`0(-Ze(@6*&zwJ>f54^lEe{V5&tkS7DT6EqmJJ3D#iBde7#MEYum|qFe=UZA Pfq}u()z4*}Q$iB}@+l*W literal 0 HcmV?d00001 diff --git a/pack/pack.toml b/pack/pack.toml index 5914c27..32bc577 100644 --- a/pack/pack.toml +++ b/pack/pack.toml @@ -6,7 +6,7 @@ pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" -hash = "8016bb0599908a11ee19680f1dccf1a7c13aa36d7012a0f1eb4cbad37e0756f8" +hash = "b5cad59e6cdca6b6c84dcdad5237f284d5a4626f63ffe20f64b814ac462f7ef5" [versions] minecraft = "1.21.1" diff --git a/tools/zone_spawns.py b/tools/zone_spawns.py index 0ff9d62..6d14298 100755 --- a/tools/zone_spawns.py +++ b/tools/zone_spawns.py @@ -37,6 +37,8 @@ datapacks/core/data/cobblesurvival/spawn_pool_world/.json: its stages fitted to the band as in 2. The entries go into "bucket" (Cobblemon rolls the bucket first, and its End entries are all uncommon or rare), the heaviest of each line weighing "line_weight", Cobblemon's rare ones "rare_factor" of that. + 8. world/zones.json → "homeless" gives the lines that have no matching biome on the island a zone: rare spawns + anywhere in it, at its levels (Adrian, 2026-11-09: every implemented Pokémon must be obtainable). Also writes docs/zone-species.md, the list per zone for review. @@ -370,6 +372,53 @@ def main(): report[did].append((species.get(root, {}).get("name", root), names)) dimension_roots.add(root) + # 5. Lines with no home on the island (Adrian, 2026-11-09: every implemented Pokémon must be obtainable). They only + # spawn in biomes the island lacks, or have no spawn data at all (Rotom), so the field guide can't place them: + # world/zones.json → "homeless" names a zone for each, and they spawn there, anywhere in the zone, in the + # "bucket" at the zone's levels. Everything tied to the missing biomes is left out of the condition. + homeless = plan.get("homeless", {}) + raw_lines = collections.defaultdict(list) + for entry in entries.values(): + if "pokemon" in entry: + member = f"cobblemon:{entry['pokemon'].split()[0].lower()}" + a, _, b = str(entry["level"]).partition("-") + raw_lines[line_root(member, species)].append((entry, member, (int(a), int(b or a)))) + homeless_roots = set() + for zid, roots in homeless.get("zones", {}).items(): + lo, hi = zones[zid]["levels"] + kinds = {"submerged", "surface"} if "water" in zones[zid].get("rule", {}) else {"grounded"} + for name in roots: + root = f"cobblemon:{name}" + items = [i for i in raw_lines[root] if i[0].get("spawnablePositionType") in kinds] + if not items: + # No usable spawn data at all: one plain entry across the band. + items = [({"type": "pokemon", "pokemon": name, "presets": ["natural"], "spawnablePositionType": "grounded"}, root, (lo, hi))] + fitting = [(e, m, max(lv[0], lo), hi) for e, m, lv in items if lv[0] <= hi and lv[1] >= lo] + if not fitting: + _, m, lv = min(items, key=lambda u: min(abs(u[2][0] - hi), abs(u[2][1] - lo))) + fitting = [(e, um, lo, hi) for e, um, ulv in items if um == m and ulv == lv] + seen = set() + for entry, member, a, b in fitting: + key = (member, entry.get("spawnablePositionType")) + if key in seen: + continue + seen.add(key) + condition = {"zone": zid} + if "fluid" in entry.get("condition", {}): + condition["fluid"] = entry["condition"]["fluid"] + presets = entry.get("presets", []) + if zid in cave_zones: + condition["biomes"] = [cave_biome[zid]] + presets = [x for x in presets if x != "natural"] + pools[zid].append({ + "id": f"{zid}-{member.split(':')[1]}-{len(pools[zid])}", "type": "pokemon", "pokemon": entry["pokemon"], + "presets": presets, "spawnablePositionType": entry["spawnablePositionType"], "bucket": homeless["bucket"], + "level": f"{a}-{b}", "weight": homeless["weight"], "condition": condition, + }) + names = sorted({species[m]["name"] for _, m, _, _ in fitting if m in species}) + report[zid].append((species.get(root, {}).get("name", root), names)) + homeless_roots.add(root) + low_flyers = [(zid, s["pokemon"]) for zid, spawns in pools.items() for s in spawns if zones[zid]["levels"][0] < HIGH_ZONE_LEVEL and f"cobblemon:{s['pokemon'].split()[0].lower()}" in strong_flyers] if low_flyers: @@ -430,7 +479,7 @@ def main(): f"| {zone['levels'][1] + GUARDIAN_LEVELS_ABOVE_BAND} | {drop_text} |") REPORT.write_text("\n".join(lines_out) + "\n") - unplaced = [r for r in lines if r not in home and r not in dimension_roots] + unplaced = [r for r in lines if r not in home and r not in dimension_roots and r not in homeless_roots] grounded = sorted(species.get(r, {}).get("name", r) for r in unplaced if r in flying_lines) if grounded: print(f"strong flyers kept out of the wild (no high zone fits their habitat): {', '.join(grounded)}") diff --git a/world/zones.json b/world/zones.json index 7604eaf..4475f33 100644 --- a/world/zones.json +++ b/world/zones.json @@ -7,27 +7,27 @@ "wanderers": {"grace_levels": 10}, "ore_defaults": {"fill": 0.7, "node_fill": 0.8, "attempts": 1, "jitter": 0.1}, "ores": { - "coal": {"zone": "button_isle", "item": "minecraft:coal", "stone": "minecraft:coal_ore", "deepslate": "minecraft:deepslate_coal_ore", "regen_minutes": 20, "nodes": {"chance": 0.5, "radius": [0, 1]}, "veins": {"radius": [2, 4], "y": [-32, 100], "spacing": 6, "attempts": 2}}, - "copper": {"zone": "southwold", "item": "minecraft:raw_copper", "stone": "minecraft:copper_ore", "deepslate": "minecraft:deepslate_copper_ore", "regen_minutes": 30, "nodes": {"chance": 0.2, "radius": [0, 1]}, "veins": {"radius": [2, 4], "y": [-32, 100], "spacing": 8, "attempts": 2}}, - "iron": {"zone": "westmarch", "item": "minecraft:raw_iron", "stone": "minecraft:iron_ore", "deepslate": "minecraft:deepslate_iron_ore", "regen_minutes": 40, "nodes": {"chance": 0.2, "radius": [0, 1]}, "veins": {"radius": [2, 4], "y": [-48, 90], "spacing": 8, "attempts": 2}}, - "redstone": {"zone": "jungle", "item": "minecraft:redstone", "stone": "minecraft:redstone_ore", "deepslate": "minecraft:deepslate_redstone_ore", "regen_minutes": 45, "nodes": {"chance": 0.2, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-56, 60], "spacing": 9, "attempts": 1}}, - "lapis": {"zone": "highlands", "item": "minecraft:lapis_lazuli", "stone": "minecraft:lapis_ore", "deepslate": "minecraft:deepslate_lapis_ore", "regen_minutes": 45, "nodes": {"chance": 0.15, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-56, 80], "spacing": 9, "attempts": 1}}, - "gold": {"zone": "sunscorch", "item": "minecraft:raw_gold", "stone": "minecraft:gold_ore", "deepslate": "minecraft:deepslate_gold_ore", "regen_minutes": 60, "nodes": {"chance": 0.3, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-48, 120], "spacing": 7, "attempts": 2}}, - "emerald": {"zone": "frostpeak", "item": "minecraft:emerald", "stone": "minecraft:emerald_ore", "deepslate": "minecraft:deepslate_emerald_ore", "regen_minutes": 75, "nodes": {"chance": 0.15, "radius": [0, 1]}, "veins": {"radius": [1, 2], "y": [-16, 320], "spacing": 8, "attempts": 2}}, - "amethyst": {"zone": "dripstone", "item": "minecraft:amethyst_shard", "blocks": [["minecraft:amethyst_block", 3], ["minecraft:budding_amethyst", 1]], "regen_minutes": 120, "nodes": {"chance": 0.5, "tries": 8, "radius": [1, 1], "y": [0, 40]}}, - "diamond": {"zone": "deep_dark", "item": "minecraft:diamond", "deepslate": "minecraft:deepslate_diamond_ore", "regen_minutes": 90, "nodes": {"chance": 0.15, "tries": 8, "radius": [1, 1], "y": [-64, -24]}}, - "quartz": {"zone": "basalt", "item": "minecraft:quartz", "blocks": [["minecraft:nether_quartz_ore", 1]], "regen_minutes": 60, "nodes": {"chance": 0.5, "tries": 8, "radius": [1, 1], "y": [-64, 40]}}, - "netherite": {"zone": "basalt", "item": "minecraft:ancient_debris", "blocks": [["minecraft:ancient_debris", 1]], "regen_minutes": 180, "nodes": {"chance": 0.06, "tries": 8, "radius": [0, 0], "y": [-64, 40]}}, - "thunder_stone": {"zone": "westmarch", "item": "cobblemon:thunder_stone", "stone": "cobblemon:thunder_stone_ore", "deepslate": "cobblemon:deepslate_thunder_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.03, "radius": [0, 0]}, "veins": {"radius": [1, 2], "y": [-48, 100], "spacing": 11, "attempts": 1}}, - "shiny_stone": {"zone": "lush_caves", "item": "cobblemon:shiny_stone", "stone": "cobblemon:shiny_stone_ore", "deepslate": "cobblemon:deepslate_shiny_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.15, "tries": 8, "radius": [0, 1], "y": [-16, 40]}}, - "leaf_stone": {"zone": "jungle", "item": "cobblemon:leaf_stone", "stone": "cobblemon:leaf_stone_ore", "deepslate": "cobblemon:deepslate_leaf_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.04, "radius": [0, 0]}, "veins": {"radius": [1, 2], "y": [-48, 100], "spacing": 11, "attempts": 1}}, - "water_stone": {"zone": "mire", "item": "cobblemon:water_stone", "stone": "cobblemon:water_stone_ore", "deepslate": "cobblemon:deepslate_water_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.04, "radius": [0, 0]}, "veins": {"radius": [1, 2], "y": [-48, 100], "spacing": 11, "attempts": 1}}, - "moon_stone": {"zone": "dripstone", "item": "cobblemon:moon_stone", "blocks": [["cobblemon:dripstone_moon_stone_ore", 1], ["cobblemon:moon_stone_ore", 1], ["cobblemon:deepslate_moon_stone_ore", 1]], "regen_minutes": 60, "nodes": {"chance": 0.25, "tries": 8, "radius": [0, 1], "y": [0, 40]}}, - "sun_stone": {"zone": "highlands", "item": "cobblemon:sun_stone", "stone": "cobblemon:sun_stone_ore", "deepslate": "cobblemon:deepslate_sun_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.02, "radius": [0, 0]}, "veins": {"radius": [1, 2], "y": [-48, 100], "spacing": 11, "attempts": 1}}, - "fire_stone": {"zone": "sunscorch", "item": "cobblemon:fire_stone", "stone": "cobblemon:fire_stone_ore", "deepslate": "cobblemon:deepslate_fire_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.08, "radius": [0, 0]}, "veins": {"radius": [1, 2], "y": [-48, 120], "spacing": 9, "attempts": 2}}, - "ice_stone": {"zone": "frostpeak", "item": "cobblemon:ice_stone", "stone": "cobblemon:ice_stone_ore", "deepslate": "cobblemon:deepslate_ice_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.06, "radius": [0, 0]}, "veins": {"radius": [1, 2], "y": [-16, 320], "spacing": 9, "attempts": 2}}, - "dawn_stone": {"zone": "frostpeak", "item": "cobblemon:dawn_stone", "stone": "cobblemon:dawn_stone_ore", "deepslate": "cobblemon:deepslate_dawn_stone_ore", "regen_minutes": 75, "nodes": {"chance": 0.04, "radius": [0, 0]}, "veins": {"radius": [1, 2], "y": [-16, 320], "spacing": 10, "attempts": 2}}, - "dusk_stone": {"zone": "deep_dark", "item": "cobblemon:dusk_stone", "deepslate": "cobblemon:deepslate_dusk_stone_ore", "regen_minutes": 75, "nodes": {"chance": 0.1, "tries": 8, "radius": [0, 1], "y": [-64, -24]}} + "coal": {"zone": "button_isle", "item": "minecraft:coal", "stone": "minecraft:coal_ore", "deepslate": "minecraft:deepslate_coal_ore", "regen_minutes": 20, "nodes": {"chance": 0.3, "radius": [1, 2]}, "veins": {"radius": [3, 5], "y": [-32, 100], "spacing": 8, "attempts": 2}}, + "copper": {"zone": "southwold", "item": "minecraft:raw_copper", "stone": "minecraft:copper_ore", "deepslate": "minecraft:deepslate_copper_ore", "regen_minutes": 30, "nodes": {"chance": 0.12, "radius": [1, 2]}, "veins": {"radius": [3, 5], "y": [-32, 100], "spacing": 10, "attempts": 2}}, + "iron": {"zone": "westmarch", "item": "minecraft:raw_iron", "stone": "minecraft:iron_ore", "deepslate": "minecraft:deepslate_iron_ore", "regen_minutes": 40, "nodes": {"chance": 0.12, "radius": [1, 2]}, "veins": {"radius": [3, 5], "y": [-48, 90], "spacing": 10, "attempts": 2}}, + "redstone": {"zone": "jungle", "item": "minecraft:redstone", "stone": "minecraft:redstone_ore", "deepslate": "minecraft:deepslate_redstone_ore", "regen_minutes": 45, "nodes": {"chance": 0.12, "radius": [1, 2]}, "veins": {"radius": [3, 4], "y": [-56, 60], "spacing": 12, "attempts": 1}}, + "lapis": {"zone": "highlands", "item": "minecraft:lapis_lazuli", "stone": "minecraft:lapis_ore", "deepslate": "minecraft:deepslate_lapis_ore", "regen_minutes": 45, "nodes": {"chance": 0.09, "radius": [1, 2]}, "veins": {"radius": [3, 4], "y": [-56, 80], "spacing": 12, "attempts": 1}}, + "gold": {"zone": "sunscorch", "item": "minecraft:raw_gold", "stone": "minecraft:gold_ore", "deepslate": "minecraft:deepslate_gold_ore", "regen_minutes": 60, "nodes": {"chance": 0.18, "radius": [1, 2]}, "veins": {"radius": [3, 4], "y": [-48, 120], "spacing": 9, "attempts": 2}}, + "emerald": {"zone": "frostpeak", "item": "minecraft:emerald", "stone": "minecraft:emerald_ore", "deepslate": "minecraft:deepslate_emerald_ore", "regen_minutes": 75, "nodes": {"chance": 0.09, "radius": [1, 2]}, "veins": {"radius": [2, 3], "y": [-16, 320], "spacing": 10, "attempts": 2}}, + "amethyst": {"zone": "dripstone", "item": "minecraft:amethyst_shard", "blocks": [["minecraft:amethyst_block", 3], ["minecraft:budding_amethyst", 1]], "regen_minutes": 120, "nodes": {"chance": 0.3, "tries": 8, "radius": [1, 2], "y": [0, 40]}}, + "diamond": {"zone": "deep_dark", "item": "minecraft:diamond", "deepslate": "minecraft:deepslate_diamond_ore", "regen_minutes": 90, "nodes": {"chance": 0.09, "tries": 8, "radius": [1, 2], "y": [-64, -24]}}, + "quartz": {"zone": "basalt", "item": "minecraft:quartz", "blocks": [["minecraft:nether_quartz_ore", 1]], "regen_minutes": 60, "nodes": {"chance": 0.3, "tries": 8, "radius": [1, 2], "y": [-64, 40]}}, + "netherite": {"zone": "basalt", "item": "minecraft:ancient_debris", "blocks": [["minecraft:ancient_debris", 1]], "regen_minutes": 180, "nodes": {"chance": 0.036, "tries": 8, "radius": [0, 1], "y": [-64, 40]}}, + "thunder_stone": {"zone": "westmarch", "item": "cobblemon:thunder_stone", "stone": "cobblemon:thunder_stone_ore", "deepslate": "cobblemon:deepslate_thunder_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.018, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-48, 100], "spacing": 14, "attempts": 1}}, + "shiny_stone": {"zone": "lush_caves", "item": "cobblemon:shiny_stone", "stone": "cobblemon:shiny_stone_ore", "deepslate": "cobblemon:deepslate_shiny_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.09, "tries": 8, "radius": [1, 2], "y": [-16, 40]}}, + "leaf_stone": {"zone": "jungle", "item": "cobblemon:leaf_stone", "stone": "cobblemon:leaf_stone_ore", "deepslate": "cobblemon:deepslate_leaf_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.024, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-48, 100], "spacing": 14, "attempts": 1}}, + "water_stone": {"zone": "mire", "item": "cobblemon:water_stone", "stone": "cobblemon:water_stone_ore", "deepslate": "cobblemon:deepslate_water_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.024, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-48, 100], "spacing": 14, "attempts": 1}}, + "moon_stone": {"zone": "dripstone", "item": "cobblemon:moon_stone", "blocks": [["cobblemon:dripstone_moon_stone_ore", 1], ["cobblemon:moon_stone_ore", 1], ["cobblemon:deepslate_moon_stone_ore", 1]], "regen_minutes": 60, "nodes": {"chance": 0.15, "tries": 8, "radius": [1, 2], "y": [0, 40]}}, + "sun_stone": {"zone": "highlands", "item": "cobblemon:sun_stone", "stone": "cobblemon:sun_stone_ore", "deepslate": "cobblemon:deepslate_sun_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.012, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-48, 100], "spacing": 14, "attempts": 1}}, + "fire_stone": {"zone": "sunscorch", "item": "cobblemon:fire_stone", "stone": "cobblemon:fire_stone_ore", "deepslate": "cobblemon:deepslate_fire_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.048, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-48, 120], "spacing": 12, "attempts": 2}}, + "ice_stone": {"zone": "frostpeak", "item": "cobblemon:ice_stone", "stone": "cobblemon:ice_stone_ore", "deepslate": "cobblemon:deepslate_ice_stone_ore", "regen_minutes": 60, "nodes": {"chance": 0.036, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-16, 320], "spacing": 12, "attempts": 2}}, + "dawn_stone": {"zone": "frostpeak", "item": "cobblemon:dawn_stone", "stone": "cobblemon:dawn_stone_ore", "deepslate": "cobblemon:deepslate_dawn_stone_ore", "regen_minutes": 75, "nodes": {"chance": 0.024, "radius": [0, 1]}, "veins": {"radius": [2, 3], "y": [-16, 320], "spacing": 13, "attempts": 2}}, + "dusk_stone": {"zone": "deep_dark", "item": "cobblemon:dusk_stone", "deepslate": "cobblemon:deepslate_dusk_stone_ore", "regen_minutes": 75, "nodes": {"chance": 0.06, "tries": 8, "radius": [1, 2], "y": [-64, -24]}} }, "species": {"durant": "basalt", "torkoal": "basalt", "heatmor": "basalt", "ditto": {"zone": "deep_dark", "all_entries": true}}, @@ -79,6 +79,24 @@ {"id": "deep_dark", "types": ["ghost", "dark", "steel", "poison", "psychic", "rock"], "guardian": {"species": "regigigas", "drops": [["cobblemon:icy_rock", 3], ["cobblemon:exp_candy_l", 2]]}, "lines": 21, "name": "Deep Dark", "biome": "minecraft:deep_dark", "levels": [45, 60], "hazard": "darkness (vanilla sculk; no Warden)"}, {"id": "basalt", "types": ["fire", "rock", "ground", "steel", "dark"], "guardian": {"species": "moltres", "drops": [["cobblemon:exp_candy_xl", 3], ["minecraft:netherite_scrap", 2]]}, "lines": 15, "name": "Basalt Furnace", "biome": "minecraft:basalt_deltas", "levels": [55, 70], "hazard": "heat (Cold Sweat)"} ], + "homeless": { + "_comment": "Adrian, 2026-11-09: every implemented Pokemon must be obtainable. These lines only spawn in biomes the island doesn't have (savanna, frozen ocean, mushroom fields, ...), or not at all (Rotom). Each gets a home in the zone closest to its habitat, as a rare spawn at the zone's levels, on top of the zone's own lines (tools/zone_spawns.py).", + "bucket": "rare", "weight": 10, + "zones": { + "southwold": ["nidoranf", "nidoranm", "smoliv"], + "lush_caves": ["foongus"], + "westmarch": ["dedenne", "emolga", "pineco", "rotom"], + "jungle": ["komala", "pancham", "stufful"], + "dripstone": ["aron"], + "highlands": ["blitzle", "doduo"], + "mire": ["hatenna", "toedscool"], + "sunscorch": ["girafarig", "kangaskhan", "litleo"], + "deep_sea": ["piplup", "seel", "spheal"], + "frostpeak": ["bergmite", "cetoddle", "cubchoo", "eiscue", "stantler", "swinub"], + "deep_dark": ["impidimp", "litwick"], + "basalt": ["charcadet"] + } + }, "dimensions": [ {"id": "the_end", "name": "The End", "dimension": "minecraft:the_end", "levels": [50, 70], "hazard": "none", "biome_tags": ["#cobblemon:is_end", "#minecraft:is_end"],