diff --git a/src/core/scala/mrtjp/projectred/core/Configurator.scala b/src/core/scala/mrtjp/projectred/core/Configurator.scala index c48a69a24..12902ddc5 100644 --- a/src/core/scala/mrtjp/projectred/core/Configurator.scala +++ b/src/core/scala/mrtjp/projectred/core/Configurator.scala @@ -39,25 +39,25 @@ object Configurator extends ModConfig("projectred-core") { // var gen_Volcano = true // var gen_Volcano_resistance = 0 // var gen_Volcano_retro = false - // var gen_Ruby = true + var gen_Ruby = true // var gen_Ruby_resistance = 0 // var gen_Ruby_retro = false - // var gen_Sapphire = true + var gen_Sapphire = true // var gen_Sapphire_resistance = 0 // var gen_Sapphire_retro = false - // var gen_Peridot = true + var gen_Peridot = true // var gen_Peridot_resistance = 0 // var gen_Peridot_retro = false - // var gen_Copper = true + var gen_Copper = true // var gen_Copper_resistance = 0 // var gen_Copper_retro = false - // var gen_Tin = true + var gen_Tin = true // var gen_Tin_resistance = 0 // var gen_Tin_retro = false - // var gen_Silver = true + var gen_Silver = true // var gen_Silver_resistance = 0 // var gen_Silver_retro = false - // var gen_Electrotine = true + var gen_Electrotine = true // var gen_Electrotine_resistance = 0 // var gen_Electrotine_retro = false @@ -96,16 +96,16 @@ object Configurator extends ModConfig("projectred-core") { lightHaloMax = rendering.put("Light Halo Render Count", lightHaloMax, "Number of lights to render, -1 for unlimited") pipeRoutingFX = rendering.put("Routed Pipe FX", pipeRoutingFX, "If set to false, routed pipes will not render routing fx such as bubbles and lasers.") - // val gen = new BaseCategory("World Gen", "Contains settings related to world gen. You can enable/disable each ore or strucure, change retro generation settings, and increase how rare something is by increasing the resistance value.") - // gen_Ruby = gen.put("Ruby Ore", gen_Ruby) + val gen = new BaseCategory("World Gen", "Contains settings related to world gen. You can enable/disable each ore or strucure, change retro generation settings, and increase how rare something is by increasing the resistance value.") + gen_Ruby = gen.put("Ruby Ore", gen_Ruby) // gen_Ruby_resistance = gen.put("Ruby Ore resistance", gen_Ruby_resistance) // gen_Ruby_retro = gen.put("Ruby Ore retrogen", gen_Ruby_retro) // - // gen_Sapphire = gen.put("Sapphire Ore", gen_Sapphire) + gen_Sapphire = gen.put("Sapphire Ore", gen_Sapphire) // gen_Sapphire_resistance = gen.put("Sapphire Ore resistance", gen_Sapphire_resistance) // gen_Sapphire_retro = gen.put("Sapphire Ore retrogen", gen_Sapphire_retro) // - // gen_Peridot = gen.put("Peridot Ore", gen_Peridot) + gen_Peridot = gen.put("Peridot Ore", gen_Peridot) // gen_Peridot_resistance = gen.put("Peridot Ore resistance", gen_Peridot_resistance) // gen_Peridot_retro = gen.put("Peridot Ore retrogen", gen_Peridot_retro) // @@ -117,19 +117,19 @@ object Configurator extends ModConfig("projectred-core") { // gen_Volcano_resistance = gen.put("Volcano resistance", gen_Volcano_resistance) // gen_Volcano_retro = gen.put("Volcano retrogen", gen_Volcano_retro) // - // gen_Copper = gen.put("Copper Ore", gen_Copper) + gen_Copper = gen.put("Copper Ore", gen_Copper) // gen_Copper_resistance = gen.put("Copper Ore resistance", gen_Copper_resistance) // gen_Copper_retro = gen.put("Copper Ore retrogen", gen_Copper_retro) // - // gen_Tin = gen.put("Tin Ore", gen_Tin) + gen_Tin = gen.put("Tin Ore", gen_Tin) // gen_Tin_resistance = gen.put("Tin Ore resistance", gen_Tin_resistance) // gen_Tin_retro = gen.put("Tin Ore retrogen", gen_Tin_retro) // - // gen_Silver = gen.put("Silver Ore", gen_Silver) + gen_Silver = gen.put("Silver Ore", gen_Silver) // gen_Silver_resistance = gen.put("Silver Ore resistance", gen_Silver_resistance) // gen_Silver_retro = gen.put("Silver Ore retrogen", gen_Silver_retro) // - // gen_Electrotine = gen.put("Electrotine Ore", gen_Electrotine) + gen_Electrotine = gen.put("Electrotine Ore", gen_Electrotine) // gen_Electrotine_resistance = gen.put("Electrotine Ore resistance", gen_Electrotine_resistance) // gen_Electrotine_retro = gen.put("Electrotine Ore retrogen", gen_Electrotine_retro) diff --git a/src/exploration/scala/mrtjp/projectred/ProjectRedExploration.scala b/src/exploration/scala/mrtjp/projectred/ProjectRedExploration.scala index 5216a2fce..7898949bc 100644 --- a/src/exploration/scala/mrtjp/projectred/ProjectRedExploration.scala +++ b/src/exploration/scala/mrtjp/projectred/ProjectRedExploration.scala @@ -1,10 +1,13 @@ package mrtjp.projectred import mrtjp.projectred.exploration._ +import mrtjp.projectred.exploration.init.ExplorationFeatures import net.minecraftforge.eventbus.api.SubscribeEvent import net.minecraftforge.fml.event.lifecycle.{FMLClientSetupEvent, FMLCommonSetupEvent, FMLDedicatedServerSetupEvent, FMLLoadCompleteEvent} import net.minecraftforge.scorge.lang.ScorgeModLoadingContext +import scala.jdk.FunctionWrappers.AsJavaSupplier + object ProjectRedExploration { final var MOD_ID = "projectred-exploration" } @@ -17,6 +20,7 @@ class ProjectRedExploration { @SubscribeEvent def onCommonSetup(event: FMLCommonSetupEvent) { ExplorationProxy.commonSetup(event) + event.enqueueWork(AsJavaSupplier(() => ExplorationFeatures.load())) } @SubscribeEvent diff --git a/src/exploration/scala/mrtjp/projectred/exploration/init/ExplorationFeatures.scala b/src/exploration/scala/mrtjp/projectred/exploration/init/ExplorationFeatures.scala new file mode 100644 index 000000000..3146d10da --- /dev/null +++ b/src/exploration/scala/mrtjp/projectred/exploration/init/ExplorationFeatures.scala @@ -0,0 +1,69 @@ +package mrtjp.projectred.exploration.init + +import mrtjp.projectred.ProjectRedExploration.MOD_ID +import mrtjp.projectred.core.Configurator +import mrtjp.projectred.exploration.ExplorationContent._ +import net.minecraft.block.Block +import net.minecraft.util.ResourceLocation +import net.minecraft.util.registry.{Registry, WorldGenRegistries} +import net.minecraft.world.gen.GenerationStage +import net.minecraft.world.gen.feature.{ConfiguredFeature, Feature, OreFeatureConfig} +import net.minecraft.world.gen.placement.{Placement, TopSolidRangeConfig} +import net.minecraftforge.common.MinecraftForge +import net.minecraftforge.event.world.BiomeLoadingEvent +import net.minecraftforge.eventbus.api.EventPriority + +import java.util.function.Supplier + +object ExplorationFeatures +{ + var oreRuby:ConfiguredFeature[_, _] = _ + var oreSapphire:ConfiguredFeature[_, _] = _ + var orePeridot:ConfiguredFeature[_, _] = _ + var oreCopper:ConfiguredFeature[_, _] = _ + var oreTin:ConfiguredFeature[_, _] = _ + var oreSilver:ConfiguredFeature[_, _] = _ + var oreElectrotine:ConfiguredFeature[_, _] = _ + + def load():Unit = { + oreRuby = registerStandardOre("ruby_ore", blockRubyOre, 8, 12, 20, 1) + oreSapphire = registerStandardOre("sapphire_ore", blockSapphireOre, 8, 12, 20, 1) + orePeridot = registerStandardOre("peridot_dore", blockPeridotOre, 10, 18, 26, 1) + + oreCopper = registerStandardOre("ore_copper", blockCopperOre, 8, 0, 64, 16) + oreTin = registerStandardOre("ore_tin", blockTinOre, 8, 0, 48, 10) + oreSilver = registerStandardOre("ore_silver", blockSilverOre, 9, 0, 32, 8) + + oreElectrotine = registerStandardOre("ore_electrotine", blockElectrotineOre, 8, 0, 16, 4) + + MinecraftForge.EVENT_BUS.addListener(EventPriority.HIGH, onBiomeLoadingEvent) + } + + def onBiomeLoadingEvent(event:BiomeLoadingEvent):Unit = { + val c = event.getCategory + import net.minecraft.world.biome.Biome.Category._ + + def addOre(cf:ConfiguredFeature[_, _]):Unit = { + event.getGeneration.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, cf) + } + + if (c != NONE && c != THEEND && c != NETHER) { // If overworld + import Configurator._ + if (gen_Ruby) addOre(oreRuby) + if (gen_Sapphire) addOre(oreSapphire) + if (gen_Peridot) addOre(orePeridot) + if (gen_Copper) addOre(oreCopper) + if (gen_Tin) addOre(oreTin) + if (gen_Silver) addOre(oreSilver) + if (gen_Electrotine) addOre(oreElectrotine) + } + } + + private def registerStandardOre(key:String, block:Supplier[Block], veinSize:Int, minY:Int, maxY:Int, count:Int):ConfiguredFeature[_, _] = { + val cf = Feature.ORE.configured(new OreFeatureConfig(OreFeatureConfig.FillerBlockType.NATURAL_STONE, block.get().defaultBlockState(), veinSize)) + .squared() + .count(count) + val cf2:ConfiguredFeature[_, _] = cf.decorated(Placement.RANGE.configured(new TopSolidRangeConfig(minY, minY, maxY))) //Scalac bug requires this on separate line + Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(MOD_ID, key), cf2) + } +}