get leaf particle type from rules

This commit is contained in:
octarine-noise
2021-07-26 22:43:35 +02:00
parent e689a44687
commit 31eddf682d
4 changed files with 23 additions and 10 deletions

View File

@@ -41,7 +41,7 @@ object StandardLeafDiscovery : ParametrizedModelDiscovery() {
detailLogger.logTextureColor(INFO, "leaf texture \"$texture\"", it) detailLogger.logTextureColor(INFO, "leaf texture \"$texture\"", it)
it.brighten().asColor it.brighten().asColor
} }
val leafType = LeafParticleRegistry.typeMappings.getType(texture) ?: "default" val leafType = params["particle"] ?: "default"
val generated = GeneratedLeafSprite(texture, leafType) val generated = GeneratedLeafSprite(texture, leafType)
.register(BetterFoliage.generatedPack) .register(BetterFoliage.generatedPack)
.apply { ctx.sprites.add(this) } .apply { ctx.sprites.add(this) }

View File

@@ -10,8 +10,10 @@ import mods.betterfoliage.util.HasLogger
import mods.betterfoliage.util.get import mods.betterfoliage.util.get
import mods.betterfoliage.util.getLines import mods.betterfoliage.util.getLines
import mods.betterfoliage.util.resourceManager import mods.betterfoliage.util.resourceManager
import mods.betterfoliage.util.stripEnd
import mods.betterfoliage.util.stripStart import mods.betterfoliage.util.stripStart
import net.minecraft.client.renderer.texture.MissingTextureSprite import net.minecraft.client.renderer.texture.MissingTextureSprite
import net.minecraft.resources.IResourceManager
import net.minecraft.util.ResourceLocation import net.minecraft.util.ResourceLocation
import net.minecraftforge.client.event.TextureStitchEvent import net.minecraftforge.client.event.TextureStitchEvent
import net.minecraftforge.eventbus.api.SubscribeEvent import net.minecraftforge.eventbus.api.SubscribeEvent
@@ -28,16 +30,18 @@ interface LeafParticleKey {
} }
object LeafParticleRegistry : HasLogger(), VeryEarlyReloadListener { object LeafParticleRegistry : HasLogger(), VeryEarlyReloadListener {
val typeMappings = TextureMatcher() val allTypes = mutableSetOf<String>()
val allTypes get() = (typeMappings.mappings.map { it.type } + "default").distinct()
val particles = hashMapOf<String, SpriteSet>() val particles = hashMapOf<String, SpriteSet>()
operator fun get(type: String) = particles[type] ?: particles["default"]!! operator fun get(type: String) = particles[type] ?: particles["default"]!!
override fun onReloadStarted() { override fun onReloadStarted(resourceManager: IResourceManager) {
typeMappings.loadMappings(ResourceLocation(BetterFoliageMod.MOD_ID, "leaf_texture_mappings.cfg")) allTypes.clear()
detailLogger.log(INFO, "Loaded leaf particle mappings, types = [${allTypes.joinToString(", ")}]") resourceManager.listResources("textures/particle") { it.startsWith("falling_leaf_") }
.filter { it.namespace == BetterFoliageMod.MOD_ID }
.map { it.stripStart("textures/particle/falling_leaf_").stripEnd(".png") }
.map { it.path.substringBefore("_", "") }
.forEach { leafType -> if (!leafType.isEmpty()) allTypes.add(leafType) }
} }
@SubscribeEvent @SubscribeEvent
@@ -57,7 +61,7 @@ object LeafParticleRegistry : HasLogger(), VeryEarlyReloadListener {
@SubscribeEvent @SubscribeEvent
fun handlePostStitch(event: TextureStitchEvent.Post) { fun handlePostStitch(event: TextureStitchEvent.Post) {
if (event.map.location() == Atlas.PARTICLES.resourceId) { if (event.map.location() == Atlas.PARTICLES.resourceId) {
(typeMappings.mappings.map { it.type } + "default").distinct().forEach { leafType -> allTypes.forEach { leafType ->
val sprites = (0 until 16).map { idx -> val sprites = (0 until 16).map { idx ->
ResourceLocation(BetterFoliageMod.MOD_ID, "particle/falling_leaf_${leafType}_$idx") ResourceLocation(BetterFoliageMod.MOD_ID, "particle/falling_leaf_${leafType}_$idx")
} }

View File

@@ -19,9 +19,9 @@ interface VeryEarlyReloadListener : IFutureReloadListener {
backgroundExecutor: Executor, backgroundExecutor: Executor,
gameExecutor: Executor gameExecutor: Executor
): CompletableFuture<Void> { ): CompletableFuture<Void> {
onReloadStarted() onReloadStarted(resourceManager)
return stage.wait(null) return stage.wait(null)
} }
fun onReloadStarted() {} fun onReloadStarted(resourceManager: IResourceManager) {}
} }

View File

@@ -0,0 +1,9 @@
match isParam("type", "leaf")
block.name.contains("spruce", "fir")
setParam("particle", "spruce")
end
match isParam("type", "leaf")
block.name.contains("jungle", "palm")
setParam("particle", "jungle")
end