Update black hole placement code

This commit is contained in:
DBotThePony 2024-11-15 16:56:33 +07:00
parent 89aa300b9b
commit 9820505c0d
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 15 additions and 22 deletions

View File

@ -1,7 +1,6 @@
package ru.dbotthepony.mc.otm.datagen
import net.minecraft.core.HolderSet
import net.minecraft.core.RegistrySetBuilder
import net.minecraft.core.registries.Registries
import net.minecraft.data.worldgen.BootstrapContext
import net.minecraft.resources.ResourceKey
@ -22,7 +21,7 @@ import net.neoforged.neoforge.registries.NeoForgeRegistries
import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MWorldGenFeatures
import ru.dbotthepony.mc.otm.worldgen.feature.BlackHolePlacerConfiguration
import ru.dbotthepony.mc.otm.worldgen.feature.BlackHolePlacerFeature
private object ConfiguredFeatures {
val TRITANIUM_ORE = key("tritanium_ore")
@ -44,7 +43,7 @@ fun registerConfiguredFeatures(context: BootstrapContext<ConfiguredFeature<*, *>
context.register(ConfiguredFeatures.TRITANIUM_ORE, ConfiguredFeature(Feature.ORE, OreConfiguration(target, 9)))
context.register(ConfiguredFeatures.BLACK_HOLE, ConfiguredFeature(MWorldGenFeatures.BLACK_HOLE_PLACER,
BlackHolePlacerConfiguration(0.001f, Decimal(125_000), Decimal(500_000))))
BlackHolePlacerFeature.Config(0.001f, Decimal("0.25"), Decimal(1))))
}
private object PlacedFeatures {

View File

@ -1,9 +1,7 @@
package ru.dbotthepony.mc.otm.registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.world.level.levelgen.feature.Feature
import net.neoforged.bus.api.IEventBus
import ru.dbotthepony.mc.otm.worldgen.feature.BlackHolePlacerConfiguration
import ru.dbotthepony.mc.otm.worldgen.feature.BlackHolePlacerFeature
object MWorldGenFeatures {
@ -13,7 +11,5 @@ object MWorldGenFeatures {
registry.register(bus)
}
val BLACK_HOLE_PLACER: Feature<BlackHolePlacerConfiguration> by registry.register("black_hole_placer") {
BlackHolePlacerFeature(BlackHolePlacerConfiguration.CODEC)
}
val BLACK_HOLE_PLACER by registry.register("black_hole_placer") { BlackHolePlacerFeature }
}

View File

@ -6,38 +6,36 @@ import net.minecraft.world.level.levelgen.feature.Feature
import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration
import ru.dbotthepony.mc.otm.block.entity.blackhole.BlackHoleBlockEntity
import ru.dbotthepony.mc.otm.config.ServerConfig
import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.nextDecimal
import ru.dbotthepony.mc.otm.data.DecimalCodec
import ru.dbotthepony.mc.otm.registry.MBlocks
class BlackHolePlacerConfiguration(val chance: Float, val minMatter: Decimal, val maxMatter: Decimal) : FeatureConfiguration {
companion object {
val CODEC: Codec<BlackHolePlacerConfiguration> = RecordCodecBuilder.create {
t -> t.group(
Codec.floatRange(0.0F, 1.0F).fieldOf("chance").forGetter(BlackHolePlacerConfiguration::chance),
DecimalCodec.fieldOf("matter_min").forGetter(BlackHolePlacerConfiguration::minMatter),
DecimalCodec.fieldOf("matter_max").forGetter(BlackHolePlacerConfiguration::maxMatter)
).apply(t, ::BlackHolePlacerConfiguration)
}
object BlackHolePlacerFeature : Feature<BlackHolePlacerFeature.Config>(
RecordCodecBuilder.create {
it.group(
Codec.floatRange(0.0F, 1.0F).fieldOf("chance").forGetter(Config::chance),
DecimalCodec.fieldOf("matter_min").forGetter(Config::minMatter),
DecimalCodec.fieldOf("matter_max").forGetter(Config::maxMatter)
).apply(it, ::Config)
}
}
) {
data class Config(val chance: Float, val minMatter: Decimal, val maxMatter: Decimal) : FeatureConfiguration
class BlackHolePlacerFeature(val codec: Codec<BlackHolePlacerConfiguration>) : Feature<BlackHolePlacerConfiguration>(codec) {
override fun place(context: FeaturePlaceContext<BlackHolePlacerConfiguration?>): Boolean {
override fun place(context: FeaturePlaceContext<Config>): Boolean {
val random = context.random()
val level = context.level()
val pos = context.origin()
val config = context.config()
if (config == null) return false
if (level.getBlockState(pos).isAir && random.nextDouble() < config.chance.toDouble()) {
if (level.setBlock(pos, MBlocks.BLACK_HOLE.defaultBlockState(), 2)) {
val entity = level.getBlockEntity(pos)
if (entity is BlackHoleBlockEntity) {
entity.mass = random.nextDecimal(config.minMatter, config.maxMatter)
entity.mass = random.nextDecimal(config.minMatter, config.maxMatter) * ServerConfig.Blackhole.BASELINE_MASS
}
return true