From 3752154bcd91b38e23457a0f3d604dd34c05b745 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Fri, 26 Nov 2021 20:01:08 +0000 Subject: [PATCH] Add a simple tool to visualise ore distribution. --- ore_distribution.png | Bin 0 -> 6888 bytes .../OreDistributionVisualiser.groovy | 123 ++++++++++++++++++ src/main/java/techreborn/init/TRContent.java | 49 +++---- .../techreborn/world/OreDistribution.java | 59 +++++++++ .../java/techreborn/world/OreFeature.java | 14 +- .../java/techreborn/world/WorldGenerator.java | 2 +- 6 files changed, 211 insertions(+), 36 deletions(-) create mode 100644 ore_distribution.png create mode 100644 src/gametest/groovy/techreborn/OreDistributionVisualiser.groovy create mode 100644 src/main/java/techreborn/world/OreDistribution.java diff --git a/ore_distribution.png b/ore_distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..4899b6696507d1a2a42de22575d36e69396b27e3 GIT binary patch literal 6888 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 %d)".formatted(value.minOffset.getY(heightContext), value.maxY), 190, 25 * c) + + c += 1 + } + + ImageIO.write(bi, "PNG", Paths.get("ore_distribution.png").toFile()) + } + + private static List overworldOres() { + return Arrays.stream(OreDistribution.values()) + .filter(ore -> ore.dimension == TargetDimension.OVERWORLD) + .toList() + } + + private static class FixedHeightContext extends HeightContext { + final int minY + final int height + + FixedHeightContext(int minY, int height) { + super(new DebugChunkGenerator(BuiltinRegistries.BIOME), EmptyBlockView.INSTANCE) + + this.minY = minY + this.height = height + } + + @Override + int getMinY() { + return minY + } + + @Override + int getHeight() { + return height + } + } +} diff --git a/src/main/java/techreborn/init/TRContent.java b/src/main/java/techreborn/init/TRContent.java index a25cd763e..179d426d0 100644 --- a/src/main/java/techreborn/init/TRContent.java +++ b/src/main/java/techreborn/init/TRContent.java @@ -82,7 +82,7 @@ import techreborn.items.UpgradeItem; import techreborn.items.armor.QuantumSuitItem; import techreborn.items.tool.MiningLevel; import techreborn.utils.InitUtils; -import techreborn.world.TargetDimension; +import techreborn.world.OreDistribution; import java.util.*; import java.util.function.Function; @@ -376,21 +376,21 @@ public class TRContent { private final static Map deepslateMap = new HashMap<>(); public enum Ores implements ItemConvertible { - BAUXITE(6, 12, 10, 80, MiningLevel.IRON, TargetDimension.OVERWORLD), - CINNABAR(6, 5, 0, 128, MiningLevel.IRON, TargetDimension.NETHER), - GALENA(8, 12, 10, 80, MiningLevel.IRON, TargetDimension.OVERWORLD), - IRIDIUM(3, 4, 5, 80, MiningLevel.DIAMOND, TargetDimension.OVERWORLD), - LEAD(6, 16, 20, 80, MiningLevel.IRON, TargetDimension.OVERWORLD), - PERIDOT(6, 6, 0, 360, MiningLevel.DIAMOND, TargetDimension.END), - PYRITE(6, 6, 0, 128, MiningLevel.DIAMOND, TargetDimension.NETHER), - RUBY(6, 8, 10, 80, MiningLevel.IRON, TargetDimension.OVERWORLD), - SAPPHIRE(6, 7, 10, 80, MiningLevel.IRON, TargetDimension.OVERWORLD), - SHELDONITE(6, 4, 0, 360, MiningLevel.DIAMOND, TargetDimension.END), - SILVER(6, 16, 20, 80, MiningLevel.IRON, TargetDimension.OVERWORLD), - SODALITE(6, 4, 0, 360, MiningLevel.DIAMOND, TargetDimension.END), - SPHALERITE(6, 4, 0, 128, MiningLevel.IRON, TargetDimension.NETHER), - TIN(8, 16, 18, 80, MiningLevel.STONE, TargetDimension.OVERWORLD), - TUNGSTEN(6, 3, 0, 360, MiningLevel.DIAMOND, TargetDimension.END), + BAUXITE(MiningLevel.IRON, OreDistribution.BAUXITE), + CINNABAR(MiningLevel.IRON, OreDistribution.CINNABAR), + GALENA(MiningLevel.IRON, OreDistribution.GALENA), + IRIDIUM(MiningLevel.DIAMOND, OreDistribution.IRIDIUM), + LEAD(MiningLevel.IRON, OreDistribution.LEAD), + PERIDOT(MiningLevel.DIAMOND, OreDistribution.PERIDOT), + PYRITE(MiningLevel.DIAMOND, OreDistribution.PYRITE), + RUBY(MiningLevel.IRON, OreDistribution.RUBY), + SAPPHIRE(MiningLevel.IRON, OreDistribution.SAPPHIRE), + SHELDONITE(MiningLevel.DIAMOND, OreDistribution.SHELDONITE), + SILVER(MiningLevel.IRON, OreDistribution.SILVER), + SODALITE(MiningLevel.DIAMOND, OreDistribution.SODALITE), + SPHALERITE(MiningLevel.IRON, OreDistribution.SPHALERITE), + TIN(MiningLevel.STONE, OreDistribution.TIN), + TUNGSTEN(MiningLevel.DIAMOND, OreDistribution.TUNGSTEN), DEEPSLATE_BAUXITE(BAUXITE, MiningLevel.IRON), DEEPSLATE_GALENA(GALENA, MiningLevel.IRON), @@ -407,14 +407,9 @@ public class TRContent { public final String name; public final Block block; - public final int veinSize; - public final int veinsPerChunk; - public final int offsetBottom; // Min height of ore in number of blocks from the bottom of the world - public final int maxY; // Max height of ore in numbers of blocks from the bottom of the world - public final TargetDimension dimension; + public final OreDistribution distribution; - Ores(int veinSize, int veinsPerChunk, int offsetBottom, int maxY, MiningLevel miningLevel, TargetDimension dimension) { - this.dimension = dimension; + Ores(MiningLevel miningLevel, OreDistribution distribution) { name = this.toString().toLowerCase(Locale.ROOT); block = new OreBlock(FabricBlockSettings.of(Material.STONE) .breakByTool(FabricToolTags.PICKAXES, miningLevel.intLevel) @@ -422,15 +417,13 @@ public class TRContent { .sounds(BlockSoundGroup.STONE) .strength(2f, 2f) ); - this.veinSize = veinSize; - this.veinsPerChunk = veinsPerChunk; - this.offsetBottom = offsetBottom; - this.maxY = maxY; + InitUtils.setup(block, name + "_ore"); + this.distribution = distribution; } Ores(TRContent.Ores stoneOre, MiningLevel miningLevel) { - this(0, 0, 0, 0, miningLevel, null); + this(miningLevel, null); deepslateMap.put(stoneOre, this); } diff --git a/src/main/java/techreborn/world/OreDistribution.java b/src/main/java/techreborn/world/OreDistribution.java new file mode 100644 index 000000000..09da4c331 --- /dev/null +++ b/src/main/java/techreborn/world/OreDistribution.java @@ -0,0 +1,59 @@ +/* + * This file is part of TechReborn, licensed under the MIT License (MIT). + * + * Copyright (c) 2020 TechReborn + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package techreborn.world; + +import net.minecraft.world.gen.YOffset; + +public enum OreDistribution { + BAUXITE(6, 12, YOffset.aboveBottom(0), 20, TargetDimension.OVERWORLD), + CINNABAR(6, 5, YOffset.aboveBottom(0), 128, TargetDimension.NETHER), + GALENA(8, 12, YOffset.aboveBottom(25), 40, TargetDimension.OVERWORLD), + IRIDIUM(3, 4, YOffset.aboveBottom(0), 0, TargetDimension.OVERWORLD), + LEAD(6, 16, YOffset.aboveBottom(40), 40, TargetDimension.OVERWORLD), + PERIDOT(6, 6, YOffset.aboveBottom(0), 360, TargetDimension.END), + PYRITE(6, 6, YOffset.aboveBottom(0), 128, TargetDimension.NETHER), + RUBY(6, 8, YOffset.fixed(20), 120, TargetDimension.OVERWORLD), + SAPPHIRE(6, 7, YOffset.fixed(20), 120, TargetDimension.OVERWORLD), + SHELDONITE(6, 4, YOffset.aboveBottom(0), 360, TargetDimension.END), + SILVER(6, 16, YOffset.aboveBottom(40), 60,TargetDimension.OVERWORLD), + SODALITE(6, 4, YOffset.aboveBottom(0), 360, TargetDimension.END), + SPHALERITE(6, 4, YOffset.aboveBottom(0), 128, TargetDimension.NETHER), + TIN(8, 16, YOffset.fixed(25), 80, TargetDimension.OVERWORLD), + TUNGSTEN(6, 3, YOffset.aboveBottom(0), 360, TargetDimension.END); + + public final int veinSize; + public final int veinsPerChunk; + public final YOffset minOffset; + public final int maxY; // Max height of ore in numbers of blocks from the bottom of the world + public final TargetDimension dimension; + + OreDistribution(int veinSize, int veinsPerChunk, YOffset minOffset, int maxY, TargetDimension dimension) { + this.veinSize = veinSize; + this.veinsPerChunk = veinsPerChunk; + this.minOffset = minOffset; + this.maxY = maxY; + this.dimension = dimension; + } +} diff --git a/src/main/java/techreborn/world/OreFeature.java b/src/main/java/techreborn/world/OreFeature.java index 0d61a8a1c..3103a63f1 100644 --- a/src/main/java/techreborn/world/OreFeature.java +++ b/src/main/java/techreborn/world/OreFeature.java @@ -53,7 +53,7 @@ public class OreFeature { } private ConfiguredFeature configureAndRegisterFeature() { - final OreFeatureConfig oreFeatureConfig = switch (ore.dimension) { + final OreFeatureConfig oreFeatureConfig = switch (ore.distribution.dimension) { case OVERWORLD -> createOverworldFeatureConfig(); case NETHER -> createSimpleFeatureConfig(OreConfiguredFeatures.BASE_STONE_NETHER); case END -> createSimpleFeatureConfig(new BlockStateMatchRuleTest(Blocks.END_STONE.getDefaultState())); @@ -69,14 +69,14 @@ public class OreFeature { return new OreFeatureConfig(List.of( OreFeatureConfig.createTarget(OreConfiguredFeatures.STONE_ORE_REPLACEABLES, this.ore.block.getDefaultState()), OreFeatureConfig.createTarget(OreConfiguredFeatures.DEEPSLATE_ORE_REPLACEABLES, this.ore.getDeeplate().block.getDefaultState()) - ), ore.veinSize); + ), ore.distribution.veinSize); } return createSimpleFeatureConfig(OreConfiguredFeatures.STONE_ORE_REPLACEABLES); } private OreFeatureConfig createSimpleFeatureConfig(RuleTest test) { - return new OreFeatureConfig(test, this.ore.block.getDefaultState(), ore.veinSize); + return new OreFeatureConfig(test, this.ore.block.getDefaultState(), ore.distribution.veinSize); } private PlacedFeature configureAndRegisterPlacedFeature() { @@ -87,10 +87,10 @@ public class OreFeature { private List getPlacementModifiers() { return modifiers( - CountPlacementModifier.of(ore.veinsPerChunk), + CountPlacementModifier.of(ore.distribution.veinsPerChunk), HeightRangePlacementModifier.uniform( - YOffset.aboveBottom(ore.offsetBottom), - YOffset.fixed(ore.maxY) + ore.distribution.minOffset, + YOffset.fixed(ore.distribution.maxY) ) ); } @@ -104,7 +104,7 @@ public class OreFeature { } public Predicate getBiomeSelector() { - return ore.dimension.biomeSelector; + return ore.distribution.dimension.biomeSelector; } public RegistryKey getPlacedFeatureRegistryKey() { diff --git a/src/main/java/techreborn/world/WorldGenerator.java b/src/main/java/techreborn/world/WorldGenerator.java index 98a47da98..a3d4cd232 100644 --- a/src/main/java/techreborn/world/WorldGenerator.java +++ b/src/main/java/techreborn/world/WorldGenerator.java @@ -81,7 +81,7 @@ public class WorldGenerator { private static List getOreFeatures() { return Arrays.stream(TRContent.Ores.values()) - .filter(ores -> ores.dimension != null) + .filter(ores -> ores.distribution != null) .map(OreFeature::new) .toList(); }