Rewrite world gen, in preperation for json based config files
This commit is contained in:
parent
46fe49ebe5
commit
cfd9c7f10c
11 changed files with 312 additions and 283 deletions
|
@ -91,7 +91,7 @@ public class TechReborn implements ModInitializer {
|
||||||
RecipeCrafter.soundHanlder = new ModSounds.SoundHandler();
|
RecipeCrafter.soundHanlder = new ModSounds.SoundHandler();
|
||||||
}
|
}
|
||||||
ModLoot.init();
|
ModLoot.init();
|
||||||
WorldGenerator.initBiomeFeatures();
|
WorldGenerator.initWorldGen();
|
||||||
FluidGeneratorRecipes.init();
|
FluidGeneratorRecipes.init();
|
||||||
//Force loads the block entities at the right time
|
//Force loads the block entities at the right time
|
||||||
TRBlockEntities.THERMAL_GEN.toString();
|
TRBlockEntities.THERMAL_GEN.toString();
|
||||||
|
|
|
@ -593,156 +593,6 @@ public class TechRebornConfig {
|
||||||
@Config(config = "world", category = "loot", key = "enableEndLoot", comment = "When true TechReborn will add ingots, machine frames and circuits to The End loot chests.")
|
@Config(config = "world", category = "loot", key = "enableEndLoot", comment = "When true TechReborn will add ingots, machine frames and circuits to The End loot chests.")
|
||||||
public static boolean enableEndLoot = true;
|
public static boolean enableEndLoot = true;
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableBauxiteOre", comment = "Generate Bauxite Ore in The Overworld.")
|
|
||||||
public static boolean enableBauxiteOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "bauxiteVeinCount", comment = "Count of Bauxite Ore veins per chunk.")
|
|
||||||
public static int bauxiteVeinCount = 10;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "bauxiteVeinSize", comment = "Amount of Bauxite Ores per vein.")
|
|
||||||
public static int bauxiteVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableCopperOre", comment = "Generate Copper Ore in The Overworld.")
|
|
||||||
public static boolean enableCopperOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "copperVeinCount", comment = "Count of Copper Ore veins per chunk.")
|
|
||||||
public static int copperVeinCount = 16;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "copperVeinSize", comment = "Amount of Copper Ores per vein.")
|
|
||||||
public static int copperVeinSize = 8;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableGalenaOre", comment = "Generate Galena Ore in The Overworld.")
|
|
||||||
public static boolean enableGalenaOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "galenaVeinCount", comment = "Count of Galena Ore veins per chunk.")
|
|
||||||
public static int galenaVeinCount = 16;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "galenaVeinSize", comment = "Amount of Galena Ores per vein.")
|
|
||||||
public static int galenaVeinSize = 8;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableIridiumOre", comment = "Generate Iridium Ore in The Overworld.")
|
|
||||||
public static boolean enableIridiumOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "iridiumVeinCount", comment = "Count of Iridium Ore veins per chunk.")
|
|
||||||
public static int iridiumVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "iridiumVeinSize", comment = "Amount of Iridium Ores per vein.")
|
|
||||||
public static int iridiumVeinSize = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableLeadOre", comment = "Generate Lead Ore in The Overworld.")
|
|
||||||
public static boolean enableLeadOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "leadVeinCount", comment = "Count of Lead Ore veins per chunk.")
|
|
||||||
public static int leadVeinCount = 16;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "leadVeinSize", comment = "Amount of Lead Ores per vein.")
|
|
||||||
public static int leadVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableRubyOre", comment = "Generate Ruby Ore in The Overworld.")
|
|
||||||
public static boolean enableRubyOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "rubyVeinCount", comment = "Count of Ruby Ore veins per chunk.")
|
|
||||||
public static int rubyVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "rubyVeinSize", comment = "Amount of Ruby Ores per vein.")
|
|
||||||
public static int rubyVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableSapphireOre", comment = "Generate Sapphire Ore in The Overworld.")
|
|
||||||
public static boolean enableSapphireOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "sapphireVeinCount", comment = "Count of Sapphire Ore veins per chunk.")
|
|
||||||
public static int sapphireVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "sapphireVeinSize", comment = "Amount of Sapphire Ores per vein.")
|
|
||||||
public static int sapphireVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableSilverOre", comment = "Generate Silver Ore in The Overworld.")
|
|
||||||
public static boolean enableSilverOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "silverVeinCount", comment = "Count of Silver Ore veins per chunk.")
|
|
||||||
public static int silverVeinCount = 16;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "silverVeinSize", comment = "Amount of Silver Ores per vein.")
|
|
||||||
public static int silverVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableTinOre", comment = "Generate Tin Ore in The Overworld.")
|
|
||||||
public static boolean enableTinOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "tinVeinCount", comment = "Count of Tin Ore veins per chunk.")
|
|
||||||
public static int tinVeinCount = 16;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "tinVeinSize", comment = "Amount of Tin Ores per vein.")
|
|
||||||
public static int tinVeinSize = 8;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableCinnabarOre", comment = "Generate Cinnabar Ore in The Nether.")
|
|
||||||
public static boolean enableCinnabarOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "cinnabarVeinCount", comment = "Count of Cinnabar Ore veins per chunk.")
|
|
||||||
public static int cinnabarVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "cinnabarVeinSize", comment = "Amount of Cinnabar Ores per vein.")
|
|
||||||
public static int cinnabarVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enablePyriteOre", comment = "Generate Pyrite Ore in The Nether.")
|
|
||||||
public static boolean enablePyriteOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "pyriteVeinCount", comment = "Count of Pyrite Ore veins per chunk.")
|
|
||||||
public static int pyriteVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "pyriteVeinSize", comment = "Amount of Pyrite Ores per vein.")
|
|
||||||
public static int pyriteVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableSphaleriteOre", comment = "Generate Sphalerite Ore in The Nether.")
|
|
||||||
public static boolean enableSphaleriteOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "sphaleriteVeinCount", comment = "Count of Sphalerite Ore veins per chunk.")
|
|
||||||
public static int sphaleriteVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "sphaleriteVeinSize", comment = "Amount of Sphalerite Ores per vein.")
|
|
||||||
public static int sphaleriteVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enablePeridotOre", comment = "Generate Peridot Ore in The End.")
|
|
||||||
public static boolean enablePeridotOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "peridotVeinCount", comment = "Count of Peridot Ore veins per chunk.")
|
|
||||||
public static int peridotVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "peridotVeinSize", comment = "Amount of Peridot Ores per vein.")
|
|
||||||
public static int peridotVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableSheldoniteOre", comment = "Generate Sheldonite Ore in The End.")
|
|
||||||
public static boolean enableSheldoniteOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "sheldoniteVeinCount", comment = "Count of Sheldonite Ore veins per chunk.")
|
|
||||||
public static int sheldoniteVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "sheldoniteVeinSize", comment = "Amount of Sheldonite Ores per vein.")
|
|
||||||
public static int sheldoniteVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableSodaliteOre", comment = "Generate Sodalite Ore in The End.")
|
|
||||||
public static boolean enableSodaliteOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "sodaliteVeinCount", comment = "Count of Sodalite Ore veins per chunk.")
|
|
||||||
public static int sodaliteVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "sodaliteVeinSize", comment = "Amount of Sodalite Ores per vein.")
|
|
||||||
public static int sodaliteVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "enableTungstenOre", comment = "Generate Tungsten Ore in The End.")
|
|
||||||
public static boolean enableTungstenOre = true;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "tungstenVeinCount", comment = "Count of Tungsten Ore veins per chunk.")
|
|
||||||
public static int tungstenVeinCount = 3;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "ore", key = "tungstenVeinSize", comment = "Amount of Tungsten Ores per vein.")
|
|
||||||
public static int tungstenVeinSize = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "rubber_tree", key = "rubberTreeChance", comment = "Chance to spawn rubber tree")
|
@Config(config = "world", category = "rubber_tree", key = "rubberTreeChance", comment = "Chance to spawn rubber tree")
|
||||||
public static int rubberTreeChance = 50;
|
public static int rubberTreeChance = 50;
|
||||||
|
|
||||||
@Config(config = "world", category = "rubber_tree", key = "rubberTreeBaseHeight", comment = "Basic height for not-spire part of rubber tree")
|
|
||||||
public static int rubberTreeBaseHeight = 6;
|
|
||||||
|
|
||||||
@Config(config = "world", category = "rubber_tree", key = "rubberTreeSpireHeight", comment = "Height of spire of rubber tree")
|
|
||||||
public static int rubberTreeSpireHeight = 3;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemConvertible;
|
import net.minecraft.item.ItemConvertible;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.sound.BlockSoundGroup;
|
import net.minecraft.sound.BlockSoundGroup;
|
||||||
|
import net.minecraft.structure.rule.RuleTest;
|
||||||
import reborncore.api.blockentity.IUpgrade;
|
import reborncore.api.blockentity.IUpgrade;
|
||||||
import reborncore.common.fluid.FluidValue;
|
import reborncore.common.fluid.FluidValue;
|
||||||
import reborncore.common.powerSystem.PowerAcceptorBlockEntity;
|
import reborncore.common.powerSystem.PowerAcceptorBlockEntity;
|
||||||
|
@ -82,6 +83,9 @@ import techreborn.items.tool.MiningLevel;
|
||||||
import techreborn.utils.InitUtils;
|
import techreborn.utils.InitUtils;
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import techreborn.world.TechRebornOre;
|
||||||
|
import techreborn.world.WorldTargetType;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
@ -370,22 +374,22 @@ public class TRContent {
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Ores implements ItemConvertible {
|
public enum Ores implements ItemConvertible {
|
||||||
BAUXITE(TechRebornConfig.bauxiteVeinSize, TechRebornConfig.bauxiteVeinCount, 10, 60, MiningLevel.STONE),
|
BAUXITE(6, 10, 10, 60, MiningLevel.STONE),
|
||||||
CINNABAR(TechRebornConfig.cinnabarVeinSize, TechRebornConfig.cinnabarVeinCount, 10, 126, MiningLevel.IRON),
|
CINNABAR(6, 3, 10, 126, MiningLevel.IRON),
|
||||||
COPPER(TechRebornConfig.copperVeinSize, TechRebornConfig.copperVeinCount, 20, 60, MiningLevel.STONE),
|
COPPER(8, 16, 20, 60, MiningLevel.STONE),
|
||||||
GALENA(TechRebornConfig.galenaVeinSize, TechRebornConfig.galenaVeinCount, 10, 60, MiningLevel.IRON),
|
GALENA(8, 16, 10, 60, MiningLevel.IRON),
|
||||||
IRIDIUM(TechRebornConfig.iridiumVeinSize, TechRebornConfig.iridiumVeinCount, 5, 60, MiningLevel.DIAMOND),
|
IRIDIUM(3, 3, 5, 60, MiningLevel.DIAMOND),
|
||||||
LEAD(TechRebornConfig.leadVeinSize, TechRebornConfig.leadVeinCount, 20, 60, MiningLevel.IRON),
|
LEAD(6, 16, 20, 60, MiningLevel.IRON),
|
||||||
PERIDOT(TechRebornConfig.peridotVeinSize, TechRebornConfig.peridotVeinCount, 10, 250, MiningLevel.DIAMOND),
|
PERIDOT(6, 3, 10, 250, MiningLevel.DIAMOND),
|
||||||
PYRITE(TechRebornConfig.pyriteVeinSize, TechRebornConfig.pyriteVeinCount, 10, 126, MiningLevel.DIAMOND),
|
PYRITE(6, 3, 10, 126, MiningLevel.DIAMOND),
|
||||||
RUBY(TechRebornConfig.rubyVeinSize, TechRebornConfig.rubyVeinCount, 10, 60, MiningLevel.IRON),
|
RUBY(6, 3, 10, 60, MiningLevel.IRON),
|
||||||
SAPPHIRE(TechRebornConfig.sapphireVeinSize, TechRebornConfig.sapphireVeinCount, 10, 60, MiningLevel.IRON),
|
SAPPHIRE(6, 3, 10, 60, MiningLevel.IRON),
|
||||||
SHELDONITE(TechRebornConfig.sheldoniteVeinSize, TechRebornConfig.sheldoniteVeinCount, 10, 250, MiningLevel.DIAMOND),
|
SHELDONITE(6, 3, 10, 250, MiningLevel.DIAMOND),
|
||||||
SILVER(TechRebornConfig.silverVeinSize, TechRebornConfig.silverVeinCount, 20, 60, MiningLevel.IRON),
|
SILVER(6, 16, 20, 60, MiningLevel.IRON),
|
||||||
SODALITE(TechRebornConfig.sodaliteVeinSize, TechRebornConfig.sodaliteVeinCount, 10, 250, MiningLevel.DIAMOND),
|
SODALITE(6, 3, 10, 250, MiningLevel.DIAMOND),
|
||||||
SPHALERITE(TechRebornConfig.sphaleriteVeinSize, TechRebornConfig.sphaleriteVeinCount, 10, 126, MiningLevel.IRON),
|
SPHALERITE(6, 3, 10, 126, MiningLevel.IRON),
|
||||||
TIN(TechRebornConfig.tinVeinSize, TechRebornConfig.tinVeinCount, 20, 60, MiningLevel.STONE),
|
TIN(8, 16, 20, 60, MiningLevel.STONE),
|
||||||
TUNGSTEN(TechRebornConfig.tungstenVeinSize, TechRebornConfig.tungstenVeinCount, 10, 250, MiningLevel.DIAMOND);
|
TUNGSTEN(6, 3, 10, 250, MiningLevel.DIAMOND);
|
||||||
|
|
||||||
public final String name;
|
public final String name;
|
||||||
public final Block block;
|
public final Block block;
|
||||||
|
@ -414,6 +418,10 @@ public class TRContent {
|
||||||
return block.asItem();
|
return block.asItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TechRebornOre asNewOres(WorldTargetType targetType, RuleTest ruleTest) {
|
||||||
|
return new TechRebornOre(targetType, ruleTest, block.getDefaultState(), maxY, veinSize, veinsPerChunk);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum StorageBlocks implements ItemConvertible {
|
public enum StorageBlocks implements ItemConvertible {
|
||||||
|
|
78
src/main/java/techreborn/world/DefaultWorldGen.java
Normal file
78
src/main/java/techreborn/world/DefaultWorldGen.java
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
package techreborn.world;
|
||||||
|
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.structure.rule.BlockStateMatchRuleTest;
|
||||||
|
import net.minecraft.structure.rule.RuleTest;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
import net.minecraft.world.gen.UniformIntDistribution;
|
||||||
|
import net.minecraft.world.gen.feature.OreFeatureConfig;
|
||||||
|
import net.minecraft.world.gen.feature.TreeFeatureConfig;
|
||||||
|
import net.minecraft.world.gen.feature.size.TwoLayersFeatureSize;
|
||||||
|
import net.minecraft.world.gen.stateprovider.SimpleBlockStateProvider;
|
||||||
|
import net.minecraft.world.gen.stateprovider.WeightedBlockStateProvider;
|
||||||
|
import net.minecraft.world.gen.trunk.StraightTrunkPlacer;
|
||||||
|
import org.apache.logging.log4j.util.TriConsumer;
|
||||||
|
import techreborn.blocks.misc.BlockRubberLog;
|
||||||
|
import techreborn.init.TRContent;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class DefaultWorldGen {
|
||||||
|
|
||||||
|
private static final RuleTest END_STONE = new BlockStateMatchRuleTest(Blocks.END_STONE.getDefaultState());
|
||||||
|
|
||||||
|
public static WorldGenConfig getDefaultWorldGen() {
|
||||||
|
return new WorldGenConfig(getOres(), getRubberTree());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TreeFeatureConfig getRubberTree() {
|
||||||
|
WeightedBlockStateProvider logProvider = new WeightedBlockStateProvider();
|
||||||
|
logProvider.addState(TRContent.RUBBER_LOG.getDefaultState(), 10);
|
||||||
|
|
||||||
|
Arrays.stream(Direction.values())
|
||||||
|
.filter(direction -> direction.getAxis().isHorizontal())
|
||||||
|
.map(direction -> TRContent.RUBBER_LOG.getDefaultState()
|
||||||
|
.with(BlockRubberLog.HAS_SAP, true)
|
||||||
|
.with(BlockRubberLog.SAP_SIDE, direction)
|
||||||
|
)
|
||||||
|
.forEach(state -> logProvider.addState(state, 1));
|
||||||
|
|
||||||
|
return new TreeFeatureConfig.Builder(
|
||||||
|
logProvider,
|
||||||
|
new SimpleBlockStateProvider(TRContent.RUBBER_LEAVES.getDefaultState()),
|
||||||
|
new RubberTreeFeature.FoliagePlacer(UniformIntDistribution.of(2, 0), UniformIntDistribution.of(0, 0), 3, 3, TRContent.RUBBER_LEAVES.getDefaultState()),
|
||||||
|
new StraightTrunkPlacer(6, 3, 0),
|
||||||
|
new TwoLayersFeatureSize(1, 0, 1)
|
||||||
|
).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<TechRebornOre> getOres() {
|
||||||
|
List<TechRebornOre> ores = new ArrayList<>();
|
||||||
|
TriConsumer<WorldTargetType, RuleTest, TRContent.Ores> addOre = (worldTargetType, ruleTest, ore) -> ores.add(ore.asNewOres(worldTargetType, ruleTest));
|
||||||
|
|
||||||
|
addOre.accept(WorldTargetType.NETHER, OreFeatureConfig.Rules.BASE_STONE_NETHER, TRContent.Ores.CINNABAR);
|
||||||
|
addOre.accept(WorldTargetType.NETHER, OreFeatureConfig.Rules.BASE_STONE_NETHER, TRContent.Ores.PYRITE);
|
||||||
|
addOre.accept(WorldTargetType.NETHER, OreFeatureConfig.Rules.BASE_STONE_NETHER, TRContent.Ores.SPHALERITE);
|
||||||
|
|
||||||
|
addOre.accept(WorldTargetType.END, END_STONE, TRContent.Ores.PERIDOT);
|
||||||
|
addOre.accept(WorldTargetType.END, END_STONE, TRContent.Ores.SHELDONITE);
|
||||||
|
addOre.accept(WorldTargetType.END, END_STONE, TRContent.Ores.SODALITE);
|
||||||
|
addOre.accept(WorldTargetType.END, END_STONE, TRContent.Ores.TUNGSTEN);
|
||||||
|
|
||||||
|
addOre.accept(WorldTargetType.DEFAULT, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.BAUXITE);
|
||||||
|
addOre.accept(WorldTargetType.DEFAULT, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.COPPER);
|
||||||
|
addOre.accept(WorldTargetType.DEFAULT, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.GALENA);
|
||||||
|
addOre.accept(WorldTargetType.DEFAULT, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.IRIDIUM);
|
||||||
|
addOre.accept(WorldTargetType.DEFAULT, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.LEAD);
|
||||||
|
addOre.accept(WorldTargetType.DEFAULT, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.RUBY);
|
||||||
|
addOre.accept(WorldTargetType.DEFAULT, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.SAPPHIRE);
|
||||||
|
addOre.accept(WorldTargetType.DEFAULT, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.SILVER);
|
||||||
|
addOre.accept(WorldTargetType.DEFAULT, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.TIN);
|
||||||
|
|
||||||
|
return Collections.unmodifiableList(ores);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -27,15 +27,15 @@ package techreborn.world;
|
||||||
import net.minecraft.block.sapling.SaplingGenerator;
|
import net.minecraft.block.sapling.SaplingGenerator;
|
||||||
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
||||||
import net.minecraft.world.gen.feature.TreeFeatureConfig;
|
import net.minecraft.world.gen.feature.TreeFeatureConfig;
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class RubberSaplingGenerator extends SaplingGenerator {
|
public class RubberSaplingGenerator extends SaplingGenerator {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
protected ConfiguredFeature<TreeFeatureConfig, ?> createTreeFeature(Random random, boolean bl) {
|
protected ConfiguredFeature<TreeFeatureConfig, ?> createTreeFeature(Random random, boolean bl) {
|
||||||
return WorldGenerator.RUBBER_TREE_FEATURE.configure(WorldGenerator.RUBBER_TREE_CONFIG);
|
return WorldGenerator.RUBBER_TREE_FEATURE.configure(WorldGenerator.activeConfig.getRubberTree());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,6 @@ package techreborn.world;
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.Heightmap;
|
import net.minecraft.world.Heightmap;
|
||||||
import net.minecraft.world.WorldAccess;
|
|
||||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
|
||||||
import net.minecraft.world.gen.decorator.ChanceDecoratorConfig;
|
import net.minecraft.world.gen.decorator.ChanceDecoratorConfig;
|
||||||
import net.minecraft.world.gen.decorator.Decorator;
|
import net.minecraft.world.gen.decorator.Decorator;
|
||||||
import net.minecraft.world.gen.decorator.DecoratorContext;
|
import net.minecraft.world.gen.decorator.DecoratorContext;
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
package techreborn.world;
|
package techreborn.world;
|
||||||
|
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.util.math.BlockBox;
|
import net.minecraft.util.math.BlockBox;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
@ -33,8 +34,7 @@ import net.minecraft.world.gen.UniformIntDistribution;
|
||||||
import net.minecraft.world.gen.feature.TreeFeature;
|
import net.minecraft.world.gen.feature.TreeFeature;
|
||||||
import net.minecraft.world.gen.feature.TreeFeatureConfig;
|
import net.minecraft.world.gen.feature.TreeFeatureConfig;
|
||||||
import net.minecraft.world.gen.foliage.BlobFoliagePlacer;
|
import net.minecraft.world.gen.foliage.BlobFoliagePlacer;
|
||||||
import techreborn.config.TechRebornConfig;
|
import net.minecraft.world.gen.foliage.FoliagePlacerType;
|
||||||
import techreborn.init.TRContent;
|
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -49,9 +49,22 @@ public class RubberTreeFeature extends TreeFeature {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class FoliagePlacer extends BlobFoliagePlacer {
|
public static class FoliagePlacer extends BlobFoliagePlacer {
|
||||||
|
public static final Codec<FoliagePlacer> CODEC = RecordCodecBuilder.create((instance) -> method_28838(instance)
|
||||||
|
.and(
|
||||||
|
Codec.INT.fieldOf("spireHeight").forGetter(FoliagePlacer::getSpireHeight)
|
||||||
|
)
|
||||||
|
.and(
|
||||||
|
BlockState.CODEC.fieldOf("spireBlockState").forGetter(FoliagePlacer::getSpireBlockState)
|
||||||
|
)
|
||||||
|
.apply(instance, FoliagePlacer::new));
|
||||||
|
|
||||||
public FoliagePlacer(UniformIntDistribution uniformIntDistribution, UniformIntDistribution uniformIntDistribution2, int height) {
|
private final int spireHeight;
|
||||||
super(uniformIntDistribution, uniformIntDistribution2, height);
|
private final BlockState spireBlockState;
|
||||||
|
|
||||||
|
public FoliagePlacer(UniformIntDistribution radius, UniformIntDistribution offset, int height, int spireHeight, BlockState spireBlockState) {
|
||||||
|
super(radius, offset, height);
|
||||||
|
this.spireHeight = spireHeight;
|
||||||
|
this.spireBlockState = spireBlockState;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -75,10 +88,23 @@ public class RubberTreeFeature extends TreeFeature {
|
||||||
|
|
||||||
if (topPos == null) return;
|
if (topPos == null) return;
|
||||||
|
|
||||||
for (int i = 0; i < TechRebornConfig.rubberTreeSpireHeight; i++) {
|
for (int i = 0; i < spireHeight; i++) {
|
||||||
world.setBlockState(pos.up(i), TRContent.RUBBER_LEAVES.getDefaultState(), 19);
|
world.setBlockState(pos.up(i), spireBlockState, 19);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected FoliagePlacerType<?> getType() {
|
||||||
|
return WorldGenerator.RUBBER_TREE_FOLIAGE_PLACER_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSpireHeight() {
|
||||||
|
return spireHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockState getSpireBlockState() {
|
||||||
|
return spireBlockState;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
71
src/main/java/techreborn/world/TechRebornOre.java
Normal file
71
src/main/java/techreborn/world/TechRebornOre.java
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
package techreborn.world;
|
||||||
|
|
||||||
|
import com.mojang.serialization.Codec;
|
||||||
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.structure.rule.RuleTest;
|
||||||
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
||||||
|
import net.minecraft.world.gen.feature.Feature;
|
||||||
|
import net.minecraft.world.gen.feature.OreFeatureConfig;
|
||||||
|
|
||||||
|
public class TechRebornOre {
|
||||||
|
public static final Codec<TechRebornOre> CODEC = RecordCodecBuilder.create(instance ->
|
||||||
|
instance.group(
|
||||||
|
WorldTargetType.CODEC.fieldOf("target").forGetter(TechRebornOre::getTargetType),
|
||||||
|
RuleTest.field_25012.fieldOf("rule").forGetter(TechRebornOre::getRuleTest),
|
||||||
|
BlockState.CODEC.fieldOf("blockState").forGetter(TechRebornOre::getBlockState),
|
||||||
|
Codec.INT.fieldOf("maxY").forGetter(TechRebornOre::getMaxY),
|
||||||
|
Codec.INT.fieldOf("veinSize").forGetter(TechRebornOre::getVeinCount),
|
||||||
|
Codec.INT.fieldOf("veinCount").forGetter(TechRebornOre::getVeinCount)
|
||||||
|
).apply(instance, TechRebornOre::new)
|
||||||
|
);
|
||||||
|
|
||||||
|
private final WorldTargetType targetType;
|
||||||
|
private final RuleTest ruleTest;
|
||||||
|
private final BlockState blockState;
|
||||||
|
private final int maxY;
|
||||||
|
private final int veinSize;
|
||||||
|
private final int veinCount;
|
||||||
|
|
||||||
|
public TechRebornOre(WorldTargetType targetType, RuleTest ruleTest, BlockState blockState, int maxY, int veinSize, int veinCount) {
|
||||||
|
this.targetType = targetType;
|
||||||
|
this.ruleTest = ruleTest;
|
||||||
|
this.blockState = blockState;
|
||||||
|
this.maxY = maxY;
|
||||||
|
this.veinSize = veinSize;
|
||||||
|
this.veinCount = veinCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConfiguredFeature<?, ?> getConfiguredFeature() {
|
||||||
|
return Feature.ORE.configure(
|
||||||
|
new OreFeatureConfig(ruleTest, blockState, veinSize)
|
||||||
|
)
|
||||||
|
.method_30377(maxY)
|
||||||
|
.spreadHorizontally()
|
||||||
|
.repeat(veinCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WorldTargetType getTargetType() {
|
||||||
|
return targetType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuleTest getRuleTest() {
|
||||||
|
return ruleTest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockState getBlockState() {
|
||||||
|
return blockState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxY() {
|
||||||
|
return maxY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVeinSize() {
|
||||||
|
return veinSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVeinCount() {
|
||||||
|
return veinCount;
|
||||||
|
}
|
||||||
|
}
|
33
src/main/java/techreborn/world/WorldGenConfig.java
Normal file
33
src/main/java/techreborn/world/WorldGenConfig.java
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
package techreborn.world;
|
||||||
|
|
||||||
|
import com.mojang.serialization.Codec;
|
||||||
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
|
import net.minecraft.world.gen.feature.TreeFeatureConfig;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class WorldGenConfig {
|
||||||
|
public static final Codec<WorldGenConfig> CODEC = RecordCodecBuilder.create(instance ->
|
||||||
|
instance.group(
|
||||||
|
Codec.list(TechRebornOre.CODEC).fieldOf("ores").forGetter(WorldGenConfig::getOres),
|
||||||
|
TreeFeatureConfig.CODEC.fieldOf("rubberTree").forGetter(WorldGenConfig::getRubberTree)
|
||||||
|
)
|
||||||
|
.apply(instance, WorldGenConfig::new)
|
||||||
|
);
|
||||||
|
|
||||||
|
private final List<TechRebornOre> ores;
|
||||||
|
private final TreeFeatureConfig rubberTree;
|
||||||
|
|
||||||
|
public WorldGenConfig(List<TechRebornOre> ores, TreeFeatureConfig rubberTree) {
|
||||||
|
this.ores = ores;
|
||||||
|
this.rubberTree = rubberTree;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TreeFeatureConfig getRubberTree() {
|
||||||
|
return rubberTree;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<TechRebornOre> getOres() {
|
||||||
|
return ores;
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,33 +26,26 @@ package techreborn.world;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.mojang.serialization.DataResult;
|
||||||
|
import com.mojang.serialization.JsonOps;
|
||||||
import net.fabricmc.fabric.api.event.registry.RegistryEntryAddedCallback;
|
import net.fabricmc.fabric.api.event.registry.RegistryEntryAddedCallback;
|
||||||
import net.minecraft.block.Blocks;
|
|
||||||
import net.minecraft.structure.rule.BlockStateMatchRuleTest;
|
|
||||||
import net.minecraft.structure.rule.RuleTest;
|
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.math.Direction;
|
|
||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
import net.minecraft.util.registry.BuiltinRegistries;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import net.minecraft.world.biome.Biome;
|
import net.minecraft.world.biome.Biome;
|
||||||
import net.minecraft.world.biome.Biome.Category;
|
import net.minecraft.world.biome.Biome.Category;
|
||||||
import net.minecraft.world.gen.GenerationStep;
|
import net.minecraft.world.gen.GenerationStep;
|
||||||
import net.minecraft.world.gen.UniformIntDistribution;
|
|
||||||
import net.minecraft.world.gen.decorator.ChanceDecoratorConfig;
|
import net.minecraft.world.gen.decorator.ChanceDecoratorConfig;
|
||||||
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
||||||
import net.minecraft.world.gen.feature.Feature;
|
import net.minecraft.world.gen.feature.Feature;
|
||||||
import net.minecraft.world.gen.feature.OreFeatureConfig;
|
|
||||||
import net.minecraft.world.gen.feature.TreeFeatureConfig;
|
import net.minecraft.world.gen.feature.TreeFeatureConfig;
|
||||||
import net.minecraft.world.gen.feature.size.TwoLayersFeatureSize;
|
import net.minecraft.world.gen.foliage.FoliagePlacerType;
|
||||||
import net.minecraft.world.gen.stateprovider.SimpleBlockStateProvider;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import net.minecraft.world.gen.stateprovider.WeightedBlockStateProvider;
|
import reborncore.mixin.common.AccessorFoliagePlacerType;
|
||||||
import net.minecraft.world.gen.trunk.StraightTrunkPlacer;
|
|
||||||
import techreborn.blocks.misc.BlockRubberLog;
|
|
||||||
import techreborn.config.TechRebornConfig;
|
import techreborn.config.TechRebornConfig;
|
||||||
import techreborn.init.TRContent;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
@ -63,131 +56,64 @@ public class WorldGenerator {
|
||||||
|
|
||||||
public static Feature<TreeFeatureConfig> RUBBER_TREE_FEATURE;
|
public static Feature<TreeFeatureConfig> RUBBER_TREE_FEATURE;
|
||||||
public static RubberTreeDecorator RUBBER_TREE_DECORATOR;
|
public static RubberTreeDecorator RUBBER_TREE_DECORATOR;
|
||||||
public static TreeFeatureConfig RUBBER_TREE_CONFIG;
|
public static FoliagePlacerType<RubberTreeFeature.FoliagePlacer> RUBBER_TREE_FOLIAGE_PLACER_TYPE;
|
||||||
private static final RuleTest END_STONE = new BlockStateMatchRuleTest(Blocks.END_STONE.getDefaultState());
|
@Nullable
|
||||||
|
public static WorldGenConfig activeConfig;
|
||||||
|
|
||||||
private static final List<Biome> checkedBiomes = new ArrayList<>();
|
private static final List<Biome> checkedBiomes = new ArrayList<>();
|
||||||
|
|
||||||
public static void initBiomeFeatures() {
|
public static void initWorldGen() {
|
||||||
setupTrees();
|
setupTrees();
|
||||||
|
|
||||||
|
activeConfig = DefaultWorldGen.getDefaultWorldGen();
|
||||||
|
|
||||||
|
DataResult<JsonElement> result = WorldGenConfig.CODEC.encodeStart(JsonOps.INSTANCE, activeConfig);
|
||||||
|
JsonElement jsonElement = result.getOrThrow(true, System.out::println);
|
||||||
|
String json = jsonElement.toString();
|
||||||
|
|
||||||
for (Biome biome : BuiltinRegistries.BIOME) {
|
for (Biome biome : BuiltinRegistries.BIOME) {
|
||||||
addToBiome(biome);
|
populateBiome(biome, activeConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Handles modded biomes
|
//Handles modded biomes
|
||||||
RegistryEntryAddedCallback.event(BuiltinRegistries.BIOME).register((i, identifier, biome) -> addToBiome(biome));
|
RegistryEntryAddedCallback.event(BuiltinRegistries.BIOME).register((i, identifier, biome) -> populateBiome(biome, activeConfig));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setupTrees() {
|
private static void setupTrees() {
|
||||||
RUBBER_TREE_FEATURE = Registry.register(Registry.FEATURE, new Identifier("techreborn:rubber_tree"), new RubberTreeFeature(TreeFeatureConfig.CODEC));
|
RUBBER_TREE_FEATURE = Registry.register(Registry.FEATURE, new Identifier("techreborn:rubber_tree"), new RubberTreeFeature(TreeFeatureConfig.CODEC));
|
||||||
RUBBER_TREE_DECORATOR = Registry.register(Registry.DECORATOR, new Identifier("techreborn:rubber_tree"), new RubberTreeDecorator(ChanceDecoratorConfig.CODEC));
|
RUBBER_TREE_DECORATOR = Registry.register(Registry.DECORATOR, new Identifier("techreborn:rubber_tree"), new RubberTreeDecorator(ChanceDecoratorConfig.CODEC));
|
||||||
|
RUBBER_TREE_FOLIAGE_PLACER_TYPE = AccessorFoliagePlacerType.register("techreborn:rubber_tree", RubberTreeFeature.FoliagePlacer.CODEC);
|
||||||
WeightedBlockStateProvider logProvider = new WeightedBlockStateProvider();
|
|
||||||
logProvider.addState(TRContent.RUBBER_LOG.getDefaultState(), 10);
|
|
||||||
|
|
||||||
Arrays.stream(Direction.values())
|
|
||||||
.filter(direction -> direction.getAxis().isHorizontal())
|
|
||||||
.map(direction -> TRContent.RUBBER_LOG.getDefaultState()
|
|
||||||
.with(BlockRubberLog.HAS_SAP, true)
|
|
||||||
.with(BlockRubberLog.SAP_SIDE, direction)
|
|
||||||
)
|
|
||||||
.forEach(state -> logProvider.addState(state, 1));
|
|
||||||
|
|
||||||
RUBBER_TREE_CONFIG = new TreeFeatureConfig.Builder(
|
|
||||||
logProvider,
|
|
||||||
new SimpleBlockStateProvider(TRContent.RUBBER_LEAVES.getDefaultState()),
|
|
||||||
new RubberTreeFeature.FoliagePlacer(UniformIntDistribution.of(2, 0), UniformIntDistribution.of(0, 0), 3),
|
|
||||||
new StraightTrunkPlacer(TechRebornConfig.rubberTreeBaseHeight, 3, 0),
|
|
||||||
new TwoLayersFeatureSize(1, 0, 1)
|
|
||||||
).build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addToBiome(Biome biome) {
|
private static void populateBiome(Biome biome, WorldGenConfig config) {
|
||||||
if (checkedBiomes.contains(biome)) {
|
if (checkedBiomes.contains(biome)) {
|
||||||
//Just to be sure we dont add the stuff twice to the same biome
|
//Just to be sure we dont add the stuff twice to the same biome
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
checkedBiomes.add(biome);
|
checkedBiomes.add(biome);
|
||||||
|
|
||||||
if (biome.getCategory() == Category.NETHER) {
|
for (TechRebornOre ore : config.getOres()) {
|
||||||
if (TechRebornConfig.enableCinnabarOre) {
|
if (ore.getTargetType().isApplicable(biome.getCategory())) {
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_NETHER, TRContent.Ores.CINNABAR);
|
addFeature(biome, GenerationStep.Feature.UNDERGROUND_ORES, ore.getConfiguredFeature());
|
||||||
}
|
}
|
||||||
if (TechRebornConfig.enablePyriteOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_NETHER, TRContent.Ores.PYRITE);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableSphaleriteOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_NETHER, TRContent.Ores.SPHALERITE);
|
|
||||||
}
|
|
||||||
} else if (biome.getCategory() == Category.THEEND) {
|
|
||||||
if (TechRebornConfig.enablePeridotOre) {
|
|
||||||
addOre(biome, END_STONE, TRContent.Ores.PERIDOT);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableSheldoniteOre) {
|
|
||||||
addOre(biome, END_STONE, TRContent.Ores.SHELDONITE);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableSodaliteOre) {
|
|
||||||
addOre(biome, END_STONE, TRContent.Ores.SODALITE);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableTungstenOre) {
|
|
||||||
addOre(biome, END_STONE, TRContent.Ores.TUNGSTEN);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (TechRebornConfig.enableBauxiteOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.BAUXITE);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableCopperOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.COPPER);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableGalenaOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.GALENA);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableIridiumOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.IRIDIUM);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableLeadOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.LEAD);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableRubyOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.RUBY);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableSapphireOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.SAPPHIRE);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableSilverOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.SILVER);
|
|
||||||
}
|
|
||||||
if (TechRebornConfig.enableTinOre) {
|
|
||||||
addOre(biome, OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, TRContent.Ores.TIN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (biome.getCategory() == Category.FOREST || biome.getCategory() == Category.TAIGA || biome.getCategory() == Category.SWAMP) {
|
if (biome.getCategory() == Category.FOREST || biome.getCategory() == Category.TAIGA || biome.getCategory() == Category.SWAMP) {
|
||||||
addFeature(biome, GenerationStep.Feature.VEGETAL_DECORATION,
|
addFeature(biome, GenerationStep.Feature.VEGETAL_DECORATION,
|
||||||
RUBBER_TREE_FEATURE.configure(RUBBER_TREE_CONFIG)
|
RUBBER_TREE_FEATURE.configure(config.getRubberTree())
|
||||||
.decorate(RUBBER_TREE_DECORATOR
|
.decorate(RUBBER_TREE_DECORATOR
|
||||||
.configure(new ChanceDecoratorConfig(biome.getCategory() == Category.SWAMP ? TechRebornConfig.rubberTreeChance / 3 : TechRebornConfig.rubberTreeChance))
|
.configure(new ChanceDecoratorConfig(biome.getCategory() == Category.SWAMP ? TechRebornConfig.rubberTreeChance / 3 : TechRebornConfig.rubberTreeChance))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private static void addOre(Biome biome, RuleTest ruleTest, TRContent.Ores ore) {
|
|
||||||
addFeature(biome,
|
|
||||||
GenerationStep.Feature.UNDERGROUND_ORES,
|
|
||||||
Feature.ORE.configure(
|
|
||||||
new OreFeatureConfig(ruleTest, ore.block.getDefaultState(), ore.veinSize)
|
|
||||||
).method_30377(ore.maxY).spreadHorizontally().repeat(ore.veinsPerChunk)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void addFeature(Biome biome, GenerationStep.Feature feature, ConfiguredFeature<?, ?> configuredFeature) {
|
private static void addFeature(Biome biome, GenerationStep.Feature feature, ConfiguredFeature<?, ?> configuredFeature) {
|
||||||
List<List<Supplier<ConfiguredFeature<?, ?>>>> features = biome.getGenerationSettings().getFeatures();
|
List<List<Supplier<ConfiguredFeature<?, ?>>>> features = biome.getGenerationSettings().getFeatures();
|
||||||
|
|
||||||
int stepIndex = feature.ordinal();
|
int stepIndex = feature.ordinal();
|
||||||
|
|
||||||
while(features.size() <= stepIndex) {
|
while (features.size() <= stepIndex) {
|
||||||
features.add(Lists.newArrayList());
|
features.add(Lists.newArrayList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
39
src/main/java/techreborn/world/WorldTargetType.java
Normal file
39
src/main/java/techreborn/world/WorldTargetType.java
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
package techreborn.world;
|
||||||
|
|
||||||
|
import com.mojang.serialization.Codec;
|
||||||
|
import net.minecraft.util.StringIdentifiable;
|
||||||
|
import net.minecraft.world.biome.Biome;
|
||||||
|
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
public enum WorldTargetType implements StringIdentifiable {
|
||||||
|
DEFAULT("default", category -> category != Biome.Category.NETHER && category != Biome.Category.THEEND),
|
||||||
|
NETHER("nether", category -> category == Biome.Category.NETHER),
|
||||||
|
END("end", category -> category == Biome.Category.THEEND);
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
private final Predicate<Biome.Category> biomeCategoryPredicate;
|
||||||
|
public static final Codec<WorldTargetType> CODEC = StringIdentifiable.createCodec(WorldTargetType::values, WorldTargetType::getByName);
|
||||||
|
|
||||||
|
WorldTargetType(String name, Predicate<Biome.Category> biomeCategoryPredicate) {
|
||||||
|
this.name = name;
|
||||||
|
this.biomeCategoryPredicate = biomeCategoryPredicate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isApplicable(Biome.Category biomeCategory) {
|
||||||
|
return biomeCategoryPredicate.test(biomeCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static WorldTargetType getByName(String name) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String asString() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue