From 88894458c47917e6612aae3aa1345c849554cddc Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Sun, 20 Apr 2025 01:23:37 +0200 Subject: [PATCH 01/45] [Draft] Add ore generation --- finders.c | 612 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ finders.h | 164 +++++++++++++++ rng.h | 5 + 3 files changed, 781 insertions(+) diff --git a/finders.c b/finders.c index 783d5ecc..1d5866c7 100644 --- a/finders.c +++ b/finders.c @@ -8,9 +8,23 @@ #include #include +#include "util.h" + +// https://c-faq.com/misc/bitsets.html +#define BITMASK(b) (1 << ((b) % CHAR_BIT)) +#define BITSLOT(b) ((b) / CHAR_BIT) +#define BITSET(a, b) ((a)[BITSLOT(b)] |= BITMASK(b)) +#define BITCLEAR(a, b) ((a)[BITSLOT(b)] &= ~BITMASK(b)) +#define BITTEST(a, b) ((a)[BITSLOT(b)] & BITMASK(b)) +#define BITNSLOTS(nb) ((nb + CHAR_BIT - 1) / CHAR_BIT) #define PI 3.14159265358979323846 +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + +#define MAX_ORE_COUNT 100 + //============================================================================== // Finding Structure Positions @@ -54,6 +68,18 @@ uint64_t getPopulationSeed(int mc, uint64_t ws, int x, int z) return (x * a + z * b) ^ ws; } +uint64_t getDecoratorSeed(int mc, uint64_t ws, int x, int z, int salt) +{ + if (mc <= MC_1_12) { + fprintf(stderr, "getDecoratorSeed: not existent for version %s.\n", mc2str(mc)); + exit(1); + } + uint64_t populationSeed = getPopulationSeed(mc, ws, x, z); + uint64_t seed; + setSeed(&seed, populationSeed + salt); + return seed; +} + int getStructureConfig(int structureType, int mc, StructureConfig *sconf) { @@ -1172,7 +1198,593 @@ Pos getSpawn(const Generator *g) return spawn; } +//============================================================================== +// Simulating ore generation +//============================================================================== + +static const uint32_t BASE_STONE_OVERWORLD_REPLACEMENTS[] = {STONE, GRANITE, DIORITE, ANDESITE, DEEPSLATE, TUFF}; +static const uint32_t BASE_STONE_NETHER_REPLACEMENTS[] = {NETHERRACK, BASALT, BLACKSTONE}; +static const uint32_t STONE_REPLACEMENTS[] = {STONE}; +static const uint32_t NETHERRACK_REPLACEMENTS[] = {NETHERRACK}; + +int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) +{ + static const OreConfig + // overworld + o_andesite_113 = {4, 4, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_andesite_116 = {4, 6, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_coal_117 = {7, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_diamond_113 = {9, 4, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_diamond_116 = {9, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_diamond_117 = {11, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_diorite_113 = {3, 4, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_diorite_116 = {3, 6, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_dirt_113 = {0, 4, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_dirt_116 = {0, 6, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEMENTS}, + o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEMENTS}, + o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_gold_113 = {7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_gold_116 = {7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_gold_117 = {9, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_granite_113 = {2, 4, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_granite_116 = {2, 6, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_gravel_113 = {1, 4, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_gravel_116 = {1, 6, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_iron_113 = {6, 4, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_iron_116 = {6, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_iron_117 = {8, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_lapis_113 = {10, 4, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lapis_116 = {10, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lapis_117 = {12, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_redstone_113 = {8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_redstone_116 = {8, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_redstone_117 = {10, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_tuff_117 = {5, 6, 33, 1, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + // nether + o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_blackstone_116_crimson_forest = {9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + + o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + + o_magma_113 = {8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_116 = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_116_soul_sand_valley = {8, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_116_crimson_forest = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_116_warped_forest = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + + o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + + o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gravel_116_crimson_forest = {8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gravel_116_warped_forest = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + + o_quartz_113 = {7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + + o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + + o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS} + ; + + switch (oreType) + { + case AndesiteOre: + if (mc <= MC_1_15) *oconf = o_andesite_113; + else if (mc <= MC_1_17) *oconf = o_andesite_116; + return mc > MC_1_12; + case CoalOre: + if (mc <= MC_1_15) *oconf = o_coal_113; + else if (mc <= MC_1_16) *oconf = o_coal_116; + else if (mc <= MC_1_17) *oconf = o_coal_117; + return mc > MC_1_12; + case CopperOre: + if (mc <= MC_1_17) *oconf = o_copper_117; + return mc > MC_1_16; + case DeepslateOre: + if (mc <= MC_1_17) *oconf = o_deepslate_117; + return mc > MC_1_16; + case DiamondOre: + if (mc <= MC_1_15) *oconf = o_diamond_113; + else if (mc <= MC_1_16) *oconf = o_diamond_116; + else if (mc <= MC_1_17) *oconf = o_diamond_117; + return mc > MC_1_12; + case DioriteOre: + if (mc <= MC_1_15) *oconf = o_diorite_113; + else if (mc <= MC_1_17) *oconf = o_diorite_116; + return mc > MC_1_12; + case DirtOre: + if (mc <= MC_1_15) *oconf = o_dirt_113; + else if (mc <= MC_1_17) *oconf = o_dirt_116; + return mc > MC_1_12; + case EmeraldOre: + if (mc <= MC_1_15) *oconf = o_emerald_113; + else if (mc <= MC_1_16) *oconf = o_emerald_116; + else if (mc <= MC_1_17) *oconf = o_emerald_117; + return mc > MC_1_12; + case ExtraGoldOre: + if (mc <= MC_1_15) *oconf = o_extra_gold_113; + else if (mc <= MC_1_16) *oconf = o_extra_gold_116; + else if (mc <= MC_1_17) *oconf = o_extra_gold_117; + return mc > MC_1_12; + case GoldOre: + if (mc <= MC_1_15) *oconf = o_gold_113; + else if (mc <= MC_1_16) *oconf = o_gold_116; + else if (mc <= MC_1_17) *oconf = o_gold_117; + return mc > MC_1_12; + case GraniteOre: + if (mc <= MC_1_15) *oconf = o_granite_113; + else if (mc <= MC_1_17) *oconf = o_granite_116; + return mc > MC_1_12; + case GravelOre: + if (mc <= MC_1_15) *oconf = o_gravel_113; + else if (mc <= MC_1_17) *oconf = o_gravel_116; + return mc > MC_1_12; + case IronOre: + if (mc <= MC_1_15) *oconf = o_iron_113; + else if (mc <= MC_1_16) *oconf = o_iron_116; + else if (mc <= MC_1_17) *oconf = o_iron_117; + return mc > MC_1_12; + case LapisOre: + if (mc <= MC_1_15) *oconf = o_lapis_113; + else if (mc <= MC_1_16) *oconf = o_lapis_116; + else if (mc <= MC_1_17) *oconf = o_lapis_117; + return mc > MC_1_12; + case RedstoneOre: + if (mc <= MC_1_15) *oconf = o_redstone_113; + else if (mc <= MC_1_16) *oconf = o_redstone_116; + else if (mc <= MC_1_17) *oconf = o_redstone_117; + return mc > MC_1_12; + case TuffOre: + if (mc <= MC_1_17) *oconf = o_tuff_117; + return mc > MC_1_16; + case BlackstoneOre: + if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_blackstone_116_crimson_forest; + else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_blackstone_116_warped_forest; + else if (mc <= MC_1_17) *oconf = o_blackstone_116; + return mc > MC_1_15; + case LargeDebrisOre: + if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_116_crimson_forest; + else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_116_warped_forest; + else if (mc <= MC_1_17) *oconf = o_large_debris_116; + return mc > MC_1_15; + case MagmaOre: + if (mc <= MC_1_15) *oconf = o_magma_113; + else if (mc <= MC_1_17 && biomeID == soul_sand_valley) *oconf = o_magma_116_soul_sand_valley; + else if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_magma_116_crimson_forest; + else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_magma_116_warped_forest; + else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_magma_116_basalt_deltas; + else if (mc <= MC_1_17) *oconf = o_magma_116; + return mc > MC_1_12; + case NetherGoldOre: + if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gold_116_crimson_forest; + else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_116_warped_forest; + else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_nether_gold_116_basalt_deltas; + else if (mc <= MC_1_17) *oconf = o_nether_gold_116; + return mc > MC_1_15; + case NetherGravelOre: + if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gravel_116_crimson_forest; + else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gravel_116_warped_forest; + else if (mc <= MC_1_17) *oconf = o_nether_gravel_116; + return mc > MC_1_15; + case QuartzOre: + if (mc <= MC_1_15) *oconf = o_quartz_113; + else if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_quartz_116_crimson_forest; + else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_quartz_116_warped_forest; + else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_quartz_116_basalt_deltas; + else if (mc <= MC_1_17) *oconf = o_quartz_116; + return mc > MC_1_12; + case SmallDebrisOre: + if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_116_crimson_forest; + else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_small_debris_116_warped_forest; + else if (mc <= MC_1_17) *oconf = o_small_debris_116; + return mc > MC_1_15; + case SoulSandOre: + if (mc <= MC_1_17) *oconf = o_soul_sand_116; + return mc > MC_1_15; + default: + memset(oconf, 0, sizeof(OreConfig)); + return 0; + } +} + +int isViableOreBiome(int mc, int oreType, int biomeID) +{ + switch (oreType) + { + // overworld + case AndesiteOre: + case CoalOre: + case CopperOre: + case DeepslateOre: + case DiamondOre: + case DioriteOre: + case DirtOre: + case GoldOre: + case GraniteOre: + case GravelOre: + case IronOre: + case LapisOre: + case RedstoneOre: + case TuffOre: + return isOverworld(mc, biomeID); + case EmeraldOre: + return (biomeID == mountains || biomeID == mountain_edge || biomeID == wooded_mountains || + biomeID == gravelly_mountains || biomeID == modified_gravelly_mountains); + case ExtraGoldOre: + return (biomeID == badlands || biomeID == wooded_badlands_plateau || biomeID == badlands_plateau || + biomeID == eroded_badlands || biomeID == modified_wooded_badlands_plateau || biomeID == modified_badlands_plateau); + // nether + case LargeDebrisOre: + case MagmaOre: + case NetherGoldOre: + case QuartzOre: + case SmallDebrisOre: + return getDimension(biomeID) == DIM_NETHER; + case BlackstoneOre: + case NetherGravelOre: + return (biomeID == nether_wastes || biomeID == soul_sand_valley || + biomeID == crimson_forest || biomeID == warped_forest); + case SoulSandOre: + return biomeID == soul_sand_valley; + default: + fprintf(stderr, "isViableOreBiome: not implemented for ore type %d.\n", oreType); + exit(1); + } + return 0; +} + +int getBiomeForOreGen(const Generator *g, int chunkX, int chunkZ) +{ + if (g->mc <= MC_1_15) { + return getBiomeAt(g, 1, (chunkX << 4) + 8, 0, (chunkZ << 4) + 8); + } + return getBiomeAt(g, 4, (chunkX << 2) + 2, 0, (chunkZ << 2) + 2); +} + +SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ) +{ + uint64_t seed = getDecoratorSeed(g->mc, g->seed, chunkX << 4, chunkZ << 4, config.index + 10000 * config.step); + + int repeatCount = config.repeatCount; + int size = MAX_ORE_COUNT; + Pos3* positions = malloc(size * sizeof(Pos3)); + int posIndex = 0; + + for (int i = 0; i < repeatCount; i++) { + Pos3 basePos = generateBaseOrePosition(g->mc, config, chunkX, chunkZ, &seed); + SizedPos3 orePositions = generateOrePositions(g->mc, config, basePos, &seed); + + if (posIndex + orePositions.size > size) { + size = posIndex + orePositions.size; + Pos3* temp = realloc(positions, size * sizeof(Pos3)); + if (!temp) { + fprintf(stderr, "Memory allocation failed.\n"); + free(positions); + exit(1); + } + positions = temp; + } + + for (int j = 0; j < orePositions.size; j++) { + positions[posIndex++] = orePositions.pos3s[j]; + } + } + return (SizedPos3) {posIndex, positions}; +} + +Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, uint64_t *seed) +{ + if (config.oreType == EmeraldOre) { + return (Pos3) {chunkX << 4, 0, chunkZ << 4}; + } + if (mc <= MC_1_14) { + int blockX = (chunkX << 4) + nextInt(seed, 16); + int blockY = getOreYPos(mc, config.oreType, seed); + int blockZ = (chunkZ << 4) + nextInt(seed, 16); + return (Pos3) {blockX, blockY, blockZ}; + } else { + int blockX = (chunkX << 4) + nextInt(seed, 16); + int blockZ = (chunkZ << 4) + nextInt(seed, 16); + int blockY = getOreYPos(mc, config.oreType, seed); + return (Pos3) {blockX, blockY, blockZ}; + } +} + +int getOreYPos(int mc, int oreType, uint64_t *seed) +{ + switch (oreType) { + // overworld + case AndesiteOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 80); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 79); + break; + case CoalOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 128); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 127); + break; + case CopperOre: + if (mc <= MC_1_17) return providerTriangleRange(seed, 0, 96); + break; + case DeepslateOre: + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 16); + break; + case DiamondOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 16); + // was 16 in 1.17, changed to 15 in 1.17.1 + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 15); + break; + case DioriteOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 80); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 79); + break; + case DirtOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 256); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 255); + break; + case EmeraldOre: + if (mc <= MC_1_16) return nextInt(seed, 28) + 4; + if (mc <= MC_1_17) return providerUniformRange(seed, 4, 31); + break; + case ExtraGoldOre: + if (mc <= MC_1_16) return providerRange(seed, 32, 32, 80); + if (mc <= MC_1_17) return providerUniformRange(seed, 32, 79); + break; + case GoldOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 32); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 31); + break; + case GraniteOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 80); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 79); + break; + case GravelOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 256); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 255); + break; + case IronOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 64); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 63); + break; + case LapisOre: + if (mc <= MC_1_16) return providerDepthAverage(seed, 16, 16); + if (mc <= MC_1_17) return providerTriangleRange(seed, 0, 30); + break; + case RedstoneOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 16); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 15); + break; + case TuffOre: + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 16); + break; + // nether + case BlackstoneOre: + if (mc <= MC_1_16) return providerRange(seed, 5, 10, 37); + if (mc <= MC_1_17) return providerUniformRange(seed, 5, 31); + break; + case LargeDebrisOre: + if (mc <= MC_1_16) return providerDepthAverage(seed, 16, 8); + if (mc <= MC_1_17) return providerTriangleRange(seed, 8, 24); + break; + case MagmaOre: + if (mc <= MC_1_16) return 32 - 5 + nextInt(seed, 10); + if (mc <= MC_1_17) return providerUniformRange(seed, 27, 36); + break; + case NetherGoldOre: + if (mc <= MC_1_16) return providerRange(seed, 10, 20, 128); + if (mc <= MC_1_17) return providerUniformRange(seed, 10, 117); + break; + case NetherGravelOre: + if (mc <= MC_1_16) return providerRange(seed, 5, 0, 37); + if (mc <= MC_1_17) return providerUniformRange(seed, 5, 41); + break; + case QuartzOre: + if (mc <= MC_1_16) return providerRange(seed, 10, 20, 128); + if (mc <= MC_1_17) return providerUniformRange(seed, 10, 117); + break; + case SmallDebrisOre: + if (mc <= MC_1_16) return providerRange(seed, 8, 16, 128); + if (mc <= MC_1_17) return providerUniformRange(seed, 8, 119); + break; + case SoulSandOre: + if (mc <= MC_1_16) return providerRange(seed, 0, 0, 32); + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 31); + break; + default: + fprintf(stderr, "getOreYPos: not implemented for ore type %d.\n", oreType); + exit(1); + } + return 0; +} + +SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, uint64_t *seed) +{ + if (config.oreType == EmeraldOre) { + int count; + if (mc <= MC_1_16) { + count = 3 + nextInt(seed, 6); + } else { + // was 6, 24 in 1.17, changed to 3, 8 in 1.17.1 + count = nextIntBetween(seed, 3, 8); + } + Pos3* poses = malloc(count * sizeof(Pos3)); + for (int i = 0; i < count; i++) { + if (mc <= MC_1_14) { + int x = pos.x + nextInt(seed, 16); + int y = getOreYPos(mc, EmeraldOre, seed); + int z = pos.z + nextInt(seed, 16); + poses[i] = (Pos3) {x, y, z}; + } else { + int x = pos.x + nextInt(seed, 16); + int z = pos.z + nextInt(seed, 16); + int y = getOreYPos(mc, EmeraldOre, seed); + poses[i] = (Pos3) {x, y, z}; + } + } + return (SizedPos3) {count, poses}; + } + + // scatter + if (config.oreType == LargeDebrisOre || config.oreType == SmallDebrisOre) { + int count = nextInt(seed, config.size + 1); + Pos3* poses = malloc(count * sizeof(Pos3)); + for (int i = 0; i < count; ++i) { + int size = MIN(i, 7); + int x = roundf((nextFloat(seed) - nextFloat(seed)) * (float)size); + int y = roundf((nextFloat(seed) - nextFloat(seed)) * (float)size); + int z = roundf((nextFloat(seed) - nextFloat(seed)) * (float)size); + Pos3 startPos = (Pos3) {pos.x + x, pos.y + y, pos.z + z}; + + // TODO: check if the block at startPos is contained in config.replaceBlocks + // TODO: and if the block at startPos is not air-exposed + if (1) { + poses[i] = startPos; + } + } + + return (SizedPos3) {count, poses}; + } + + // regular + float angle = nextFloat(seed) * (float)PI; + float size = (float)config.size / 8.0F; + int amortizedSize = ceil(((float)config.size / 16.0F * 2.0F + 1.0F) / 2.0F); + double offsetXPos = (double)pos.x + sin(angle) * (double)size; + double offsetXNeg = (double)pos.x - sin(angle) * (double)size; + double offsetZPos = (double)pos.z + cos(angle) * (double)size; + double offsetZNeg = (double)pos.z - cos(angle) * (double)size; + double offsetYPos = pos.y + nextInt(seed, 3) - 2; + double offsetYNeg = pos.y + nextInt(seed, 3) - 2; + int startX = pos.x - ceil(size) - amortizedSize; + int startY = pos.y - 2 - amortizedSize; + int startZ = pos.z - ceil(size) - amortizedSize; + int oreSize = 2 * (ceil(size) + amortizedSize); + int radius = 2 * (2 + amortizedSize); + + for (int x = startX; x <= startX + oreSize; ++x) { + for (int z = startZ; z <= startZ + oreSize; ++z) { + // TODO: check if startY <= first y value in column that is motion blocking (Heightmap.Types#OCEAN_FLOOR_WG) + if (1) { + return generateVeinPart(config, seed, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); + } + } + } + + return (SizedPos3) {0, NULL}; +} + +SizedPos3 generateVeinPart(OreConfig config, uint64_t *seed, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius) +{ + Pos3* poses = malloc(100 * sizeof(Pos3)); + int posIndex = 0; + char bitSet[BITNSLOTS(oreSize * radius * oreSize)]; + int size = config.size; + double* store = malloc(4 * size * sizeof(double)); + + for (int i = 0; i < size; ++i) { + float percent = (float)i / (float)size; + double x = lerp(percent, offsetXPos, offsetXNeg); + double y = lerp(percent, offsetYPos, offsetYNeg); + double z = lerp(percent, offsetZPos, offsetZNeg); + double length = nextDouble(seed) * (double)size / 16.0; + double offset = ((sin((float)PI * percent) + 1.0F) * length + 1.0) / 2.0; + store[i * 4] = x; + store[i * 4 + 1] = y; + store[i * 4 + 2] = z; + store[i * 4 + 3] = offset; + } + + for (int i = 0; i < size - 1; ++i) { + if (store[i * 4 + 3] <= 0.0) continue; + for (int j = i + 1; j < size; ++j) { + if (store[j * 4 + 3] <= 0.0) continue; + double diffX = store[i * 4] - store[j * 4]; + double diffY = store[i * 4 + 1] - store[j * 4 + 1]; + double diffZ = store[i * 4 + 2] - store[j * 4 + 2]; + double offset = store[i * 4 + 3] - store[j * 4 + 3]; + if (offset * offset <= diffX * diffX + diffY * diffY + diffZ * diffZ) continue; + if (offset > 0.0) { + store[j * 4 + 3] = -1.0; + } else { + store[i * 4 + 3] = -1.0; + } + } + } + + for (int i = 0; i < size; ++i) { + double offset = store[i * 4 + 3]; + if (offset < 0.0) continue; + double x = store[i * 4]; + double y = store[i * 4 + 1]; + double z = store[i * 4 + 2]; + + int minX = MAX(floor(x - offset), startX); + int minY = MAX(floor(y - offset), startY); + int minZ = MAX(floor(z - offset), startZ); + + int maxX = MAX(floor(x + offset), minX); + int maxY = MAX(floor(y + offset), minY); + int maxZ = MAX(floor(z + offset), minZ); + + for (int X = minX; X <= maxX; ++X) { + double xSlide = ((double)X + 0.5 - x) / offset; + if (xSlide * xSlide >= 1.0) continue; + for (int Y = minY; Y <= maxY; ++Y) { + double ySlide = ((double)Y + 0.5 - y) / offset; + if (xSlide * xSlide + ySlide * ySlide >= 1.0) continue; + for (int Z = minZ; Z <= maxZ; ++Z) { + double zSlide = ((double)Z + 0.5 - z) / offset; + if (xSlide * xSlide + ySlide * ySlide + zSlide * zSlide >= 1.0D) continue; + int area = X - startX + (Y - startY) * oreSize + (Z - startZ) * oreSize * radius; + if (BITTEST(bitSet, area)) continue; + BITSET(bitSet, area); + Pos3 pos = {X, Y, Z}; + // TODO: check if the block at pos is contained in config.replaceBlocks + if (1) { + poses[posIndex++] = pos; + } + } + } + } + } + return (SizedPos3) {posIndex, poses}; +} //============================================================================== // Validating Structure Positions diff --git a/finders.h b/finders.h index 74eee980..2af66355 100644 --- a/finders.h +++ b/finders.h @@ -57,6 +57,12 @@ STRUCT(StructureConfig) STRUCT(Pos) { int x, z; }; STRUCT(Pos3) { int x, y, z; }; +STRUCT(SizedPos3) +{ + int size; + Pos3* pos3s; +}; + STRUCT(StrongholdIter) @@ -316,6 +322,164 @@ Pos estimateSpawn(const Generator *g, uint64_t *rng); Pos getSpawn(const Generator *g); +enum Blocks { + ANCIENT_DEBRIS, + ANDESITE, + BASALT, + BLACKSTONE, + COAL_ORE, + COPPER_ORE, + DEEPSLATE, + DIAMOND_ORE, + DIORITE, + DIRT, + EMERALD_ORE, + GOLD_ORE, + GRANITE, + GRAVEL, + IRON_ORE, + LAPIS_ORE, + MAGMA_BLOCK, + NETHERRACK, + NETHER_GOLD_ORE, + NETHER_QUARTZ_ORE, + REDSTONE_ORE, + SOUL_SAND, + STONE, + TUFF, +}; + +enum Ores { + AndesiteOre, + BlackstoneOre, + CoalOre, + CopperOre, + DeepslateOre, + DiamondOre, + DioriteOre, + DirtOre, + EmeraldOre, + ExtraGoldOre, + GoldOre, + GraniteOre, + GravelOre, + IronOre, + LapisOre, + LargeDebrisOre, + MagmaOre, + NetherGoldOre, + NetherGravelOre, + QuartzOre, + RedstoneOre, + SmallDebrisOre, + SoulSandOre, + TuffOre, +}; + + +// use getOreConfig() for the version specific ore configuration +STRUCT(OreConfig) +{ + int32_t index; + int32_t step; + int32_t size; + int32_t repeatCount; + uint32_t oreType; + uint32_t oreBlock; + int8_t dim; + uint8_t numReplaceBlocks; + const uint32_t* replaceBlocks; +}; + +//============================================================================== +// Ore height providers +//============================================================================== + +// <=1.16.5 +static inline int providerRange(uint64_t *seed, const int bottomOffset, const int topOffset, const int maximumY) { + return nextInt(seed, maximumY - topOffset) + bottomOffset; +} + +// <=1.16.5 +static inline int providerDepthAverage(uint64_t *seed, const int baseline, const int spread) { + return nextInt(seed, spread) + nextInt(seed, spread) - spread + baseline; +} + +// >=1.17 +static inline int providerUniformRange(uint64_t *seed, const int minOffset, const int maxOffset) { + if (minOffset > maxOffset) { + return minOffset; + } + return nextIntBetween(seed, minOffset, maxOffset); +} + +// >=1.17 +static inline int providerTriangleRange(uint64_t *seed, const int minOffset, const int maxOffset) { + if (minOffset > maxOffset) { + return minOffset; + } + const int range = maxOffset - minOffset; + if (range <= 0) { + return nextIntBetween(seed, minOffset, maxOffset); + } + const int midPoint = range / 2; + const int midPoint2 = range - midPoint; + return minOffset + nextIntBetween(seed, 0, midPoint2) + nextIntBetween(seed, 0, midPoint); +} + +static inline int providerSpreadRange(uint64_t *seed, const int baseValue, const int spread) { + return spread == 0 ? baseValue : baseValue + nextInt(seed, spread + 1); +} + + +/** + * Get the ore config for a given ore type. + * + * @param oreType the ore type as listed in Ores. + * @param mc the Minecraft version as listed in MCVersion + * @param biomeID the biome ID as listed in BiomeID + * @param oconf the target config + * @return 0 on failure + */ +int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf); + +/** + * Get the biome used for ore generation for a given chunk. After this, call + * `isViableOreBiome` to check whether the ore can generate in the chunk. + * @param g the generator + * @param chunkX the chunk X-coordinate + * @param chunkZ the chunk Y-coordinate + * @return the biome ID + */ +int getBiomeForOreGen(const Generator *g, int chunkX, int chunkZ); + +/** + * Check whether the given ore type generates in this biome. + * @param mc the Minecraft version + * @param oreType the ore type + * @param biomeID the biome ID + * @return 0 if the ore does not generate in this biome + */ +int isViableOreBiome(int mc, int oreType, int biomeID); + +/** + * Generate the ores of the given type in the chunk. + * @param g the generator + * @param config the ore config + * @param chunkX the chunk X-coordinate + * @param chunkZ the chunk Y-coordinate + * @return a sized array of ore positions + */ +SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ); + +Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, uint64_t *seed); + +int getOreYPos(int mc, int oreType, uint64_t *seed); + +SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 bPos, uint64_t *seed); + +SizedPos3 generateVeinPart(OreConfig config, uint64_t *rand, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); + /* Finds a suitable pseudo-random location in the specified area. * This function is used to determine the positions of spawn and strongholds. * Warning: accurate, but slow! diff --git a/rng.h b/rng.h index 62881f2f..c0d4a66c 100644 --- a/rng.h +++ b/rng.h @@ -336,6 +336,11 @@ static inline uint64_t getStartSeed(uint64_t ws, uint64_t ls) return ss; } +static inline int nextIntBetween(uint64_t *seed, const int min, const int max) +{ + return nextInt(seed, max - min + 1) + min; +} + ///============================================================================ /// Arithmatic From 897c81320121afab04a8fa68651c3660b044f44b Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 21 Apr 2025 20:44:04 +0200 Subject: [PATCH 02/45] [WIP] 1.18 --- finders.c | 313 ++++++++++++++++++++++++++++++++++++++++++++++++++---- finders.h | 19 ++++ 2 files changed, 314 insertions(+), 18 deletions(-) diff --git a/finders.c b/finders.c index 1d5866c7..10de71ae 100644 --- a/finders.c +++ b/finders.c @@ -1209,46 +1209,64 @@ static const uint32_t NETHERRACK_REPLACEMENTS[] = {NETHERRACK}; int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) { + // check the index and step in BiomeDefaultFeatures.java + // check the size in OreFeatures.java + // check the repeatCount in OrePlacements.java + + // OreFeatures.java also states `discardChanceOnAirExposure`, which is currently ignored static const OreConfig // overworld o_andesite_113 = {4, 4, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_andesite_116 = {4, 6, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_buried_diamond_118 = {20, 6, 8, 4, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_buried_lapis_118 = {22, 6, 7, 4, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_clay_118 = {24, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_coal_117 = {7, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_copper_118 = {23, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_diamond_113 = {9, 4, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_diamond_116 = {9, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_diamond_117 = {11, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_diamond_118 = {18, 6, 4, 7, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_diorite_113 = {3, 4, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_diorite_116 = {3, 6, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_dirt_113 = {0, 4, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_dirt_116 = {0, 6, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_dirt_118 = {0, 6, 33, 7, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEMENTS}, o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEMENTS}, o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_emerald_118 = {27, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_extra_gold_118 = {24, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_gold_113 = {7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_gold_116 = {7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_gold_117 = {9, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_gold_118 = {14, 6, 9, 4, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_granite_113 = {2, 4, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_granite_116 = {2, 6, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_gravel_113 = {1, 4, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_gravel_116 = {1, 6, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_gravel_118 = {1, 6, 33, 14, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_iron_113 = {6, 4, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_iron_116 = {6, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, @@ -1257,21 +1275,65 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_lapis_113 = {10, 4, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_lapis_116 = {10, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_lapis_117 = {12, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lapis_118 = {21, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_large_copper_118 = {23, 6, 20, 16, LargeCopperOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + // uses rareOrePlacement + o_large_diamond_118 = {19, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_lower_andesite_118 = {7, 6, 64, 2, LowerAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_lower_coal_118 = {10, 6, 17, 20, LowerCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_lower_diorite_118 = {5, 6, 64, 2, LowerDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + // repeatCount is -1 because gold uses CountPlacement.of(UniformInt.of(0, 1)) + o_lower_gold_118 = {15, 6, 9, -1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_lower_granite_118 = {3, 6, 64, 2, LowerGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_lower_redstone_118 = {17, 6, 8, 8, LowerRedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_middle_iron_118 = {12, 6, 9, 10, MiddleIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_redstone_113 = {8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_redstone_116 = {8, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_redstone_117 = {10, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_redstone_118 = {16, 6, 8, 4, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_small_iron_118 = {13, 6, 4, 10, SmallIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, o_tuff_117 = {5, 6, 33, 1, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_tuff_118 = {8, 6, 64, 2, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + // uses rareOrePlacement + o_upper_andesite_118 = {6, 6, 64, 6, UpperAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_upper_coal_118 = {9, 6, 17, 30, UpperCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + // uses rareOrePlacement + o_upper_diorite_118 = {4, 6, 64, 6, UpperDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + // uses rareOrePlacement + o_upper_granite_118 = {2, 6, 64, 6, UpperGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + + o_upper_iron_118 = {11, 6, 9, 90, UpperIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, // nether o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_blackstone_116_crimson_forest = {9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_blackstone_118 = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_blackstone_118_crimson_forest = {7, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_blackstone_118_warped_forest = {8, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_large_debris_118 = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_large_debris_118_crimson_forest = {10, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_large_debris_118_warped_forest = {11, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, o_magma_113 = {8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_magma_116 = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, @@ -1279,109 +1341,201 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_magma_116_crimson_forest = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_magma_116_warped_forest = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_118 = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_118_soul_sand_valley = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_118_basalt_deltas = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_118_crimson_forest = {4, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_magma_118_warped_forest = {5, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gold_118 = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gold_118_crimson_forest = {8, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gold_118_warped_forest = {9, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gold_118_basalt_deltas = {11, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_nether_gravel_116_crimson_forest = {8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_nether_gravel_116_warped_forest = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gravel_118 = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gravel_118_crimson_forest = {6, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_nether_gravel_118_warped_forest = {7, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_quartz_113 = {7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_quartz_118 = {12, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_quartz_118_crimson_forest = {9, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_quartz_118_warped_forest = {10, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_quartz_118_basalt_deltas = {12, 5, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_small_debris_118 = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_small_debris_118_crimson_forest = {11, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, + o_small_debris_118_warped_forest = {12, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS} + o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, + o_soul_sand_118 = {8, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS} ; switch (oreType) { + // overworld case AndesiteOre: if (mc <= MC_1_15) *oconf = o_andesite_113; else if (mc <= MC_1_17) *oconf = o_andesite_116; - return mc > MC_1_12; + return mc > MC_1_12 && mc <= MC_1_17; + case BuriedDiamondOre: + if (mc <= MC_1_18) *oconf = o_buried_diamond_118; + return mc > MC_1_17; + case BuriedLapisOre: + if (mc <= MC_1_18) *oconf = o_buried_lapis_118; + return mc > MC_1_17; + case ClayOre: + if (mc <= MC_1_18) *oconf = o_clay_118; + return mc > MC_1_17; case CoalOre: if (mc <= MC_1_15) *oconf = o_coal_113; else if (mc <= MC_1_16) *oconf = o_coal_116; else if (mc <= MC_1_17) *oconf = o_coal_117; - return mc > MC_1_12; + return mc > MC_1_12 && mc <= MC_1_17; case CopperOre: if (mc <= MC_1_17) *oconf = o_copper_117; + if (mc <= MC_1_18) *oconf = o_copper_118; return mc > MC_1_16; case DeepslateOre: if (mc <= MC_1_17) *oconf = o_deepslate_117; - return mc > MC_1_16; + return mc > MC_1_16 && mc <= MC_1_17; case DiamondOre: if (mc <= MC_1_15) *oconf = o_diamond_113; else if (mc <= MC_1_16) *oconf = o_diamond_116; else if (mc <= MC_1_17) *oconf = o_diamond_117; + else if (mc <= MC_1_18) *oconf = o_diamond_118; return mc > MC_1_12; case DioriteOre: if (mc <= MC_1_15) *oconf = o_diorite_113; else if (mc <= MC_1_17) *oconf = o_diorite_116; - return mc > MC_1_12; + return mc > MC_1_12 && mc <= MC_1_17; case DirtOre: if (mc <= MC_1_15) *oconf = o_dirt_113; else if (mc <= MC_1_17) *oconf = o_dirt_116; + else if (mc <= MC_1_18) *oconf = o_dirt_118; return mc > MC_1_12; case EmeraldOre: if (mc <= MC_1_15) *oconf = o_emerald_113; else if (mc <= MC_1_16) *oconf = o_emerald_116; else if (mc <= MC_1_17) *oconf = o_emerald_117; + else if (mc <= MC_1_18) *oconf = o_emerald_118; return mc > MC_1_12; case ExtraGoldOre: if (mc <= MC_1_15) *oconf = o_extra_gold_113; else if (mc <= MC_1_16) *oconf = o_extra_gold_116; else if (mc <= MC_1_17) *oconf = o_extra_gold_117; + else if (mc <= MC_1_18) *oconf = o_extra_gold_118; return mc > MC_1_12; case GoldOre: if (mc <= MC_1_15) *oconf = o_gold_113; else if (mc <= MC_1_16) *oconf = o_gold_116; else if (mc <= MC_1_17) *oconf = o_gold_117; + else if (mc <= MC_1_18) *oconf = o_gold_118; return mc > MC_1_12; case GraniteOre: if (mc <= MC_1_15) *oconf = o_granite_113; else if (mc <= MC_1_17) *oconf = o_granite_116; - return mc > MC_1_12; + return mc > MC_1_12 && mc <= MC_1_17; case GravelOre: if (mc <= MC_1_15) *oconf = o_gravel_113; else if (mc <= MC_1_17) *oconf = o_gravel_116; + else if (mc <= MC_1_18) *oconf = o_gravel_118; return mc > MC_1_12; case IronOre: if (mc <= MC_1_15) *oconf = o_iron_113; else if (mc <= MC_1_16) *oconf = o_iron_116; else if (mc <= MC_1_17) *oconf = o_iron_117; - return mc > MC_1_12; + return mc > MC_1_12 && mc <= MC_1_17; case LapisOre: if (mc <= MC_1_15) *oconf = o_lapis_113; else if (mc <= MC_1_16) *oconf = o_lapis_116; else if (mc <= MC_1_17) *oconf = o_lapis_117; + else if (mc <= MC_1_18) *oconf = o_lapis_118; return mc > MC_1_12; + case LargeCopperOre: + if (mc <= MC_1_18) *oconf = o_large_copper_118; + return mc > MC_1_17; + case LargeDiamondOre: + if (mc <= MC_1_18) *oconf = o_large_diamond_118; + return mc > MC_1_17; + case LowerAndesiteOre: + if (mc <= MC_1_18) *oconf = o_lower_andesite_118; + return mc > MC_1_17; + case LowerCoalOre: + if (mc <= MC_1_18) *oconf = o_lower_coal_118; + return mc > MC_1_17; + case LowerDioriteOre: + if (mc <= MC_1_18) *oconf = o_lower_diorite_118; + return mc > MC_1_17; + case LowerGoldOre: + if (mc <= MC_1_18) *oconf = o_lower_gold_118; + return mc > MC_1_17; + case LowerGraniteOre: + if (mc <= MC_1_18) *oconf = o_lower_granite_118; + return mc > MC_1_17; + case LowerRedstoneOre: + if (mc <= MC_1_18) *oconf = o_lower_redstone_118; + return mc > MC_1_17; + case MiddleIronOre: + if (mc <= MC_1_18) *oconf = o_middle_iron_118; + return mc > MC_1_17; case RedstoneOre: if (mc <= MC_1_15) *oconf = o_redstone_113; else if (mc <= MC_1_16) *oconf = o_redstone_116; else if (mc <= MC_1_17) *oconf = o_redstone_117; + else if (mc <= MC_1_18) *oconf = o_redstone_118; return mc > MC_1_12; + case SmallIronOre: + if (mc <= MC_1_18) *oconf = o_small_iron_118; + return mc > MC_1_17; case TuffOre: if (mc <= MC_1_17) *oconf = o_tuff_117; + else if (mc <= MC_1_18) *oconf = o_tuff_118; return mc > MC_1_16; + case UpperAndesiteOre: + if (mc <= MC_1_18) *oconf = o_upper_andesite_118; + return mc > MC_1_17; + case UpperCoalOre: + if (mc <= MC_1_18) *oconf = o_upper_coal_118; + return mc > MC_1_17; + case UpperDioriteOre: + if (mc <= MC_1_18) *oconf = o_upper_diorite_118; + return mc > MC_1_17; + case UpperGraniteOre: + if (mc <= MC_1_18) *oconf = o_upper_granite_118; + return mc > MC_1_17; + case UpperIronOre: + if (mc <= MC_1_18) *oconf = o_upper_iron_118; + return mc > MC_1_17; + // nether case BlackstoneOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_blackstone_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_blackstone_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_blackstone_116; + else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_blackstone_118_crimson_forest; + else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_blackstone_118_warped_forest; + else if (mc <= MC_1_18) *oconf = o_blackstone_118; return mc > MC_1_15; case LargeDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_large_debris_116; + else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_large_debris_118_crimson_forest; + else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_large_debris_118_warped_forest; + else if (mc <= MC_1_18) *oconf = o_large_debris_118; return mc > MC_1_15; case MagmaOre: if (mc <= MC_1_15) *oconf = o_magma_113; @@ -1390,17 +1544,29 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_magma_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_magma_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_magma_116; + else if (mc <= MC_1_18 && biomeID == soul_sand_valley) *oconf = o_magma_118_soul_sand_valley; + else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_magma_118_crimson_forest; + else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_magma_118_warped_forest; + else if (mc <= MC_1_18 && biomeID == basalt_deltas) *oconf = o_magma_118_basalt_deltas; + else if (mc <= MC_1_18) *oconf = o_magma_118; return mc > MC_1_12; case NetherGoldOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gold_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_nether_gold_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_nether_gold_116; + else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_nether_gold_118_crimson_forest; + else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_nether_gold_118_warped_forest; + else if (mc <= MC_1_18 && biomeID == basalt_deltas) *oconf = o_nether_gold_118_basalt_deltas; + else if (mc <= MC_1_18) *oconf = o_nether_gold_118; return mc > MC_1_15; case NetherGravelOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gravel_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gravel_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_nether_gravel_116; + else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_nether_gravel_118_crimson_forest; + else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_nether_gravel_118_warped_forest; + else if (mc <= MC_1_18) *oconf = o_nether_gravel_118; return mc > MC_1_15; case QuartzOre: if (mc <= MC_1_15) *oconf = o_quartz_113; @@ -1408,14 +1574,22 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_quartz_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_quartz_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_quartz_116; + else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_quartz_118_crimson_forest; + else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_quartz_118_warped_forest; + else if (mc <= MC_1_18 && biomeID == basalt_deltas) *oconf = o_quartz_118_basalt_deltas; + else if (mc <= MC_1_18) *oconf = o_quartz_118; return mc > MC_1_12; case SmallDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_small_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_small_debris_116; + else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_small_debris_118_crimson_forest; + else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_small_debris_118_warped_forest; + else if (mc <= MC_1_18) *oconf = o_small_debris_118; return mc > MC_1_15; case SoulSandOre: if (mc <= MC_1_17) *oconf = o_soul_sand_116; + if (mc <= MC_1_18) *oconf = o_soul_sand_118; return mc > MC_1_15; default: memset(oconf, 0, sizeof(OreConfig)); @@ -1429,6 +1603,8 @@ int isViableOreBiome(int mc, int oreType, int biomeID) { // overworld case AndesiteOre: + case BuriedDiamondOre: + case BuriedLapisOre: case CoalOre: case CopperOre: case DeepslateOre: @@ -1440,15 +1616,36 @@ int isViableOreBiome(int mc, int oreType, int biomeID) case GravelOre: case IronOre: case LapisOre: + case LargeDiamondOre: + case LowerAndesiteOre: + case LowerCoalOre: + case LowerDioriteOre: + case LowerGoldOre: + case LowerGraniteOre: + case LowerRedstoneOre: + case MiddleIronOre: case RedstoneOre: + case SmallIronOre: case TuffOre: + case UpperAndesiteOre: + case UpperCoalOre: + case UpperDioriteOre: + case UpperGraniteOre: + case UpperIronOre: return isOverworld(mc, biomeID); case EmeraldOre: return (biomeID == mountains || biomeID == mountain_edge || biomeID == wooded_mountains || - biomeID == gravelly_mountains || biomeID == modified_gravelly_mountains); + biomeID == gravelly_mountains || biomeID == modified_gravelly_mountains || biomeID == windswept_hills || + biomeID == meadow || biomeID == frozen_peaks || biomeID == jagged_peaks || + biomeID == stony_peaks || biomeID == snowy_slopes || biomeID == grove); case ExtraGoldOre: return (biomeID == badlands || biomeID == wooded_badlands_plateau || biomeID == badlands_plateau || - biomeID == eroded_badlands || biomeID == modified_wooded_badlands_plateau || biomeID == modified_badlands_plateau); + biomeID == eroded_badlands || biomeID == modified_wooded_badlands_plateau || biomeID == modified_badlands_plateau || + biomeID == wooded_badlands); + case LargeCopperOre: + return biomeID == dripstone_caves; + case ClayOre: + return biomeID == lush_caves; // nether case LargeDebrisOre: case MagmaOre: @@ -1481,7 +1678,22 @@ SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chu { uint64_t seed = getDecoratorSeed(g->mc, g->seed, chunkX << 4, chunkZ << 4, config.index + 10000 * config.step); - int repeatCount = config.repeatCount; + int oreType = config.oreType; + // rareOrePlacement check + if (oreType == LargeDiamondOre || oreType == UpperAndesiteOre || + oreType == UpperDioriteOre || oreType == UpperGraniteOre) { + if (nextFloat(&seed) >= 1.0F / config.repeatCount) { + return (SizedPos3) {0, NULL}; + } + } + + int repeatCount; + // CountPlacement.of(UniformInt.of(0, 1)) check + if (oreType == LowerGoldOre) { + repeatCount = nextIntBetween(&seed, 0, 1); + } else { + repeatCount = config.repeatCount; + } int size = MAX_ORE_COUNT; Pos3* positions = malloc(size * sizeof(Pos3)); int posIndex = 0; @@ -1534,12 +1746,23 @@ int getOreYPos(int mc, int oreType, uint64_t *seed) if (mc <= MC_1_16) return providerRange(seed, 0, 0, 80); if (mc <= MC_1_17) return providerUniformRange(seed, 0, 79); break; + case BuriedDiamondOre: + if (mc <= MC_1_18) return providerTriangleRange(seed, -64 + -80, -64 + 80); + break; + case BuriedLapisOre: + if (mc <= MC_1_18) return providerUniformRange(seed, -64, 64); + break; + case ClayOre: + if (mc <= MC_1_17) return providerUniformRange(seed, 0, 60); + if (mc <= MC_1_18) return providerUniformRange(seed, 0, 256); + break; case CoalOre: if (mc <= MC_1_16) return providerRange(seed, 0, 0, 128); if (mc <= MC_1_17) return providerUniformRange(seed, 0, 127); break; case CopperOre: if (mc <= MC_1_17) return providerTriangleRange(seed, 0, 96); + if (mc <= MC_1_18) return providerTriangleRange(seed, -16, 112); break; case DeepslateOre: if (mc <= MC_1_17) return providerUniformRange(seed, 0, 16); @@ -1548,6 +1771,7 @@ int getOreYPos(int mc, int oreType, uint64_t *seed) if (mc <= MC_1_16) return providerRange(seed, 0, 0, 16); // was 16 in 1.17, changed to 15 in 1.17.1 if (mc <= MC_1_17) return providerUniformRange(seed, 0, 15); + if (mc <= MC_1_18) return providerTriangleRange(seed, -64 + -80, -64 + 80); break; case DioriteOre: if (mc <= MC_1_16) return providerRange(seed, 0, 0, 80); @@ -1556,18 +1780,22 @@ int getOreYPos(int mc, int oreType, uint64_t *seed) case DirtOre: if (mc <= MC_1_16) return providerRange(seed, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(seed, 0, 255); + if (mc <= MC_1_18) return providerUniformRange(seed, 0, 160); break; case EmeraldOre: if (mc <= MC_1_16) return nextInt(seed, 28) + 4; if (mc <= MC_1_17) return providerUniformRange(seed, 4, 31); + if (mc <= MC_1_18) return providerTriangleRange(seed, -16, 480); break; case ExtraGoldOre: if (mc <= MC_1_16) return providerRange(seed, 32, 32, 80); if (mc <= MC_1_17) return providerUniformRange(seed, 32, 79); + if (mc <= MC_1_18) return providerUniformRange(seed, 32, 256); break; case GoldOre: if (mc <= MC_1_16) return providerRange(seed, 0, 0, 32); if (mc <= MC_1_17) return providerUniformRange(seed, 0, 31); + if (mc <= MC_1_18) return providerTriangleRange(seed, -64, 32); break; case GraniteOre: if (mc <= MC_1_16) return providerRange(seed, 0, 0, 80); @@ -1576,6 +1804,7 @@ int getOreYPos(int mc, int oreType, uint64_t *seed) case GravelOre: if (mc <= MC_1_16) return providerRange(seed, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(seed, 0, 255); + if (mc <= MC_1_18) return providerUniformRange(seed, -64, 319); break; case IronOre: if (mc <= MC_1_16) return providerRange(seed, 0, 0, 64); @@ -1584,46 +1813,94 @@ int getOreYPos(int mc, int oreType, uint64_t *seed) case LapisOre: if (mc <= MC_1_16) return providerDepthAverage(seed, 16, 16); if (mc <= MC_1_17) return providerTriangleRange(seed, 0, 30); + if (mc <= MC_1_18) return providerTriangleRange(seed, -32, 32); + break; + case LargeCopperOre: + if (mc <= MC_1_18) return providerTriangleRange(seed, -16, 112); + break; + case LargeDiamondOre: + if (mc <= MC_1_18) return providerTriangleRange(seed, -64 + -80, -64 + 80); + break; + case LowerAndesiteOre: + if (mc <= MC_1_18) return providerUniformRange(seed, 0, 60); + break; + case LowerCoalOre: + if (mc <= MC_1_18) return providerTriangleRange(seed, 0, 192); + break; + case LowerDioriteOre: + if (mc <= MC_1_18) return providerUniformRange(seed, 0, 60); + break; + case LowerGoldOre: + if (mc <= MC_1_18) return providerUniformRange(seed, -64, -48); + break; + case LowerGraniteOre: + if (mc <= MC_1_18) return providerUniformRange(seed, 0, 60); + break; + case LowerRedstoneOre: + if (mc <= MC_1_18) return providerTriangleRange(seed, -64 + -32, -64 + 32); + break; + case MiddleIronOre: + if (mc <= MC_1_18) return providerTriangleRange(seed, -24, 56); break; case RedstoneOre: if (mc <= MC_1_16) return providerRange(seed, 0, 0, 16); if (mc <= MC_1_17) return providerUniformRange(seed, 0, 15); + if (mc <= MC_1_18) return providerUniformRange(seed, -64, 15); + break; + case SmallIronOre: + if (mc <= MC_1_18) return providerUniformRange(seed, -64, 72); break; case TuffOre: if (mc <= MC_1_17) return providerUniformRange(seed, 0, 16); + if (mc <= MC_1_18) return providerUniformRange(seed, -64, 0); + break; + case UpperAndesiteOre: + if (mc <= MC_1_18) return providerUniformRange(seed, 64, 128); + break; + case UpperCoalOre: + if (mc <= MC_1_18) return providerUniformRange(seed, 136, 319); + break; + case UpperDioriteOre: + if (mc <= MC_1_18) return providerUniformRange(seed, 64, 128); + break; + case UpperGraniteOre: + if (mc <= MC_1_18) return providerUniformRange(seed, 64, 128); + break; + case UpperIronOre: + if (mc <= MC_1_18) return providerTriangleRange(seed, 80, 384); break; // nether case BlackstoneOre: if (mc <= MC_1_16) return providerRange(seed, 5, 10, 37); - if (mc <= MC_1_17) return providerUniformRange(seed, 5, 31); + if (mc <= MC_1_18) return providerUniformRange(seed, 5, 31); break; case LargeDebrisOre: if (mc <= MC_1_16) return providerDepthAverage(seed, 16, 8); - if (mc <= MC_1_17) return providerTriangleRange(seed, 8, 24); + if (mc <= MC_1_18) return providerTriangleRange(seed, 8, 24); break; case MagmaOre: if (mc <= MC_1_16) return 32 - 5 + nextInt(seed, 10); - if (mc <= MC_1_17) return providerUniformRange(seed, 27, 36); + if (mc <= MC_1_18) return providerUniformRange(seed, 27, 36); break; case NetherGoldOre: if (mc <= MC_1_16) return providerRange(seed, 10, 20, 128); - if (mc <= MC_1_17) return providerUniformRange(seed, 10, 117); + if (mc <= MC_1_18) return providerUniformRange(seed, 0 + 10, 127 - 10); break; case NetherGravelOre: if (mc <= MC_1_16) return providerRange(seed, 5, 0, 37); - if (mc <= MC_1_17) return providerUniformRange(seed, 5, 41); + if (mc <= MC_1_18) return providerUniformRange(seed, 5, 41); break; case QuartzOre: if (mc <= MC_1_16) return providerRange(seed, 10, 20, 128); - if (mc <= MC_1_17) return providerUniformRange(seed, 10, 117); + if (mc <= MC_1_18) return providerUniformRange(seed, 0 + 10, 127 - 10); break; case SmallDebrisOre: if (mc <= MC_1_16) return providerRange(seed, 8, 16, 128); - if (mc <= MC_1_17) return providerUniformRange(seed, 8, 119); + if (mc <= MC_1_18) return providerUniformRange(seed, 8, 127 - 8); break; case SoulSandOre: if (mc <= MC_1_16) return providerRange(seed, 0, 0, 32); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 31); + if (mc <= MC_1_18) return providerUniformRange(seed, 0, 31); break; default: fprintf(stderr, "getOreYPos: not implemented for ore type %d.\n", oreType); diff --git a/finders.h b/finders.h index 2af66355..317eb3d7 100644 --- a/finders.h +++ b/finders.h @@ -327,6 +327,7 @@ enum Blocks { ANDESITE, BASALT, BLACKSTONE, + CLAY, COAL_ORE, COPPER_ORE, DEEPSLATE, @@ -352,6 +353,9 @@ enum Blocks { enum Ores { AndesiteOre, BlackstoneOre, + BuriedDiamondOre, + BuriedLapisOre, + ClayOre, CoalOre, CopperOre, DeepslateOre, @@ -365,15 +369,30 @@ enum Ores { GravelOre, IronOre, LapisOre, + LargeCopperOre, LargeDebrisOre, + LargeDiamondOre, + LowerAndesiteOre, + LowerCoalOre, + LowerDioriteOre, + LowerGoldOre, + LowerGraniteOre, + LowerRedstoneOre, MagmaOre, + MiddleIronOre, NetherGoldOre, NetherGravelOre, QuartzOre, RedstoneOre, SmallDebrisOre, + SmallIronOre, SoulSandOre, TuffOre, + UpperAndesiteOre, + UpperCoalOre, + UpperDioriteOre, + UpperGraniteOre, + UpperIronOre, }; From 2266608db76988207f7c3f6b5802a3c091dd146c Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 21 Apr 2025 20:47:56 +0200 Subject: [PATCH 03/45] REPLACEMENTS -> REPLACEABLES --- finders.c | 260 +++++++++++++++++++++++++++--------------------------- 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/finders.c b/finders.c index 10de71ae..27ca6eb9 100644 --- a/finders.c +++ b/finders.c @@ -1202,10 +1202,10 @@ Pos getSpawn(const Generator *g) // Simulating ore generation //============================================================================== -static const uint32_t BASE_STONE_OVERWORLD_REPLACEMENTS[] = {STONE, GRANITE, DIORITE, ANDESITE, DEEPSLATE, TUFF}; -static const uint32_t BASE_STONE_NETHER_REPLACEMENTS[] = {NETHERRACK, BASALT, BLACKSTONE}; -static const uint32_t STONE_REPLACEMENTS[] = {STONE}; -static const uint32_t NETHERRACK_REPLACEMENTS[] = {NETHERRACK}; +static const uint32_t BASE_STONE_OVERWORLD_REPLACEABLES[] = {STONE, GRANITE, DIORITE, ANDESITE, DEEPSLATE, TUFF}; +static const uint32_t BASE_STONE_NETHER_REPLACEABLES[] = {NETHERRACK, BASALT, BLACKSTONE}; +static const uint32_t STONE_REPLACEABLES[] = {STONE}; +static const uint32_t NETHERRACK_REPLACEABLES[] = {NETHERRACK}; int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) { @@ -1216,172 +1216,172 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) // OreFeatures.java also states `discardChanceOnAirExposure`, which is currently ignored static const OreConfig // overworld - o_andesite_113 = {4, 4, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_andesite_116 = {4, 6, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_andesite_113 = {4, 4, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_andesite_116 = {4, 6, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_buried_diamond_118 = {20, 6, 8, 4, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_buried_diamond_118 = {20, 6, 8, 4, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_buried_lapis_118 = {22, 6, 7, 4, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_buried_lapis_118 = {22, 6, 7, 4, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_clay_118 = {24, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_clay_118 = {24, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_coal_117 = {7, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_coal_117 = {7, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_copper_118 = {23, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_copper_118 = {23, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_diamond_113 = {9, 4, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_diamond_116 = {9, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_diamond_117 = {11, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_diamond_118 = {18, 6, 4, 7, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_diamond_113 = {9, 4, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_diamond_116 = {9, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_diamond_117 = {11, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_diamond_118 = {18, 6, 4, 7, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_diorite_113 = {3, 4, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_diorite_116 = {3, 6, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_diorite_113 = {3, 4, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_diorite_116 = {3, 6, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_dirt_113 = {0, 4, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_dirt_116 = {0, 6, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_dirt_118 = {0, 6, 33, 7, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_dirt_113 = {0, 4, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_dirt_116 = {0, 6, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_dirt_118 = {0, 6, 33, 7, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEMENTS}, - o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEMENTS}, - o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_emerald_118 = {27, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES}, + o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES}, + o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_emerald_118 = {27, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_extra_gold_118 = {24, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_extra_gold_118 = {24, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_gold_113 = {7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_gold_116 = {7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_gold_117 = {9, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_gold_118 = {14, 6, 9, 4, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_gold_113 = {7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_gold_116 = {7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_gold_117 = {9, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_gold_118 = {14, 6, 9, 4, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_granite_113 = {2, 4, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_granite_116 = {2, 6, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_granite_113 = {2, 4, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_granite_116 = {2, 6, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_gravel_113 = {1, 4, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_gravel_116 = {1, 6, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_gravel_118 = {1, 6, 33, 14, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_gravel_113 = {1, 4, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_gravel_116 = {1, 6, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_gravel_118 = {1, 6, 33, 14, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_iron_113 = {6, 4, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_iron_116 = {6, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_iron_117 = {8, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_iron_113 = {6, 4, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_iron_116 = {6, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_iron_117 = {8, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_lapis_113 = {10, 4, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_lapis_116 = {10, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_lapis_117 = {12, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_lapis_118 = {21, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lapis_113 = {10, 4, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lapis_116 = {10, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lapis_117 = {12, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lapis_118 = {21, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_large_copper_118 = {23, 6, 20, 16, LargeCopperOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_large_copper_118 = {23, 6, 20, 16, LargeCopperOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, // uses rareOrePlacement - o_large_diamond_118 = {19, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_large_diamond_118 = {19, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_lower_andesite_118 = {7, 6, 64, 2, LowerAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lower_andesite_118 = {7, 6, 64, 2, LowerAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_lower_coal_118 = {10, 6, 17, 20, LowerCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lower_coal_118 = {10, 6, 17, 20, LowerCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_lower_diorite_118 = {5, 6, 64, 2, LowerDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lower_diorite_118 = {5, 6, 64, 2, LowerDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, // repeatCount is -1 because gold uses CountPlacement.of(UniformInt.of(0, 1)) - o_lower_gold_118 = {15, 6, 9, -1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lower_gold_118 = {15, 6, 9, -1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_lower_granite_118 = {3, 6, 64, 2, LowerGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lower_granite_118 = {3, 6, 64, 2, LowerGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_lower_redstone_118 = {17, 6, 8, 8, LowerRedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_lower_redstone_118 = {17, 6, 8, 8, LowerRedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_middle_iron_118 = {12, 6, 9, 10, MiddleIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_middle_iron_118 = {12, 6, 9, 10, MiddleIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_redstone_113 = {8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_redstone_116 = {8, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_redstone_117 = {10, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_redstone_118 = {16, 6, 8, 4, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_redstone_113 = {8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_redstone_116 = {8, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_redstone_117 = {10, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_redstone_118 = {16, 6, 8, 4, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_small_iron_118 = {13, 6, 4, 10, SmallIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_small_iron_118 = {13, 6, 4, 10, SmallIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_tuff_117 = {5, 6, 33, 1, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, - o_tuff_118 = {8, 6, 64, 2, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_tuff_117 = {5, 6, 33, 1, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_tuff_118 = {8, 6, 64, 2, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, // uses rareOrePlacement - o_upper_andesite_118 = {6, 6, 64, 6, UpperAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_upper_andesite_118 = {6, 6, 64, 6, UpperAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_upper_coal_118 = {9, 6, 17, 30, UpperCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_upper_coal_118 = {9, 6, 17, 30, UpperCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, // uses rareOrePlacement - o_upper_diorite_118 = {4, 6, 64, 6, UpperDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_upper_diorite_118 = {4, 6, 64, 6, UpperDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, // uses rareOrePlacement - o_upper_granite_118 = {2, 6, 64, 6, UpperGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_upper_granite_118 = {2, 6, 64, 6, UpperGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_upper_iron_118 = {11, 6, 9, 90, UpperIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEMENTS}, + o_upper_iron_118 = {11, 6, 9, 90, UpperIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, // nether - o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_blackstone_116_crimson_forest = {9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_blackstone_118 = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_blackstone_118_crimson_forest = {7, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_blackstone_118_warped_forest = {8, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - - o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_large_debris_118 = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_large_debris_118_crimson_forest = {10, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_large_debris_118_warped_forest = {11, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - - o_magma_113 = {8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_116 = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_116_soul_sand_valley = {8, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_116_crimson_forest = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_116_warped_forest = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_118 = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_118_soul_sand_valley = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_118_basalt_deltas = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_118_crimson_forest = {4, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_magma_118_warped_forest = {5, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - - o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gold_118 = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gold_118_crimson_forest = {8, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gold_118_warped_forest = {9, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gold_118_basalt_deltas = {11, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - - o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gravel_116_crimson_forest = {8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gravel_116_warped_forest = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gravel_118 = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gravel_118_crimson_forest = {6, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_nether_gravel_118_warped_forest = {7, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - - o_quartz_113 = {7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_quartz_118 = {12, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_quartz_118_crimson_forest = {9, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_quartz_118_warped_forest = {10, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_quartz_118_basalt_deltas = {12, 5, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - - o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_small_debris_118 = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_small_debris_118_crimson_forest = {11, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - o_small_debris_118_warped_forest = {12, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEMENTS}, - - o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS}, - o_soul_sand_118 = {8, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEMENTS} + o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_blackstone_116_crimson_forest = {9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_blackstone_118 = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_blackstone_118_crimson_forest = {7, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_blackstone_118_warped_forest = {8, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + + o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_large_debris_118 = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_large_debris_118_crimson_forest = {10, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_large_debris_118_warped_forest = {11, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + + o_magma_113 = {8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_116 = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_116_soul_sand_valley = {8, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_116_crimson_forest = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_116_warped_forest = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_118 = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_118_soul_sand_valley = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_118_basalt_deltas = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_118_crimson_forest = {4, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_magma_118_warped_forest = {5, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + + o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gold_118 = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gold_118_crimson_forest = {8, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gold_118_warped_forest = {9, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gold_118_basalt_deltas = {11, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + + o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gravel_116_crimson_forest = {8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gravel_116_warped_forest = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gravel_118 = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gravel_118_crimson_forest = {6, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_nether_gravel_118_warped_forest = {7, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + + o_quartz_113 = {7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_quartz_118 = {12, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_quartz_118_crimson_forest = {9, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_quartz_118_warped_forest = {10, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_quartz_118_basalt_deltas = {12, 5, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + + o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_small_debris_118 = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_small_debris_118_crimson_forest = {11, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + o_small_debris_118_warped_forest = {12, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, + + o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_soul_sand_118 = {8, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES} ; switch (oreType) From 8bd16ad3788c8ebc0c6301bfe12cc5a1bfe7a452 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 21 Apr 2025 20:49:11 +0200 Subject: [PATCH 04/45] Remove unused function --- finders.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/finders.h b/finders.h index 317eb3d7..a371d6f4 100644 --- a/finders.h +++ b/finders.h @@ -446,10 +446,6 @@ static inline int providerTriangleRange(uint64_t *seed, const int minOffset, con return minOffset + nextIntBetween(seed, 0, midPoint2) + nextIntBetween(seed, 0, midPoint); } -static inline int providerSpreadRange(uint64_t *seed, const int baseValue, const int spread) { - return spread == 0 ? baseValue : baseValue + nextInt(seed, spread + 1); -} - /** * Get the ore config for a given ore type. From 09a8232703a1a4d33eef820354521aca5676a7fa Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 21 Apr 2025 20:54:38 +0200 Subject: [PATCH 05/45] Fix buried diamond/lapis configs --- finders.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/finders.c b/finders.c index 27ca6eb9..b38e4859 100644 --- a/finders.c +++ b/finders.c @@ -1219,9 +1219,9 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_andesite_113 = {4, 4, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, o_andesite_116 = {4, 6, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_buried_diamond_118 = {20, 6, 8, 4, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_buried_diamond_118 = {20, 6, 8, 4, BuriedDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_buried_lapis_118 = {22, 6, 7, 4, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_buried_lapis_118 = {22, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, o_clay_118 = {24, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, From f03c3e892df82bda1c9955b3804e46d586846d12 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 21 Apr 2025 21:22:51 +0200 Subject: [PATCH 06/45] Move UniformInt.of(0, 1) count check --- finders.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/finders.c b/finders.c index b38e4859..d2126462 100644 --- a/finders.c +++ b/finders.c @@ -1288,8 +1288,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_lower_diorite_118 = {5, 6, 64, 2, LowerDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - // repeatCount is -1 because gold uses CountPlacement.of(UniformInt.of(0, 1)) - o_lower_gold_118 = {15, 6, 9, -1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lower_gold_118 = {15, 6, 9, 1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, o_lower_granite_118 = {3, 6, 64, 2, LowerGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, @@ -1687,13 +1686,7 @@ SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chu } } - int repeatCount; - // CountPlacement.of(UniformInt.of(0, 1)) check - if (oreType == LowerGoldOre) { - repeatCount = nextIntBetween(&seed, 0, 1); - } else { - repeatCount = config.repeatCount; - } + int repeatCount = config.repeatCount; int size = MAX_ORE_COUNT; Pos3* positions = malloc(size * sizeof(Pos3)); int posIndex = 0; @@ -1722,7 +1715,7 @@ SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chu Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, uint64_t *seed) { - if (config.oreType == EmeraldOre) { + if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_18 && config.oreType == LowerGoldOre)) { return (Pos3) {chunkX << 4, 0, chunkZ << 4}; } if (mc <= MC_1_14) { @@ -1911,25 +1904,29 @@ int getOreYPos(int mc, int oreType, uint64_t *seed) SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, uint64_t *seed) { - if (config.oreType == EmeraldOre) { + if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_18 && config.oreType == LowerGoldOre)) { int count; - if (mc <= MC_1_16) { - count = 3 + nextInt(seed, 6); + if (config.oreType == EmeraldOre) { + if (mc <= MC_1_16) { + count = 3 + nextInt(seed, 6); + } else { + // was 6, 24 in 1.17, changed to 3, 8 in 1.17.1 + count = nextIntBetween(seed, 3, 8); + } } else { - // was 6, 24 in 1.17, changed to 3, 8 in 1.17.1 - count = nextIntBetween(seed, 3, 8); + count = nextIntBetween(seed, 0, 1); } Pos3* poses = malloc(count * sizeof(Pos3)); for (int i = 0; i < count; i++) { if (mc <= MC_1_14) { int x = pos.x + nextInt(seed, 16); - int y = getOreYPos(mc, EmeraldOre, seed); + int y = getOreYPos(mc, config.oreType, seed); int z = pos.z + nextInt(seed, 16); poses[i] = (Pos3) {x, y, z}; } else { int x = pos.x + nextInt(seed, 16); int z = pos.z + nextInt(seed, 16); - int y = getOreYPos(mc, EmeraldOre, seed); + int y = getOreYPos(mc, config.oreType, seed); poses[i] = (Pos3) {x, y, z}; } } From a45dc9cd8128fa8a562fef1fc44a1910d825612c Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Tue, 22 Apr 2025 20:18:22 +0200 Subject: [PATCH 07/45] Use Xoroshiro for 1.18 --- finders.c | 246 +++++++++++++++++++++++++++--------------------------- finders.h | 26 +++--- rng.h | 49 +++++++++-- 3 files changed, 181 insertions(+), 140 deletions(-) diff --git a/finders.c b/finders.c index d2126462..41219207 100644 --- a/finders.c +++ b/finders.c @@ -68,18 +68,6 @@ uint64_t getPopulationSeed(int mc, uint64_t ws, int x, int z) return (x * a + z * b) ^ ws; } -uint64_t getDecoratorSeed(int mc, uint64_t ws, int x, int z, int salt) -{ - if (mc <= MC_1_12) { - fprintf(stderr, "getDecoratorSeed: not existent for version %s.\n", mc2str(mc)); - exit(1); - } - uint64_t populationSeed = getPopulationSeed(mc, ws, x, z); - uint64_t seed; - setSeed(&seed, populationSeed + salt); - return seed; -} - int getStructureConfig(int structureType, int mc, StructureConfig *sconf) { @@ -1288,6 +1276,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_lower_diorite_118 = {5, 6, 64, 2, LowerDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + // uses UniformInt.of(0, 1) o_lower_gold_118 = {15, 6, 9, 1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, o_lower_granite_118 = {3, 6, 64, 2, LowerGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, @@ -1327,6 +1316,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_blackstone_118_crimson_forest = {7, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, o_blackstone_118_warped_forest = {8, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + // scatter ore, no count o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, @@ -1372,6 +1362,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_quartz_118_warped_forest = {10, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, o_quartz_118_basalt_deltas = {12, 5, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + // scatter ore, no count o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, @@ -1598,6 +1589,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) int isViableOreBiome(int mc, int oreType, int biomeID) { + // check this in OverworldBiomes.java/NetherBiomes.java switch (oreType) { // overworld @@ -1675,25 +1667,35 @@ int getBiomeForOreGen(const Generator *g, int chunkX, int chunkZ) SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ) { - uint64_t seed = getDecoratorSeed(g->mc, g->seed, chunkX << 4, chunkZ << 4, config.index + 10000 * config.step); + uint64_t populationSeed = getPopulationSeed(g->mc, g->seed, chunkX << 4, chunkZ << 4); + RandomSource rnd; + if (g->mc <= MC_1_17) { + uint64_t seed; + rnd = createJavaRandom(&seed); + } else { + Xoroshiro xr; + rnd = createXoroshiro(&xr); + } + // set decorator seed + rnd.setSeed(rnd.state, populationSeed + config.index + 10000 * config.step); int oreType = config.oreType; + int repeatCount; // rareOrePlacement check if (oreType == LargeDiamondOre || oreType == UpperAndesiteOre || oreType == UpperDioriteOre || oreType == UpperGraniteOre) { - if (nextFloat(&seed) >= 1.0F / config.repeatCount) { - return (SizedPos3) {0, NULL}; - } + repeatCount = rnd.nextFloat(rnd.state) < 1.0F / config.repeatCount; + } else { + repeatCount = config.repeatCount; } - int repeatCount = config.repeatCount; int size = MAX_ORE_COUNT; Pos3* positions = malloc(size * sizeof(Pos3)); int posIndex = 0; for (int i = 0; i < repeatCount; i++) { - Pos3 basePos = generateBaseOrePosition(g->mc, config, chunkX, chunkZ, &seed); - SizedPos3 orePositions = generateOrePositions(g->mc, config, basePos, &seed); + Pos3 basePos = generateBaseOrePosition(g->mc, config, chunkX, chunkZ, rnd); + SizedPos3 orePositions = generateOrePositions(g->mc, config, basePos, rnd); if (posIndex + orePositions.size > size) { size = posIndex + orePositions.size; @@ -1713,187 +1715,187 @@ SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chu return (SizedPos3) {posIndex, positions}; } -Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, uint64_t *seed) +Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd) { if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_18 && config.oreType == LowerGoldOre)) { return (Pos3) {chunkX << 4, 0, chunkZ << 4}; } if (mc <= MC_1_14) { - int blockX = (chunkX << 4) + nextInt(seed, 16); - int blockY = getOreYPos(mc, config.oreType, seed); - int blockZ = (chunkZ << 4) + nextInt(seed, 16); + int blockX = (chunkX << 4) + rnd.nextInt(rnd.state, 16); + int blockY = getOreYPos(mc, config.oreType, rnd); + int blockZ = (chunkZ << 4) + rnd.nextInt(rnd.state, 16); return (Pos3) {blockX, blockY, blockZ}; } else { - int blockX = (chunkX << 4) + nextInt(seed, 16); - int blockZ = (chunkZ << 4) + nextInt(seed, 16); - int blockY = getOreYPos(mc, config.oreType, seed); + int blockX = (chunkX << 4) + rnd.nextInt(rnd.state, 16); + int blockZ = (chunkZ << 4) + rnd.nextInt(rnd.state, 16); + int blockY = getOreYPos(mc, config.oreType, rnd); return (Pos3) {blockX, blockY, blockZ}; } } -int getOreYPos(int mc, int oreType, uint64_t *seed) +int getOreYPos(int mc, int oreType, RandomSource rnd) { switch (oreType) { // overworld case AndesiteOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 80); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 79); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); break; case BuriedDiamondOre: - if (mc <= MC_1_18) return providerTriangleRange(seed, -64 + -80, -64 + 80); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case BuriedLapisOre: - if (mc <= MC_1_18) return providerUniformRange(seed, -64, 64); + if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 64); break; case ClayOre: - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 60); - if (mc <= MC_1_18) return providerUniformRange(seed, 0, 256); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 256); break; case CoalOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 128); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 127); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 128); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 127); break; case CopperOre: - if (mc <= MC_1_17) return providerTriangleRange(seed, 0, 96); - if (mc <= MC_1_18) return providerTriangleRange(seed, -16, 112); + if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 96); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -16, 112); break; case DeepslateOre: - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 16); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); break; case DiamondOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 16); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); // was 16 in 1.17, changed to 15 in 1.17.1 - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 15); - if (mc <= MC_1_18) return providerTriangleRange(seed, -64 + -80, -64 + 80); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case DioriteOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 80); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 79); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); break; case DirtOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 256); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 255); - if (mc <= MC_1_18) return providerUniformRange(seed, 0, 160); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); + if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 160); break; case EmeraldOre: - if (mc <= MC_1_16) return nextInt(seed, 28) + 4; - if (mc <= MC_1_17) return providerUniformRange(seed, 4, 31); - if (mc <= MC_1_18) return providerTriangleRange(seed, -16, 480); + if (mc <= MC_1_16) return rnd.nextInt(rnd.state, 28) + 4; + if (mc <= MC_1_17) return providerUniformRange(rnd, 4, 31); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -16, 480); break; case ExtraGoldOre: - if (mc <= MC_1_16) return providerRange(seed, 32, 32, 80); - if (mc <= MC_1_17) return providerUniformRange(seed, 32, 79); - if (mc <= MC_1_18) return providerUniformRange(seed, 32, 256); + if (mc <= MC_1_16) return providerRange(rnd, 32, 32, 80); + if (mc <= MC_1_17) return providerUniformRange(rnd, 32, 79); + if (mc <= MC_1_18) return providerUniformRange(rnd, 32, 256); break; case GoldOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 32); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 31); - if (mc <= MC_1_18) return providerTriangleRange(seed, -64, 32); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 31); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -64, 32); break; case GraniteOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 80); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 79); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); break; case GravelOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 256); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 255); - if (mc <= MC_1_18) return providerUniformRange(seed, -64, 319); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); + if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 319); break; case IronOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 64); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 63); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 64); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 63); break; case LapisOre: - if (mc <= MC_1_16) return providerDepthAverage(seed, 16, 16); - if (mc <= MC_1_17) return providerTriangleRange(seed, 0, 30); - if (mc <= MC_1_18) return providerTriangleRange(seed, -32, 32); + if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 16); + if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 30); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -32, 32); break; case LargeCopperOre: - if (mc <= MC_1_18) return providerTriangleRange(seed, -16, 112); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -16, 112); break; case LargeDiamondOre: - if (mc <= MC_1_18) return providerTriangleRange(seed, -64 + -80, -64 + 80); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case LowerAndesiteOre: - if (mc <= MC_1_18) return providerUniformRange(seed, 0, 60); + if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 60); break; case LowerCoalOre: - if (mc <= MC_1_18) return providerTriangleRange(seed, 0, 192); + if (mc <= MC_1_18) return providerTriangleRange(rnd, 0, 192); break; case LowerDioriteOre: - if (mc <= MC_1_18) return providerUniformRange(seed, 0, 60); + if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 60); break; case LowerGoldOre: - if (mc <= MC_1_18) return providerUniformRange(seed, -64, -48); + if (mc <= MC_1_18) return providerUniformRange(rnd, -64, -48); break; case LowerGraniteOre: - if (mc <= MC_1_18) return providerUniformRange(seed, 0, 60); + if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 60); break; case LowerRedstoneOre: - if (mc <= MC_1_18) return providerTriangleRange(seed, -64 + -32, -64 + 32); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -64 + -32, -64 + 32); break; case MiddleIronOre: - if (mc <= MC_1_18) return providerTriangleRange(seed, -24, 56); + if (mc <= MC_1_18) return providerTriangleRange(rnd, -24, 56); break; case RedstoneOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 16); - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 15); - if (mc <= MC_1_18) return providerUniformRange(seed, -64, 15); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); + if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 15); break; case SmallIronOre: - if (mc <= MC_1_18) return providerUniformRange(seed, -64, 72); + if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 72); break; case TuffOre: - if (mc <= MC_1_17) return providerUniformRange(seed, 0, 16); - if (mc <= MC_1_18) return providerUniformRange(seed, -64, 0); + if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); + if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 0); break; case UpperAndesiteOre: - if (mc <= MC_1_18) return providerUniformRange(seed, 64, 128); + if (mc <= MC_1_18) return providerUniformRange(rnd, 64, 128); break; case UpperCoalOre: - if (mc <= MC_1_18) return providerUniformRange(seed, 136, 319); + if (mc <= MC_1_18) return providerUniformRange(rnd, 136, 319); break; case UpperDioriteOre: - if (mc <= MC_1_18) return providerUniformRange(seed, 64, 128); + if (mc <= MC_1_18) return providerUniformRange(rnd, 64, 128); break; case UpperGraniteOre: - if (mc <= MC_1_18) return providerUniformRange(seed, 64, 128); + if (mc <= MC_1_18) return providerUniformRange(rnd, 64, 128); break; case UpperIronOre: - if (mc <= MC_1_18) return providerTriangleRange(seed, 80, 384); + if (mc <= MC_1_18) return providerTriangleRange(rnd, 80, 384); break; // nether case BlackstoneOre: - if (mc <= MC_1_16) return providerRange(seed, 5, 10, 37); - if (mc <= MC_1_18) return providerUniformRange(seed, 5, 31); + if (mc <= MC_1_16) return providerRange(rnd, 5, 10, 37); + if (mc <= MC_1_18) return providerUniformRange(rnd, 5, 31); break; case LargeDebrisOre: - if (mc <= MC_1_16) return providerDepthAverage(seed, 16, 8); - if (mc <= MC_1_18) return providerTriangleRange(seed, 8, 24); + if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 8); + if (mc <= MC_1_18) return providerTriangleRange(rnd, 8, 24); break; case MagmaOre: - if (mc <= MC_1_16) return 32 - 5 + nextInt(seed, 10); - if (mc <= MC_1_18) return providerUniformRange(seed, 27, 36); + if (mc <= MC_1_16) return 32 - 5 + rnd.nextInt(rnd.state, 10); + if (mc <= MC_1_18) return providerUniformRange(rnd, 27, 36); break; case NetherGoldOre: - if (mc <= MC_1_16) return providerRange(seed, 10, 20, 128); - if (mc <= MC_1_18) return providerUniformRange(seed, 0 + 10, 127 - 10); + if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); + if (mc <= MC_1_18) return providerUniformRange(rnd, 0 + 10, 127 - 10); break; case NetherGravelOre: - if (mc <= MC_1_16) return providerRange(seed, 5, 0, 37); - if (mc <= MC_1_18) return providerUniformRange(seed, 5, 41); + if (mc <= MC_1_16) return providerRange(rnd, 5, 0, 37); + if (mc <= MC_1_18) return providerUniformRange(rnd, 5, 41); break; case QuartzOre: - if (mc <= MC_1_16) return providerRange(seed, 10, 20, 128); - if (mc <= MC_1_18) return providerUniformRange(seed, 0 + 10, 127 - 10); + if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); + if (mc <= MC_1_18) return providerUniformRange(rnd, 0 + 10, 127 - 10); break; case SmallDebrisOre: - if (mc <= MC_1_16) return providerRange(seed, 8, 16, 128); - if (mc <= MC_1_18) return providerUniformRange(seed, 8, 127 - 8); + if (mc <= MC_1_16) return providerRange(rnd, 8, 16, 128); + if (mc <= MC_1_18) return providerUniformRange(rnd, 8, 127 - 8); break; case SoulSandOre: - if (mc <= MC_1_16) return providerRange(seed, 0, 0, 32); - if (mc <= MC_1_18) return providerUniformRange(seed, 0, 31); + if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); + if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 31); break; default: fprintf(stderr, "getOreYPos: not implemented for ore type %d.\n", oreType); @@ -1902,31 +1904,31 @@ int getOreYPos(int mc, int oreType, uint64_t *seed) return 0; } -SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, uint64_t *seed) +SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource rnd) { if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_18 && config.oreType == LowerGoldOre)) { int count; if (config.oreType == EmeraldOre) { if (mc <= MC_1_16) { - count = 3 + nextInt(seed, 6); + count = 3 + rnd.nextInt(rnd.state, 6); } else { // was 6, 24 in 1.17, changed to 3, 8 in 1.17.1 - count = nextIntBetween(seed, 3, 8); + count = rnd.nextIntBetween(rnd.state, 3, 8); } } else { - count = nextIntBetween(seed, 0, 1); + count = rnd.nextIntBetween(rnd.state, 0, 1); } Pos3* poses = malloc(count * sizeof(Pos3)); for (int i = 0; i < count; i++) { if (mc <= MC_1_14) { - int x = pos.x + nextInt(seed, 16); - int y = getOreYPos(mc, config.oreType, seed); - int z = pos.z + nextInt(seed, 16); + int x = pos.x + rnd.nextInt(rnd.state, 16); + int y = getOreYPos(mc, config.oreType, rnd); + int z = pos.z + rnd.nextInt(rnd.state, 16); poses[i] = (Pos3) {x, y, z}; } else { - int x = pos.x + nextInt(seed, 16); - int z = pos.z + nextInt(seed, 16); - int y = getOreYPos(mc, config.oreType, seed); + int x = pos.x + rnd.nextInt(rnd.state, 16); + int z = pos.z + rnd.nextInt(rnd.state, 16); + int y = getOreYPos(mc, config.oreType, rnd); poses[i] = (Pos3) {x, y, z}; } } @@ -1935,13 +1937,13 @@ SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, uint64_t *see // scatter if (config.oreType == LargeDebrisOre || config.oreType == SmallDebrisOre) { - int count = nextInt(seed, config.size + 1); + int count = rnd.nextInt(rnd.state, config.size + 1); Pos3* poses = malloc(count * sizeof(Pos3)); for (int i = 0; i < count; ++i) { int size = MIN(i, 7); - int x = roundf((nextFloat(seed) - nextFloat(seed)) * (float)size); - int y = roundf((nextFloat(seed) - nextFloat(seed)) * (float)size); - int z = roundf((nextFloat(seed) - nextFloat(seed)) * (float)size); + int x = roundf((rnd.nextFloat(rnd.state) - rnd.nextFloat(rnd.state)) * (float)size); + int y = roundf((rnd.nextFloat(rnd.state) - rnd.nextFloat(rnd.state)) * (float)size); + int z = roundf((rnd.nextFloat(rnd.state) - rnd.nextFloat(rnd.state)) * (float)size); Pos3 startPos = (Pos3) {pos.x + x, pos.y + y, pos.z + z}; // TODO: check if the block at startPos is contained in config.replaceBlocks @@ -1955,15 +1957,15 @@ SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, uint64_t *see } // regular - float angle = nextFloat(seed) * (float)PI; + float angle = rnd.nextFloat(rnd.state) * (float)PI; float size = (float)config.size / 8.0F; int amortizedSize = ceil(((float)config.size / 16.0F * 2.0F + 1.0F) / 2.0F); double offsetXPos = (double)pos.x + sin(angle) * (double)size; double offsetXNeg = (double)pos.x - sin(angle) * (double)size; double offsetZPos = (double)pos.z + cos(angle) * (double)size; double offsetZNeg = (double)pos.z - cos(angle) * (double)size; - double offsetYPos = pos.y + nextInt(seed, 3) - 2; - double offsetYNeg = pos.y + nextInt(seed, 3) - 2; + double offsetYPos = pos.y + rnd.nextInt(rnd.state, 3) - 2; + double offsetYNeg = pos.y + rnd.nextInt(rnd.state, 3) - 2; int startX = pos.x - ceil(size) - amortizedSize; int startY = pos.y - 2 - amortizedSize; int startZ = pos.z - ceil(size) - amortizedSize; @@ -1974,7 +1976,7 @@ SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, uint64_t *see for (int z = startZ; z <= startZ + oreSize; ++z) { // TODO: check if startY <= first y value in column that is motion blocking (Heightmap.Types#OCEAN_FLOOR_WG) if (1) { - return generateVeinPart(config, seed, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); + return generateVeinPart(config, rnd, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); } } } @@ -1982,7 +1984,7 @@ SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, uint64_t *see return (SizedPos3) {0, NULL}; } -SizedPos3 generateVeinPart(OreConfig config, uint64_t *seed, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius) +SizedPos3 generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius) { Pos3* poses = malloc(100 * sizeof(Pos3)); int posIndex = 0; @@ -1995,7 +1997,7 @@ SizedPos3 generateVeinPart(OreConfig config, uint64_t *seed, double offsetXPos, double x = lerp(percent, offsetXPos, offsetXNeg); double y = lerp(percent, offsetYPos, offsetYNeg); double z = lerp(percent, offsetZPos, offsetZNeg); - double length = nextDouble(seed) * (double)size / 16.0; + double length = rnd.nextDouble(rnd.state) * (double)size / 16.0; double offset = ((sin((float)PI * percent) + 1.0F) * length + 1.0) / 2.0; store[i * 4] = x; store[i * 4 + 1] = y; @@ -2043,7 +2045,7 @@ SizedPos3 generateVeinPart(OreConfig config, uint64_t *seed, double offsetXPos, if (xSlide * xSlide + ySlide * ySlide >= 1.0) continue; for (int Z = minZ; Z <= maxZ; ++Z) { double zSlide = ((double)Z + 0.5 - z) / offset; - if (xSlide * xSlide + ySlide * ySlide + zSlide * zSlide >= 1.0D) continue; + if (xSlide * xSlide + ySlide * ySlide + zSlide * zSlide >= 1.0) continue; int area = X - startX + (Y - startY) * oreSize + (Z - startZ) * oreSize * radius; if (BITTEST(bitSet, area)) continue; BITSET(bitSet, area); diff --git a/finders.h b/finders.h index a371d6f4..df19f898 100644 --- a/finders.h +++ b/finders.h @@ -415,35 +415,35 @@ STRUCT(OreConfig) //============================================================================== // <=1.16.5 -static inline int providerRange(uint64_t *seed, const int bottomOffset, const int topOffset, const int maximumY) { - return nextInt(seed, maximumY - topOffset) + bottomOffset; +static inline int providerRange(RandomSource rnd, const int bottomOffset, const int topOffset, const int maximumY) { + return rnd.nextInt(rnd.state, maximumY - topOffset) + bottomOffset; } // <=1.16.5 -static inline int providerDepthAverage(uint64_t *seed, const int baseline, const int spread) { - return nextInt(seed, spread) + nextInt(seed, spread) - spread + baseline; +static inline int providerDepthAverage(RandomSource rnd, const int baseline, const int spread) { + return rnd.nextInt(rnd.state, spread) + rnd.nextInt(rnd.state, spread) - spread + baseline; } // >=1.17 -static inline int providerUniformRange(uint64_t *seed, const int minOffset, const int maxOffset) { +static inline int providerUniformRange(RandomSource rnd, const int minOffset, const int maxOffset) { if (minOffset > maxOffset) { return minOffset; } - return nextIntBetween(seed, minOffset, maxOffset); + return rnd.nextIntBetween(rnd.state, minOffset, maxOffset); } // >=1.17 -static inline int providerTriangleRange(uint64_t *seed, const int minOffset, const int maxOffset) { +static inline int providerTriangleRange(RandomSource rnd, const int minOffset, const int maxOffset) { if (minOffset > maxOffset) { return minOffset; } const int range = maxOffset - minOffset; if (range <= 0) { - return nextIntBetween(seed, minOffset, maxOffset); + return rnd.nextIntBetween(rnd.state, minOffset, maxOffset); } const int midPoint = range / 2; const int midPoint2 = range - midPoint; - return minOffset + nextIntBetween(seed, 0, midPoint2) + nextIntBetween(seed, 0, midPoint); + return minOffset + rnd.nextIntBetween(rnd.state, 0, midPoint2) + rnd.nextIntBetween(rnd.state, 0, midPoint); } @@ -487,13 +487,13 @@ int isViableOreBiome(int mc, int oreType, int biomeID); */ SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ); -Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, uint64_t *seed); +Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd); -int getOreYPos(int mc, int oreType, uint64_t *seed); +int getOreYPos(int mc, int oreType, RandomSource rnd); -SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 bPos, uint64_t *seed); +SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 bPos, RandomSource rnd); -SizedPos3 generateVeinPart(OreConfig config, uint64_t *rand, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); +SizedPos3 generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); /* Finds a suitable pseudo-random location in the specified area. * This function is used to determine the positions of spawn and strongholds. diff --git a/rng.h b/rng.h index c0d4a66c..3213e4c0 100644 --- a/rng.h +++ b/rng.h @@ -172,6 +172,11 @@ static inline void skipNextN(uint64_t *seed, uint64_t n) *seed &= 0xffffffffffffULL; } +static inline int nextIntBetween(uint64_t *seed, const int min, const int max) +{ + return nextInt(seed, max - min + 1) + min; +} + ///============================================================================= /// Xoroshiro 128 @@ -265,6 +270,45 @@ static inline int xNextIntJ(Xoroshiro *xr, uint32_t n) return val; } +static inline int xNextIntBetween(Xoroshiro *xr, const int min, const int max) +{ + return xNextInt(xr, max - min + 1) + min; +} + +// expand as necessary +STRUCT(RandomSource) +{ + void *state; + void (*setSeed)(void *state, uint64_t seed); + int (*nextInt)(void *state, int n); + float (*nextFloat)(void *state); + double (*nextDouble)(void *state); + int (*nextIntBetween)(void *state, int min, int max); +}; + +static inline RandomSource createJavaRandom(uint64_t *seed) +{ + return (RandomSource) { + .state = seed, + .setSeed = (void (*)(void *, uint64_t)) setSeed, + .nextInt = (int (*)(void *, int)) nextInt, + .nextFloat = (float (*)(void *)) nextFloat, + .nextDouble = (double (*)(void *)) nextDouble, + .nextIntBetween = (int (*)(void *, int, int)) nextIntBetween, + }; +} + +static inline RandomSource createXoroshiro(Xoroshiro *xr) +{ + return (RandomSource) { + .state = xr, + .setSeed = (void (*)(void *, uint64_t)) xSetSeed, + .nextInt = (int (*)(void *, int)) xNextInt, + .nextFloat = (float (*)(void *)) xNextFloat, + .nextDouble = (double (*)(void *)) xNextDouble, + .nextIntBetween = (int (*)(void *, int, int)) xNextIntBetween, + }; +} //============================================================================== // MC Seed Helpers @@ -336,11 +380,6 @@ static inline uint64_t getStartSeed(uint64_t ws, uint64_t ls) return ss; } -static inline int nextIntBetween(uint64_t *seed, const int min, const int max) -{ - return nextInt(seed, max - min + 1) + min; -} - ///============================================================================ /// Arithmatic From 900fdb07bddda50eff470c508f8a0298ff698274 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Tue, 22 Apr 2025 21:14:21 +0200 Subject: [PATCH 08/45] Minor refactor --- finders.c | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/finders.c b/finders.c index 41219207..d3ac3c8c 100644 --- a/finders.c +++ b/finders.c @@ -1689,30 +1689,21 @@ SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chu repeatCount = config.repeatCount; } - int size = MAX_ORE_COUNT; - Pos3* positions = malloc(size * sizeof(Pos3)); - int posIndex = 0; - + SizedPos3* temp = malloc(repeatCount * sizeof(SizedPos3)); + int size = 0; for (int i = 0; i < repeatCount; i++) { Pos3 basePos = generateBaseOrePosition(g->mc, config, chunkX, chunkZ, rnd); SizedPos3 orePositions = generateOrePositions(g->mc, config, basePos, rnd); - - if (posIndex + orePositions.size > size) { - size = posIndex + orePositions.size; - Pos3* temp = realloc(positions, size * sizeof(Pos3)); - if (!temp) { - fprintf(stderr, "Memory allocation failed.\n"); - free(positions); - exit(1); - } - positions = temp; - } - - for (int j = 0; j < orePositions.size; j++) { - positions[posIndex++] = orePositions.pos3s[j]; - } + temp[i] = orePositions; + size += orePositions.size; + } + Pos3* positions = malloc(size * sizeof(Pos3)); + int offset = 0; + for (int i = 0; i < repeatCount; i++) { + memcpy(positions + offset, temp[i].pos3s, sizeof(Pos3) * temp[i].size); + offset += temp[i].size; } - return (SizedPos3) {posIndex, positions}; + return (SizedPos3) {size, positions}; } Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd) From 7430b2fec172be6f22e73005a7370a08f0c735f0 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Wed, 23 Apr 2025 15:45:54 +0200 Subject: [PATCH 09/45] Add discardChanceOnAirExposure field --- finders.c | 261 ++++++++++++++++++++++++++++-------------------------- finders.h | 1 + rng.h | 4 +- 3 files changed, 139 insertions(+), 127 deletions(-) diff --git a/finders.c b/finders.c index d3ac3c8c..a315741a 100644 --- a/finders.c +++ b/finders.c @@ -1204,174 +1204,174 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) // OreFeatures.java also states `discardChanceOnAirExposure`, which is currently ignored static const OreConfig // overworld - o_andesite_113 = {4, 4, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_andesite_116 = {4, 6, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_andesite_113 = {4, 4, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_andesite_116 = {4, 6, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_buried_diamond_118 = {20, 6, 8, 4, BuriedDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_buried_diamond_118 = {20, 6, 8, 4, BuriedDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, - o_buried_lapis_118 = {22, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_buried_lapis_118 = {22, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, - o_clay_118 = {24, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_clay_118 = {24, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_coal_117 = {7, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_coal_117 = {7, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_copper_118 = {23, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_copper_118 = {23, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_diamond_113 = {9, 4, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_diamond_116 = {9, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_diamond_117 = {11, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_diamond_118 = {18, 6, 4, 7, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_diamond_113 = {9, 4, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diamond_116 = {9, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diamond_117 = {11, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diamond_118 = {18, 6, 4, 7, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_diorite_113 = {3, 4, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_diorite_116 = {3, 6, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_diorite_113 = {3, 4, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diorite_116 = {3, 6, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_dirt_113 = {0, 4, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_dirt_116 = {0, 6, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_dirt_118 = {0, 6, 33, 7, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_dirt_113 = {0, 4, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_dirt_116 = {0, 6, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_dirt_118 = {0, 6, 33, 7, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES}, - o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES}, - o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_emerald_118 = {27, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, + o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, + o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_118 = {27, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_extra_gold_118 = {24, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_extra_gold_118 = {24, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_gold_113 = {7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_gold_116 = {7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_gold_117 = {9, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_gold_118 = {14, 6, 9, 4, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_gold_113 = {7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gold_116 = {7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gold_117 = {9, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gold_118 = {14, 6, 9, 4, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_granite_113 = {2, 4, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_granite_116 = {2, 6, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_granite_113 = {2, 4, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_granite_116 = {2, 6, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_gravel_113 = {1, 4, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_gravel_116 = {1, 6, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_gravel_118 = {1, 6, 33, 14, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_gravel_113 = {1, 4, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gravel_116 = {1, 6, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gravel_118 = {1, 6, 33, 14, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_iron_113 = {6, 4, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_iron_116 = {6, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_iron_117 = {8, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_iron_113 = {6, 4, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_iron_116 = {6, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_iron_117 = {8, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_lapis_113 = {10, 4, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_lapis_116 = {10, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_lapis_117 = {12, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_lapis_118 = {21, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lapis_113 = {10, 4, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lapis_116 = {10, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lapis_117 = {12, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lapis_118 = {21, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_large_copper_118 = {23, 6, 20, 16, LargeCopperOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_large_copper_118 = {23, 6, 20, 16, LargeCopperOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement - o_large_diamond_118 = {19, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_large_diamond_118 = {19, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.7F}, - o_lower_andesite_118 = {7, 6, 64, 2, LowerAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lower_andesite_118 = {7, 6, 64, 2, LowerAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_lower_coal_118 = {10, 6, 17, 20, LowerCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lower_coal_118 = {10, 6, 17, 20, LowerCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_lower_diorite_118 = {5, 6, 64, 2, LowerDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lower_diorite_118 = {5, 6, 64, 2, LowerDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses UniformInt.of(0, 1) - o_lower_gold_118 = {15, 6, 9, 1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lower_gold_118 = {15, 6, 9, 1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_lower_granite_118 = {3, 6, 64, 2, LowerGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lower_granite_118 = {3, 6, 64, 2, LowerGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_lower_redstone_118 = {17, 6, 8, 8, LowerRedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_lower_redstone_118 = {17, 6, 8, 8, LowerRedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_middle_iron_118 = {12, 6, 9, 10, MiddleIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_middle_iron_118 = {12, 6, 9, 10, MiddleIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_redstone_113 = {8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_redstone_116 = {8, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_redstone_117 = {10, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_redstone_118 = {16, 6, 8, 4, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_redstone_113 = {8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_redstone_116 = {8, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_redstone_117 = {10, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_redstone_118 = {16, 6, 8, 4, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_small_iron_118 = {13, 6, 4, 10, SmallIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_small_iron_118 = {13, 6, 4, 10, SmallIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_tuff_117 = {5, 6, 33, 1, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, - o_tuff_118 = {8, 6, 64, 2, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_tuff_117 = {5, 6, 33, 1, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_tuff_118 = {8, 6, 64, 2, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement - o_upper_andesite_118 = {6, 6, 64, 6, UpperAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_upper_andesite_118 = {6, 6, 64, 6, UpperAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_upper_coal_118 = {9, 6, 17, 30, UpperCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_upper_coal_118 = {9, 6, 17, 30, UpperCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement - o_upper_diorite_118 = {4, 6, 64, 6, UpperDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_upper_diorite_118 = {4, 6, 64, 6, UpperDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement - o_upper_granite_118 = {2, 6, 64, 6, UpperGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_upper_granite_118 = {2, 6, 64, 6, UpperGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_upper_iron_118 = {11, 6, 9, 90, UpperIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES}, + o_upper_iron_118 = {11, 6, 9, 90, UpperIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // nether - o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_blackstone_116_crimson_forest = {9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_blackstone_118 = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_blackstone_118_crimson_forest = {7, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_blackstone_118_warped_forest = {8, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_116_crimson_forest = {9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_118 = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_118_crimson_forest = {7, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_118_warped_forest = {8, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count - o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_large_debris_118 = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_large_debris_118_crimson_forest = {10, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_large_debris_118_warped_forest = {11, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - - o_magma_113 = {8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_116 = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_116_soul_sand_valley = {8, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_116_crimson_forest = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_116_warped_forest = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_118 = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_118_soul_sand_valley = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_118_basalt_deltas = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_118_crimson_forest = {4, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_magma_118_warped_forest = {5, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - - o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gold_118 = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gold_118_crimson_forest = {8, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gold_118_warped_forest = {9, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gold_118_basalt_deltas = {11, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - - o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gravel_116_crimson_forest = {8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gravel_116_warped_forest = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gravel_118 = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gravel_118_crimson_forest = {6, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_nether_gravel_118_warped_forest = {7, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - - o_quartz_113 = {7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_quartz_118 = {12, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_quartz_118_crimson_forest = {9, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_quartz_118_warped_forest = {10, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_quartz_118_basalt_deltas = {12, 5, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, + o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_large_debris_118 = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + o_large_debris_118_crimson_forest = {10, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + o_large_debris_118_warped_forest = {11, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + + o_magma_113 = {8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116 = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116_soul_sand_valley = {8, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116_crimson_forest = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116_warped_forest = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118 = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118_soul_sand_valley = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118_basalt_deltas = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118_crimson_forest = {4, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118_warped_forest = {5, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118 = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118_crimson_forest = {8, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118_warped_forest = {9, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118_basalt_deltas = {11, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_116_crimson_forest = {8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_116_warped_forest = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_118 = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_118_crimson_forest = {6, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_118_warped_forest = {7, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_quartz_113 = {7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118 = {12, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_crimson_forest = {9, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_warped_forest = {10, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_basalt_deltas = {12, 5, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count - o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_small_debris_118 = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_small_debris_118_crimson_forest = {11, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - o_small_debris_118_warped_forest = {12, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES}, - - o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES}, - o_soul_sand_118 = {8, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES} + o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_small_debris_118 = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + o_small_debris_118_crimson_forest = {11, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + o_small_debris_118_warped_forest = {12, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + + o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_soul_sand_118 = {8, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F} ; switch (oreType) @@ -2043,7 +2043,18 @@ SizedPos3 generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos Pos3 pos = {X, Y, Z}; // TODO: check if the block at pos is contained in config.replaceBlocks if (1) { - poses[posIndex++] = pos; + float chance = config.discardChanceOnAirExposure; + int skipAirCheck; + if (chance <= 0.0F) { + skipAirCheck = 1; + } else { + skipAirCheck = chance >= 1.0F ? 0 : rnd.nextFloat(rnd.state) >= chance; + } + if (skipAirCheck) { + poses[posIndex++] = pos; + } else if (1) { // TODO: check if the block at pos is not air-exposed + poses[posIndex++] = pos; + } } } } diff --git a/finders.h b/finders.h index df19f898..28c69f93 100644 --- a/finders.h +++ b/finders.h @@ -408,6 +408,7 @@ STRUCT(OreConfig) int8_t dim; uint8_t numReplaceBlocks; const uint32_t* replaceBlocks; + float discardChanceOnAirExposure; }; //============================================================================== diff --git a/rng.h b/rng.h index 3213e4c0..1c23c6dc 100644 --- a/rng.h +++ b/rng.h @@ -272,7 +272,7 @@ static inline int xNextIntJ(Xoroshiro *xr, uint32_t n) static inline int xNextIntBetween(Xoroshiro *xr, const int min, const int max) { - return xNextInt(xr, max - min + 1) + min; + return xNextIntJ(xr, max - min + 1) + min; } // expand as necessary @@ -303,7 +303,7 @@ static inline RandomSource createXoroshiro(Xoroshiro *xr) return (RandomSource) { .state = xr, .setSeed = (void (*)(void *, uint64_t)) xSetSeed, - .nextInt = (int (*)(void *, int)) xNextInt, + .nextInt = (int (*)(void *, int)) xNextIntJ, .nextFloat = (float (*)(void *)) xNextFloat, .nextDouble = (double (*)(void *)) xNextDouble, .nextIntBetween = (int (*)(void *, int, int)) xNextIntBetween, From 3ac16ea18fa24aa63c2a549c7b4681f5511b020e Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Wed, 23 Apr 2025 16:19:30 +0200 Subject: [PATCH 10/45] Free temp array --- finders.c | 1 + 1 file changed, 1 insertion(+) diff --git a/finders.c b/finders.c index a315741a..3ff0ca0b 100644 --- a/finders.c +++ b/finders.c @@ -1703,6 +1703,7 @@ SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chu memcpy(positions + offset, temp[i].pos3s, sizeof(Pos3) * temp[i].size); offset += temp[i].size; } + free(temp); return (SizedPos3) {size, positions}; } From b2f23315515173dc6f23f43aae43803ffee49e60 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Wed, 23 Apr 2025 16:41:48 +0200 Subject: [PATCH 11/45] Also free pos3s array --- finders.c | 1 + 1 file changed, 1 insertion(+) diff --git a/finders.c b/finders.c index 3ff0ca0b..6776c5f9 100644 --- a/finders.c +++ b/finders.c @@ -1701,6 +1701,7 @@ SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chu int offset = 0; for (int i = 0; i < repeatCount; i++) { memcpy(positions + offset, temp[i].pos3s, sizeof(Pos3) * temp[i].size); + free(temp[i].pos3s); offset += temp[i].size; } free(temp); From d51ab07373f76d588640c45ad5631b6d101da2f3 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Wed, 23 Apr 2025 17:32:46 +0200 Subject: [PATCH 12/45] Use list data structure --- finders.c | 80 ++++++++++++++++++++++++++++++++++++++++--------------- finders.h | 15 +++++++---- 2 files changed, 69 insertions(+), 26 deletions(-) diff --git a/finders.c b/finders.c index 6776c5f9..d368eb2e 100644 --- a/finders.c +++ b/finders.c @@ -68,6 +68,38 @@ uint64_t getPopulationSeed(int mc, uint64_t ws, int x, int z) return (x * a + z * b) ^ ws; } +void createPos3List(Pos3List* list, int initialCapacity) +{ + list->size = 0; + list->capacity = initialCapacity; + list->pos3s = malloc(list->capacity * sizeof(Pos3)); + if (!list->pos3s) { + fprintf(stderr, "Memory allocation failed.\n"); + exit(1); + } +} + +void appendPos3List(Pos3List* list, Pos3 pos3) +{ + if (list->size == list->capacity) { + list->capacity *= 2; + Pos3* newPos3s = realloc(list->pos3s, list->capacity * sizeof(Pos3)); + if (!newPos3s) { + fprintf(stderr, "Reallocation failed.\n"); + exit(1); + } + list->pos3s = newPos3s; + } + list->pos3s[list->size++] = pos3; +} + +void freePos3List(Pos3List* list) +{ + free(list->pos3s); + list->pos3s = NULL; + list->size = 0; + list->capacity = 0; +} int getStructureConfig(int structureType, int mc, StructureConfig *sconf) { @@ -1665,7 +1697,7 @@ int getBiomeForOreGen(const Generator *g, int chunkX, int chunkZ) return getBiomeAt(g, 4, (chunkX << 2) + 2, 0, (chunkZ << 2) + 2); } -SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ) +Pos3List generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ) { uint64_t populationSeed = getPopulationSeed(g->mc, g->seed, chunkX << 4, chunkZ << 4); RandomSource rnd; @@ -1689,23 +1721,25 @@ SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chu repeatCount = config.repeatCount; } - SizedPos3* temp = malloc(repeatCount * sizeof(SizedPos3)); + Pos3List* temp = malloc(repeatCount * sizeof(Pos3List)); int size = 0; for (int i = 0; i < repeatCount; i++) { Pos3 basePos = generateBaseOrePosition(g->mc, config, chunkX, chunkZ, rnd); - SizedPos3 orePositions = generateOrePositions(g->mc, config, basePos, rnd); + Pos3List orePositions = generateOrePositions(g->mc, config, basePos, rnd); temp[i] = orePositions; size += orePositions.size; } - Pos3* positions = malloc(size * sizeof(Pos3)); + Pos3List poses; + createPos3List(&poses, size); int offset = 0; for (int i = 0; i < repeatCount; i++) { - memcpy(positions + offset, temp[i].pos3s, sizeof(Pos3) * temp[i].size); + memcpy(poses.pos3s + offset, temp[i].pos3s, temp[i].size * sizeof(Pos3)); + poses.size += temp[i].size; free(temp[i].pos3s); offset += temp[i].size; } free(temp); - return (SizedPos3) {size, positions}; + return poses; } Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd) @@ -1897,7 +1931,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) return 0; } -SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource rnd) +Pos3List generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource rnd) { if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_18 && config.oreType == LowerGoldOre)) { int count; @@ -1911,27 +1945,29 @@ SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource } else { count = rnd.nextIntBetween(rnd.state, 0, 1); } - Pos3* poses = malloc(count * sizeof(Pos3)); + Pos3List poses; + createPos3List(&poses, count); for (int i = 0; i < count; i++) { if (mc <= MC_1_14) { int x = pos.x + rnd.nextInt(rnd.state, 16); int y = getOreYPos(mc, config.oreType, rnd); int z = pos.z + rnd.nextInt(rnd.state, 16); - poses[i] = (Pos3) {x, y, z}; + appendPos3List(&poses, (Pos3) {x, y, z}); } else { int x = pos.x + rnd.nextInt(rnd.state, 16); int z = pos.z + rnd.nextInt(rnd.state, 16); int y = getOreYPos(mc, config.oreType, rnd); - poses[i] = (Pos3) {x, y, z}; + appendPos3List(&poses, (Pos3) {x, y, z}); } } - return (SizedPos3) {count, poses}; + return poses; } // scatter if (config.oreType == LargeDebrisOre || config.oreType == SmallDebrisOre) { int count = rnd.nextInt(rnd.state, config.size + 1); - Pos3* poses = malloc(count * sizeof(Pos3)); + Pos3List poses; + createPos3List(&poses, count); for (int i = 0; i < count; ++i) { int size = MIN(i, 7); int x = roundf((rnd.nextFloat(rnd.state) - rnd.nextFloat(rnd.state)) * (float)size); @@ -1942,11 +1978,11 @@ SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource // TODO: check if the block at startPos is contained in config.replaceBlocks // TODO: and if the block at startPos is not air-exposed if (1) { - poses[i] = startPos; + appendPos3List(&poses, startPos); } } - return (SizedPos3) {count, poses}; + return poses; } // regular @@ -1974,13 +2010,15 @@ SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource } } - return (SizedPos3) {0, NULL}; + Pos3List poses; + createPos3List(&poses, 0); + return poses; } -SizedPos3 generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius) +Pos3List generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius) { - Pos3* poses = malloc(100 * sizeof(Pos3)); - int posIndex = 0; + Pos3List poses; + createPos3List(&poses, 16); char bitSet[BITNSLOTS(oreSize * radius * oreSize)]; int size = config.size; double* store = malloc(4 * size * sizeof(double)); @@ -2053,9 +2091,9 @@ SizedPos3 generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos skipAirCheck = chance >= 1.0F ? 0 : rnd.nextFloat(rnd.state) >= chance; } if (skipAirCheck) { - poses[posIndex++] = pos; + appendPos3List(&poses, pos); } else if (1) { // TODO: check if the block at pos is not air-exposed - poses[posIndex++] = pos; + appendPos3List(&poses, pos); } } } @@ -2063,7 +2101,7 @@ SizedPos3 generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos } } - return (SizedPos3) {posIndex, poses}; + return poses; } //============================================================================== diff --git a/finders.h b/finders.h index 28c69f93..2441ac28 100644 --- a/finders.h +++ b/finders.h @@ -57,13 +57,18 @@ STRUCT(StructureConfig) STRUCT(Pos) { int x, z; }; STRUCT(Pos3) { int x, y, z; }; -STRUCT(SizedPos3) +STRUCT(Pos3List) { - int size; Pos3* pos3s; + int capacity; + int size; }; +void createPos3List(Pos3List* list, int initialCapacity); + +void appendPos3List(Pos3List* list, Pos3 pos3); +void freePos3List(Pos3List* list); STRUCT(StrongholdIter) { @@ -486,15 +491,15 @@ int isViableOreBiome(int mc, int oreType, int biomeID); * @param chunkZ the chunk Y-coordinate * @return a sized array of ore positions */ -SizedPos3 generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ); +Pos3List generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ); Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd); int getOreYPos(int mc, int oreType, RandomSource rnd); -SizedPos3 generateOrePositions(int mc, OreConfig config, Pos3 bPos, RandomSource rnd); +Pos3List generateOrePositions(int mc, OreConfig config, Pos3 bPos, RandomSource rnd); -SizedPos3 generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); +Pos3List generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); /* Finds a suitable pseudo-random location in the specified area. * This function is used to determine the positions of spawn and strongholds. From 0f3db3363304a2adf2e87b827fe78dc4601d5545 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Wed, 23 Apr 2025 17:40:02 +0200 Subject: [PATCH 13/45] Remove outdated comment --- finders.c | 1 - 1 file changed, 1 deletion(-) diff --git a/finders.c b/finders.c index d368eb2e..e236f5cd 100644 --- a/finders.c +++ b/finders.c @@ -1233,7 +1233,6 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) // check the size in OreFeatures.java // check the repeatCount in OrePlacements.java - // OreFeatures.java also states `discardChanceOnAirExposure`, which is currently ignored static const OreConfig // overworld o_andesite_113 = {4, 4, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, From 3a7406c0516978adcbb753fdaf5ec7d8f779d5a9 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 24 Apr 2025 13:55:41 +0200 Subject: [PATCH 14/45] Add build height check --- finders.c | 7 +++++-- finders.h | 14 +++++++------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/finders.c b/finders.c index e236f5cd..c3d5eeb6 100644 --- a/finders.c +++ b/finders.c @@ -2004,7 +2004,7 @@ Pos3List generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource r for (int z = startZ; z <= startZ + oreSize; ++z) { // TODO: check if startY <= first y value in column that is motion blocking (Heightmap.Types#OCEAN_FLOOR_WG) if (1) { - return generateVeinPart(config, rnd, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); + return generateVeinPart(mc, config, rnd, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); } } } @@ -2014,8 +2014,10 @@ Pos3List generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource r return poses; } -Pos3List generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius) +Pos3List generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius) { + const int minBuildHeight = mc <= MC_1_17 ? 0 : -64; + const int maxBuildHeight = mc <= MC_1_17 ? 256 : 320; Pos3List poses; createPos3List(&poses, 16); char bitSet[BITNSLOTS(oreSize * radius * oreSize)]; @@ -2076,6 +2078,7 @@ Pos3List generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos, for (int Z = minZ; Z <= maxZ; ++Z) { double zSlide = ((double)Z + 0.5 - z) / offset; if (xSlide * xSlide + ySlide * ySlide + zSlide * zSlide >= 1.0) continue; + if (Y < minBuildHeight || Y >= maxBuildHeight) continue; int area = X - startX + (Y - startY) * oreSize + (Z - startZ) * oreSize * radius; if (BITTEST(bitSet, area)) continue; BITSET(bitSet, area); diff --git a/finders.h b/finders.h index 2441ac28..ccb4bd49 100644 --- a/finders.h +++ b/finders.h @@ -87,12 +87,12 @@ STRUCT(StrongholdIter) STRUCT(StructureVariant) { - uint8_t abandoned :1; // is zombie village - uint8_t giant :1; // giant portal variant - uint8_t underground :1; // underground portal - uint8_t airpocket :1; // portal with air pocket - uint8_t basement :1; // igloo with basement - uint8_t cracked :1; // geode with crack + uint8_t abandoned; // is zombie village + uint8_t giant; // giant portal variant + uint8_t underground; // underground portal + uint8_t airpocket; // portal with air pocket + uint8_t basement; // igloo with basement + uint8_t cracked; // geode with crack uint8_t size; // geode size | igloo middel pieces uint8_t start; // starting piece index short biome; // biome variant @@ -499,7 +499,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd); Pos3List generateOrePositions(int mc, OreConfig config, Pos3 bPos, RandomSource rnd); -Pos3List generateVeinPart(OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); +Pos3List generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); /* Finds a suitable pseudo-random location in the specified area. * This function is used to determine the positions of spawn and strongholds. From 2897f1c9ad7f862cc89c53d6dbd6d17d31e7af0b Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 24 Apr 2025 16:46:30 +0200 Subject: [PATCH 15/45] 1.19 --- finders.c | 186 +++++++++++++++++++++++++++--------------------------- 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/finders.c b/finders.c index c3d5eeb6..da3ceec6 100644 --- a/finders.c +++ b/finders.c @@ -1413,13 +1413,13 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17) *oconf = o_andesite_116; return mc > MC_1_12 && mc <= MC_1_17; case BuriedDiamondOre: - if (mc <= MC_1_18) *oconf = o_buried_diamond_118; + if (mc <= MC_1_19) *oconf = o_buried_diamond_118; return mc > MC_1_17; case BuriedLapisOre: - if (mc <= MC_1_18) *oconf = o_buried_lapis_118; + if (mc <= MC_1_19) *oconf = o_buried_lapis_118; return mc > MC_1_17; case ClayOre: - if (mc <= MC_1_18) *oconf = o_clay_118; + if (mc <= MC_1_19) *oconf = o_clay_118; return mc > MC_1_17; case CoalOre: if (mc <= MC_1_15) *oconf = o_coal_113; @@ -1428,7 +1428,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) return mc > MC_1_12 && mc <= MC_1_17; case CopperOre: if (mc <= MC_1_17) *oconf = o_copper_117; - if (mc <= MC_1_18) *oconf = o_copper_118; + if (mc <= MC_1_19) *oconf = o_copper_118; return mc > MC_1_16; case DeepslateOre: if (mc <= MC_1_17) *oconf = o_deepslate_117; @@ -1437,7 +1437,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_15) *oconf = o_diamond_113; else if (mc <= MC_1_16) *oconf = o_diamond_116; else if (mc <= MC_1_17) *oconf = o_diamond_117; - else if (mc <= MC_1_18) *oconf = o_diamond_118; + else if (mc <= MC_1_19) *oconf = o_diamond_118; return mc > MC_1_12; case DioriteOre: if (mc <= MC_1_15) *oconf = o_diorite_113; @@ -1446,25 +1446,25 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case DirtOre: if (mc <= MC_1_15) *oconf = o_dirt_113; else if (mc <= MC_1_17) *oconf = o_dirt_116; - else if (mc <= MC_1_18) *oconf = o_dirt_118; + else if (mc <= MC_1_19) *oconf = o_dirt_118; return mc > MC_1_12; case EmeraldOre: if (mc <= MC_1_15) *oconf = o_emerald_113; else if (mc <= MC_1_16) *oconf = o_emerald_116; else if (mc <= MC_1_17) *oconf = o_emerald_117; - else if (mc <= MC_1_18) *oconf = o_emerald_118; + else if (mc <= MC_1_19) *oconf = o_emerald_118; return mc > MC_1_12; case ExtraGoldOre: if (mc <= MC_1_15) *oconf = o_extra_gold_113; else if (mc <= MC_1_16) *oconf = o_extra_gold_116; else if (mc <= MC_1_17) *oconf = o_extra_gold_117; - else if (mc <= MC_1_18) *oconf = o_extra_gold_118; + else if (mc <= MC_1_19) *oconf = o_extra_gold_118; return mc > MC_1_12; case GoldOre: if (mc <= MC_1_15) *oconf = o_gold_113; else if (mc <= MC_1_16) *oconf = o_gold_116; else if (mc <= MC_1_17) *oconf = o_gold_117; - else if (mc <= MC_1_18) *oconf = o_gold_118; + else if (mc <= MC_1_19) *oconf = o_gold_118; return mc > MC_1_12; case GraniteOre: if (mc <= MC_1_15) *oconf = o_granite_113; @@ -1473,7 +1473,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case GravelOre: if (mc <= MC_1_15) *oconf = o_gravel_113; else if (mc <= MC_1_17) *oconf = o_gravel_116; - else if (mc <= MC_1_18) *oconf = o_gravel_118; + else if (mc <= MC_1_19) *oconf = o_gravel_118; return mc > MC_1_12; case IronOre: if (mc <= MC_1_15) *oconf = o_iron_113; @@ -1484,79 +1484,79 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_15) *oconf = o_lapis_113; else if (mc <= MC_1_16) *oconf = o_lapis_116; else if (mc <= MC_1_17) *oconf = o_lapis_117; - else if (mc <= MC_1_18) *oconf = o_lapis_118; + else if (mc <= MC_1_19) *oconf = o_lapis_118; return mc > MC_1_12; case LargeCopperOre: - if (mc <= MC_1_18) *oconf = o_large_copper_118; + if (mc <= MC_1_19) *oconf = o_large_copper_118; return mc > MC_1_17; case LargeDiamondOre: - if (mc <= MC_1_18) *oconf = o_large_diamond_118; + if (mc <= MC_1_19) *oconf = o_large_diamond_118; return mc > MC_1_17; case LowerAndesiteOre: - if (mc <= MC_1_18) *oconf = o_lower_andesite_118; + if (mc <= MC_1_19) *oconf = o_lower_andesite_118; return mc > MC_1_17; case LowerCoalOre: - if (mc <= MC_1_18) *oconf = o_lower_coal_118; + if (mc <= MC_1_19) *oconf = o_lower_coal_118; return mc > MC_1_17; case LowerDioriteOre: - if (mc <= MC_1_18) *oconf = o_lower_diorite_118; + if (mc <= MC_1_19) *oconf = o_lower_diorite_118; return mc > MC_1_17; case LowerGoldOre: - if (mc <= MC_1_18) *oconf = o_lower_gold_118; + if (mc <= MC_1_19) *oconf = o_lower_gold_118; return mc > MC_1_17; case LowerGraniteOre: - if (mc <= MC_1_18) *oconf = o_lower_granite_118; + if (mc <= MC_1_19) *oconf = o_lower_granite_118; return mc > MC_1_17; case LowerRedstoneOre: - if (mc <= MC_1_18) *oconf = o_lower_redstone_118; + if (mc <= MC_1_19) *oconf = o_lower_redstone_118; return mc > MC_1_17; case MiddleIronOre: - if (mc <= MC_1_18) *oconf = o_middle_iron_118; + if (mc <= MC_1_19) *oconf = o_middle_iron_118; return mc > MC_1_17; case RedstoneOre: if (mc <= MC_1_15) *oconf = o_redstone_113; else if (mc <= MC_1_16) *oconf = o_redstone_116; else if (mc <= MC_1_17) *oconf = o_redstone_117; - else if (mc <= MC_1_18) *oconf = o_redstone_118; + else if (mc <= MC_1_19) *oconf = o_redstone_118; return mc > MC_1_12; case SmallIronOre: - if (mc <= MC_1_18) *oconf = o_small_iron_118; + if (mc <= MC_1_19) *oconf = o_small_iron_118; return mc > MC_1_17; case TuffOre: if (mc <= MC_1_17) *oconf = o_tuff_117; - else if (mc <= MC_1_18) *oconf = o_tuff_118; + else if (mc <= MC_1_19) *oconf = o_tuff_118; return mc > MC_1_16; case UpperAndesiteOre: - if (mc <= MC_1_18) *oconf = o_upper_andesite_118; + if (mc <= MC_1_19) *oconf = o_upper_andesite_118; return mc > MC_1_17; case UpperCoalOre: - if (mc <= MC_1_18) *oconf = o_upper_coal_118; + if (mc <= MC_1_19) *oconf = o_upper_coal_118; return mc > MC_1_17; case UpperDioriteOre: - if (mc <= MC_1_18) *oconf = o_upper_diorite_118; + if (mc <= MC_1_19) *oconf = o_upper_diorite_118; return mc > MC_1_17; case UpperGraniteOre: - if (mc <= MC_1_18) *oconf = o_upper_granite_118; + if (mc <= MC_1_19) *oconf = o_upper_granite_118; return mc > MC_1_17; case UpperIronOre: - if (mc <= MC_1_18) *oconf = o_upper_iron_118; + if (mc <= MC_1_19) *oconf = o_upper_iron_118; return mc > MC_1_17; // nether case BlackstoneOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_blackstone_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_blackstone_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_blackstone_116; - else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_blackstone_118_crimson_forest; - else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_blackstone_118_warped_forest; - else if (mc <= MC_1_18) *oconf = o_blackstone_118; + else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_blackstone_118_crimson_forest; + else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_blackstone_118_warped_forest; + else if (mc <= MC_1_19) *oconf = o_blackstone_118; return mc > MC_1_15; case LargeDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_large_debris_116; - else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_large_debris_118_crimson_forest; - else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_large_debris_118_warped_forest; - else if (mc <= MC_1_18) *oconf = o_large_debris_118; + else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_large_debris_118_crimson_forest; + else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_large_debris_118_warped_forest; + else if (mc <= MC_1_19) *oconf = o_large_debris_118; return mc > MC_1_15; case MagmaOre: if (mc <= MC_1_15) *oconf = o_magma_113; @@ -1565,29 +1565,29 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_magma_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_magma_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_magma_116; - else if (mc <= MC_1_18 && biomeID == soul_sand_valley) *oconf = o_magma_118_soul_sand_valley; - else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_magma_118_crimson_forest; - else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_magma_118_warped_forest; - else if (mc <= MC_1_18 && biomeID == basalt_deltas) *oconf = o_magma_118_basalt_deltas; - else if (mc <= MC_1_18) *oconf = o_magma_118; + else if (mc <= MC_1_19 && biomeID == soul_sand_valley) *oconf = o_magma_118_soul_sand_valley; + else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_magma_118_crimson_forest; + else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_magma_118_warped_forest; + else if (mc <= MC_1_19 && biomeID == basalt_deltas) *oconf = o_magma_118_basalt_deltas; + else if (mc <= MC_1_19) *oconf = o_magma_118; return mc > MC_1_12; case NetherGoldOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gold_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_nether_gold_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_nether_gold_116; - else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_nether_gold_118_crimson_forest; - else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_nether_gold_118_warped_forest; - else if (mc <= MC_1_18 && biomeID == basalt_deltas) *oconf = o_nether_gold_118_basalt_deltas; - else if (mc <= MC_1_18) *oconf = o_nether_gold_118; + else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_nether_gold_118_crimson_forest; + else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_nether_gold_118_warped_forest; + else if (mc <= MC_1_19 && biomeID == basalt_deltas) *oconf = o_nether_gold_118_basalt_deltas; + else if (mc <= MC_1_19) *oconf = o_nether_gold_118; return mc > MC_1_15; case NetherGravelOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gravel_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gravel_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_nether_gravel_116; - else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_nether_gravel_118_crimson_forest; - else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_nether_gravel_118_warped_forest; - else if (mc <= MC_1_18) *oconf = o_nether_gravel_118; + else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_nether_gravel_118_crimson_forest; + else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_nether_gravel_118_warped_forest; + else if (mc <= MC_1_19) *oconf = o_nether_gravel_118; return mc > MC_1_15; case QuartzOre: if (mc <= MC_1_15) *oconf = o_quartz_113; @@ -1595,22 +1595,22 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_quartz_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_quartz_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_quartz_116; - else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_quartz_118_crimson_forest; - else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_quartz_118_warped_forest; - else if (mc <= MC_1_18 && biomeID == basalt_deltas) *oconf = o_quartz_118_basalt_deltas; - else if (mc <= MC_1_18) *oconf = o_quartz_118; + else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_quartz_118_crimson_forest; + else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_quartz_118_warped_forest; + else if (mc <= MC_1_19 && biomeID == basalt_deltas) *oconf = o_quartz_118_basalt_deltas; + else if (mc <= MC_1_19) *oconf = o_quartz_118; return mc > MC_1_12; case SmallDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_small_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_small_debris_116; - else if (mc <= MC_1_18 && biomeID == crimson_forest) *oconf = o_small_debris_118_crimson_forest; - else if (mc <= MC_1_18 && biomeID == warped_forest) *oconf = o_small_debris_118_warped_forest; - else if (mc <= MC_1_18) *oconf = o_small_debris_118; + else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_small_debris_118_crimson_forest; + else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_small_debris_118_warped_forest; + else if (mc <= MC_1_19) *oconf = o_small_debris_118; return mc > MC_1_15; case SoulSandOre: if (mc <= MC_1_17) *oconf = o_soul_sand_116; - if (mc <= MC_1_18) *oconf = o_soul_sand_118; + if (mc <= MC_1_19) *oconf = o_soul_sand_118; return mc > MC_1_15; default: memset(oconf, 0, sizeof(OreConfig)); @@ -1665,7 +1665,7 @@ int isViableOreBiome(int mc, int oreType, int biomeID) biomeID == eroded_badlands || biomeID == modified_wooded_badlands_plateau || biomeID == modified_badlands_plateau || biomeID == wooded_badlands); case LargeCopperOre: - return biomeID == dripstone_caves; + return biomeID == dripstone_caves || biomeID == deep_dark; case ClayOre: return biomeID == lush_caves; // nether @@ -1743,7 +1743,7 @@ Pos3List generateOres(const Generator *g, OreConfig config, int chunkX, int chun Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd) { - if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_18 && config.oreType == LowerGoldOre)) { + if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_19 && config.oreType == LowerGoldOre)) { return (Pos3) {chunkX << 4, 0, chunkZ << 4}; } if (mc <= MC_1_14) { @@ -1768,14 +1768,14 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); break; case BuriedDiamondOre: - if (mc <= MC_1_18) return providerTriangleRange(rnd, -64 + -80, -64 + 80); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case BuriedLapisOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 64); + if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 64); break; case ClayOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 60); - if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 256); + if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 256); break; case CoalOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 128); @@ -1783,7 +1783,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) break; case CopperOre: if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 96); - if (mc <= MC_1_18) return providerTriangleRange(rnd, -16, 112); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -16, 112); break; case DeepslateOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); @@ -1792,7 +1792,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); // was 16 in 1.17, changed to 15 in 1.17.1 if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - if (mc <= MC_1_18) return providerTriangleRange(rnd, -64 + -80, -64 + 80); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case DioriteOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); @@ -1801,22 +1801,22 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case DirtOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 160); + if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 160); break; case EmeraldOre: if (mc <= MC_1_16) return rnd.nextInt(rnd.state, 28) + 4; if (mc <= MC_1_17) return providerUniformRange(rnd, 4, 31); - if (mc <= MC_1_18) return providerTriangleRange(rnd, -16, 480); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -16, 480); break; case ExtraGoldOre: if (mc <= MC_1_16) return providerRange(rnd, 32, 32, 80); if (mc <= MC_1_17) return providerUniformRange(rnd, 32, 79); - if (mc <= MC_1_18) return providerUniformRange(rnd, 32, 256); + if (mc <= MC_1_19) return providerUniformRange(rnd, 32, 256); break; case GoldOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 31); - if (mc <= MC_1_18) return providerTriangleRange(rnd, -64, 32); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -64, 32); break; case GraniteOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); @@ -1825,7 +1825,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case GravelOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 319); + if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 319); break; case IronOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 64); @@ -1834,94 +1834,94 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case LapisOre: if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 16); if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 30); - if (mc <= MC_1_18) return providerTriangleRange(rnd, -32, 32); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -32, 32); break; case LargeCopperOre: - if (mc <= MC_1_18) return providerTriangleRange(rnd, -16, 112); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -16, 112); break; case LargeDiamondOre: - if (mc <= MC_1_18) return providerTriangleRange(rnd, -64 + -80, -64 + 80); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case LowerAndesiteOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 60); break; case LowerCoalOre: - if (mc <= MC_1_18) return providerTriangleRange(rnd, 0, 192); + if (mc <= MC_1_19) return providerTriangleRange(rnd, 0, 192); break; case LowerDioriteOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 60); break; case LowerGoldOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, -64, -48); + if (mc <= MC_1_19) return providerUniformRange(rnd, -64, -48); break; case LowerGraniteOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 60); break; case LowerRedstoneOre: - if (mc <= MC_1_18) return providerTriangleRange(rnd, -64 + -32, -64 + 32); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -64 + -32, -64 + 32); break; case MiddleIronOre: - if (mc <= MC_1_18) return providerTriangleRange(rnd, -24, 56); + if (mc <= MC_1_19) return providerTriangleRange(rnd, -24, 56); break; case RedstoneOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 15); + if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 15); break; case SmallIronOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 72); + if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 72); break; case TuffOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); - if (mc <= MC_1_18) return providerUniformRange(rnd, -64, 0); + if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 0); break; case UpperAndesiteOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, 64, 128); + if (mc <= MC_1_19) return providerUniformRange(rnd, 64, 128); break; case UpperCoalOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, 136, 319); + if (mc <= MC_1_19) return providerUniformRange(rnd, 136, 319); break; case UpperDioriteOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, 64, 128); + if (mc <= MC_1_19) return providerUniformRange(rnd, 64, 128); break; case UpperGraniteOre: - if (mc <= MC_1_18) return providerUniformRange(rnd, 64, 128); + if (mc <= MC_1_19) return providerUniformRange(rnd, 64, 128); break; case UpperIronOre: - if (mc <= MC_1_18) return providerTriangleRange(rnd, 80, 384); + if (mc <= MC_1_19) return providerTriangleRange(rnd, 80, 384); break; // nether case BlackstoneOre: if (mc <= MC_1_16) return providerRange(rnd, 5, 10, 37); - if (mc <= MC_1_18) return providerUniformRange(rnd, 5, 31); + if (mc <= MC_1_19) return providerUniformRange(rnd, 5, 31); break; case LargeDebrisOre: if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 8); - if (mc <= MC_1_18) return providerTriangleRange(rnd, 8, 24); + if (mc <= MC_1_19) return providerTriangleRange(rnd, 8, 24); break; case MagmaOre: if (mc <= MC_1_16) return 32 - 5 + rnd.nextInt(rnd.state, 10); - if (mc <= MC_1_18) return providerUniformRange(rnd, 27, 36); + if (mc <= MC_1_19) return providerUniformRange(rnd, 27, 36); break; case NetherGoldOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - if (mc <= MC_1_18) return providerUniformRange(rnd, 0 + 10, 127 - 10); + if (mc <= MC_1_19) return providerUniformRange(rnd, 0 + 10, 127 - 10); break; case NetherGravelOre: if (mc <= MC_1_16) return providerRange(rnd, 5, 0, 37); - if (mc <= MC_1_18) return providerUniformRange(rnd, 5, 41); + if (mc <= MC_1_19) return providerUniformRange(rnd, 5, 41); break; case QuartzOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - if (mc <= MC_1_18) return providerUniformRange(rnd, 0 + 10, 127 - 10); + if (mc <= MC_1_19) return providerUniformRange(rnd, 0 + 10, 127 - 10); break; case SmallDebrisOre: if (mc <= MC_1_16) return providerRange(rnd, 8, 16, 128); - if (mc <= MC_1_18) return providerUniformRange(rnd, 8, 127 - 8); + if (mc <= MC_1_19) return providerUniformRange(rnd, 8, 127 - 8); break; case SoulSandOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); - if (mc <= MC_1_18) return providerUniformRange(rnd, 0, 31); + if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 31); break; default: fprintf(stderr, "getOreYPos: not implemented for ore type %d.\n", oreType); @@ -1932,7 +1932,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) Pos3List generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource rnd) { - if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_18 && config.oreType == LowerGoldOre)) { + if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_19 && config.oreType == LowerGoldOre)) { int count; if (config.oreType == EmeraldOre) { if (mc <= MC_1_16) { From 70d4f36364cf22d8788b76f951c9316794759f2b Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 24 Apr 2025 17:50:23 +0200 Subject: [PATCH 16/45] 1.20 --- finders.c | 193 +++++++++++++++++++++++++++++++----------------------- finders.h | 1 + 2 files changed, 111 insertions(+), 83 deletions(-) diff --git a/finders.c b/finders.c index da3ceec6..5ee266b0 100644 --- a/finders.c +++ b/finders.c @@ -1239,10 +1239,13 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_andesite_116 = {4, 6, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_buried_diamond_118 = {20, 6, 8, 4, BuriedDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, + o_buried_diamond_120 = {21, 6, 8, 4, BuriedDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, o_buried_lapis_118 = {22, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, + o_buried_lapis_120 = {23, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, o_clay_118 = {24, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_clay_120 = {25, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1250,6 +1253,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_copper_118 = {23, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_copper_120 = {24, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1269,11 +1273,13 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_emerald_118 = {27, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_120 = {28, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_118 = {24, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_extra_gold_120 = {25, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, o_gold_113 = {7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_gold_116 = {7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1295,11 +1301,14 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_lapis_116 = {10, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_lapis_117 = {12, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_lapis_118 = {21, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lapis_120 = {22, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_large_copper_118 = {23, 6, 20, 16, LargeCopperOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_large_copper_120 = {24, 6, 20, 16, LargeCopperOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement o_large_diamond_118 = {19, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.7F}, + o_large_diamond_120 = {20, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.7F}, o_lower_andesite_118 = {7, 6, 64, 2, LowerAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1314,6 +1323,8 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_lower_redstone_118 = {17, 6, 8, 8, LowerRedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_medium_diamond_120 = {19, 6, 8, 2, MediumDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_middle_iron_118 = {12, 6, 9, 10, MiddleIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_redstone_113 = {8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1414,12 +1425,15 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) return mc > MC_1_12 && mc <= MC_1_17; case BuriedDiamondOre: if (mc <= MC_1_19) *oconf = o_buried_diamond_118; + else if (mc <= MC_1_20) *oconf = o_buried_diamond_120; return mc > MC_1_17; case BuriedLapisOre: if (mc <= MC_1_19) *oconf = o_buried_lapis_118; + else if (mc <= MC_1_20) *oconf = o_buried_lapis_120; return mc > MC_1_17; case ClayOre: if (mc <= MC_1_19) *oconf = o_clay_118; + if (mc <= MC_1_20) *oconf = o_clay_120; return mc > MC_1_17; case CoalOre: if (mc <= MC_1_15) *oconf = o_coal_113; @@ -1429,6 +1443,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case CopperOre: if (mc <= MC_1_17) *oconf = o_copper_117; if (mc <= MC_1_19) *oconf = o_copper_118; + if (mc <= MC_1_20) *oconf = o_copper_120; return mc > MC_1_16; case DeepslateOre: if (mc <= MC_1_17) *oconf = o_deepslate_117; @@ -1437,7 +1452,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_15) *oconf = o_diamond_113; else if (mc <= MC_1_16) *oconf = o_diamond_116; else if (mc <= MC_1_17) *oconf = o_diamond_117; - else if (mc <= MC_1_19) *oconf = o_diamond_118; + else if (mc <= MC_1_20) *oconf = o_diamond_118; return mc > MC_1_12; case DioriteOre: if (mc <= MC_1_15) *oconf = o_diorite_113; @@ -1446,25 +1461,27 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case DirtOre: if (mc <= MC_1_15) *oconf = o_dirt_113; else if (mc <= MC_1_17) *oconf = o_dirt_116; - else if (mc <= MC_1_19) *oconf = o_dirt_118; + else if (mc <= MC_1_20) *oconf = o_dirt_118; return mc > MC_1_12; case EmeraldOre: if (mc <= MC_1_15) *oconf = o_emerald_113; else if (mc <= MC_1_16) *oconf = o_emerald_116; else if (mc <= MC_1_17) *oconf = o_emerald_117; else if (mc <= MC_1_19) *oconf = o_emerald_118; + else if (mc <= MC_1_20) *oconf = o_emerald_120; return mc > MC_1_12; case ExtraGoldOre: if (mc <= MC_1_15) *oconf = o_extra_gold_113; else if (mc <= MC_1_16) *oconf = o_extra_gold_116; else if (mc <= MC_1_17) *oconf = o_extra_gold_117; else if (mc <= MC_1_19) *oconf = o_extra_gold_118; + else if (mc <= MC_1_20) *oconf = o_extra_gold_120; return mc > MC_1_12; case GoldOre: if (mc <= MC_1_15) *oconf = o_gold_113; else if (mc <= MC_1_16) *oconf = o_gold_116; else if (mc <= MC_1_17) *oconf = o_gold_117; - else if (mc <= MC_1_19) *oconf = o_gold_118; + else if (mc <= MC_1_20) *oconf = o_gold_118; return mc > MC_1_12; case GraniteOre: if (mc <= MC_1_15) *oconf = o_granite_113; @@ -1473,7 +1490,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case GravelOre: if (mc <= MC_1_15) *oconf = o_gravel_113; else if (mc <= MC_1_17) *oconf = o_gravel_116; - else if (mc <= MC_1_19) *oconf = o_gravel_118; + else if (mc <= MC_1_20) *oconf = o_gravel_118; return mc > MC_1_12; case IronOre: if (mc <= MC_1_15) *oconf = o_iron_113; @@ -1485,78 +1502,84 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_16) *oconf = o_lapis_116; else if (mc <= MC_1_17) *oconf = o_lapis_117; else if (mc <= MC_1_19) *oconf = o_lapis_118; + else if (mc <= MC_1_20) *oconf = o_lapis_120; return mc > MC_1_12; case LargeCopperOre: if (mc <= MC_1_19) *oconf = o_large_copper_118; + else if (mc <= MC_1_20) *oconf = o_large_copper_120; return mc > MC_1_17; case LargeDiamondOre: if (mc <= MC_1_19) *oconf = o_large_diamond_118; + else if (mc <= MC_1_20) *oconf = o_large_diamond_120; return mc > MC_1_17; case LowerAndesiteOre: - if (mc <= MC_1_19) *oconf = o_lower_andesite_118; + if (mc <= MC_1_20) *oconf = o_lower_andesite_118; return mc > MC_1_17; case LowerCoalOre: - if (mc <= MC_1_19) *oconf = o_lower_coal_118; + if (mc <= MC_1_20) *oconf = o_lower_coal_118; return mc > MC_1_17; case LowerDioriteOre: - if (mc <= MC_1_19) *oconf = o_lower_diorite_118; + if (mc <= MC_1_20) *oconf = o_lower_diorite_118; return mc > MC_1_17; case LowerGoldOre: - if (mc <= MC_1_19) *oconf = o_lower_gold_118; + if (mc <= MC_1_20) *oconf = o_lower_gold_118; return mc > MC_1_17; case LowerGraniteOre: - if (mc <= MC_1_19) *oconf = o_lower_granite_118; + if (mc <= MC_1_20) *oconf = o_lower_granite_118; return mc > MC_1_17; case LowerRedstoneOre: - if (mc <= MC_1_19) *oconf = o_lower_redstone_118; + if (mc <= MC_1_20) *oconf = o_lower_redstone_118; return mc > MC_1_17; + case MediumDiamondOre: + if (mc <= MC_1_20) *oconf = o_medium_diamond_120; + return mc > MC_1_19; case MiddleIronOre: - if (mc <= MC_1_19) *oconf = o_middle_iron_118; + if (mc <= MC_1_20) *oconf = o_middle_iron_118; return mc > MC_1_17; case RedstoneOre: if (mc <= MC_1_15) *oconf = o_redstone_113; else if (mc <= MC_1_16) *oconf = o_redstone_116; else if (mc <= MC_1_17) *oconf = o_redstone_117; - else if (mc <= MC_1_19) *oconf = o_redstone_118; + else if (mc <= MC_1_20) *oconf = o_redstone_118; return mc > MC_1_12; case SmallIronOre: - if (mc <= MC_1_19) *oconf = o_small_iron_118; + if (mc <= MC_1_20) *oconf = o_small_iron_118; return mc > MC_1_17; case TuffOre: if (mc <= MC_1_17) *oconf = o_tuff_117; - else if (mc <= MC_1_19) *oconf = o_tuff_118; + else if (mc <= MC_1_20) *oconf = o_tuff_118; return mc > MC_1_16; case UpperAndesiteOre: - if (mc <= MC_1_19) *oconf = o_upper_andesite_118; + if (mc <= MC_1_20) *oconf = o_upper_andesite_118; return mc > MC_1_17; case UpperCoalOre: - if (mc <= MC_1_19) *oconf = o_upper_coal_118; + if (mc <= MC_1_20) *oconf = o_upper_coal_118; return mc > MC_1_17; case UpperDioriteOre: - if (mc <= MC_1_19) *oconf = o_upper_diorite_118; + if (mc <= MC_1_20) *oconf = o_upper_diorite_118; return mc > MC_1_17; case UpperGraniteOre: - if (mc <= MC_1_19) *oconf = o_upper_granite_118; + if (mc <= MC_1_20) *oconf = o_upper_granite_118; return mc > MC_1_17; case UpperIronOre: - if (mc <= MC_1_19) *oconf = o_upper_iron_118; + if (mc <= MC_1_20) *oconf = o_upper_iron_118; return mc > MC_1_17; // nether case BlackstoneOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_blackstone_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_blackstone_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_blackstone_116; - else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_blackstone_118_crimson_forest; - else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_blackstone_118_warped_forest; - else if (mc <= MC_1_19) *oconf = o_blackstone_118; + else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_blackstone_118_crimson_forest; + else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_blackstone_118_warped_forest; + else if (mc <= MC_1_20) *oconf = o_blackstone_118; return mc > MC_1_15; case LargeDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_large_debris_116; - else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_large_debris_118_crimson_forest; - else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_large_debris_118_warped_forest; - else if (mc <= MC_1_19) *oconf = o_large_debris_118; + else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_large_debris_118_crimson_forest; + else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_large_debris_118_warped_forest; + else if (mc <= MC_1_20) *oconf = o_large_debris_118; return mc > MC_1_15; case MagmaOre: if (mc <= MC_1_15) *oconf = o_magma_113; @@ -1565,29 +1588,29 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_magma_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_magma_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_magma_116; - else if (mc <= MC_1_19 && biomeID == soul_sand_valley) *oconf = o_magma_118_soul_sand_valley; - else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_magma_118_crimson_forest; - else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_magma_118_warped_forest; - else if (mc <= MC_1_19 && biomeID == basalt_deltas) *oconf = o_magma_118_basalt_deltas; - else if (mc <= MC_1_19) *oconf = o_magma_118; + else if (mc <= MC_1_20 && biomeID == soul_sand_valley) *oconf = o_magma_118_soul_sand_valley; + else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_magma_118_crimson_forest; + else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_magma_118_warped_forest; + else if (mc <= MC_1_20 && biomeID == basalt_deltas) *oconf = o_magma_118_basalt_deltas; + else if (mc <= MC_1_20) *oconf = o_magma_118; return mc > MC_1_12; case NetherGoldOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gold_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_nether_gold_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_nether_gold_116; - else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_nether_gold_118_crimson_forest; - else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_nether_gold_118_warped_forest; - else if (mc <= MC_1_19 && biomeID == basalt_deltas) *oconf = o_nether_gold_118_basalt_deltas; - else if (mc <= MC_1_19) *oconf = o_nether_gold_118; + else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_nether_gold_118_crimson_forest; + else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_nether_gold_118_warped_forest; + else if (mc <= MC_1_20 && biomeID == basalt_deltas) *oconf = o_nether_gold_118_basalt_deltas; + else if (mc <= MC_1_20) *oconf = o_nether_gold_118; return mc > MC_1_15; case NetherGravelOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gravel_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gravel_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_nether_gravel_116; - else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_nether_gravel_118_crimson_forest; - else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_nether_gravel_118_warped_forest; - else if (mc <= MC_1_19) *oconf = o_nether_gravel_118; + else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_nether_gravel_118_crimson_forest; + else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_nether_gravel_118_warped_forest; + else if (mc <= MC_1_20) *oconf = o_nether_gravel_118; return mc > MC_1_15; case QuartzOre: if (mc <= MC_1_15) *oconf = o_quartz_113; @@ -1595,22 +1618,22 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_quartz_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_quartz_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_quartz_116; - else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_quartz_118_crimson_forest; - else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_quartz_118_warped_forest; - else if (mc <= MC_1_19 && biomeID == basalt_deltas) *oconf = o_quartz_118_basalt_deltas; - else if (mc <= MC_1_19) *oconf = o_quartz_118; + else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_quartz_118_crimson_forest; + else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_quartz_118_warped_forest; + else if (mc <= MC_1_20 && biomeID == basalt_deltas) *oconf = o_quartz_118_basalt_deltas; + else if (mc <= MC_1_20) *oconf = o_quartz_118; return mc > MC_1_12; case SmallDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_small_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_small_debris_116; - else if (mc <= MC_1_19 && biomeID == crimson_forest) *oconf = o_small_debris_118_crimson_forest; - else if (mc <= MC_1_19 && biomeID == warped_forest) *oconf = o_small_debris_118_warped_forest; - else if (mc <= MC_1_19) *oconf = o_small_debris_118; + else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_small_debris_118_crimson_forest; + else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_small_debris_118_warped_forest; + else if (mc <= MC_1_20) *oconf = o_small_debris_118; return mc > MC_1_15; case SoulSandOre: if (mc <= MC_1_17) *oconf = o_soul_sand_116; - if (mc <= MC_1_19) *oconf = o_soul_sand_118; + if (mc <= MC_1_20) *oconf = o_soul_sand_118; return mc > MC_1_15; default: memset(oconf, 0, sizeof(OreConfig)); @@ -1645,6 +1668,7 @@ int isViableOreBiome(int mc, int oreType, int biomeID) case LowerGoldOre: case LowerGraniteOre: case LowerRedstoneOre: + case MediumDiamondOre: case MiddleIronOre: case RedstoneOre: case SmallIronOre: @@ -1743,7 +1767,7 @@ Pos3List generateOres(const Generator *g, OreConfig config, int chunkX, int chun Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd) { - if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_19 && config.oreType == LowerGoldOre)) { + if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_20 && config.oreType == LowerGoldOre)) { return (Pos3) {chunkX << 4, 0, chunkZ << 4}; } if (mc <= MC_1_14) { @@ -1768,14 +1792,14 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); break; case BuriedDiamondOre: - if (mc <= MC_1_19) return providerTriangleRange(rnd, -64 + -80, -64 + 80); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case BuriedLapisOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 64); + if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 64); break; case ClayOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 60); - if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 256); + if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 256); break; case CoalOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 128); @@ -1783,7 +1807,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) break; case CopperOre: if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 96); - if (mc <= MC_1_19) return providerTriangleRange(rnd, -16, 112); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -16, 112); break; case DeepslateOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); @@ -1792,7 +1816,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); // was 16 in 1.17, changed to 15 in 1.17.1 if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - if (mc <= MC_1_19) return providerTriangleRange(rnd, -64 + -80, -64 + 80); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case DioriteOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); @@ -1801,22 +1825,22 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case DirtOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 160); + if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 160); break; case EmeraldOre: if (mc <= MC_1_16) return rnd.nextInt(rnd.state, 28) + 4; if (mc <= MC_1_17) return providerUniformRange(rnd, 4, 31); - if (mc <= MC_1_19) return providerTriangleRange(rnd, -16, 480); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -16, 480); break; case ExtraGoldOre: if (mc <= MC_1_16) return providerRange(rnd, 32, 32, 80); if (mc <= MC_1_17) return providerUniformRange(rnd, 32, 79); - if (mc <= MC_1_19) return providerUniformRange(rnd, 32, 256); + if (mc <= MC_1_20) return providerUniformRange(rnd, 32, 256); break; case GoldOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 31); - if (mc <= MC_1_19) return providerTriangleRange(rnd, -64, 32); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -64, 32); break; case GraniteOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); @@ -1825,7 +1849,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case GravelOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 319); + if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 319); break; case IronOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 64); @@ -1834,94 +1858,97 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case LapisOre: if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 16); if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 30); - if (mc <= MC_1_19) return providerTriangleRange(rnd, -32, 32); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -32, 32); break; case LargeCopperOre: - if (mc <= MC_1_19) return providerTriangleRange(rnd, -16, 112); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -16, 112); break; case LargeDiamondOre: - if (mc <= MC_1_19) return providerTriangleRange(rnd, -64 + -80, -64 + 80); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case LowerAndesiteOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 60); break; case LowerCoalOre: - if (mc <= MC_1_19) return providerTriangleRange(rnd, 0, 192); + if (mc <= MC_1_20) return providerTriangleRange(rnd, 0, 192); break; case LowerDioriteOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 60); break; case LowerGoldOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, -64, -48); + if (mc <= MC_1_20) return providerUniformRange(rnd, -64, -48); break; case LowerGraniteOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 60); break; case LowerRedstoneOre: - if (mc <= MC_1_19) return providerTriangleRange(rnd, -64 + -32, -64 + 32); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -64 + -32, -64 + 32); + break; + case MediumDiamondOre: + if (mc <= MC_1_20) return providerUniformRange(rnd, -64, -4); break; case MiddleIronOre: - if (mc <= MC_1_19) return providerTriangleRange(rnd, -24, 56); + if (mc <= MC_1_20) return providerTriangleRange(rnd, -24, 56); break; case RedstoneOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 15); + if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 15); break; case SmallIronOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 72); + if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 72); break; case TuffOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); - if (mc <= MC_1_19) return providerUniformRange(rnd, -64, 0); + if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 0); break; case UpperAndesiteOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, 64, 128); + if (mc <= MC_1_20) return providerUniformRange(rnd, 64, 128); break; case UpperCoalOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, 136, 319); + if (mc <= MC_1_20) return providerUniformRange(rnd, 136, 319); break; case UpperDioriteOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, 64, 128); + if (mc <= MC_1_20) return providerUniformRange(rnd, 64, 128); break; case UpperGraniteOre: - if (mc <= MC_1_19) return providerUniformRange(rnd, 64, 128); + if (mc <= MC_1_20) return providerUniformRange(rnd, 64, 128); break; case UpperIronOre: - if (mc <= MC_1_19) return providerTriangleRange(rnd, 80, 384); + if (mc <= MC_1_20) return providerTriangleRange(rnd, 80, 384); break; // nether case BlackstoneOre: if (mc <= MC_1_16) return providerRange(rnd, 5, 10, 37); - if (mc <= MC_1_19) return providerUniformRange(rnd, 5, 31); + if (mc <= MC_1_20) return providerUniformRange(rnd, 5, 31); break; case LargeDebrisOre: if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 8); - if (mc <= MC_1_19) return providerTriangleRange(rnd, 8, 24); + if (mc <= MC_1_20) return providerTriangleRange(rnd, 8, 24); break; case MagmaOre: if (mc <= MC_1_16) return 32 - 5 + rnd.nextInt(rnd.state, 10); - if (mc <= MC_1_19) return providerUniformRange(rnd, 27, 36); + if (mc <= MC_1_20) return providerUniformRange(rnd, 27, 36); break; case NetherGoldOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - if (mc <= MC_1_19) return providerUniformRange(rnd, 0 + 10, 127 - 10); + if (mc <= MC_1_20) return providerUniformRange(rnd, 0 + 10, 127 - 10); break; case NetherGravelOre: if (mc <= MC_1_16) return providerRange(rnd, 5, 0, 37); - if (mc <= MC_1_19) return providerUniformRange(rnd, 5, 41); + if (mc <= MC_1_20) return providerUniformRange(rnd, 5, 41); break; case QuartzOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - if (mc <= MC_1_19) return providerUniformRange(rnd, 0 + 10, 127 - 10); + if (mc <= MC_1_20) return providerUniformRange(rnd, 0 + 10, 127 - 10); break; case SmallDebrisOre: if (mc <= MC_1_16) return providerRange(rnd, 8, 16, 128); - if (mc <= MC_1_19) return providerUniformRange(rnd, 8, 127 - 8); + if (mc <= MC_1_20) return providerUniformRange(rnd, 8, 127 - 8); break; case SoulSandOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); - if (mc <= MC_1_19) return providerUniformRange(rnd, 0, 31); + if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 31); break; default: fprintf(stderr, "getOreYPos: not implemented for ore type %d.\n", oreType); @@ -1932,7 +1959,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) Pos3List generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource rnd) { - if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_19 && config.oreType == LowerGoldOre)) { + if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_20 && config.oreType == LowerGoldOre)) { int count; if (config.oreType == EmeraldOre) { if (mc <= MC_1_16) { diff --git a/finders.h b/finders.h index ccb4bd49..5814d1ab 100644 --- a/finders.h +++ b/finders.h @@ -384,6 +384,7 @@ enum Ores { LowerGraniteOre, LowerRedstoneOre, MagmaOre, + MediumDiamondOre, MiddleIronOre, NetherGoldOre, NetherGravelOre, From e651e49e51a64d7e33479652bbdec17dac5e970b Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 24 Apr 2025 19:51:39 +0200 Subject: [PATCH 17/45] 1.21.5+ --- finders.c | 188 +++++++++++++++++++++++++++--------------------------- 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/finders.c b/finders.c index 5ee266b0..05eed063 100644 --- a/finders.c +++ b/finders.c @@ -1425,15 +1425,15 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) return mc > MC_1_12 && mc <= MC_1_17; case BuriedDiamondOre: if (mc <= MC_1_19) *oconf = o_buried_diamond_118; - else if (mc <= MC_1_20) *oconf = o_buried_diamond_120; + else if (mc <= MC_NEWEST) *oconf = o_buried_diamond_120; return mc > MC_1_17; case BuriedLapisOre: if (mc <= MC_1_19) *oconf = o_buried_lapis_118; - else if (mc <= MC_1_20) *oconf = o_buried_lapis_120; + else if (mc <= MC_NEWEST) *oconf = o_buried_lapis_120; return mc > MC_1_17; case ClayOre: if (mc <= MC_1_19) *oconf = o_clay_118; - if (mc <= MC_1_20) *oconf = o_clay_120; + if (mc <= MC_NEWEST) *oconf = o_clay_120; return mc > MC_1_17; case CoalOre: if (mc <= MC_1_15) *oconf = o_coal_113; @@ -1443,7 +1443,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case CopperOre: if (mc <= MC_1_17) *oconf = o_copper_117; if (mc <= MC_1_19) *oconf = o_copper_118; - if (mc <= MC_1_20) *oconf = o_copper_120; + if (mc <= MC_NEWEST) *oconf = o_copper_120; return mc > MC_1_16; case DeepslateOre: if (mc <= MC_1_17) *oconf = o_deepslate_117; @@ -1452,7 +1452,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_15) *oconf = o_diamond_113; else if (mc <= MC_1_16) *oconf = o_diamond_116; else if (mc <= MC_1_17) *oconf = o_diamond_117; - else if (mc <= MC_1_20) *oconf = o_diamond_118; + else if (mc <= MC_NEWEST) *oconf = o_diamond_118; return mc > MC_1_12; case DioriteOre: if (mc <= MC_1_15) *oconf = o_diorite_113; @@ -1461,27 +1461,27 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case DirtOre: if (mc <= MC_1_15) *oconf = o_dirt_113; else if (mc <= MC_1_17) *oconf = o_dirt_116; - else if (mc <= MC_1_20) *oconf = o_dirt_118; + else if (mc <= MC_NEWEST) *oconf = o_dirt_118; return mc > MC_1_12; case EmeraldOre: if (mc <= MC_1_15) *oconf = o_emerald_113; else if (mc <= MC_1_16) *oconf = o_emerald_116; else if (mc <= MC_1_17) *oconf = o_emerald_117; else if (mc <= MC_1_19) *oconf = o_emerald_118; - else if (mc <= MC_1_20) *oconf = o_emerald_120; + else if (mc <= MC_NEWEST) *oconf = o_emerald_120; return mc > MC_1_12; case ExtraGoldOre: if (mc <= MC_1_15) *oconf = o_extra_gold_113; else if (mc <= MC_1_16) *oconf = o_extra_gold_116; else if (mc <= MC_1_17) *oconf = o_extra_gold_117; else if (mc <= MC_1_19) *oconf = o_extra_gold_118; - else if (mc <= MC_1_20) *oconf = o_extra_gold_120; + else if (mc <= MC_NEWEST) *oconf = o_extra_gold_120; return mc > MC_1_12; case GoldOre: if (mc <= MC_1_15) *oconf = o_gold_113; else if (mc <= MC_1_16) *oconf = o_gold_116; else if (mc <= MC_1_17) *oconf = o_gold_117; - else if (mc <= MC_1_20) *oconf = o_gold_118; + else if (mc <= MC_NEWEST) *oconf = o_gold_118; return mc > MC_1_12; case GraniteOre: if (mc <= MC_1_15) *oconf = o_granite_113; @@ -1490,7 +1490,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case GravelOre: if (mc <= MC_1_15) *oconf = o_gravel_113; else if (mc <= MC_1_17) *oconf = o_gravel_116; - else if (mc <= MC_1_20) *oconf = o_gravel_118; + else if (mc <= MC_NEWEST) *oconf = o_gravel_118; return mc > MC_1_12; case IronOre: if (mc <= MC_1_15) *oconf = o_iron_113; @@ -1502,84 +1502,84 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_16) *oconf = o_lapis_116; else if (mc <= MC_1_17) *oconf = o_lapis_117; else if (mc <= MC_1_19) *oconf = o_lapis_118; - else if (mc <= MC_1_20) *oconf = o_lapis_120; + else if (mc <= MC_NEWEST) *oconf = o_lapis_120; return mc > MC_1_12; case LargeCopperOre: if (mc <= MC_1_19) *oconf = o_large_copper_118; - else if (mc <= MC_1_20) *oconf = o_large_copper_120; + else if (mc <= MC_NEWEST) *oconf = o_large_copper_120; return mc > MC_1_17; case LargeDiamondOre: if (mc <= MC_1_19) *oconf = o_large_diamond_118; - else if (mc <= MC_1_20) *oconf = o_large_diamond_120; + else if (mc <= MC_NEWEST) *oconf = o_large_diamond_120; return mc > MC_1_17; case LowerAndesiteOre: - if (mc <= MC_1_20) *oconf = o_lower_andesite_118; + if (mc <= MC_NEWEST) *oconf = o_lower_andesite_118; return mc > MC_1_17; case LowerCoalOre: - if (mc <= MC_1_20) *oconf = o_lower_coal_118; + if (mc <= MC_NEWEST) *oconf = o_lower_coal_118; return mc > MC_1_17; case LowerDioriteOre: - if (mc <= MC_1_20) *oconf = o_lower_diorite_118; + if (mc <= MC_NEWEST) *oconf = o_lower_diorite_118; return mc > MC_1_17; case LowerGoldOre: - if (mc <= MC_1_20) *oconf = o_lower_gold_118; + if (mc <= MC_NEWEST) *oconf = o_lower_gold_118; return mc > MC_1_17; case LowerGraniteOre: - if (mc <= MC_1_20) *oconf = o_lower_granite_118; + if (mc <= MC_NEWEST) *oconf = o_lower_granite_118; return mc > MC_1_17; case LowerRedstoneOre: - if (mc <= MC_1_20) *oconf = o_lower_redstone_118; + if (mc <= MC_NEWEST) *oconf = o_lower_redstone_118; return mc > MC_1_17; case MediumDiamondOre: - if (mc <= MC_1_20) *oconf = o_medium_diamond_120; + if (mc <= MC_NEWEST) *oconf = o_medium_diamond_120; return mc > MC_1_19; case MiddleIronOre: - if (mc <= MC_1_20) *oconf = o_middle_iron_118; + if (mc <= MC_NEWEST) *oconf = o_middle_iron_118; return mc > MC_1_17; case RedstoneOre: if (mc <= MC_1_15) *oconf = o_redstone_113; else if (mc <= MC_1_16) *oconf = o_redstone_116; else if (mc <= MC_1_17) *oconf = o_redstone_117; - else if (mc <= MC_1_20) *oconf = o_redstone_118; + else if (mc <= MC_NEWEST) *oconf = o_redstone_118; return mc > MC_1_12; case SmallIronOre: - if (mc <= MC_1_20) *oconf = o_small_iron_118; + if (mc <= MC_NEWEST) *oconf = o_small_iron_118; return mc > MC_1_17; case TuffOre: if (mc <= MC_1_17) *oconf = o_tuff_117; - else if (mc <= MC_1_20) *oconf = o_tuff_118; + else if (mc <= MC_NEWEST) *oconf = o_tuff_118; return mc > MC_1_16; case UpperAndesiteOre: - if (mc <= MC_1_20) *oconf = o_upper_andesite_118; + if (mc <= MC_NEWEST) *oconf = o_upper_andesite_118; return mc > MC_1_17; case UpperCoalOre: - if (mc <= MC_1_20) *oconf = o_upper_coal_118; + if (mc <= MC_NEWEST) *oconf = o_upper_coal_118; return mc > MC_1_17; case UpperDioriteOre: - if (mc <= MC_1_20) *oconf = o_upper_diorite_118; + if (mc <= MC_NEWEST) *oconf = o_upper_diorite_118; return mc > MC_1_17; case UpperGraniteOre: - if (mc <= MC_1_20) *oconf = o_upper_granite_118; + if (mc <= MC_NEWEST) *oconf = o_upper_granite_118; return mc > MC_1_17; case UpperIronOre: - if (mc <= MC_1_20) *oconf = o_upper_iron_118; + if (mc <= MC_NEWEST) *oconf = o_upper_iron_118; return mc > MC_1_17; // nether case BlackstoneOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_blackstone_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_blackstone_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_blackstone_116; - else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_blackstone_118_crimson_forest; - else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_blackstone_118_warped_forest; - else if (mc <= MC_1_20) *oconf = o_blackstone_118; + else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_blackstone_118_crimson_forest; + else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_blackstone_118_warped_forest; + else if (mc <= MC_NEWEST) *oconf = o_blackstone_118; return mc > MC_1_15; case LargeDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_large_debris_116; - else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_large_debris_118_crimson_forest; - else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_large_debris_118_warped_forest; - else if (mc <= MC_1_20) *oconf = o_large_debris_118; + else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_large_debris_118_crimson_forest; + else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_large_debris_118_warped_forest; + else if (mc <= MC_NEWEST) *oconf = o_large_debris_118; return mc > MC_1_15; case MagmaOre: if (mc <= MC_1_15) *oconf = o_magma_113; @@ -1588,29 +1588,29 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_magma_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_magma_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_magma_116; - else if (mc <= MC_1_20 && biomeID == soul_sand_valley) *oconf = o_magma_118_soul_sand_valley; - else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_magma_118_crimson_forest; - else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_magma_118_warped_forest; - else if (mc <= MC_1_20 && biomeID == basalt_deltas) *oconf = o_magma_118_basalt_deltas; - else if (mc <= MC_1_20) *oconf = o_magma_118; + else if (mc <= MC_NEWEST && biomeID == soul_sand_valley) *oconf = o_magma_118_soul_sand_valley; + else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_magma_118_crimson_forest; + else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_magma_118_warped_forest; + else if (mc <= MC_NEWEST && biomeID == basalt_deltas) *oconf = o_magma_118_basalt_deltas; + else if (mc <= MC_NEWEST) *oconf = o_magma_118; return mc > MC_1_12; case NetherGoldOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gold_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_nether_gold_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_nether_gold_116; - else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_nether_gold_118_crimson_forest; - else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_nether_gold_118_warped_forest; - else if (mc <= MC_1_20 && biomeID == basalt_deltas) *oconf = o_nether_gold_118_basalt_deltas; - else if (mc <= MC_1_20) *oconf = o_nether_gold_118; + else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_nether_gold_118_crimson_forest; + else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_nether_gold_118_warped_forest; + else if (mc <= MC_NEWEST && biomeID == basalt_deltas) *oconf = o_nether_gold_118_basalt_deltas; + else if (mc <= MC_NEWEST) *oconf = o_nether_gold_118; return mc > MC_1_15; case NetherGravelOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gravel_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gravel_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_nether_gravel_116; - else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_nether_gravel_118_crimson_forest; - else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_nether_gravel_118_warped_forest; - else if (mc <= MC_1_20) *oconf = o_nether_gravel_118; + else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_nether_gravel_118_crimson_forest; + else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_nether_gravel_118_warped_forest; + else if (mc <= MC_NEWEST) *oconf = o_nether_gravel_118; return mc > MC_1_15; case QuartzOre: if (mc <= MC_1_15) *oconf = o_quartz_113; @@ -1618,22 +1618,22 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_quartz_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_quartz_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_quartz_116; - else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_quartz_118_crimson_forest; - else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_quartz_118_warped_forest; - else if (mc <= MC_1_20 && biomeID == basalt_deltas) *oconf = o_quartz_118_basalt_deltas; - else if (mc <= MC_1_20) *oconf = o_quartz_118; + else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_quartz_118_crimson_forest; + else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_quartz_118_warped_forest; + else if (mc <= MC_NEWEST && biomeID == basalt_deltas) *oconf = o_quartz_118_basalt_deltas; + else if (mc <= MC_NEWEST) *oconf = o_quartz_118; return mc > MC_1_12; case SmallDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_small_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_small_debris_116; - else if (mc <= MC_1_20 && biomeID == crimson_forest) *oconf = o_small_debris_118_crimson_forest; - else if (mc <= MC_1_20 && biomeID == warped_forest) *oconf = o_small_debris_118_warped_forest; - else if (mc <= MC_1_20) *oconf = o_small_debris_118; + else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_small_debris_118_crimson_forest; + else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_small_debris_118_warped_forest; + else if (mc <= MC_NEWEST) *oconf = o_small_debris_118; return mc > MC_1_15; case SoulSandOre: if (mc <= MC_1_17) *oconf = o_soul_sand_116; - if (mc <= MC_1_20) *oconf = o_soul_sand_118; + if (mc <= MC_NEWEST) *oconf = o_soul_sand_118; return mc > MC_1_15; default: memset(oconf, 0, sizeof(OreConfig)); @@ -1767,7 +1767,7 @@ Pos3List generateOres(const Generator *g, OreConfig config, int chunkX, int chun Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd) { - if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_20 && config.oreType == LowerGoldOre)) { + if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_NEWEST && config.oreType == LowerGoldOre)) { return (Pos3) {chunkX << 4, 0, chunkZ << 4}; } if (mc <= MC_1_14) { @@ -1792,14 +1792,14 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); break; case BuriedDiamondOre: - if (mc <= MC_1_20) return providerTriangleRange(rnd, -64 + -80, -64 + 80); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case BuriedLapisOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 64); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 64); break; case ClayOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 60); - if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 256); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 256); break; case CoalOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 128); @@ -1807,7 +1807,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) break; case CopperOre: if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 96); - if (mc <= MC_1_20) return providerTriangleRange(rnd, -16, 112); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -16, 112); break; case DeepslateOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); @@ -1816,7 +1816,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); // was 16 in 1.17, changed to 15 in 1.17.1 if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - if (mc <= MC_1_20) return providerTriangleRange(rnd, -64 + -80, -64 + 80); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case DioriteOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); @@ -1825,22 +1825,22 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case DirtOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 160); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 160); break; case EmeraldOre: if (mc <= MC_1_16) return rnd.nextInt(rnd.state, 28) + 4; if (mc <= MC_1_17) return providerUniformRange(rnd, 4, 31); - if (mc <= MC_1_20) return providerTriangleRange(rnd, -16, 480); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -16, 480); break; case ExtraGoldOre: if (mc <= MC_1_16) return providerRange(rnd, 32, 32, 80); if (mc <= MC_1_17) return providerUniformRange(rnd, 32, 79); - if (mc <= MC_1_20) return providerUniformRange(rnd, 32, 256); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 32, 256); break; case GoldOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 31); - if (mc <= MC_1_20) return providerTriangleRange(rnd, -64, 32); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64, 32); break; case GraniteOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); @@ -1849,7 +1849,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case GravelOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 319); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 319); break; case IronOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 64); @@ -1858,97 +1858,97 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case LapisOre: if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 16); if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 30); - if (mc <= MC_1_20) return providerTriangleRange(rnd, -32, 32); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -32, 32); break; case LargeCopperOre: - if (mc <= MC_1_20) return providerTriangleRange(rnd, -16, 112); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -16, 112); break; case LargeDiamondOre: - if (mc <= MC_1_20) return providerTriangleRange(rnd, -64 + -80, -64 + 80); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64 + -80, -64 + 80); break; case LowerAndesiteOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 60); break; case LowerCoalOre: - if (mc <= MC_1_20) return providerTriangleRange(rnd, 0, 192); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, 0, 192); break; case LowerDioriteOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 60); break; case LowerGoldOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, -64, -48); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, -48); break; case LowerGraniteOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 60); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 60); break; case LowerRedstoneOre: - if (mc <= MC_1_20) return providerTriangleRange(rnd, -64 + -32, -64 + 32); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64 + -32, -64 + 32); break; case MediumDiamondOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, -64, -4); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, -4); break; case MiddleIronOre: - if (mc <= MC_1_20) return providerTriangleRange(rnd, -24, 56); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -24, 56); break; case RedstoneOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 15); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 15); break; case SmallIronOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 72); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 72); break; case TuffOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); - if (mc <= MC_1_20) return providerUniformRange(rnd, -64, 0); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 0); break; case UpperAndesiteOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, 64, 128); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 64, 128); break; case UpperCoalOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, 136, 319); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 136, 319); break; case UpperDioriteOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, 64, 128); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 64, 128); break; case UpperGraniteOre: - if (mc <= MC_1_20) return providerUniformRange(rnd, 64, 128); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 64, 128); break; case UpperIronOre: - if (mc <= MC_1_20) return providerTriangleRange(rnd, 80, 384); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, 80, 384); break; // nether case BlackstoneOre: if (mc <= MC_1_16) return providerRange(rnd, 5, 10, 37); - if (mc <= MC_1_20) return providerUniformRange(rnd, 5, 31); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 5, 31); break; case LargeDebrisOre: if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 8); - if (mc <= MC_1_20) return providerTriangleRange(rnd, 8, 24); + if (mc <= MC_NEWEST) return providerTriangleRange(rnd, 8, 24); break; case MagmaOre: if (mc <= MC_1_16) return 32 - 5 + rnd.nextInt(rnd.state, 10); - if (mc <= MC_1_20) return providerUniformRange(rnd, 27, 36); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 27, 36); break; case NetherGoldOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - if (mc <= MC_1_20) return providerUniformRange(rnd, 0 + 10, 127 - 10); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0 + 10, 127 - 10); break; case NetherGravelOre: if (mc <= MC_1_16) return providerRange(rnd, 5, 0, 37); - if (mc <= MC_1_20) return providerUniformRange(rnd, 5, 41); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 5, 41); break; case QuartzOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - if (mc <= MC_1_20) return providerUniformRange(rnd, 0 + 10, 127 - 10); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0 + 10, 127 - 10); break; case SmallDebrisOre: if (mc <= MC_1_16) return providerRange(rnd, 8, 16, 128); - if (mc <= MC_1_20) return providerUniformRange(rnd, 8, 127 - 8); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 8, 127 - 8); break; case SoulSandOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); - if (mc <= MC_1_20) return providerUniformRange(rnd, 0, 31); + if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 31); break; default: fprintf(stderr, "getOreYPos: not implemented for ore type %d.\n", oreType); @@ -1959,7 +1959,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) Pos3List generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource rnd) { - if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_1_20 && config.oreType == LowerGoldOre)) { + if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_NEWEST && config.oreType == LowerGoldOre)) { int count; if (config.oreType == EmeraldOre) { if (mc <= MC_1_16) { From 6439d2f9c7f20c27ca16727908fb2a5df900ad68 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 24 Apr 2025 20:17:30 +0200 Subject: [PATCH 18/45] Use xNextDoubleJ --- rng.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/rng.h b/rng.h index 1c23c6dc..8e7cc222 100644 --- a/rng.h +++ b/rng.h @@ -270,7 +270,14 @@ static inline int xNextIntJ(Xoroshiro *xr, uint32_t n) return val; } -static inline int xNextIntBetween(Xoroshiro *xr, const int min, const int max) +static inline double xNextDoubleJ(Xoroshiro *xr) +{ + uint64_t a = xNextLong(xr); + uint64_t b = xNextLong(xr); + return ((a >> (64-26) << 27) + (b >> (64-27))) * 1.1102230246251565E-16; +} + +static inline int xNextIntJBetween(Xoroshiro *xr, const int min, const int max) { return xNextIntJ(xr, max - min + 1) + min; } @@ -305,8 +312,8 @@ static inline RandomSource createXoroshiro(Xoroshiro *xr) .setSeed = (void (*)(void *, uint64_t)) xSetSeed, .nextInt = (int (*)(void *, int)) xNextIntJ, .nextFloat = (float (*)(void *)) xNextFloat, - .nextDouble = (double (*)(void *)) xNextDouble, - .nextIntBetween = (int (*)(void *, int, int)) xNextIntBetween, + .nextDouble = (double (*)(void *)) xNextDoubleJ, + .nextIntBetween = (int (*)(void *, int, int)) xNextIntJBetween, }; } From 8c435a9ae1a677f7335d1d8c72a59889e430c5ed Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 24 Apr 2025 20:24:15 +0200 Subject: [PATCH 19/45] Initialise bit set to zeros --- finders.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/finders.c b/finders.c index 05eed063..5b97253a 100644 --- a/finders.c +++ b/finders.c @@ -2047,7 +2047,9 @@ Pos3List generateVeinPart(int mc, OreConfig config, RandomSource rnd, double off const int maxBuildHeight = mc <= MC_1_17 ? 256 : 320; Pos3List poses; createPos3List(&poses, 16); - char bitSet[BITNSLOTS(oreSize * radius * oreSize)]; + int slots = BITNSLOTS(oreSize * radius * oreSize); + char bitSet[slots]; + memset(bitSet, 0, slots); int size = config.size; double* store = malloc(4 * size * sizeof(double)); From 294c05e88c162886deaa7e1115210f9bc13ca985 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 24 Apr 2025 22:35:08 +0200 Subject: [PATCH 20/45] Ensure correct call order --- finders.c | 13 ++++++++++--- finders.h | 8 ++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/finders.c b/finders.c index 5b97253a..e390323e 100644 --- a/finders.c +++ b/finders.c @@ -1996,9 +1996,16 @@ Pos3List generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource r createPos3List(&poses, count); for (int i = 0; i < count; ++i) { int size = MIN(i, 7); - int x = roundf((rnd.nextFloat(rnd.state) - rnd.nextFloat(rnd.state)) * (float)size); - int y = roundf((rnd.nextFloat(rnd.state) - rnd.nextFloat(rnd.state)) * (float)size); - int z = roundf((rnd.nextFloat(rnd.state) - rnd.nextFloat(rnd.state)) * (float)size); + float a, b; + a = rnd.nextFloat(rnd.state); + b = rnd.nextFloat(rnd.state); + int x = roundf((a - b) * (float)size); + a = rnd.nextFloat(rnd.state); + b = rnd.nextFloat(rnd.state); + int y = roundf((a - b) * (float)size); + a = rnd.nextFloat(rnd.state); + b = rnd.nextFloat(rnd.state); + int z = roundf((a - b) * (float)size); Pos3 startPos = (Pos3) {pos.x + x, pos.y + y, pos.z + z}; // TODO: check if the block at startPos is contained in config.replaceBlocks diff --git a/finders.h b/finders.h index 5814d1ab..dd5abd8b 100644 --- a/finders.h +++ b/finders.h @@ -428,7 +428,9 @@ static inline int providerRange(RandomSource rnd, const int bottomOffset, const // <=1.16.5 static inline int providerDepthAverage(RandomSource rnd, const int baseline, const int spread) { - return rnd.nextInt(rnd.state, spread) + rnd.nextInt(rnd.state, spread) - spread + baseline; + int a = rnd.nextInt(rnd.state, spread); + int b = rnd.nextInt(rnd.state, spread); + return a + b - spread + baseline; } // >=1.17 @@ -450,7 +452,9 @@ static inline int providerTriangleRange(RandomSource rnd, const int minOffset, c } const int midPoint = range / 2; const int midPoint2 = range - midPoint; - return minOffset + rnd.nextIntBetween(rnd.state, 0, midPoint2) + rnd.nextIntBetween(rnd.state, 0, midPoint); + int a = rnd.nextIntBetween(rnd.state, 0, midPoint2); + int b = rnd.nextIntBetween(rnd.state, 0, midPoint); + return minOffset + a + b; } From 724ed4cb240ff521a8d6fee42aebdcae20640901 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 24 Apr 2025 22:54:01 +0200 Subject: [PATCH 21/45] if -> else if --- finders.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/finders.c b/finders.c index e390323e..59d788c8 100644 --- a/finders.c +++ b/finders.c @@ -1433,7 +1433,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) return mc > MC_1_17; case ClayOre: if (mc <= MC_1_19) *oconf = o_clay_118; - if (mc <= MC_NEWEST) *oconf = o_clay_120; + else if (mc <= MC_NEWEST) *oconf = o_clay_120; return mc > MC_1_17; case CoalOre: if (mc <= MC_1_15) *oconf = o_coal_113; @@ -1442,8 +1442,8 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) return mc > MC_1_12 && mc <= MC_1_17; case CopperOre: if (mc <= MC_1_17) *oconf = o_copper_117; - if (mc <= MC_1_19) *oconf = o_copper_118; - if (mc <= MC_NEWEST) *oconf = o_copper_120; + else if (mc <= MC_1_19) *oconf = o_copper_118; + else if (mc <= MC_NEWEST) *oconf = o_copper_120; return mc > MC_1_16; case DeepslateOre: if (mc <= MC_1_17) *oconf = o_deepslate_117; @@ -1633,7 +1633,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) return mc > MC_1_15; case SoulSandOre: if (mc <= MC_1_17) *oconf = o_soul_sand_116; - if (mc <= MC_NEWEST) *oconf = o_soul_sand_118; + else if (mc <= MC_NEWEST) *oconf = o_soul_sand_118; return mc > MC_1_15; default: memset(oconf, 0, sizeof(OreConfig)); From de548d918eb53fa07f973413ec20b234ea8e4c04 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Fri, 25 Apr 2025 01:05:24 +0200 Subject: [PATCH 22/45] Fix some configs --- finders.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/finders.c b/finders.c index 59d788c8..65f19d04 100644 --- a/finders.c +++ b/finders.c @@ -1244,8 +1244,8 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_buried_lapis_118 = {22, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, o_buried_lapis_120 = {23, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, - o_clay_118 = {24, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_clay_120 = {25, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_clay_118 = {25, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_clay_120 = {26, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1272,14 +1272,14 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_emerald_118 = {27, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_emerald_120 = {28, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_118 = {28, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_120 = {29, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_extra_gold_118 = {24, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_extra_gold_120 = {25, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_extra_gold_118 = {25, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_extra_gold_120 = {26, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, o_gold_113 = {7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_gold_116 = {7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1798,7 +1798,6 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 64); break; case ClayOre: - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 60); if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 256); break; case CoalOre: From f07069f03c1414896fb3adf7f508150212a94dc9 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Fri, 25 Apr 2025 01:12:09 +0200 Subject: [PATCH 23/45] Use SurfaceNoise for height check --- finders.c | 12 +++++++----- finders.h | 5 +++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/finders.c b/finders.c index 65f19d04..fd675b36 100644 --- a/finders.c +++ b/finders.c @@ -1720,7 +1720,7 @@ int getBiomeForOreGen(const Generator *g, int chunkX, int chunkZ) return getBiomeAt(g, 4, (chunkX << 2) + 2, 0, (chunkZ << 2) + 2); } -Pos3List generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ) +Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig config, int chunkX, int chunkZ) { uint64_t populationSeed = getPopulationSeed(g->mc, g->seed, chunkX << 4, chunkZ << 4); RandomSource rnd; @@ -1748,7 +1748,7 @@ Pos3List generateOres(const Generator *g, OreConfig config, int chunkX, int chun int size = 0; for (int i = 0; i < repeatCount; i++) { Pos3 basePos = generateBaseOrePosition(g->mc, config, chunkX, chunkZ, rnd); - Pos3List orePositions = generateOrePositions(g->mc, config, basePos, rnd); + Pos3List orePositions = generateOrePositions(g, sn, config, basePos, rnd); temp[i] = orePositions; size += orePositions.size; } @@ -1956,8 +1956,9 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) return 0; } -Pos3List generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource rnd) +Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreConfig config, Pos3 pos, RandomSource rnd) { + int mc = g->mc; if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_NEWEST && config.oreType == LowerGoldOre)) { int count; if (config.oreType == EmeraldOre) { @@ -2035,8 +2036,9 @@ Pos3List generateOrePositions(int mc, OreConfig config, Pos3 pos, RandomSource r for (int x = startX; x <= startX + oreSize; ++x) { for (int z = startZ; z <= startZ + oreSize; ++z) { - // TODO: check if startY <= first y value in column that is motion blocking (Heightmap.Types#OCEAN_FLOOR_WG) - if (1) { + float y; + mapApproxHeight(&y, 0, g, sn, x >> 2, z >> 2, 1, 1); + if (startY <= (int) floor(y)) { return generateVeinPart(mc, config, rnd, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); } } diff --git a/finders.h b/finders.h index dd5abd8b..33163a2a 100644 --- a/finders.h +++ b/finders.h @@ -491,18 +491,19 @@ int isViableOreBiome(int mc, int oreType, int biomeID); /** * Generate the ores of the given type in the chunk. * @param g the generator + * @param sn the surface noise * @param config the ore config * @param chunkX the chunk X-coordinate * @param chunkZ the chunk Y-coordinate * @return a sized array of ore positions */ -Pos3List generateOres(const Generator *g, OreConfig config, int chunkX, int chunkZ); +Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig config, int chunkX, int chunkZ); Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd); int getOreYPos(int mc, int oreType, RandomSource rnd); -Pos3List generateOrePositions(int mc, OreConfig config, Pos3 bPos, RandomSource rnd); +Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreConfig config, Pos3 bPos, RandomSource rnd); Pos3List generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); From 9acedf46e545187e05c8c16ae4abb84d892f20b0 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Fri, 25 Apr 2025 01:53:43 +0200 Subject: [PATCH 24/45] Disable height check for the nether --- finders.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/finders.c b/finders.c index fd675b36..0bfc4dac 100644 --- a/finders.c +++ b/finders.c @@ -2038,7 +2038,7 @@ Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreCon for (int z = startZ; z <= startZ + oreSize; ++z) { float y; mapApproxHeight(&y, 0, g, sn, x >> 2, z >> 2, 1, 1); - if (startY <= (int) floor(y)) { + if (g->dim == DIM_NETHER || startY <= (int) floor(y)) { return generateVeinPart(mc, config, rnd, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); } } From ef69aa2fc582bd9c6f6b9479021ab1a898022dce Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 28 Apr 2025 16:16:17 +0200 Subject: [PATCH 25/45] Fix step for 1.18 quartz --- finders.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/finders.c b/finders.c index 0bfc4dac..1193c76f 100644 --- a/finders.c +++ b/finders.c @@ -1399,10 +1399,10 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118 = {12, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_crimson_forest = {9, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_warped_forest = {10, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_basalt_deltas = {12, 5, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118 = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_crimson_forest = {9, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_warped_forest = {10, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_basalt_deltas = {12, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, @@ -2038,7 +2038,7 @@ Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreCon for (int z = startZ; z <= startZ + oreSize; ++z) { float y; mapApproxHeight(&y, 0, g, sn, x >> 2, z >> 2, 1, 1); - if (g->dim == DIM_NETHER || startY <= (int) floor(y)) { + if (startY <= g->dim == DIM_OVERWORLD ? (int) floor(y) : 128) { return generateVeinPart(mc, config, rnd, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); } } From 0123077f6e8629459ff3c0cb52d152c1e3866df0 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 28 Apr 2025 16:21:57 +0200 Subject: [PATCH 26/45] Format ore configs nicely --- finders.c | 126 +++++++++++++++++++++++++++--------------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/finders.c b/finders.c index 1193c76f..f6df6f00 100644 --- a/finders.c +++ b/finders.c @@ -1251,14 +1251,14 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_coal_117 = {7, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_copper_118 = {23, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_copper_120 = {24, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_diamond_113 = {9, 4, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_diamond_116 = {9, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diamond_113 = { 9, 4, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diamond_116 = { 9, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_diamond_117 = {11, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_diamond_118 = {18, 6, 4, 7, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, @@ -1267,11 +1267,11 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_dirt_113 = {0, 4, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_dirt_116 = {0, 6, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_dirt_118 = {0, 6, 33, 7, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_dirt_118 = {0, 6, 33, 7, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, - o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, - o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, + o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, + o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_emerald_118 = {28, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_emerald_120 = {29, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1281,9 +1281,9 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_extra_gold_118 = {25, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, o_extra_gold_120 = {26, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_gold_113 = {7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_gold_116 = {7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_gold_117 = {9, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gold_113 = { 7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gold_116 = { 7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gold_117 = { 9, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_gold_118 = {14, 6, 9, 4, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, o_granite_113 = {2, 4, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1327,8 +1327,8 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_middle_iron_118 = {12, 6, 9, 10, MiddleIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_redstone_113 = {8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_redstone_116 = {8, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_redstone_113 = { 8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_redstone_116 = { 8, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_redstone_117 = {10, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_redstone_118 = {16, 6, 8, 4, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1351,69 +1351,69 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_upper_iron_118 = {11, 6, 9, 90, UpperIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // nether - o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_116_crimson_forest = {9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_118 = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_118_crimson_forest = {7, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_118_warped_forest = {8, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_116_crimson_forest = { 9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_118 = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_118_crimson_forest = { 7, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_118_warped_forest = { 8, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count - o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_large_debris_118 = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_large_debris_118 = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, o_large_debris_118_crimson_forest = {10, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, - o_large_debris_118_warped_forest = {11, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, - - o_magma_113 = {8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116 = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116_soul_sand_valley = {8, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116_crimson_forest = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116_warped_forest = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118 = {7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118_soul_sand_valley = {6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118_basalt_deltas = {9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118_crimson_forest = {4, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118_warped_forest = {5, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - - o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_large_debris_118_warped_forest = {11, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + + o_magma_113 = { 8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116 = { 9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116_soul_sand_valley = { 8, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116_crimson_forest = { 6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116_warped_forest = { 7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118 = { 7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118_soul_sand_valley = { 6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118_basalt_deltas = { 9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118_crimson_forest = { 4, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118_warped_forest = { 5, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118 = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118_crimson_forest = {8, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118_warped_forest = {9, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118_basalt_deltas = {11, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - - o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_116_crimson_forest = {8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_116_warped_forest = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_118 = {9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_118_crimson_forest = {6, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_118_warped_forest = {7, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - - o_quartz_113 = {7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118 = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118_crimson_forest = { 8, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118_warped_forest = { 9, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118_basalt_deltas = {11, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_116_crimson_forest = { 8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_116_warped_forest = { 9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_118 = { 9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_118_crimson_forest = { 6, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_118_warped_forest = { 7, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_quartz_113 = { 7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118 = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_crimson_forest = {9, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_warped_forest = {10, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_basalt_deltas = {12, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118 = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_crimson_forest = { 9, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_warped_forest = {10, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_basalt_deltas = {12, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count - o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_small_debris_118 = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_small_debris_118 = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, o_small_debris_118_crimson_forest = {11, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, - o_small_debris_118_warped_forest = {12, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + o_small_debris_118_warped_forest = {12, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_soul_sand_118 = {8, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F} + o_soul_sand_118 = { 8, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F} ; switch (oreType) From 644064bc9edca3be611e1bf5d920573fd1365a0c Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 28 Apr 2025 17:10:35 +0200 Subject: [PATCH 27/45] Remove unused constant --- finders.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/finders.c b/finders.c index f6df6f00..99e003cb 100644 --- a/finders.c +++ b/finders.c @@ -23,8 +23,6 @@ #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define MAX_ORE_COUNT 100 - //============================================================================== // Finding Structure Positions From 07d424da1f38836c56b9120472b6c896075f95d8 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 28 Apr 2025 19:27:40 +0200 Subject: [PATCH 28/45] Add parenthesis --- finders.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/finders.c b/finders.c index 99e003cb..f4792dd6 100644 --- a/finders.c +++ b/finders.c @@ -2036,7 +2036,7 @@ Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreCon for (int z = startZ; z <= startZ + oreSize; ++z) { float y; mapApproxHeight(&y, 0, g, sn, x >> 2, z >> 2, 1, 1); - if (startY <= g->dim == DIM_OVERWORLD ? (int) floor(y) : 128) { + if (startY <= (g->dim == DIM_OVERWORLD ? (int) floor(y) : 128)) { return generateVeinPart(mc, config, rnd, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); } } From 94d9093220b4379bc96099e092ebec787088139f Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Tue, 29 Apr 2025 01:08:32 +0200 Subject: [PATCH 29/45] Fix indices --- finders.c | 76 +++++++++++++++++-------------------------------------- 1 file changed, 23 insertions(+), 53 deletions(-) diff --git a/finders.c b/finders.c index f4792dd6..d4241e35 100644 --- a/finders.c +++ b/finders.c @@ -1227,8 +1227,8 @@ static const uint32_t NETHERRACK_REPLACEABLES[] = {NETHERRACK}; int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) { - // check the index and step in BiomeDefaultFeatures.java - // check the size in OreFeatures.java + // check the step in BiomeDefaultFeatures.java + // check the size and discardChanceOnAirExposure in OreFeatures.java // check the repeatCount in OrePlacements.java static const OreConfig @@ -1242,16 +1242,16 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_buried_lapis_118 = {22, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, o_buried_lapis_120 = {23, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, - o_clay_118 = {25, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_clay_120 = {26, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_clay_118 = {26, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_clay_120 = {27, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_coal_117 = {7, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_copper_118 = {23, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_copper_120 = {24, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_copper_118 = {24, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_copper_120 = {25, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1270,14 +1270,15 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_emerald_118 = {28, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_emerald_120 = {29, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_118 = {31, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_119 = {32, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_120 = {33, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_extra_gold_118 = {25, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_extra_gold_120 = {26, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_extra_gold_118 = {27, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_extra_gold_120 = {28, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, o_gold_113 = { 7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_gold_116 = { 7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, @@ -1352,17 +1353,13 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_blackstone_116_crimson_forest = { 9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_118 = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_118_crimson_forest = { 7, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_118_warped_forest = { 8, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_118 = {18, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_large_debris_118 = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, - o_large_debris_118_crimson_forest = {10, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, - o_large_debris_118_warped_forest = {11, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + o_large_debris_118 = {21, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, o_magma_113 = { 8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_magma_116 = { 9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, @@ -1370,48 +1367,36 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_magma_116_crimson_forest = { 6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_magma_116_warped_forest = { 7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118 = { 7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118_soul_sand_valley = { 6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118_basalt_deltas = { 9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118_crimson_forest = { 4, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118_warped_forest = { 5, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118 = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118 = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118_crimson_forest = { 8, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118_warped_forest = { 9, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118_basalt_deltas = {11, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118 = {19, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gravel_116_crimson_forest = { 8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gravel_116_warped_forest = { 9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_118 = { 9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_118_crimson_forest = { 6, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_118_warped_forest = { 7, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_118 = {17, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_113 = { 7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118 = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_crimson_forest = { 9, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_warped_forest = {10, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_basalt_deltas = {12, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118 = {20, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_quartz_118_basalt_deltas = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_small_debris_118 = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, - o_small_debris_118_crimson_forest = {11, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, - o_small_debris_118_warped_forest = {12, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + o_small_debris_118 = {22, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_soul_sand_118 = { 8, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F} + o_soul_sand_118 = {16, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F} ; switch (oreType) @@ -1465,7 +1450,8 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_15) *oconf = o_emerald_113; else if (mc <= MC_1_16) *oconf = o_emerald_116; else if (mc <= MC_1_17) *oconf = o_emerald_117; - else if (mc <= MC_1_19) *oconf = o_emerald_118; + else if (mc <= MC_1_18) *oconf = o_emerald_118; + else if (mc <= MC_1_19) *oconf = o_emerald_119; else if (mc <= MC_NEWEST) *oconf = o_emerald_120; return mc > MC_1_12; case ExtraGoldOre: @@ -1567,16 +1553,12 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_blackstone_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_blackstone_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_blackstone_116; - else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_blackstone_118_crimson_forest; - else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_blackstone_118_warped_forest; else if (mc <= MC_NEWEST) *oconf = o_blackstone_118; return mc > MC_1_15; case LargeDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_large_debris_116; - else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_large_debris_118_crimson_forest; - else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_large_debris_118_warped_forest; else if (mc <= MC_NEWEST) *oconf = o_large_debris_118; return mc > MC_1_15; case MagmaOre: @@ -1586,10 +1568,6 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_magma_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_magma_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_magma_116; - else if (mc <= MC_NEWEST && biomeID == soul_sand_valley) *oconf = o_magma_118_soul_sand_valley; - else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_magma_118_crimson_forest; - else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_magma_118_warped_forest; - else if (mc <= MC_NEWEST && biomeID == basalt_deltas) *oconf = o_magma_118_basalt_deltas; else if (mc <= MC_NEWEST) *oconf = o_magma_118; return mc > MC_1_12; case NetherGoldOre: @@ -1597,8 +1575,6 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_nether_gold_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_nether_gold_116; - else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_nether_gold_118_crimson_forest; - else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_nether_gold_118_warped_forest; else if (mc <= MC_NEWEST && biomeID == basalt_deltas) *oconf = o_nether_gold_118_basalt_deltas; else if (mc <= MC_NEWEST) *oconf = o_nether_gold_118; return mc > MC_1_15; @@ -1606,8 +1582,6 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gravel_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gravel_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_nether_gravel_116; - else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_nether_gravel_118_crimson_forest; - else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_nether_gravel_118_warped_forest; else if (mc <= MC_NEWEST) *oconf = o_nether_gravel_118; return mc > MC_1_15; case QuartzOre: @@ -1616,8 +1590,6 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_quartz_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_quartz_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_quartz_116; - else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_quartz_118_crimson_forest; - else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_quartz_118_warped_forest; else if (mc <= MC_NEWEST && biomeID == basalt_deltas) *oconf = o_quartz_118_basalt_deltas; else if (mc <= MC_NEWEST) *oconf = o_quartz_118; return mc > MC_1_12; @@ -1625,8 +1597,6 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_small_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_small_debris_116; - else if (mc <= MC_NEWEST && biomeID == crimson_forest) *oconf = o_small_debris_118_crimson_forest; - else if (mc <= MC_NEWEST && biomeID == warped_forest) *oconf = o_small_debris_118_warped_forest; else if (mc <= MC_NEWEST) *oconf = o_small_debris_118; return mc > MC_1_15; case SoulSandOre: From 089a8b5a38623f0422f5aa45b6600736abb977a9 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Wed, 30 Apr 2025 00:41:18 +0200 Subject: [PATCH 30/45] Fix typo --- finders.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/finders.c b/finders.c index d4241e35..b75b8aeb 100644 --- a/finders.c +++ b/finders.c @@ -1302,8 +1302,8 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_lapis_118 = {21, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, o_lapis_120 = {22, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_large_copper_118 = {23, 6, 20, 16, LargeCopperOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_large_copper_120 = {24, 6, 20, 16, LargeCopperOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_large_copper_118 = {23, 6, 20, 16, LargeCopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_large_copper_120 = {24, 6, 20, 16, LargeCopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement o_large_diamond_118 = {19, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.7F}, From 38b97bf105db161d73344fdb50ba5451f515f944 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Wed, 30 Apr 2025 13:03:40 +0200 Subject: [PATCH 31/45] Add deltas ore types --- finders.c | 27 +++++++++++++++++---------- finders.h | 2 ++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/finders.c b/finders.c index b75b8aeb..7772bf5a 100644 --- a/finders.c +++ b/finders.c @@ -1355,6 +1355,10 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_blackstone_118 = {18, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_deltas_gold_116 = {13, 7, 10, 20, DeltasGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_deltas_quartz_116 = {14, 7, 14, 32, DeltasQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + // scatter ore, no count o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, @@ -1372,9 +1376,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_116_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gold_118 = {19, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118_basalt_deltas = {13, 7, 10, 20, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gravel_116_crimson_forest = { 8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, @@ -1385,9 +1387,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_116_basalt_deltas = {14, 7, 14, 32, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_quartz_118 = {20, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118_basalt_deltas = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, @@ -1555,6 +1555,12 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17) *oconf = o_blackstone_116; else if (mc <= MC_NEWEST) *oconf = o_blackstone_118; return mc > MC_1_15; + case DeltasGoldOre: + if (mc <= MC_NEWEST) *oconf = o_deltas_gold_116; + return mc > MC_1_15; + case DeltasQuartzOre: + if (mc <= MC_NEWEST) *oconf = o_deltas_quartz_116; + return mc > MC_1_15; case LargeDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_116_warped_forest; @@ -1573,9 +1579,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case NetherGoldOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gold_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_116_warped_forest; - else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_nether_gold_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_nether_gold_116; - else if (mc <= MC_NEWEST && biomeID == basalt_deltas) *oconf = o_nether_gold_118_basalt_deltas; else if (mc <= MC_NEWEST) *oconf = o_nether_gold_118; return mc > MC_1_15; case NetherGravelOre: @@ -1588,9 +1592,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_15) *oconf = o_quartz_113; else if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_quartz_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_quartz_116_warped_forest; - else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_quartz_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_quartz_116; - else if (mc <= MC_NEWEST && biomeID == basalt_deltas) *oconf = o_quartz_118_basalt_deltas; else if (mc <= MC_NEWEST) *oconf = o_quartz_118; return mc > MC_1_12; case SmallDebrisOre: @@ -1663,14 +1665,17 @@ int isViableOreBiome(int mc, int oreType, int biomeID) // nether case LargeDebrisOre: case MagmaOre: - case NetherGoldOre: - case QuartzOre: case SmallDebrisOre: return getDimension(biomeID) == DIM_NETHER; case BlackstoneOre: + case NetherGoldOre: + case QuartzOre: case NetherGravelOre: return (biomeID == nether_wastes || biomeID == soul_sand_valley || biomeID == crimson_forest || biomeID == warped_forest); + case DeltasGoldOre: + case DeltasQuartzOre: + return biomeID == basalt_deltas; case SoulSandOre: return biomeID == soul_sand_valley; default: @@ -1897,6 +1902,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_16) return 32 - 5 + rnd.nextInt(rnd.state, 10); if (mc <= MC_NEWEST) return providerUniformRange(rnd, 27, 36); break; + case DeltasGoldOre: case NetherGoldOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0 + 10, 127 - 10); @@ -1905,6 +1911,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_16) return providerRange(rnd, 5, 0, 37); if (mc <= MC_NEWEST) return providerUniformRange(rnd, 5, 41); break; + case DeltasQuartzOre: case QuartzOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0 + 10, 127 - 10); diff --git a/finders.h b/finders.h index 33163a2a..efb35181 100644 --- a/finders.h +++ b/finders.h @@ -364,6 +364,8 @@ enum Ores { CoalOre, CopperOre, DeepslateOre, + DeltasGoldOre, + DeltasQuartzOre, DiamondOre, DioriteOre, DirtOre, From e7ecf8547ea5d57311630dde581097ff3073e2a4 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Wed, 30 Apr 2025 13:07:14 +0200 Subject: [PATCH 32/45] quartz -> nether quartz --- finders.c | 26 +++++++++++++------------- finders.h | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/finders.c b/finders.c index 7772bf5a..e40aafd6 100644 --- a/finders.c +++ b/finders.c @@ -1383,11 +1383,11 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_nether_gravel_116_warped_forest = { 9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_nether_gravel_118 = {17, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_113 = { 7, 5, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_116 = {14, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_116_crimson_forest = {11, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_116_warped_forest = {12, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_quartz_118 = {20, 7, 14, 16, QuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_113 = { 7, 5, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_116 = {14, 7, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_116_crimson_forest = {11, 7, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_116_warped_forest = {12, 7, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_118 = {20, 7, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, @@ -1588,12 +1588,12 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17) *oconf = o_nether_gravel_116; else if (mc <= MC_NEWEST) *oconf = o_nether_gravel_118; return mc > MC_1_15; - case QuartzOre: - if (mc <= MC_1_15) *oconf = o_quartz_113; - else if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_quartz_116_crimson_forest; - else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_quartz_116_warped_forest; - else if (mc <= MC_1_17) *oconf = o_quartz_116; - else if (mc <= MC_NEWEST) *oconf = o_quartz_118; + case NetherQuartzOre: + if (mc <= MC_1_15) *oconf = o_nether_quartz_113; + else if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_quartz_116_crimson_forest; + else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_quartz_116_warped_forest; + else if (mc <= MC_1_17) *oconf = o_nether_quartz_116; + else if (mc <= MC_NEWEST) *oconf = o_nether_quartz_118; return mc > MC_1_12; case SmallDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_116_crimson_forest; @@ -1669,7 +1669,7 @@ int isViableOreBiome(int mc, int oreType, int biomeID) return getDimension(biomeID) == DIM_NETHER; case BlackstoneOre: case NetherGoldOre: - case QuartzOre: + case NetherQuartzOre: case NetherGravelOre: return (biomeID == nether_wastes || biomeID == soul_sand_valley || biomeID == crimson_forest || biomeID == warped_forest); @@ -1912,7 +1912,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_NEWEST) return providerUniformRange(rnd, 5, 41); break; case DeltasQuartzOre: - case QuartzOre: + case NetherQuartzOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0 + 10, 127 - 10); break; diff --git a/finders.h b/finders.h index efb35181..02a8ef0c 100644 --- a/finders.h +++ b/finders.h @@ -390,7 +390,7 @@ enum Ores { MiddleIronOre, NetherGoldOre, NetherGravelOre, - QuartzOre, + NetherQuartzOre, RedstoneOre, SmallDebrisOre, SmallIronOre, From d2d88a10291f4c430f1f2f57bc6889f384237a16 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 1 May 2025 00:32:23 +0200 Subject: [PATCH 33/45] Add biome filter --- finders.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/finders.c b/finders.c index e40aafd6..8fd4f9ff 100644 --- a/finders.c +++ b/finders.c @@ -1721,7 +1721,13 @@ Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig conf int size = 0; for (int i = 0; i < repeatCount; i++) { Pos3 basePos = generateBaseOrePosition(g->mc, config, chunkX, chunkZ, rnd); - Pos3List orePositions = generateOrePositions(g, sn, config, basePos, rnd); + int biome = getBiomeAt(g, 1, basePos.x, basePos.y, basePos.z); + Pos3List orePositions; + if (isViableOreBiome(g->mc, oreType, biome)) { + orePositions = generateOrePositions(g, sn, config, basePos, rnd); + } else { + createPos3List(&orePositions, 0); + } temp[i] = orePositions; size += orePositions.size; } From c5a2b98cb441afb5c7992833b99f6a382f8dd555 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 1 May 2025 14:15:31 +0200 Subject: [PATCH 34/45] Add ore2str utility function --- util.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ util.h | 3 +++ 2 files changed, 56 insertions(+) diff --git a/util.c b/util.c index 18fa7a73..34a95814 100644 --- a/util.c +++ b/util.c @@ -306,6 +306,59 @@ const char* struct2str(int stype) return NULL; } +const char* ore2str(int otype) +{ + switch (otype) + { + case AndesiteOre: return "ore_andesite"; + case BlackstoneOre: return "ore_blackstone"; + case BuriedDiamondOre: return "ore_diamond_buried"; + case BuriedLapisOre: return "ore_lapis_buried"; + case ClayOre: return "ore_clay"; + case CoalOre: return "ore_coal"; + case CopperOre: return "ore_copper"; + case DeepslateOre: return "ore_deepslate"; + case DeltasGoldOre: return "ore_gold_deltas"; + case DeltasQuartzOre: return "ore_quartz_deltas"; + case DiamondOre: return "ore_diamond"; + case DioriteOre: return "ore_diorite"; + case DirtOre: return "ore_dirt"; + case EmeraldOre: return "ore_emerald"; + case ExtraGoldOre: return "ore_gold_extra"; + case GoldOre: return "ore_gold"; + case GraniteOre: return "ore_granite"; + case GravelOre: return "ore_gravel"; + case IronOre: return "ore_iron"; + case LapisOre: return "ore_lapis"; + case LargeCopperOre: return "ore_copper_large"; + case LargeDebrisOre: return "ore_debris_large"; + case LargeDiamondOre: return "ore_diamond_large"; + case LowerAndesiteOre: return "ore_andesite_lower"; + case LowerCoalOre: return "ore_coal_lower"; + case LowerDioriteOre: return "ore_diorite_lower"; + case LowerGoldOre: return "ore_gold_lower"; + case LowerGraniteOre: return "ore_granite_lower"; + case LowerRedstoneOre: return "ore_redstone_lower"; + case MagmaOre: return "ore_magma"; + case MediumDiamondOre: return "ore_diamond_medium"; + case MiddleIronOre: return "ore_iron_middle"; + case NetherGoldOre: return "ore_gold_nether"; + case NetherGravelOre: return "ore_gravel_nether"; + case NetherQuartzOre: return "ore_quartz_nether"; + case RedstoneOre: return "ore_redstone"; + case SmallDebrisOre: return "ore_debris_small"; + case SmallIronOre: return "ore_iron_small"; + case SoulSandOre: return "ore_soul_sand"; + case TuffOre: return "ore_tuff"; + case UpperAndesiteOre: return "ore_andesite_upper"; + case UpperCoalOre: return "ore_coal_upper"; + case UpperDioriteOre: return "ore_diorite_upper"; + case UpperGraniteOre: return "ore_granite_upper"; + case UpperIronOre: return "ore_iron_upper"; + } + return NULL; +} + static void setColor(unsigned char colors[256][3], int id, uint32_t hex) { colors[id][0] = (hex >> 16) & 0xff; diff --git a/util.h b/util.h index 566d9ab1..deb0d909 100644 --- a/util.h +++ b/util.h @@ -30,6 +30,9 @@ const char *biome2str(int mc, int id); /// get the resource id name for a structure const char *struct2str(int stype); +/// get the resource id name for an ore +const char* ore2str(int otype); + /// initialize a biome colormap with some defaults void initBiomeColors(unsigned char biomeColors[256][3]); void initBiomeTypeColors(unsigned char biomeColors[256][3]); From 11704c01b978e45224043d5d9e0498bb54fd5434 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 1 May 2025 14:19:19 +0200 Subject: [PATCH 35/45] Revert removal of bit fields --- finders.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/finders.h b/finders.h index 02a8ef0c..2aa145e4 100644 --- a/finders.h +++ b/finders.h @@ -87,12 +87,12 @@ STRUCT(StrongholdIter) STRUCT(StructureVariant) { - uint8_t abandoned; // is zombie village - uint8_t giant; // giant portal variant - uint8_t underground; // underground portal - uint8_t airpocket; // portal with air pocket - uint8_t basement; // igloo with basement - uint8_t cracked; // geode with crack + uint8_t abandoned :1; // is zombie village + uint8_t giant :1; // giant portal variant + uint8_t underground :1; // underground portal + uint8_t airpocket :1; // portal with air pocket + uint8_t basement :1; // igloo with basement + uint8_t cracked :1; // geode with crack uint8_t size; // geode size | igloo middel pieces uint8_t start; // starting piece index short biome; // biome variant From a7cd676b0afc3491ddf6272b5fedb3e3c2880854 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 22 May 2025 21:01:58 +0200 Subject: [PATCH 36/45] Allocate random state on the heap --- finders.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/finders.c b/finders.c index 8fd4f9ff..1bc9b105 100644 --- a/finders.c +++ b/finders.c @@ -1698,11 +1698,11 @@ Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig conf uint64_t populationSeed = getPopulationSeed(g->mc, g->seed, chunkX << 4, chunkZ << 4); RandomSource rnd; if (g->mc <= MC_1_17) { - uint64_t seed; - rnd = createJavaRandom(&seed); + uint64_t* seed = malloc(sizeof(uint64_t)); + rnd = createJavaRandom(seed); } else { - Xoroshiro xr; - rnd = createXoroshiro(&xr); + Xoroshiro* xr = malloc(sizeof(Xoroshiro)); + rnd = createXoroshiro(xr); } // set decorator seed rnd.setSeed(rnd.state, populationSeed + config.index + 10000 * config.step); @@ -1731,6 +1731,7 @@ Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig conf temp[i] = orePositions; size += orePositions.size; } + free(rnd.state); Pos3List poses; createPos3List(&poses, size); int offset = 0; From b9682dc905f99344aee1f82b59effdf2af6d4fb3 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Sat, 24 May 2025 22:20:37 +0200 Subject: [PATCH 37/45] Add y parameter to getBiomeForOreGen --- finders.c | 7 +++++-- finders.h | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/finders.c b/finders.c index 1bc9b105..0062dcb6 100644 --- a/finders.c +++ b/finders.c @@ -1685,12 +1685,15 @@ int isViableOreBiome(int mc, int oreType, int biomeID) return 0; } -int getBiomeForOreGen(const Generator *g, int chunkX, int chunkZ) +int getBiomeForOreGen(const Generator *g, int chunkX, int chunkZ, int y) { if (g->mc <= MC_1_15) { return getBiomeAt(g, 1, (chunkX << 4) + 8, 0, (chunkZ << 4) + 8); } - return getBiomeAt(g, 4, (chunkX << 2) + 2, 0, (chunkZ << 2) + 2); + if (g->mc <= MC_1_17) { + return getBiomeAt(g, 4, (chunkX << 2) + 2, 0, (chunkZ << 2) + 2); + } + return getBiomeAt(g, 4, (chunkX << 2) + 2, y >> 2, (chunkZ << 2) + 2); } Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig config, int chunkX, int chunkZ) diff --git a/finders.h b/finders.h index 2aa145e4..e2cebfc5 100644 --- a/finders.h +++ b/finders.h @@ -476,10 +476,11 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf); * `isViableOreBiome` to check whether the ore can generate in the chunk. * @param g the generator * @param chunkX the chunk X-coordinate - * @param chunkZ the chunk Y-coordinate + * @param chunkZ the chunk Z-coordinate + * @param y the Y-coordinate (in block coordinates) to check for, unused for <1.18 * @return the biome ID */ -int getBiomeForOreGen(const Generator *g, int chunkX, int chunkZ); +int getBiomeForOreGen(const Generator *g, int chunkX, int chunkZ, int y); /** * Check whether the given ore type generates in this biome. From 36268c502a30e5edc803f6791f8c0cc4e00962ae Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Sat, 24 May 2025 22:35:35 +0200 Subject: [PATCH 38/45] Add comment for getOreConfig --- finders.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/finders.h b/finders.h index e2cebfc5..832630b1 100644 --- a/finders.h +++ b/finders.h @@ -465,7 +465,7 @@ static inline int providerTriangleRange(RandomSource rnd, const int minOffset, c * * @param oreType the ore type as listed in Ores. * @param mc the Minecraft version as listed in MCVersion - * @param biomeID the biome ID as listed in BiomeID + * @param biomeID the biome ID as listed in BiomeID, unused for >=1.18 * @param oconf the target config * @return 0 on failure */ From 2373648625af704913b1c67cce6a09c6a7110b22 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Thu, 26 Jun 2025 18:35:23 +0200 Subject: [PATCH 39/45] Simplify ore config code --- finders.c | 189 ++++++++++++++++++++++-------------------------------- 1 file changed, 76 insertions(+), 113 deletions(-) diff --git a/finders.c b/finders.c index 0062dcb6..3adab295 100644 --- a/finders.c +++ b/finders.c @@ -1408,15 +1408,15 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) return mc > MC_1_12 && mc <= MC_1_17; case BuriedDiamondOre: if (mc <= MC_1_19) *oconf = o_buried_diamond_118; - else if (mc <= MC_NEWEST) *oconf = o_buried_diamond_120; + else *oconf = o_buried_diamond_120; return mc > MC_1_17; case BuriedLapisOre: if (mc <= MC_1_19) *oconf = o_buried_lapis_118; - else if (mc <= MC_NEWEST) *oconf = o_buried_lapis_120; + else *oconf = o_buried_lapis_120; return mc > MC_1_17; case ClayOre: if (mc <= MC_1_19) *oconf = o_clay_118; - else if (mc <= MC_NEWEST) *oconf = o_clay_120; + else *oconf = o_clay_120; return mc > MC_1_17; case CoalOre: if (mc <= MC_1_15) *oconf = o_coal_113; @@ -1426,7 +1426,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case CopperOre: if (mc <= MC_1_17) *oconf = o_copper_117; else if (mc <= MC_1_19) *oconf = o_copper_118; - else if (mc <= MC_NEWEST) *oconf = o_copper_120; + else *oconf = o_copper_120; return mc > MC_1_16; case DeepslateOre: if (mc <= MC_1_17) *oconf = o_deepslate_117; @@ -1435,7 +1435,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) if (mc <= MC_1_15) *oconf = o_diamond_113; else if (mc <= MC_1_16) *oconf = o_diamond_116; else if (mc <= MC_1_17) *oconf = o_diamond_117; - else if (mc <= MC_NEWEST) *oconf = o_diamond_118; + else *oconf = o_diamond_118; return mc > MC_1_12; case DioriteOre: if (mc <= MC_1_15) *oconf = o_diorite_113; @@ -1444,7 +1444,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case DirtOre: if (mc <= MC_1_15) *oconf = o_dirt_113; else if (mc <= MC_1_17) *oconf = o_dirt_116; - else if (mc <= MC_NEWEST) *oconf = o_dirt_118; + else *oconf = o_dirt_118; return mc > MC_1_12; case EmeraldOre: if (mc <= MC_1_15) *oconf = o_emerald_113; @@ -1452,20 +1452,20 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17) *oconf = o_emerald_117; else if (mc <= MC_1_18) *oconf = o_emerald_118; else if (mc <= MC_1_19) *oconf = o_emerald_119; - else if (mc <= MC_NEWEST) *oconf = o_emerald_120; + else *oconf = o_emerald_120; return mc > MC_1_12; case ExtraGoldOre: if (mc <= MC_1_15) *oconf = o_extra_gold_113; else if (mc <= MC_1_16) *oconf = o_extra_gold_116; else if (mc <= MC_1_17) *oconf = o_extra_gold_117; else if (mc <= MC_1_19) *oconf = o_extra_gold_118; - else if (mc <= MC_NEWEST) *oconf = o_extra_gold_120; + else *oconf = o_extra_gold_120; return mc > MC_1_12; case GoldOre: if (mc <= MC_1_15) *oconf = o_gold_113; else if (mc <= MC_1_16) *oconf = o_gold_116; else if (mc <= MC_1_17) *oconf = o_gold_117; - else if (mc <= MC_NEWEST) *oconf = o_gold_118; + else *oconf = o_gold_118; return mc > MC_1_12; case GraniteOre: if (mc <= MC_1_15) *oconf = o_granite_113; @@ -1474,7 +1474,7 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) case GravelOre: if (mc <= MC_1_15) *oconf = o_gravel_113; else if (mc <= MC_1_17) *oconf = o_gravel_116; - else if (mc <= MC_NEWEST) *oconf = o_gravel_118; + else *oconf = o_gravel_118; return mc > MC_1_12; case IronOre: if (mc <= MC_1_15) *oconf = o_iron_113; @@ -1486,86 +1486,86 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_16) *oconf = o_lapis_116; else if (mc <= MC_1_17) *oconf = o_lapis_117; else if (mc <= MC_1_19) *oconf = o_lapis_118; - else if (mc <= MC_NEWEST) *oconf = o_lapis_120; + else *oconf = o_lapis_120; return mc > MC_1_12; case LargeCopperOre: if (mc <= MC_1_19) *oconf = o_large_copper_118; - else if (mc <= MC_NEWEST) *oconf = o_large_copper_120; + else *oconf = o_large_copper_120; return mc > MC_1_17; case LargeDiamondOre: if (mc <= MC_1_19) *oconf = o_large_diamond_118; - else if (mc <= MC_NEWEST) *oconf = o_large_diamond_120; + else *oconf = o_large_diamond_120; return mc > MC_1_17; case LowerAndesiteOre: - if (mc <= MC_NEWEST) *oconf = o_lower_andesite_118; + *oconf = o_lower_andesite_118; return mc > MC_1_17; case LowerCoalOre: - if (mc <= MC_NEWEST) *oconf = o_lower_coal_118; + *oconf = o_lower_coal_118; return mc > MC_1_17; case LowerDioriteOre: - if (mc <= MC_NEWEST) *oconf = o_lower_diorite_118; + *oconf = o_lower_diorite_118; return mc > MC_1_17; case LowerGoldOre: - if (mc <= MC_NEWEST) *oconf = o_lower_gold_118; + *oconf = o_lower_gold_118; return mc > MC_1_17; case LowerGraniteOre: - if (mc <= MC_NEWEST) *oconf = o_lower_granite_118; + *oconf = o_lower_granite_118; return mc > MC_1_17; case LowerRedstoneOre: - if (mc <= MC_NEWEST) *oconf = o_lower_redstone_118; + *oconf = o_lower_redstone_118; return mc > MC_1_17; case MediumDiamondOre: - if (mc <= MC_NEWEST) *oconf = o_medium_diamond_120; + *oconf = o_medium_diamond_120; return mc > MC_1_19; case MiddleIronOre: - if (mc <= MC_NEWEST) *oconf = o_middle_iron_118; + *oconf = o_middle_iron_118; return mc > MC_1_17; case RedstoneOre: if (mc <= MC_1_15) *oconf = o_redstone_113; else if (mc <= MC_1_16) *oconf = o_redstone_116; else if (mc <= MC_1_17) *oconf = o_redstone_117; - else if (mc <= MC_NEWEST) *oconf = o_redstone_118; + else *oconf = o_redstone_118; return mc > MC_1_12; case SmallIronOre: - if (mc <= MC_NEWEST) *oconf = o_small_iron_118; + *oconf = o_small_iron_118; return mc > MC_1_17; case TuffOre: if (mc <= MC_1_17) *oconf = o_tuff_117; - else if (mc <= MC_NEWEST) *oconf = o_tuff_118; + else *oconf = o_tuff_118; return mc > MC_1_16; case UpperAndesiteOre: - if (mc <= MC_NEWEST) *oconf = o_upper_andesite_118; + *oconf = o_upper_andesite_118; return mc > MC_1_17; case UpperCoalOre: - if (mc <= MC_NEWEST) *oconf = o_upper_coal_118; + *oconf = o_upper_coal_118; return mc > MC_1_17; case UpperDioriteOre: - if (mc <= MC_NEWEST) *oconf = o_upper_diorite_118; + *oconf = o_upper_diorite_118; return mc > MC_1_17; case UpperGraniteOre: - if (mc <= MC_NEWEST) *oconf = o_upper_granite_118; + *oconf = o_upper_granite_118; return mc > MC_1_17; case UpperIronOre: - if (mc <= MC_NEWEST) *oconf = o_upper_iron_118; + *oconf = o_upper_iron_118; return mc > MC_1_17; // nether case BlackstoneOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_blackstone_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_blackstone_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_blackstone_116; - else if (mc <= MC_NEWEST) *oconf = o_blackstone_118; + else *oconf = o_blackstone_118; return mc > MC_1_15; case DeltasGoldOre: - if (mc <= MC_NEWEST) *oconf = o_deltas_gold_116; + *oconf = o_deltas_gold_116; return mc > MC_1_15; case DeltasQuartzOre: - if (mc <= MC_NEWEST) *oconf = o_deltas_quartz_116; + *oconf = o_deltas_quartz_116; return mc > MC_1_15; case LargeDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_large_debris_116; - else if (mc <= MC_NEWEST) *oconf = o_large_debris_118; + else *oconf = o_large_debris_118; return mc > MC_1_15; case MagmaOre: if (mc <= MC_1_15) *oconf = o_magma_113; @@ -1574,36 +1574,36 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_magma_116_warped_forest; else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_magma_116_basalt_deltas; else if (mc <= MC_1_17) *oconf = o_magma_116; - else if (mc <= MC_NEWEST) *oconf = o_magma_118; + else *oconf = o_magma_118; return mc > MC_1_12; case NetherGoldOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gold_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_nether_gold_116; - else if (mc <= MC_NEWEST) *oconf = o_nether_gold_118; + else *oconf = o_nether_gold_118; return mc > MC_1_15; case NetherGravelOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gravel_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gravel_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_nether_gravel_116; - else if (mc <= MC_NEWEST) *oconf = o_nether_gravel_118; + else *oconf = o_nether_gravel_118; return mc > MC_1_15; case NetherQuartzOre: if (mc <= MC_1_15) *oconf = o_nether_quartz_113; else if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_quartz_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_quartz_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_nether_quartz_116; - else if (mc <= MC_NEWEST) *oconf = o_nether_quartz_118; + else *oconf = o_nether_quartz_118; return mc > MC_1_12; case SmallDebrisOre: if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_116_crimson_forest; else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_small_debris_116_warped_forest; else if (mc <= MC_1_17) *oconf = o_small_debris_116; - else if (mc <= MC_NEWEST) *oconf = o_small_debris_118; + else *oconf = o_small_debris_118; return mc > MC_1_15; case SoulSandOre: if (mc <= MC_1_17) *oconf = o_soul_sand_116; - else if (mc <= MC_NEWEST) *oconf = o_soul_sand_118; + else *oconf = o_soul_sand_118; return mc > MC_1_15; default: memset(oconf, 0, sizeof(OreConfig)); @@ -1775,22 +1775,18 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); break; case BuriedDiamondOre: - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64 + -80, -64 + 80); - break; + return providerTriangleRange(rnd, -64 + -80, -64 + 80); case BuriedLapisOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 64); - break; + return providerUniformRange(rnd, -64, 64); case ClayOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 256); - break; + return providerUniformRange(rnd, 0, 256); case CoalOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 128); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 127); break; case CopperOre: if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 96); - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -16, 112); - break; + return providerTriangleRange(rnd, -16, 112); case DeepslateOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); break; @@ -1798,8 +1794,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); // was 16 in 1.17, changed to 15 in 1.17.1 if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64 + -80, -64 + 80); - break; + return providerTriangleRange(rnd, -64 + -80, -64 + 80); case DioriteOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); @@ -1807,23 +1802,19 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case DirtOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 160); - break; + return providerUniformRange(rnd, 0, 160); case EmeraldOre: if (mc <= MC_1_16) return rnd.nextInt(rnd.state, 28) + 4; if (mc <= MC_1_17) return providerUniformRange(rnd, 4, 31); - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -16, 480); - break; + return providerTriangleRange(rnd, -16, 480); case ExtraGoldOre: if (mc <= MC_1_16) return providerRange(rnd, 32, 32, 80); if (mc <= MC_1_17) return providerUniformRange(rnd, 32, 79); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 32, 256); - break; + return providerUniformRange(rnd, 32, 256); case GoldOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 31); - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64, 32); - break; + return providerTriangleRange(rnd, -64, 32); case GraniteOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); @@ -1831,8 +1822,7 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case GravelOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 319); - break; + return providerUniformRange(rnd, -64, 319); case IronOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 64); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 63); @@ -1840,100 +1830,73 @@ int getOreYPos(int mc, int oreType, RandomSource rnd) case LapisOre: if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 16); if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 30); - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -32, 32); - break; + return providerTriangleRange(rnd, -32, 32); case LargeCopperOre: - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -16, 112); - break; + return providerTriangleRange(rnd, -16, 112); case LargeDiamondOre: - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64 + -80, -64 + 80); - break; + return providerTriangleRange(rnd, -64 + -80, -64 + 80); case LowerAndesiteOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 60); - break; + return providerUniformRange(rnd, 0, 60); case LowerCoalOre: - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, 0, 192); - break; + return providerTriangleRange(rnd, 0, 192); case LowerDioriteOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 60); - break; + return providerUniformRange(rnd, 0, 60); case LowerGoldOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, -48); - break; + return providerUniformRange(rnd, -64, -48); case LowerGraniteOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 60); - break; + return providerUniformRange(rnd, 0, 60); case LowerRedstoneOre: - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -64 + -32, -64 + 32); - break; + return providerTriangleRange(rnd, -64 + -32, -64 + 32); case MediumDiamondOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, -4); - break; + return providerUniformRange(rnd, -64, -4); case MiddleIronOre: - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, -24, 56); - break; + return providerTriangleRange(rnd, -24, 56); case RedstoneOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 15); - break; + return providerUniformRange(rnd, -64, 15); case SmallIronOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 72); - break; + return providerUniformRange(rnd, -64, 72); case TuffOre: if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, -64, 0); - break; + return providerUniformRange(rnd, -64, 0); case UpperAndesiteOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 64, 128); - break; + return providerUniformRange(rnd, 64, 128); case UpperCoalOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 136, 319); - break; + return providerUniformRange(rnd, 136, 319); case UpperDioriteOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 64, 128); - break; + return providerUniformRange(rnd, 64, 128); case UpperGraniteOre: - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 64, 128); - break; + return providerUniformRange(rnd, 64, 128); case UpperIronOre: - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, 80, 384); - break; + return providerTriangleRange(rnd, 80, 384); // nether case BlackstoneOre: if (mc <= MC_1_16) return providerRange(rnd, 5, 10, 37); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 5, 31); - break; + return providerUniformRange(rnd, 5, 31); case LargeDebrisOre: if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 8); - if (mc <= MC_NEWEST) return providerTriangleRange(rnd, 8, 24); - break; + return providerTriangleRange(rnd, 8, 24); case MagmaOre: if (mc <= MC_1_16) return 32 - 5 + rnd.nextInt(rnd.state, 10); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 27, 36); - break; + return providerUniformRange(rnd, 27, 36); case DeltasGoldOre: case NetherGoldOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0 + 10, 127 - 10); - break; + return providerUniformRange(rnd, 0 + 10, 127 - 10); case NetherGravelOre: if (mc <= MC_1_16) return providerRange(rnd, 5, 0, 37); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 5, 41); - break; + return providerUniformRange(rnd, 5, 41); case DeltasQuartzOre: case NetherQuartzOre: if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0 + 10, 127 - 10); - break; + return providerUniformRange(rnd, 0 + 10, 127 - 10); case SmallDebrisOre: if (mc <= MC_1_16) return providerRange(rnd, 8, 16, 128); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 8, 127 - 8); - break; + return providerUniformRange(rnd, 8, 127 - 8); case SoulSandOre: if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); - if (mc <= MC_NEWEST) return providerUniformRange(rnd, 0, 31); - break; + return providerUniformRange(rnd, 0, 31); default: fprintf(stderr, "getOreYPos: not implemented for ore type %d.\n", oreType); exit(1); From 9f9d8f1ea14eeceb0d7428b4175593aa80944ce1 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Fri, 5 Sep 2025 23:35:56 +0200 Subject: [PATCH 40/45] Merge height provider into the ore config --- finders.c | 593 ++++++++++++++++++++++-------------------------------- finders.h | 22 +- 2 files changed, 260 insertions(+), 355 deletions(-) diff --git a/finders.c b/finders.c index 3adab295..2b59ea98 100644 --- a/finders.c +++ b/finders.c @@ -1233,267 +1233,288 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) static const OreConfig // overworld - o_andesite_113 = {4, 4, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_andesite_116 = {4, 6, 33, 10, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_buried_diamond_118 = {20, 6, 8, 4, BuriedDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, - o_buried_diamond_120 = {21, 6, 8, 4, BuriedDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, - - o_buried_lapis_118 = {22, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, - o_buried_lapis_120 = {23, 6, 7, 4, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, - - o_clay_118 = {26, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_clay_120 = {27, 6, 33, 46, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_coal_113 = {5, 4, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_coal_116 = {5, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_coal_117 = {7, 6, 17, 20, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_copper_117 = {13, 6, 10, 6, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_copper_118 = {24, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_copper_120 = {25, 6, 10, 16, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_deepslate_117 = {6, 6, 64, 2, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_diamond_113 = { 9, 4, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_diamond_116 = { 9, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_diamond_117 = {11, 6, 8, 1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_diamond_118 = {18, 6, 4, 7, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - - o_diorite_113 = {3, 4, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_diorite_116 = {3, 6, 33, 10, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_dirt_113 = {0, 4, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_dirt_116 = {0, 6, 33, 10, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_dirt_118 = {0, 6, 33, 7, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_emerald_113 = {14, 4, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, - o_emerald_116 = {14, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, - o_emerald_117 = {17, 6, 1, 1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_emerald_118 = {31, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_emerald_119 = {32, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_emerald_120 = {33, 6, 3, 100, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_extra_gold_113 = {11, 4, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_extra_gold_116 = {11, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_extra_gold_117 = {14, 6, 9, 20, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_extra_gold_118 = {27, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_extra_gold_120 = {28, 6, 9, 50, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - - o_gold_113 = { 7, 4, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_gold_116 = { 7, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_gold_117 = { 9, 6, 9, 2, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_gold_118 = {14, 6, 9, 4, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - - o_granite_113 = {2, 4, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_granite_116 = {2, 6, 33, 10, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_gravel_113 = {1, 4, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_gravel_116 = {1, 6, 33, 8, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_gravel_118 = {1, 6, 33, 14, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_iron_113 = {6, 4, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_iron_116 = {6, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_iron_117 = {8, 6, 9, 20, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_lapis_113 = {10, 4, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_lapis_116 = {10, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_lapis_117 = {12, 6, 7, 1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_lapis_118 = {21, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_lapis_120 = {22, 6, 7, 2, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - - o_large_copper_118 = {23, 6, 20, 16, LargeCopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_large_copper_120 = {24, 6, 20, 16, LargeCopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_andesite_113 = {4, 4, 33, 10, providerRange, 0, 0, 80, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_andesite_1161 = {4, 6, 33, 10, providerRange, 0, 0, 80, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_andesite_117 = {4, 6, 33, 10, providerUniformRange, 0, 79, -1, AndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_buried_diamond_118 = {20, 6, 8, 4, providerTriangleRange, -64 + -80, -64 + 80, -1, BuriedDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, + o_buried_diamond_120 = {21, 6, 8, 4, providerTriangleRange, -64 + -80, -64 + 80, -1, BuriedDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, + + o_buried_lapis_118 = {22, 6, 7, 4, providerUniformRange, -64, 64, -1, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, + o_buried_lapis_120 = {23, 6, 7, 4, providerUniformRange, -64, 64, -1, BuriedLapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 1.0F}, + + o_clay_118 = {26, 6, 33, 46, providerUniformRange, 0, 256, -1, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_clay_120 = {27, 6, 33, 46, providerUniformRange, 0, 256, -1, ClayOre, CLAY, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_coal_113 = {5, 4, 17, 20, providerRange, 0, 0, 128, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_coal_1161 = {5, 6, 17, 20, providerRange, 0, 0, 128, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_coal_117 = {7, 6, 17, 20, providerUniformRange, 0, 127, -1, CoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_copper_117 = {13, 6, 10, 6, providerTriangleRange, 0, 96, -1, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_copper_118 = {24, 6, 10, 16, providerTriangleRange, -16, 112, -1, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_copper_120 = {25, 6, 10, 16, providerTriangleRange, -16, 112, -1, CopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_deepslate_117 = {6, 6, 64, 2, providerUniformRange, 0, 16, -1, DeepslateOre, DEEPSLATE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_diamond_113 = { 9, 4, 8, 1, providerRange, 0, 0, 16, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diamond_1161 = { 9, 6, 8, 1, providerRange, 0, 0, 16, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + // maxOffset was 16 in 1.17, changed to 15 in 1.17.1 + o_diamond_117 = {11, 6, 8, 1, providerUniformRange, 0, 15, -1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diamond_118 = {18, 6, 4, 7, providerTriangleRange, -64 + -80, -64 + 80, -1, DiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + + o_diorite_113 = {3, 4, 33, 10, providerRange, 0, 0, 80, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diorite_1161 = {3, 6, 33, 10, providerRange, 0, 0, 80, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_diorite_117 = {3, 6, 33, 10, providerUniformRange, 0, 79, -1, DioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_dirt_113 = {0, 4, 33, 10, providerRange, 0, 0, 256, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_dirt_1161 = {0, 6, 33, 10, providerRange, 0, 0, 256, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_dirt_117 = {0, 6, 33, 10, providerUniformRange, 0, 255, -1, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_dirt_118 = {0, 6, 33, 7, providerUniformRange, 0, 160, -1, DirtOre, DIRT, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_emerald_113 = {14, 4, 1, 1, providerEmeraldOre, -1, -1, -1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, + o_emerald_1161 = {14, 6, 1, 1, providerEmeraldOre, -1, -1, -1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 1, STONE_REPLACEABLES, 0.0F}, + o_emerald_117 = {17, 6, 1, 1, providerUniformRange, 4, 31, -1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_118 = {31, 6, 3, 100, providerTriangleRange, -16, 480, -1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_119 = {32, 6, 3, 100, providerTriangleRange, -16, 480, -1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_emerald_120 = {33, 6, 3, 100, providerTriangleRange, -16, 480, -1, EmeraldOre, EMERALD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_extra_gold_113 = {11, 4, 9, 20, providerRange, 32, 32, 80, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_extra_gold_1161 = {11, 6, 9, 20, providerRange, 32, 32, 80, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_extra_gold_117 = {14, 6, 9, 20, providerUniformRange, 32, 79, -1, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_extra_gold_118 = {27, 6, 9, 50, providerUniformRange, 32, 256, -1, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_extra_gold_120 = {28, 6, 9, 50, providerUniformRange, 32, 256, -1, ExtraGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + + o_gold_113 = { 7, 4, 9, 2, providerRange, 0, 0, 32, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gold_1161 = { 7, 6, 9, 2, providerRange, 0, 0, 32, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gold_117 = { 9, 6, 9, 2, providerUniformRange, 0, 31, -1, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gold_118 = {14, 6, 9, 4, providerTriangleRange, -64, 32, -1, GoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + + o_granite_113 = {2, 4, 33, 10, providerRange, 0, 0, 80, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_granite_1161 = {2, 6, 33, 10, providerRange, 0, 0, 80, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_granite_117 = {2, 6, 33, 10, providerUniformRange, 0, 79, -1, GraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_gravel_113 = {1, 4, 33, 8, providerRange, 0, 0, 256, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gravel_1161 = {1, 6, 33, 8, providerRange, 0, 0, 256, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gravel_117 = {1, 6, 33, 8, providerUniformRange, 0, 255, -1, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_gravel_118 = {1, 6, 33, 14, providerUniformRange, -64, 319, -1, GravelOre, GRAVEL, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_iron_113 = {6, 4, 9, 20, providerRange, 0, 0, 64, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_iron_1161 = {6, 6, 9, 20, providerRange, 0, 0, 64, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_iron_117 = {8, 6, 9, 20, providerUniformRange, 0, 63, -1, IronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_lapis_113 = {10, 4, 7, 1, providerDepthAverage, 16, 16, -1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lapis_1161 = {10, 6, 7, 1, providerDepthAverage, 16, 16, -1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lapis_117 = {12, 6, 7, 1, providerTriangleRange, 0, 30, -1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lapis_118 = {21, 6, 7, 2, providerTriangleRange, -32, 32, -1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lapis_120 = {22, 6, 7, 2, providerTriangleRange, -32, 32, -1, LapisOre, LAPIS_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + + o_large_copper_118 = {23, 6, 20, 16, providerTriangleRange, -16, 112, -1, LargeCopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_large_copper_120 = {24, 6, 20, 16, providerTriangleRange, -16, 112, -1, LargeCopperOre, COPPER_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement - o_large_diamond_118 = {19, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.7F}, - o_large_diamond_120 = {20, 6, 12, 9, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.7F}, + o_large_diamond_118 = {19, 6, 12, 9, providerTriangleRange, -64 + -80, -64 + 80, -1, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.7F}, + o_large_diamond_120 = {20, 6, 12, 9, providerTriangleRange, -64 + -80, -64 + 80, -1, LargeDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.7F}, - o_lower_andesite_118 = {7, 6, 64, 2, LowerAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lower_andesite_118 = {7, 6, 64, 2, providerUniformRange, 0, 60, -1, LowerAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_lower_coal_118 = {10, 6, 17, 20, LowerCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_lower_coal_118 = {10, 6, 17, 20, providerTriangleRange, 0, 192, -1, LowerCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_lower_diorite_118 = {5, 6, 64, 2, LowerDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lower_diorite_118 = {5, 6, 64, 2, providerUniformRange, 0, 60, -1, LowerDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses UniformInt.of(0, 1) - o_lower_gold_118 = {15, 6, 9, 1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_lower_gold_118 = {15, 6, 9, 1, providerUniformRange, -64, -48, -1, LowerGoldOre, GOLD_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_lower_granite_118 = {3, 6, 64, 2, LowerGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lower_granite_118 = {3, 6, 64, 2, providerUniformRange, 0, 60, -1, LowerGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_lower_redstone_118 = {17, 6, 8, 8, LowerRedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_lower_redstone_118 = {17, 6, 8, 8, providerTriangleRange, -64 + -32, -64 + 32, -1, LowerRedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_medium_diamond_120 = {19, 6, 8, 2, MediumDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, + o_medium_diamond_120 = {19, 6, 8, 2, providerUniformRange, -64, -4, -1, MediumDiamondOre, DIAMOND_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.5F}, - o_middle_iron_118 = {12, 6, 9, 10, MiddleIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_middle_iron_118 = {12, 6, 9, 10, providerTriangleRange, -24, 56, -1, MiddleIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_redstone_113 = { 8, 4, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_redstone_116 = { 8, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_redstone_117 = {10, 6, 8, 8, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_redstone_118 = {16, 6, 8, 4, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_redstone_113 = { 8, 4, 8, 8, providerRange, 0, 0, 16, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_redstone_1161 = { 8, 6, 8, 8, providerRange, 0, 0, 16, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_redstone_117 = {10, 6, 8, 8, providerUniformRange, 0, 15, -1, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_redstone_118 = {16, 6, 8, 4, providerUniformRange, -64, 15, -1, RedstoneOre, REDSTONE_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_small_iron_118 = {13, 6, 4, 10, SmallIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_small_iron_118 = {13, 6, 4, 10, providerUniformRange, -64, 72, -1, SmallIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_tuff_117 = {5, 6, 33, 1, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_tuff_118 = {8, 6, 64, 2, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_tuff_117 = {5, 6, 33, 1, providerUniformRange, 0, 16, -1, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_tuff_118 = {8, 6, 64, 2, providerUniformRange, -64, 0, -1, TuffOre, TUFF, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement - o_upper_andesite_118 = {6, 6, 64, 6, UpperAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_upper_andesite_118 = {6, 6, 64, 6, providerUniformRange, 64, 128, -1, UpperAndesiteOre, ANDESITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_upper_coal_118 = {9, 6, 17, 30, UpperCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_upper_coal_118 = {9, 6, 17, 30, providerUniformRange, 136, 319, -1, UpperCoalOre, COAL_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement - o_upper_diorite_118 = {4, 6, 64, 6, UpperDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_upper_diorite_118 = {4, 6, 64, 6, providerUniformRange, 64, 128, -1, UpperDioriteOre, DIORITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // uses rareOrePlacement - o_upper_granite_118 = {2, 6, 64, 6, UpperGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_upper_granite_118 = {2, 6, 64, 6, providerUniformRange, 64, 128, -1, UpperGraniteOre, GRANITE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, - o_upper_iron_118 = {11, 6, 9, 90, UpperIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, + o_upper_iron_118 = {11, 6, 9, 90, providerTriangleRange, 80, 384, -1, UpperIronOre, IRON_ORE, DIM_OVERWORLD, 6, BASE_STONE_OVERWORLD_REPLACEABLES, 0.0F}, // nether - o_blackstone_116 = {12, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_116_crimson_forest = { 9, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_116_warped_forest = {10, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_blackstone_118 = {18, 7, 33, 2, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_1161 = {12, 7, 33, 2, providerRange, 5, 10, 37, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_1161_crimson_forest = { 9, 7, 33, 2, providerRange, 5, 10, 37, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_1161_warped_forest = {10, 7, 33, 2, providerRange, 5, 10, 37, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_117 = {12, 7, 33, 2, providerUniformRange, 5, 31, -1, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_blackstone_118 = {18, 7, 33, 2, providerUniformRange, 5, 31, -1, BlackstoneOre, BLACKSTONE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_deltas_gold_116 = {13, 7, 10, 20, DeltasGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_deltas_gold_1161 = {13, 7, 10, 20, providerRange, 10, 20, 128, DeltasGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_deltas_gold_117 = {13, 7, 10, 20, providerUniformRange, 0 + 10, 127 - 10, -1, DeltasGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_deltas_quartz_116 = {14, 7, 14, 32, DeltasQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_deltas_quartz_1161 = {14, 7, 14, 32, providerRange, 10, 20, 128, DeltasQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_deltas_quartz_117 = {14, 7, 14, 32, providerRange, 0 + 10, 127 - 10, -1, DeltasQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count - o_large_debris_116 = {15, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_large_debris_116_crimson_forest = {12, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_large_debris_116_warped_forest = {13, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_large_debris_118 = {21, 7, 3, 1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, - - o_magma_113 = { 8, 5, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116 = { 9, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116_soul_sand_valley = { 8, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116_crimson_forest = { 6, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116_warped_forest = { 7, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_116_basalt_deltas = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_magma_118 = {11, 7, 33, 4, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - - o_nether_gold_116 = {13, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_116_crimson_forest = {10, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_116_warped_forest = {11, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gold_118 = {19, 7, 10, 10, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - - o_nether_gravel_116 = {11, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_116_crimson_forest = { 8, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_116_warped_forest = { 9, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_gravel_118 = {17, 7, 33, 2, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - - o_nether_quartz_113 = { 7, 5, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_quartz_116 = {14, 7, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_quartz_116_crimson_forest = {11, 7, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_quartz_116_warped_forest = {12, 7, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_nether_quartz_118 = {20, 7, 14, 16, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_large_debris_1161 = {15, 7, 3, 1, providerDepthAverage, 16, 8, -1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_large_debris_1161_crimson_forest = {12, 7, 3, 1, providerDepthAverage, 16, 8, -1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_large_debris_1161_warped_forest = {13, 7, 3, 1, providerDepthAverage, 16, 8, -1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_large_debris_117 = {15, 7, 3, 1, providerTriangleRange, 8, 24, -1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_large_debris_118 = {21, 7, 3, 1, providerTriangleRange, 8, 24, -1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + + o_magma_113 = { 8, 5, 33, 4, providerMagmaOre, -1, -1, -1, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_1161 = { 9, 7, 33, 4, providerMagmaOre, -1, -1, -1, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_1161_soul_sand_valley = { 8, 7, 33, 4, providerMagmaOre, -1, -1, -1, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_1161_crimson_forest = { 6, 7, 33, 4, providerMagmaOre, -1, -1, -1, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_1161_warped_forest = { 7, 7, 33, 4, providerMagmaOre, -1, -1, -1, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_1161_basalt_deltas = {11, 7, 33, 4, providerMagmaOre, -1, -1, -1, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_117 = { 9, 7, 33, 4, providerUniformRange, 27, 36, -1, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_magma_118 = {11, 7, 33, 4, providerUniformRange, 27, 36, -1, MagmaOre, MAGMA_BLOCK, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_nether_gold_1161 = {13, 7, 10, 10, providerRange, 10, 20, 128, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_1161_crimson_forest = {10, 7, 10, 10, providerRange, 10, 20, 128, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_1161_warped_forest = {11, 7, 10, 10, providerRange, 10, 20, 128, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_117 = {13, 7, 10, 10, providerUniformRange, 0 + 10, 127 - 10, -1, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gold_118 = {19, 7, 10, 10, providerUniformRange, 0 + 10, 127 - 10, -1, NetherGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_nether_gravel_1161 = {11, 7, 33, 2, providerRange, 5, 0, 37, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_1161_crimson_forest = { 8, 7, 33, 2, providerRange, 5, 0, 37, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_1161_warped_forest = { 9, 7, 33, 2, providerRange, 5, 0, 37, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_117 = {11, 7, 33, 2, providerUniformRange, 5, 41, -1, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_gravel_118 = {17, 7, 33, 2, providerUniformRange, 5, 41, -1, NetherGravelOre, GRAVEL, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + + o_nether_quartz_113 = { 7, 5, 14, 16, providerRange, 10, 20, 128, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_1161 = {14, 7, 14, 16, providerRange, 10, 20, 128, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_1161_crimson_forest = {11, 7, 14, 16, providerRange, 10, 20, 128, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_1161_warped_forest = {12, 7, 14, 16, providerRange, 10, 20, 128, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_117 = {14, 7, 14, 16, providerUniformRange, 0 + 10, 127 - 10, -1, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_nether_quartz_118 = {20, 7, 14, 16, providerUniformRange, 0 + 10, 127 - 10, -1, NetherQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count - o_small_debris_116 = {16, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_small_debris_116_crimson_forest = {13, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_small_debris_116_warped_forest = {14, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, - o_small_debris_118 = {22, 7, 2, 1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, - - o_soul_sand_116 = {10, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_soul_sand_118 = {16, 7, 12, 12, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F} + o_small_debris_1161 = {16, 7, 2, 1, providerRange, 8, 16, 128, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_small_debris_1161_crimson_forest = {13, 7, 2, 1, providerRange, 8, 16, 128, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_small_debris_1161_warped_forest = {14, 7, 2, 1, providerRange, 8, 16, 128, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_small_debris_117 = {16, 7, 2, 1, providerUniformRange, 8, 127 - 8, -1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F}, + o_small_debris_118 = {22, 7, 2, 1, providerUniformRange, 8, 127 - 8, -1, SmallDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 1.0F}, + + o_soul_sand_1161 = {10, 7, 12, 12, providerRange, 0, 0, 32, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_soul_sand_117 = {10, 7, 12, 12, providerUniformRange, 0, 31, -1, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_soul_sand_118 = {16, 7, 12, 12, providerUniformRange, 0, 31, -1, SoulSandOre, SOUL_SAND, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F} ; switch (oreType) { // overworld case AndesiteOre: - if (mc <= MC_1_15) *oconf = o_andesite_113; - else if (mc <= MC_1_17) *oconf = o_andesite_116; + if (mc < MC_1_16_1) *oconf = o_andesite_113; + else if (mc < MC_1_17) *oconf = o_andesite_1161; + else *oconf = o_andesite_117; return mc > MC_1_12 && mc <= MC_1_17; case BuriedDiamondOre: - if (mc <= MC_1_19) *oconf = o_buried_diamond_118; + if (mc < MC_1_20) *oconf = o_buried_diamond_118; else *oconf = o_buried_diamond_120; return mc > MC_1_17; case BuriedLapisOre: - if (mc <= MC_1_19) *oconf = o_buried_lapis_118; + if (mc < MC_1_20) *oconf = o_buried_lapis_118; else *oconf = o_buried_lapis_120; return mc > MC_1_17; case ClayOre: - if (mc <= MC_1_19) *oconf = o_clay_118; + if (mc < MC_1_20) *oconf = o_clay_118; else *oconf = o_clay_120; return mc > MC_1_17; case CoalOre: - if (mc <= MC_1_15) *oconf = o_coal_113; - else if (mc <= MC_1_16) *oconf = o_coal_116; - else if (mc <= MC_1_17) *oconf = o_coal_117; + if (mc < MC_1_16_1) *oconf = o_coal_113; + else if (mc < MC_1_17) *oconf = o_coal_1161; + else *oconf = o_coal_117; return mc > MC_1_12 && mc <= MC_1_17; case CopperOre: - if (mc <= MC_1_17) *oconf = o_copper_117; - else if (mc <= MC_1_19) *oconf = o_copper_118; + if (mc < MC_1_18) *oconf = o_copper_117; + else if (mc < MC_1_20) *oconf = o_copper_118; else *oconf = o_copper_120; return mc > MC_1_16; case DeepslateOre: - if (mc <= MC_1_17) *oconf = o_deepslate_117; + *oconf = o_deepslate_117; return mc > MC_1_16 && mc <= MC_1_17; case DiamondOre: - if (mc <= MC_1_15) *oconf = o_diamond_113; - else if (mc <= MC_1_16) *oconf = o_diamond_116; - else if (mc <= MC_1_17) *oconf = o_diamond_117; + if (mc < MC_1_16_1) *oconf = o_diamond_113; + else if (mc < MC_1_17) *oconf = o_diamond_1161; + else if (mc < MC_1_18) *oconf = o_diamond_117; else *oconf = o_diamond_118; return mc > MC_1_12; case DioriteOre: - if (mc <= MC_1_15) *oconf = o_diorite_113; - else if (mc <= MC_1_17) *oconf = o_diorite_116; + if (mc < MC_1_16_1) *oconf = o_diorite_113; + else if (mc < MC_1_17) *oconf = o_diorite_1161; + else *oconf = o_diorite_117; return mc > MC_1_12 && mc <= MC_1_17; case DirtOre: - if (mc <= MC_1_15) *oconf = o_dirt_113; - else if (mc <= MC_1_17) *oconf = o_dirt_116; + if (mc < MC_1_16_1) *oconf = o_dirt_113; + else if (mc < MC_1_17) *oconf = o_dirt_1161; + else if (mc < MC_1_18) *oconf = o_dirt_117; else *oconf = o_dirt_118; return mc > MC_1_12; case EmeraldOre: - if (mc <= MC_1_15) *oconf = o_emerald_113; - else if (mc <= MC_1_16) *oconf = o_emerald_116; - else if (mc <= MC_1_17) *oconf = o_emerald_117; - else if (mc <= MC_1_18) *oconf = o_emerald_118; - else if (mc <= MC_1_19) *oconf = o_emerald_119; + if (mc < MC_1_16_1) *oconf = o_emerald_113; + else if (mc < MC_1_17) *oconf = o_emerald_1161; + else if (mc < MC_1_18) *oconf = o_emerald_117; + else if (mc < MC_1_19) *oconf = o_emerald_118; + else if (mc < MC_1_20) *oconf = o_emerald_119; else *oconf = o_emerald_120; return mc > MC_1_12; case ExtraGoldOre: - if (mc <= MC_1_15) *oconf = o_extra_gold_113; - else if (mc <= MC_1_16) *oconf = o_extra_gold_116; - else if (mc <= MC_1_17) *oconf = o_extra_gold_117; - else if (mc <= MC_1_19) *oconf = o_extra_gold_118; + if (mc < MC_1_16_1) *oconf = o_extra_gold_113; + else if (mc < MC_1_17) *oconf = o_extra_gold_1161; + else if (mc < MC_1_18) *oconf = o_extra_gold_117; + else if (mc < MC_1_20) *oconf = o_extra_gold_118; else *oconf = o_extra_gold_120; return mc > MC_1_12; case GoldOre: - if (mc <= MC_1_15) *oconf = o_gold_113; - else if (mc <= MC_1_16) *oconf = o_gold_116; - else if (mc <= MC_1_17) *oconf = o_gold_117; + if (mc < MC_1_16_1) *oconf = o_gold_113; + else if (mc < MC_1_17) *oconf = o_gold_1161; + else if (mc < MC_1_18) *oconf = o_gold_117; else *oconf = o_gold_118; return mc > MC_1_12; case GraniteOre: - if (mc <= MC_1_15) *oconf = o_granite_113; - else if (mc <= MC_1_17) *oconf = o_granite_116; + if (mc < MC_1_16_1) *oconf = o_granite_113; + else if (mc < MC_1_17) *oconf = o_granite_1161; + else *oconf = o_granite_117; return mc > MC_1_12 && mc <= MC_1_17; case GravelOre: - if (mc <= MC_1_15) *oconf = o_gravel_113; - else if (mc <= MC_1_17) *oconf = o_gravel_116; + if (mc < MC_1_16_1) *oconf = o_gravel_113; + else if (mc < MC_1_17) *oconf = o_gravel_1161; + else if (mc < MC_1_18) *oconf = o_gravel_117; else *oconf = o_gravel_118; return mc > MC_1_12; case IronOre: - if (mc <= MC_1_15) *oconf = o_iron_113; - else if (mc <= MC_1_16) *oconf = o_iron_116; - else if (mc <= MC_1_17) *oconf = o_iron_117; + if (mc < MC_1_16_1) *oconf = o_iron_113; + else if (mc < MC_1_17) *oconf = o_iron_1161; + else *oconf = o_iron_117; return mc > MC_1_12 && mc <= MC_1_17; case LapisOre: - if (mc <= MC_1_15) *oconf = o_lapis_113; - else if (mc <= MC_1_16) *oconf = o_lapis_116; - else if (mc <= MC_1_17) *oconf = o_lapis_117; - else if (mc <= MC_1_19) *oconf = o_lapis_118; + if (mc < MC_1_16_1) *oconf = o_lapis_113; + else if (mc < MC_1_17) *oconf = o_lapis_1161; + else if (mc < MC_1_18) *oconf = o_lapis_117; + else if (mc < MC_1_20) *oconf = o_lapis_118; else *oconf = o_lapis_120; return mc > MC_1_12; case LargeCopperOre: - if (mc <= MC_1_19) *oconf = o_large_copper_118; + if (mc < MC_1_20) *oconf = o_large_copper_118; else *oconf = o_large_copper_120; return mc > MC_1_17; case LargeDiamondOre: - if (mc <= MC_1_19) *oconf = o_large_diamond_118; + if (mc < MC_1_20) *oconf = o_large_diamond_118; else *oconf = o_large_diamond_120; return mc > MC_1_17; case LowerAndesiteOre: @@ -1521,9 +1542,9 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) *oconf = o_middle_iron_118; return mc > MC_1_17; case RedstoneOre: - if (mc <= MC_1_15) *oconf = o_redstone_113; - else if (mc <= MC_1_16) *oconf = o_redstone_116; - else if (mc <= MC_1_17) *oconf = o_redstone_117; + if (mc < MC_1_16_1) *oconf = o_redstone_113; + else if (mc < MC_1_17) *oconf = o_redstone_1161; + else if (mc < MC_1_18) *oconf = o_redstone_117; else *oconf = o_redstone_118; return mc > MC_1_12; case SmallIronOre: @@ -1550,59 +1571,69 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) return mc > MC_1_17; // nether case BlackstoneOre: - if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_blackstone_116_crimson_forest; - else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_blackstone_116_warped_forest; - else if (mc <= MC_1_17) *oconf = o_blackstone_116; + if (mc < MC_1_17 && biomeID == crimson_forest) *oconf = o_blackstone_1161_crimson_forest; + else if (mc < MC_1_17 && biomeID == warped_forest) *oconf = o_blackstone_1161_warped_forest; + else if (mc < MC_1_17) *oconf = o_blackstone_1161; + else if (mc < MC_1_18) *oconf = o_blackstone_117; else *oconf = o_blackstone_118; return mc > MC_1_15; case DeltasGoldOre: - *oconf = o_deltas_gold_116; + if (mc < MC_1_17) *oconf = o_deltas_gold_1161; + else *oconf = o_deltas_gold_117; return mc > MC_1_15; case DeltasQuartzOre: - *oconf = o_deltas_quartz_116; + if (mc < MC_1_17) *oconf = o_deltas_quartz_1161; + else *oconf = o_deltas_quartz_117; return mc > MC_1_15; case LargeDebrisOre: - if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_116_crimson_forest; - else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_116_warped_forest; - else if (mc <= MC_1_17) *oconf = o_large_debris_116; + if (mc < MC_1_17 && biomeID == crimson_forest) *oconf = o_large_debris_1161_crimson_forest; + else if (mc < MC_1_17 && biomeID == warped_forest) *oconf = o_large_debris_1161_warped_forest; + else if (mc < MC_1_17) *oconf = o_large_debris_1161; + else if (mc < MC_1_18) *oconf = o_large_debris_117; else *oconf = o_large_debris_118; return mc > MC_1_15; case MagmaOre: - if (mc <= MC_1_15) *oconf = o_magma_113; - else if (mc <= MC_1_17 && biomeID == soul_sand_valley) *oconf = o_magma_116_soul_sand_valley; - else if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_magma_116_crimson_forest; - else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_magma_116_warped_forest; - else if (mc <= MC_1_17 && biomeID == basalt_deltas) *oconf = o_magma_116_basalt_deltas; - else if (mc <= MC_1_17) *oconf = o_magma_116; + if (mc < MC_1_16_1) *oconf = o_magma_113; + else if (mc < MC_1_17 && biomeID == soul_sand_valley) *oconf = o_magma_1161_soul_sand_valley; + else if (mc < MC_1_17 && biomeID == crimson_forest) *oconf = o_magma_1161_crimson_forest; + else if (mc < MC_1_17 && biomeID == warped_forest) *oconf = o_magma_1161_warped_forest; + else if (mc < MC_1_17 && biomeID == basalt_deltas) *oconf = o_magma_1161_basalt_deltas; + else if (mc < MC_1_17) *oconf = o_magma_1161; + else if (mc < MC_1_18) *oconf = o_magma_117; else *oconf = o_magma_118; return mc > MC_1_12; case NetherGoldOre: - if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gold_116_crimson_forest; - else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_116_warped_forest; - else if (mc <= MC_1_17) *oconf = o_nether_gold_116; + if (mc < MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gold_1161_crimson_forest; + else if (mc < MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gold_1161_warped_forest; + else if (mc < MC_1_17) *oconf = o_nether_gold_1161; + else if (mc < MC_1_18) *oconf = o_nether_gold_117; else *oconf = o_nether_gold_118; return mc > MC_1_15; case NetherGravelOre: - if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gravel_116_crimson_forest; - else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gravel_116_warped_forest; - else if (mc <= MC_1_17) *oconf = o_nether_gravel_116; + if (mc < MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_gravel_1161_crimson_forest; + else if (mc < MC_1_17 && biomeID == warped_forest) *oconf = o_nether_gravel_1161_warped_forest; + else if (mc < MC_1_17) *oconf = o_nether_gravel_1161; + else if (mc < MC_1_18) *oconf = o_nether_gravel_117; else *oconf = o_nether_gravel_118; return mc > MC_1_15; case NetherQuartzOre: - if (mc <= MC_1_15) *oconf = o_nether_quartz_113; - else if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_quartz_116_crimson_forest; - else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_nether_quartz_116_warped_forest; - else if (mc <= MC_1_17) *oconf = o_nether_quartz_116; + if (mc < MC_1_16_1) *oconf = o_nether_quartz_113; + else if (mc < MC_1_17 && biomeID == crimson_forest) *oconf = o_nether_quartz_1161_crimson_forest; + else if (mc < MC_1_17 && biomeID == warped_forest) *oconf = o_nether_quartz_1161_warped_forest; + else if (mc < MC_1_17) *oconf = o_nether_quartz_1161; + else if (mc < MC_1_18) *oconf = o_nether_quartz_117; else *oconf = o_nether_quartz_118; return mc > MC_1_12; case SmallDebrisOre: - if (mc <= MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_116_crimson_forest; - else if (mc <= MC_1_17 && biomeID == warped_forest) *oconf = o_small_debris_116_warped_forest; - else if (mc <= MC_1_17) *oconf = o_small_debris_116; + if (mc < MC_1_17 && biomeID == crimson_forest) *oconf = o_small_debris_1161_crimson_forest; + else if (mc < MC_1_17 && biomeID == warped_forest) *oconf = o_small_debris_1161_warped_forest; + else if (mc < MC_1_17) *oconf = o_small_debris_1161; + else if (mc < MC_1_18) *oconf = o_small_debris_117; else *oconf = o_small_debris_118; return mc > MC_1_15; case SoulSandOre: - if (mc <= MC_1_17) *oconf = o_soul_sand_116; + if (mc < MC_1_17) *oconf = o_soul_sand_1161; + else if (mc < MC_1_18) *oconf = o_soul_sand_117; else *oconf = o_soul_sand_118; return mc > MC_1_15; default: @@ -1755,155 +1786,17 @@ Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, R } if (mc <= MC_1_14) { int blockX = (chunkX << 4) + rnd.nextInt(rnd.state, 16); - int blockY = getOreYPos(mc, config.oreType, rnd); + int blockY = config.heightProvider(rnd, config.h1, config.h2, config.h3); int blockZ = (chunkZ << 4) + rnd.nextInt(rnd.state, 16); return (Pos3) {blockX, blockY, blockZ}; } else { int blockX = (chunkX << 4) + rnd.nextInt(rnd.state, 16); int blockZ = (chunkZ << 4) + rnd.nextInt(rnd.state, 16); - int blockY = getOreYPos(mc, config.oreType, rnd); + int blockY = config.heightProvider(rnd, config.h1, config.h2, config.h3); return (Pos3) {blockX, blockY, blockZ}; } } -int getOreYPos(int mc, int oreType, RandomSource rnd) -{ - switch (oreType) { - // overworld - case AndesiteOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); - break; - case BuriedDiamondOre: - return providerTriangleRange(rnd, -64 + -80, -64 + 80); - case BuriedLapisOre: - return providerUniformRange(rnd, -64, 64); - case ClayOre: - return providerUniformRange(rnd, 0, 256); - case CoalOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 128); - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 127); - break; - case CopperOre: - if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 96); - return providerTriangleRange(rnd, -16, 112); - case DeepslateOre: - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); - break; - case DiamondOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); - // was 16 in 1.17, changed to 15 in 1.17.1 - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - return providerTriangleRange(rnd, -64 + -80, -64 + 80); - case DioriteOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); - break; - case DirtOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - return providerUniformRange(rnd, 0, 160); - case EmeraldOre: - if (mc <= MC_1_16) return rnd.nextInt(rnd.state, 28) + 4; - if (mc <= MC_1_17) return providerUniformRange(rnd, 4, 31); - return providerTriangleRange(rnd, -16, 480); - case ExtraGoldOre: - if (mc <= MC_1_16) return providerRange(rnd, 32, 32, 80); - if (mc <= MC_1_17) return providerUniformRange(rnd, 32, 79); - return providerUniformRange(rnd, 32, 256); - case GoldOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 31); - return providerTriangleRange(rnd, -64, 32); - case GraniteOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 80); - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 79); - break; - case GravelOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 256); - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 255); - return providerUniformRange(rnd, -64, 319); - case IronOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 64); - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 63); - break; - case LapisOre: - if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 16); - if (mc <= MC_1_17) return providerTriangleRange(rnd, 0, 30); - return providerTriangleRange(rnd, -32, 32); - case LargeCopperOre: - return providerTriangleRange(rnd, -16, 112); - case LargeDiamondOre: - return providerTriangleRange(rnd, -64 + -80, -64 + 80); - case LowerAndesiteOre: - return providerUniformRange(rnd, 0, 60); - case LowerCoalOre: - return providerTriangleRange(rnd, 0, 192); - case LowerDioriteOre: - return providerUniformRange(rnd, 0, 60); - case LowerGoldOre: - return providerUniformRange(rnd, -64, -48); - case LowerGraniteOre: - return providerUniformRange(rnd, 0, 60); - case LowerRedstoneOre: - return providerTriangleRange(rnd, -64 + -32, -64 + 32); - case MediumDiamondOre: - return providerUniformRange(rnd, -64, -4); - case MiddleIronOre: - return providerTriangleRange(rnd, -24, 56); - case RedstoneOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 16); - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 15); - return providerUniformRange(rnd, -64, 15); - case SmallIronOre: - return providerUniformRange(rnd, -64, 72); - case TuffOre: - if (mc <= MC_1_17) return providerUniformRange(rnd, 0, 16); - return providerUniformRange(rnd, -64, 0); - case UpperAndesiteOre: - return providerUniformRange(rnd, 64, 128); - case UpperCoalOre: - return providerUniformRange(rnd, 136, 319); - case UpperDioriteOre: - return providerUniformRange(rnd, 64, 128); - case UpperGraniteOre: - return providerUniformRange(rnd, 64, 128); - case UpperIronOre: - return providerTriangleRange(rnd, 80, 384); - // nether - case BlackstoneOre: - if (mc <= MC_1_16) return providerRange(rnd, 5, 10, 37); - return providerUniformRange(rnd, 5, 31); - case LargeDebrisOre: - if (mc <= MC_1_16) return providerDepthAverage(rnd, 16, 8); - return providerTriangleRange(rnd, 8, 24); - case MagmaOre: - if (mc <= MC_1_16) return 32 - 5 + rnd.nextInt(rnd.state, 10); - return providerUniformRange(rnd, 27, 36); - case DeltasGoldOre: - case NetherGoldOre: - if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - return providerUniformRange(rnd, 0 + 10, 127 - 10); - case NetherGravelOre: - if (mc <= MC_1_16) return providerRange(rnd, 5, 0, 37); - return providerUniformRange(rnd, 5, 41); - case DeltasQuartzOre: - case NetherQuartzOre: - if (mc <= MC_1_16) return providerRange(rnd, 10, 20, 128); - return providerUniformRange(rnd, 0 + 10, 127 - 10); - case SmallDebrisOre: - if (mc <= MC_1_16) return providerRange(rnd, 8, 16, 128); - return providerUniformRange(rnd, 8, 127 - 8); - case SoulSandOre: - if (mc <= MC_1_16) return providerRange(rnd, 0, 0, 32); - return providerUniformRange(rnd, 0, 31); - default: - fprintf(stderr, "getOreYPos: not implemented for ore type %d.\n", oreType); - exit(1); - } - return 0; -} - Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreConfig config, Pos3 pos, RandomSource rnd) { int mc = g->mc; @@ -1924,13 +1817,13 @@ Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreCon for (int i = 0; i < count; i++) { if (mc <= MC_1_14) { int x = pos.x + rnd.nextInt(rnd.state, 16); - int y = getOreYPos(mc, config.oreType, rnd); + int y = config.heightProvider(rnd, config.h1, config.h2, config.h3); int z = pos.z + rnd.nextInt(rnd.state, 16); appendPos3List(&poses, (Pos3) {x, y, z}); } else { int x = pos.x + rnd.nextInt(rnd.state, 16); int z = pos.z + rnd.nextInt(rnd.state, 16); - int y = getOreYPos(mc, config.oreType, rnd); + int y = config.heightProvider(rnd, config.h1, config.h2, config.h3); appendPos3List(&poses, (Pos3) {x, y, z}); } } diff --git a/finders.h b/finders.h index 832630b1..d74dc547 100644 --- a/finders.h +++ b/finders.h @@ -411,6 +411,10 @@ STRUCT(OreConfig) int32_t step; int32_t size; int32_t repeatCount; + int (*heightProvider)(RandomSource rnd, int, int, int); + int32_t h1; // the parameters for the height provider + int32_t h2; // since the provider takes 2 or 3 arguments, + int32_t h3; // the third parameter is sometimes unused uint32_t oreType; uint32_t oreBlock; int8_t dim; @@ -429,14 +433,24 @@ static inline int providerRange(RandomSource rnd, const int bottomOffset, const } // <=1.16.5 -static inline int providerDepthAverage(RandomSource rnd, const int baseline, const int spread) { +static inline int providerDepthAverage(RandomSource rnd, const int baseline, const int spread, const int h3) { int a = rnd.nextInt(rnd.state, spread); int b = rnd.nextInt(rnd.state, spread); return a + b - spread + baseline; } +// <=1.16.5 +static inline int providerEmeraldOre(RandomSource rnd, int h1, int h2, int h3) { + return rnd.nextInt(rnd.state, 28) + 4; +} + +// <=1.16.5 +static inline int providerMagmaOre(RandomSource rnd, int h1, int h2, int h3) { + return 32 - 5 + rnd.nextInt(rnd.state, 10); +} + // >=1.17 -static inline int providerUniformRange(RandomSource rnd, const int minOffset, const int maxOffset) { +static inline int providerUniformRange(RandomSource rnd, const int minOffset, const int maxOffset, const int h3) { if (minOffset > maxOffset) { return minOffset; } @@ -444,7 +458,7 @@ static inline int providerUniformRange(RandomSource rnd, const int minOffset, co } // >=1.17 -static inline int providerTriangleRange(RandomSource rnd, const int minOffset, const int maxOffset) { +static inline int providerTriangleRange(RandomSource rnd, const int minOffset, const int maxOffset, const int h3) { if (minOffset > maxOffset) { return minOffset; } @@ -504,8 +518,6 @@ Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig conf Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd); -int getOreYPos(int mc, int oreType, RandomSource rnd); - Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreConfig config, Pos3 bPos, RandomSource rnd); Pos3List generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); From e81c3dfb4349cfb6a1a0771e1284c10da2b76dfd Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Fri, 12 Sep 2025 17:26:57 +0200 Subject: [PATCH 41/45] Pass Pos3List around --- finders.c | 60 ++++++++++++++++--------------------------------------- finders.h | 4 ++-- 2 files changed, 19 insertions(+), 45 deletions(-) diff --git a/finders.c b/finders.c index 2b59ea98..067bc731 100644 --- a/finders.c +++ b/finders.c @@ -8,8 +8,6 @@ #include #include -#include "util.h" - // https://c-faq.com/misc/bitsets.html #define BITMASK(b) (1 << ((b) % CHAR_BIT)) #define BITSLOT(b) ((b) / CHAR_BIT) @@ -1751,32 +1749,19 @@ Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig conf repeatCount = config.repeatCount; } - Pos3List* temp = malloc(repeatCount * sizeof(Pos3List)); - int size = 0; + Pos3List pos3s; + // x^2/4 is an approx that works for sizes <= 64, but only works for ores that use this config + createPos3List(&pos3s, MAX(8, repeatCount * ((config.size * config.size) >> 2))); + for (int i = 0; i < repeatCount; i++) { Pos3 basePos = generateBaseOrePosition(g->mc, config, chunkX, chunkZ, rnd); int biome = getBiomeAt(g, 1, basePos.x, basePos.y, basePos.z); - Pos3List orePositions; if (isViableOreBiome(g->mc, oreType, biome)) { - orePositions = generateOrePositions(g, sn, config, basePos, rnd); - } else { - createPos3List(&orePositions, 0); + generateOrePositions(g, sn, config, basePos, rnd, &pos3s); } - temp[i] = orePositions; - size += orePositions.size; } free(rnd.state); - Pos3List poses; - createPos3List(&poses, size); - int offset = 0; - for (int i = 0; i < repeatCount; i++) { - memcpy(poses.pos3s + offset, temp[i].pos3s, temp[i].size * sizeof(Pos3)); - poses.size += temp[i].size; - free(temp[i].pos3s); - offset += temp[i].size; - } - free(temp); - return poses; + return pos3s; } Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd) @@ -1797,7 +1782,7 @@ Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, R } } -Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreConfig config, Pos3 pos, RandomSource rnd) +void generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreConfig config, Pos3 pos, RandomSource rnd, Pos3List* pos3s) { int mc = g->mc; if ((mc <= MC_1_17 && config.oreType == EmeraldOre) || (mc <= MC_NEWEST && config.oreType == LowerGoldOre)) { @@ -1812,29 +1797,25 @@ Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreCon } else { count = rnd.nextIntBetween(rnd.state, 0, 1); } - Pos3List poses; - createPos3List(&poses, count); for (int i = 0; i < count; i++) { if (mc <= MC_1_14) { int x = pos.x + rnd.nextInt(rnd.state, 16); int y = config.heightProvider(rnd, config.h1, config.h2, config.h3); int z = pos.z + rnd.nextInt(rnd.state, 16); - appendPos3List(&poses, (Pos3) {x, y, z}); + appendPos3List(pos3s, (Pos3) {x, y, z}); } else { int x = pos.x + rnd.nextInt(rnd.state, 16); int z = pos.z + rnd.nextInt(rnd.state, 16); int y = config.heightProvider(rnd, config.h1, config.h2, config.h3); - appendPos3List(&poses, (Pos3) {x, y, z}); + appendPos3List(pos3s, (Pos3) {x, y, z}); } } - return poses; + return; } // scatter if (config.oreType == LargeDebrisOre || config.oreType == SmallDebrisOre) { int count = rnd.nextInt(rnd.state, config.size + 1); - Pos3List poses; - createPos3List(&poses, count); for (int i = 0; i < count; ++i) { int size = MIN(i, 7); float a, b; @@ -1852,11 +1833,11 @@ Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreCon // TODO: check if the block at startPos is contained in config.replaceBlocks // TODO: and if the block at startPos is not air-exposed if (1) { - appendPos3List(&poses, startPos); + appendPos3List(pos3s, startPos); } } - return poses; + return; } // regular @@ -1880,22 +1861,17 @@ Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreCon float y; mapApproxHeight(&y, 0, g, sn, x >> 2, z >> 2, 1, 1); if (startY <= (g->dim == DIM_OVERWORLD ? (int) floor(y) : 128)) { - return generateVeinPart(mc, config, rnd, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius); + generateVeinPart(mc, config, rnd, offsetXPos, offsetXNeg, offsetZPos, offsetZNeg, offsetYPos, offsetYNeg, startX, startY, startZ, oreSize, radius, pos3s); + return; } } } - - Pos3List poses; - createPos3List(&poses, 0); - return poses; } -Pos3List generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius) +void generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius, Pos3List* pos3s) { const int minBuildHeight = mc <= MC_1_17 ? 0 : -64; const int maxBuildHeight = mc <= MC_1_17 ? 256 : 320; - Pos3List poses; - createPos3List(&poses, 16); int slots = BITNSLOTS(oreSize * radius * oreSize); char bitSet[slots]; memset(bitSet, 0, slots); @@ -1971,17 +1947,15 @@ Pos3List generateVeinPart(int mc, OreConfig config, RandomSource rnd, double off skipAirCheck = chance >= 1.0F ? 0 : rnd.nextFloat(rnd.state) >= chance; } if (skipAirCheck) { - appendPos3List(&poses, pos); + appendPos3List(pos3s, pos); } else if (1) { // TODO: check if the block at pos is not air-exposed - appendPos3List(&poses, pos); + appendPos3List(pos3s, pos); } } } } } } - - return poses; } //============================================================================== diff --git a/finders.h b/finders.h index d74dc547..2fef197d 100644 --- a/finders.h +++ b/finders.h @@ -518,9 +518,9 @@ Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig conf Pos3 generateBaseOrePosition(int mc, OreConfig config, int chunkX, int chunkZ, RandomSource rnd); -Pos3List generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreConfig config, Pos3 bPos, RandomSource rnd); +void generateOrePositions(const Generator *g, const SurfaceNoise *sn, OreConfig config, Pos3 pos, RandomSource rnd, Pos3List* pos3s); -Pos3List generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius); +void generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetXPos, double offsetXNeg, double offsetZPos, double offsetZNeg, double offsetYPos, double offsetYNeg, int startX, int startY, int startZ, int oreSize, int radius, Pos3List* pos3s); /* Finds a suitable pseudo-random location in the specified area. * This function is used to determine the positions of spawn and strongholds. From 05614f628c15c08a795b62ef030720e31b8ca296 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Sat, 4 Oct 2025 00:52:38 +0200 Subject: [PATCH 42/45] Prevent double computations in MIN/MAX macros --- finders.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/finders.c b/finders.c index 067bc731..83c1d13e 100644 --- a/finders.c +++ b/finders.c @@ -1751,7 +1751,8 @@ Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig conf Pos3List pos3s; // x^2/4 is an approx that works for sizes <= 64, but only works for ores that use this config - createPos3List(&pos3s, MAX(8, repeatCount * ((config.size * config.size) >> 2))); + const int approxSize = repeatCount * ((config.size * config.size) >> 2); + createPos3List(&pos3s, MAX(8, approxSize)); for (int i = 0; i < repeatCount; i++) { Pos3 basePos = generateBaseOrePosition(g->mc, config, chunkX, chunkZ, rnd); @@ -1909,19 +1910,25 @@ void generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetX } for (int i = 0; i < size; ++i) { - double offset = store[i * 4 + 3]; + const double offset = store[i * 4 + 3]; if (offset < 0.0) continue; - double x = store[i * 4]; - double y = store[i * 4 + 1]; - double z = store[i * 4 + 2]; - - int minX = MAX(floor(x - offset), startX); - int minY = MAX(floor(y - offset), startY); - int minZ = MAX(floor(z - offset), startZ); - - int maxX = MAX(floor(x + offset), minX); - int maxY = MAX(floor(y + offset), minY); - int maxZ = MAX(floor(z + offset), minZ); + const double x = store[i * 4]; + const double y = store[i * 4 + 1]; + const double z = store[i * 4 + 2]; + + const int floorMinX = floor(x - offset); + const int minX = MAX(floorMinX, startX); + const int floorMinY = floor(y - offset); + const int minY = MAX(floorMinY, startY); + const int floorMinZ = floor(z - offset); + const int minZ = MAX(floorMinZ, startZ); + + const int floorMaxX = floor(x + offset); + const int maxX = MAX(floorMaxX, minX); + const int floorMaxY = floor(y + offset); + const int maxY = MAX(floorMaxY, minY); + const int floorMaxZ = floor(z + offset); + const int maxZ = MAX(floorMaxZ, minZ); for (int X = minX; X <= maxX; ++X) { double xSlide = ((double)X + 0.5 - x) / offset; From f9143443bcb0f0988da90614c2ecaaaa2cbbedb7 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 15 Dec 2025 22:09:59 +0100 Subject: [PATCH 43/45] Remove malloc usage --- finders.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/finders.c b/finders.c index 83c1d13e..431f3143 100644 --- a/finders.c +++ b/finders.c @@ -1729,12 +1729,12 @@ Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig conf { uint64_t populationSeed = getPopulationSeed(g->mc, g->seed, chunkX << 4, chunkZ << 4); RandomSource rnd; + uint64_t seed; + Xoroshiro xr; if (g->mc <= MC_1_17) { - uint64_t* seed = malloc(sizeof(uint64_t)); - rnd = createJavaRandom(seed); + rnd = createJavaRandom(&seed); } else { - Xoroshiro* xr = malloc(sizeof(Xoroshiro)); - rnd = createXoroshiro(xr); + rnd = createXoroshiro(&xr); } // set decorator seed rnd.setSeed(rnd.state, populationSeed + config.index + 10000 * config.step); @@ -1761,7 +1761,6 @@ Pos3List generateOres(const Generator *g, const SurfaceNoise *sn, OreConfig conf generateOrePositions(g, sn, config, basePos, rnd, &pos3s); } } - free(rnd.state); return pos3s; } From 38c7bcad1010b13e0cc7c88a00883612340d862f Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Mon, 15 Dec 2025 23:18:58 +0100 Subject: [PATCH 44/45] Use VLA instead of malloc --- finders.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/finders.c b/finders.c index 431f3143..b8755ea8 100644 --- a/finders.c +++ b/finders.c @@ -1876,7 +1876,7 @@ void generateVeinPart(int mc, OreConfig config, RandomSource rnd, double offsetX char bitSet[slots]; memset(bitSet, 0, slots); int size = config.size; - double* store = malloc(4 * size * sizeof(double)); + double store[4 * size]; for (int i = 0; i < size; ++i) { float percent = (float)i / (float)size; From 44fee34a9d7d518a71cae85508054f1f21f315a5 Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Fri, 20 Feb 2026 21:03:06 +0100 Subject: [PATCH 45/45] Fix deltas quartz ore using wrong height provider --- finders.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/finders.c b/finders.c index b8755ea8..37076b90 100644 --- a/finders.c +++ b/finders.c @@ -1363,8 +1363,8 @@ int getOreConfig(int oreType, int mc, int biomeID, OreConfig *oconf) o_deltas_gold_1161 = {13, 7, 10, 20, providerRange, 10, 20, 128, DeltasGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, o_deltas_gold_117 = {13, 7, 10, 20, providerUniformRange, 0 + 10, 127 - 10, -1, DeltasGoldOre, NETHER_GOLD_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_deltas_quartz_1161 = {14, 7, 14, 32, providerRange, 10, 20, 128, DeltasQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, - o_deltas_quartz_117 = {14, 7, 14, 32, providerRange, 0 + 10, 127 - 10, -1, DeltasQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_deltas_quartz_1161 = {14, 7, 14, 32, providerRange, 10, 20, 128, DeltasQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, + o_deltas_quartz_117 = {14, 7, 14, 32, providerUniformRange, 0 + 10, 127 - 10, -1, DeltasQuartzOre, NETHER_QUARTZ_ORE, DIM_NETHER, 1, NETHERRACK_REPLACEABLES, 0.0F}, // scatter ore, no count o_large_debris_1161 = {15, 7, 3, 1, providerDepthAverage, 16, 8, -1, LargeDebrisOre, ANCIENT_DEBRIS, DIM_NETHER, 3, BASE_STONE_NETHER_REPLACEABLES, 0.0F},