Skip to content

Commit

Permalink
Dimensions basis (PROBABLY VERY BUGGY)
Browse files Browse the repository at this point in the history
  • Loading branch information
ATPStorages committed Apr 14, 2024
1 parent 2191e6a commit 8040ba9
Show file tree
Hide file tree
Showing 10 changed files with 192 additions and 83 deletions.
4 changes: 1 addition & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,8 @@ java.toolchain.languageVersion = JavaLanguageVersion.of(17)

println("Java: ${System.getProperty('java.version')}, JVM: ${System.getProperty('java.vm.version')} (${System.getProperty('java.vendor')}), Arch: ${System.getProperty('os.arch')}")
minecraft {
// Change to your preferred mappings
mappings channel: mapping_channel, version: mapping_version
// Add your AccessTransformer
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')

runs {
// REQUIRED for processResources to work in dev
Expand Down
2 changes: 1 addition & 1 deletion gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ fi


# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
DEFAULT_JVM_OPTS='"-Xmx1G" "-Xms64m"'

# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
Expand Down
12 changes: 12 additions & 0 deletions src/main/kotlin/breadmod/ModEventBus.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import breadmod.entity.renderer.PrimedHappyBlockRenderer
import breadmod.registry.item.ModItems
import breadmod.block.entity.menu.BreadFurnaceScreen
import breadmod.datagen.*
import breadmod.datagen.dimension.ModBiomes
import breadmod.datagen.dimension.ModDimensions
import breadmod.datagen.tags.ModBlockTags
import breadmod.datagen.tags.ModItemTags
import breadmod.datagen.tags.ModPaintingTags
Expand All @@ -22,10 +24,13 @@ import net.minecraft.client.gui.screens.MenuScreens
import net.minecraft.client.multiplayer.ClientLevel
import net.minecraft.client.renderer.entity.EntityRendererProvider
import net.minecraft.client.renderer.item.ItemProperties
import net.minecraft.core.RegistrySetBuilder
import net.minecraft.core.registries.Registries
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.item.ItemStack
import net.minecraftforge.client.event.EntityRenderersEvent
import net.minecraftforge.client.event.RegisterColorHandlersEvent
import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider
import net.minecraftforge.data.event.GatherDataEvent
import net.minecraftforge.eventbus.api.SubscribeEvent
import net.minecraftforge.fml.common.Mod
Expand All @@ -37,6 +42,11 @@ object ModEventBus {
// Data Generation
@SubscribeEvent
fun gatherData(event: GatherDataEvent) {
val registrySet = RegistrySetBuilder()
.add(Registries.BIOME, ModBiomes::bootstrapBiomes)
.add(Registries.DIMENSION_TYPE, ModDimensions::bootstrapDimensionTypes)
.add(Registries.LEVEL_STEM, ModDimensions::bootstrapLevelStems)

val generator = event.generator
val packOutput = generator.packOutput
val existingFileHelper = event.existingFileHelper
Expand All @@ -50,6 +60,8 @@ object ModEventBus {
val blockTagGenerator = generator.addProvider(true, ModBlockTags(packOutput, lookupProvider, existingFileHelper))
generator.addProvider(true, ModItemTags(packOutput, lookupProvider, blockTagGenerator.contentsGetter(), existingFileHelper))
generator.addProvider(true, ModPaintingTags(packOutput, lookupProvider, existingFileHelper))

generator.addProvider(true, DatapackBuiltinEntriesProvider(packOutput, lookupProvider, registrySet, setOf(BreadMod.ID)))
}
if(event.includeClient()) {
LOGGER.info("Client datagen")
Expand Down
45 changes: 45 additions & 0 deletions src/main/kotlin/breadmod/datagen/dimension/ModBiomes.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package breadmod.datagen.dimension

import breadmod.BreadMod
import net.minecraft.core.particles.ParticleTypes
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.sounds.SoundEvents
import net.minecraft.world.level.biome.*
import java.awt.Color

object ModBiomes {
private val entries = mutableListOf<Pair<ResourceKey<Biome>, Biome>>()

fun register(
name: String, biomeBuilder: (id: ResourceLocation) -> Biome
) = BreadMod.modLocation(name).let {
val pair = ResourceKey.create(Registries.BIOME, it) to biomeBuilder(it)
entries.add(pair)
return@let pair
}

val BREAD = register("bread") { _ ->
Biome.BiomeBuilder()
.hasPrecipitation(false)
.temperatureAdjustment(Biome.TemperatureModifier.NONE)
.specialEffects(
BiomeSpecialEffects.Builder()
.fogColor(Color(0, 150,120).rgb)
.skyColor(Color(0, 255,192).rgb)
.waterColor(Color(200,100,0).rgb)
.waterFogColor(Color(200, 75, 0).rgb)
.ambientParticle(AmbientParticleSettings(ParticleTypes.SMOKE, 0.1F))
.ambientLoopSound(SoundEvents.AMBIENT_BASALT_DELTAS_LOOP)
.build()
)
.generationSettings(BiomeGenerationSettings.EMPTY)
.mobSpawnSettings(MobSpawnSettings.EMPTY)
.temperature(1.0F)
.downfall(0.0F)
.build()
}

fun bootstrapBiomes(ctx: BootstrapContext<Biome>) = entries.forEach { ctx.register(it.first, it.second) }
}
32 changes: 32 additions & 0 deletions src/main/kotlin/breadmod/datagen/dimension/ModDimensionEntry.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package breadmod.datagen.dimension

import net.minecraft.core.Holder
import net.minecraft.core.HolderGetter
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.level.biome.Biome
import net.minecraft.world.level.biome.Climate
import net.minecraft.world.level.dimension.DimensionType
import net.minecraft.world.level.dimension.LevelStem
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings

typealias ClimateParameterListBuilder = ((HolderGetter<Biome>) -> Climate.ParameterList<Holder<Biome>>)

data class ModDimensionEntry(
val effectLocation: ResourceLocation,
val dimensionType: Pair<ResourceKey<DimensionType>, DimensionType>,
val levelStemKey: ResourceKey<LevelStem>,

val climateParameterListBuilder: ClimateParameterListBuilder? = null,
val noiseSettings: ResourceKey<NoiseGeneratorSettings> = NoiseGeneratorSettings.OVERWORLD
) {
companion object {
internal val entries = mutableListOf<ModDimensionEntry>()
internal var frozen = false
}

init {
if(frozen) throw IllegalStateException("Dimension registered after entry list froze")
entries.add(this)
}
}
101 changes: 101 additions & 0 deletions src/main/kotlin/breadmod/datagen/dimension/ModDimensions.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package breadmod.datagen.dimension

import breadmod.BreadMod.modLocation
import com.mojang.datafixers.util.Pair
import net.minecraft.core.registries.Registries
import net.minecraft.data.worldgen.BootstapContext
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation
import net.minecraft.tags.BlockTags
import net.minecraft.util.valueproviders.ConstantInt
import net.minecraft.world.level.biome.*
import net.minecraft.world.level.biome.Climate.ParameterList
import net.minecraft.world.level.dimension.BuiltinDimensionTypes
import net.minecraft.world.level.dimension.DimensionType
import net.minecraft.world.level.dimension.LevelStem
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator
import java.util.*

typealias BootstrapContext<T> = BootstapContext<T>

object ModDimensions {
fun register(
name: String,
dimensionType: (key: ResourceKey<DimensionType>, location: ResourceLocation) -> DimensionType,
climateParameterListBuilder: ClimateParameterListBuilder,
) = modLocation(name).let {
ModDimensionEntry(
it,
ResourceKey.create(Registries.DIMENSION_TYPE, it).let { typeKey -> typeKey to dimensionType.invoke(typeKey, it) },
ResourceKey.create(Registries.LEVEL_STEM, it),
climateParameterListBuilder
)
}

@Suppress("unused")
val BREAD = register("bread", { _, _ ->
DimensionType(
OptionalLong.empty(),
true,
false,
false,
true,
4.0,
true,
false,
-64, // minY TODO,
2048, // maxY TODO
2048,
BlockTags.INFINIBURN_OVERWORLD,
BuiltinDimensionTypes.NETHER_EFFECTS,
8F,
DimensionType.MonsterSettings(
false,
false,
ConstantInt.of(0),
0
)
)
}, { holderGetter ->
ParameterList(
listOf(
Pair.of(
Climate.parameters(
0.9F,
0.0f,
0.0F,
0.0f,
0.0f,
1.0F,
0.175F
), holderGetter.getOrThrow(ModBiomes.BREAD.first)
)
)
)
})

fun bootstrapDimensionTypes(ctx: BootstrapContext<DimensionType>) =
ModDimensionEntry.entries.forEach { ctx.register(it.dimensionType.first, it.dimensionType.second) }
fun bootstrapLevelStems(ctx: BootstrapContext<LevelStem>) {
val noiseSettings = ctx.lookup(Registries.NOISE_SETTINGS)
val mnbspList = ctx.lookup(Registries.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST)
val holderGetter = ctx.lookup(Registries.DIMENSION_TYPE)

val biomeGetter = ctx.lookup(Registries.BIOME)

ModDimensionEntry.entries.forEach {
ctx.register(it.levelStemKey, LevelStem(
holderGetter.getOrThrow(it.dimensionType.first),
NoiseBasedChunkGenerator(
it.climateParameterListBuilder.let { builder ->
if(builder != null) MultiNoiseBiomeSource.createFromList(builder(biomeGetter))
else MultiNoiseBiomeSource.createFromPreset(mnbspList.getOrThrow(MultiNoiseBiomeSourceParameterLists.OVERWORLD))
},
noiseSettings.getOrThrow(it.noiseSettings)
)
))
}
}

init { ModDimensionEntry.frozen = true }
}
1 change: 0 additions & 1 deletion src/main/kotlin/breadmod/mixin/MixinFireBlock.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package breadmod.mixin

import breadmod.registry.dimension.ModDimensions
import breadmod.block.SpecialFireAction
import net.minecraft.core.BlockPos
import net.minecraft.core.Direction
Expand Down
6 changes: 0 additions & 6 deletions src/main/kotlin/breadmod/registry/Registry.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package breadmod.registry
import breadmod.BreadMod.LOGGER
import breadmod.registry.block.ModBlockEntities
import breadmod.registry.block.ModBlocks
import breadmod.registry.dimension.ModDimensions
import breadmod.registry.entity.ModEntities
import breadmod.registry.entity.ModPainting
import breadmod.registry.item.ModItems
Expand All @@ -12,8 +11,6 @@ import breadmod.registry.recipe.ModRecipeTypes
import breadmod.registry.screen.ModCreativeTabs
import breadmod.registry.screen.ModMenuTypes
import breadmod.registry.sound.ModSounds
import net.minecraft.core.RegistrySetBuilder
import net.minecraft.core.registries.Registries
import net.minecraftforge.eventbus.api.IEventBus
import net.minecraftforge.fml.ModLoadingContext
import net.minecraftforge.fml.config.ModConfig
Expand All @@ -31,9 +28,6 @@ val registerList = setOf(
ModSounds.deferredRegister
)

val registrySet = RegistrySetBuilder()
.add(Registries.DIMENSION_TYPE, ModDimensions::bootstrap)

fun registerConfigs() = ModLoadingContext.get().let {
LOGGER.info("Registering configs")
it.registerConfig(ModConfig.Type.COMMON, ModConfiguration.COMMON_SPECIFICATION.right, "breadmod-common.toml")
Expand Down
72 changes: 0 additions & 72 deletions src/main/kotlin/breadmod/registry/dimension/ModDimensions.kt

This file was deleted.

Empty file.

0 comments on commit 8040ba9

Please sign in to comment.