Compare commits

...
Author SHA1 Message Date
apion 448605b273 Add custom foliage placer for apricorn trees 2024-05-23 09:51:25 -04:00
7 changed files with 103 additions and 0 deletions
@@ -188,6 +188,7 @@ object Cobblemon {
implementation.registerEntityAttributes()
implementation.registerBlockEntityTypes()
implementation.registerWorldGenFeatures()
implementation.registerFoliagePlacers()
implementation.registerParticles()
DropEntry.register("command", CommandDropEntry::class.java)
@@ -106,6 +106,8 @@ interface CobblemonImplementation {
*/
fun registerWorldGenFeatures()
fun registerFoliagePlacers()
fun registerParticles()
/**
@@ -0,0 +1,60 @@
package com.cobblemon.mod.common.world.foliage
import com.cobblemon.mod.common.util.cobblemonResource
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.util.math.intprovider.IntProvider
import net.minecraft.util.math.random.Random
import net.minecraft.world.TestableWorld
import net.minecraft.world.gen.feature.TreeFeatureConfig
import net.minecraft.world.gen.foliage.FoliagePlacer
class ApricornFoliagePlacer(
val radius: IntProvider,
val offset: IntProvider
) : FoliagePlacer(radius, offset) {
override fun getType() = CobblemonFoliagePlacers.APRICORN_FOLIAGE_PLACER_TYPE
override fun generate(
world: TestableWorld?,
placer: BlockPlacer?,
random: Random?,
config: TreeFeatureConfig?,
trunkHeight: Int,
treeNode: TreeNode?,
foliageHeight: Int,
radius: Int,
offset: Int
) {
println("Generating Apricorn Foliage")
}
override fun getRandomHeight(
random: Random?,
trunkHeight: Int,
config: TreeFeatureConfig?
): Int {
return 0
}
override fun isInvalidForLeaves(
random: Random?,
dx: Int,
y: Int,
dz: Int,
radius: Int,
giantTrunk: Boolean
): Boolean {
return false
}
companion object {
val CODEC = RecordCodecBuilder.mapCodec {
it.group(
IntProvider.createValidatingCodec(0, 16).fieldOf("radius").forGetter<ApricornFoliagePlacer> {it.radius},
IntProvider.createValidatingCodec(0, 16).fieldOf("offset").forGetter<ApricornFoliagePlacer> {it.offset}
).apply(it, ::ApricornFoliagePlacer)
}
val ID = cobblemonResource("apricorn_foliage_placer")
}
}
@@ -0,0 +1,21 @@
package com.cobblemon.mod.common.world.foliage
import com.cobblemon.mod.common.platform.PlatformRegistry
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
import net.minecraft.world.gen.foliage.FoliagePlacerType
/**
* Wow what a cool class
*
* @author Apion
* @since May 23, 2024
*/
object CobblemonFoliagePlacers : PlatformRegistry<Registry<FoliagePlacerType<*>>, RegistryKey<Registry<FoliagePlacerType<*>>>, FoliagePlacerType<*>>() {
val APRICORN_FOLIAGE_PLACER_TYPE = this.create("apricorn_foliage_placer", FoliagePlacerType(ApricornFoliagePlacer.CODEC.codec()))
override val registry = Registries.FOLIAGE_PLACER_TYPE
override val registryKey = RegistryKeys.FOLIAGE_PLACER_TYPE
}
@@ -98,4 +98,6 @@ transitive-accessible class net/minecraft/client/model/ModelPart$Quad
transitive-accessible method net/minecraft/entity/ai/brain/Activity <init> (Ljava/lang/String;)V
#accessible method net/minecraft/client/render/RenderLayer$MultiPhase (Ljava/lang/String;Lnet/minecraft/client/render/VertexFormat;Lnet/minecraft/client/render/VertexFormat$DrawMode;IZZLnet/minecraft/client/render/RenderLayer$MultiPhaseParameters;)Lnet/minecraft/client/render/RenderLayer$MultiPhase;
transitive-accessible method net/minecraft/world/gen/foliage/FoliagePlacerType <init> (Lcom/mojang/serialization/Codec;)V
#String name, VertexFormat vertexFormat, VertexFormat.DrawMode drawMode, int expectedBufferSize, boolean hasCrumbling, boolean translucent, MultiPhaseParameters phases
@@ -21,6 +21,7 @@ import com.cobblemon.mod.common.util.didSleep
import com.cobblemon.mod.common.util.endsWith
import com.cobblemon.mod.common.world.CobblemonStructures
import com.cobblemon.mod.common.world.feature.CobblemonFeatures
import com.cobblemon.mod.common.world.foliage.CobblemonFoliagePlacers
import com.cobblemon.mod.common.world.placementmodifier.CobblemonPlacementModifierTypes
import com.cobblemon.mod.common.world.predicate.CobblemonBlockPredicates
import com.cobblemon.mod.common.world.structureprocessors.CobblemonProcessorTypes
@@ -239,6 +240,10 @@ object CobblemonFabric : CobblemonImplementation {
CobblemonFeatures.register { identifier, feature -> Registry.register(CobblemonFeatures.registry, identifier, feature) }
}
override fun registerFoliagePlacers() {
CobblemonFoliagePlacers.register { identifier, foliagePlacerType -> Registry.register(CobblemonFoliagePlacers.registry, identifier, foliagePlacerType) }
}
override fun registerParticles() {
CobblemonParticles.register { identifier, particleType -> Registry.register(CobblemonParticles.registry, identifier, particleType) }
}
@@ -20,6 +20,7 @@ import com.cobblemon.mod.common.util.didSleep
import com.cobblemon.mod.common.util.endsWith
import com.cobblemon.mod.common.world.CobblemonStructures
import com.cobblemon.mod.common.world.feature.CobblemonFeatures
import com.cobblemon.mod.common.world.foliage.CobblemonFoliagePlacers
import com.cobblemon.mod.common.world.placementmodifier.CobblemonPlacementModifierTypes
import com.cobblemon.mod.common.world.predicate.CobblemonBlockPredicates
import com.cobblemon.mod.common.world.structureprocessors.CobblemonProcessorTypes
@@ -166,6 +167,7 @@ class CobblemonForge : CobblemonImplementation {
ForgeRegistries.ACTIVITIES.register(cobblemonResource(it.id), it)
}
}
}
fun onDataPackSync(event: OnDatapackSyncEvent) {
@@ -280,6 +282,16 @@ class CobblemonForge : CobblemonImplementation {
}
}
override fun registerFoliagePlacers() {
MOD_BUS.addListener<RegisterEvent> { event ->
event.register(RegistryKeys.FOLIAGE_PLACER_TYPE) {
CobblemonFoliagePlacers.register {id, entry ->
it.register(id, entry)
}
}
}
}
override fun addFeatureToWorldGen(feature: RegistryKey<PlacedFeature>, step: GenerationStep.Feature, validTag: TagKey<Biome>?) {
CobblemonBiomeModifiers.add(feature, step, validTag)
}