From 31eddf682d1968794fe47405ed02e25f3133af25 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Mon, 26 Jul 2021 22:43:35 +0200 Subject: [PATCH] get leaf particle type from rules --- .../betterfoliage/render/block/vanilla/Leaf.kt | 2 +- .../render/particle/LeafParticleRegistry.kt | 18 +++++++++++------- .../resource/VeryEarlyReloadListener.kt | 4 ++-- .../config/betterfoliage/leaf-particles.rules | 9 +++++++++ 4 files changed, 23 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/assets/betterfoliage/config/betterfoliage/leaf-particles.rules diff --git a/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Leaf.kt b/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Leaf.kt index 90c6086..f23fa3c 100644 --- a/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Leaf.kt +++ b/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Leaf.kt @@ -41,7 +41,7 @@ object StandardLeafDiscovery : ParametrizedModelDiscovery() { detailLogger.logTextureColor(INFO, "leaf texture \"$texture\"", it) it.brighten().asColor } - val leafType = LeafParticleRegistry.typeMappings.getType(texture) ?: "default" + val leafType = params["particle"] ?: "default" val generated = GeneratedLeafSprite(texture, leafType) .register(BetterFoliage.generatedPack) .apply { ctx.sprites.add(this) } diff --git a/src/main/kotlin/mods/betterfoliage/render/particle/LeafParticleRegistry.kt b/src/main/kotlin/mods/betterfoliage/render/particle/LeafParticleRegistry.kt index 0db5bed..7227cc0 100644 --- a/src/main/kotlin/mods/betterfoliage/render/particle/LeafParticleRegistry.kt +++ b/src/main/kotlin/mods/betterfoliage/render/particle/LeafParticleRegistry.kt @@ -10,8 +10,10 @@ import mods.betterfoliage.util.HasLogger import mods.betterfoliage.util.get import mods.betterfoliage.util.getLines import mods.betterfoliage.util.resourceManager +import mods.betterfoliage.util.stripEnd import mods.betterfoliage.util.stripStart import net.minecraft.client.renderer.texture.MissingTextureSprite +import net.minecraft.resources.IResourceManager import net.minecraft.util.ResourceLocation import net.minecraftforge.client.event.TextureStitchEvent import net.minecraftforge.eventbus.api.SubscribeEvent @@ -28,16 +30,18 @@ interface LeafParticleKey { } object LeafParticleRegistry : HasLogger(), VeryEarlyReloadListener { - val typeMappings = TextureMatcher() - val allTypes get() = (typeMappings.mappings.map { it.type } + "default").distinct() - + val allTypes = mutableSetOf() val particles = hashMapOf() operator fun get(type: String) = particles[type] ?: particles["default"]!! - override fun onReloadStarted() { - typeMappings.loadMappings(ResourceLocation(BetterFoliageMod.MOD_ID, "leaf_texture_mappings.cfg")) - detailLogger.log(INFO, "Loaded leaf particle mappings, types = [${allTypes.joinToString(", ")}]") + override fun onReloadStarted(resourceManager: IResourceManager) { + allTypes.clear() + 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 @@ -57,7 +61,7 @@ object LeafParticleRegistry : HasLogger(), VeryEarlyReloadListener { @SubscribeEvent fun handlePostStitch(event: TextureStitchEvent.Post) { 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 -> ResourceLocation(BetterFoliageMod.MOD_ID, "particle/falling_leaf_${leafType}_$idx") } diff --git a/src/main/kotlin/mods/betterfoliage/resource/VeryEarlyReloadListener.kt b/src/main/kotlin/mods/betterfoliage/resource/VeryEarlyReloadListener.kt index 67f9135..7b9b938 100644 --- a/src/main/kotlin/mods/betterfoliage/resource/VeryEarlyReloadListener.kt +++ b/src/main/kotlin/mods/betterfoliage/resource/VeryEarlyReloadListener.kt @@ -19,9 +19,9 @@ interface VeryEarlyReloadListener : IFutureReloadListener { backgroundExecutor: Executor, gameExecutor: Executor ): CompletableFuture { - onReloadStarted() + onReloadStarted(resourceManager) return stage.wait(null) } - fun onReloadStarted() {} + fun onReloadStarted(resourceManager: IResourceManager) {} } \ No newline at end of file diff --git a/src/main/resources/assets/betterfoliage/config/betterfoliage/leaf-particles.rules b/src/main/resources/assets/betterfoliage/config/betterfoliage/leaf-particles.rules new file mode 100644 index 0000000..583aa53 --- /dev/null +++ b/src/main/resources/assets/betterfoliage/config/betterfoliage/leaf-particles.rules @@ -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 \ No newline at end of file