From 802862f15197c320ac1de4118500d907e03414d6 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Fri, 17 Jan 2020 17:33:32 +0100 Subject: [PATCH] [WIP] more fixes and final touch-up --- .../betterfoliage/mixin/MixinModelBakery.java | 12 +++++---- .../mixin/MixinParticleManager.java | 12 ++++++--- .../mods/betterfoliage/client/Client.kt | 8 +++--- .../betterfoliage/client/config/Config.kt | 5 +--- .../client/integration/ForestryIntegration.kt | 1 + .../client/integration/RubberIntegration.kt | 25 +++++++++++------- .../integration/ShadersModIntegration.kt | 2 +- .../client/render/RenderCoral.kt | 3 ++- .../client/render/RenderGrass.kt | 4 +-- .../client/render/RenderNetherrack.kt | 7 +++-- .../client/texture/LeafParticleRegistry.kt | 9 +++---- .../resource/AsyncSpriteProviderManager.kt | 26 ++++++++++++------- .../client/resource/ResourceHandler.kt | 8 +++--- .../assets/betterfoliage/cactus_default.cfg | 2 -- .../netherrack_blocks_default.cfg | 2 -- .../assets/betterfoliage/sand_default.cfg | 5 ---- 16 files changed, 70 insertions(+), 61 deletions(-) delete mode 100644 src/main/resources/assets/betterfoliage/cactus_default.cfg delete mode 100644 src/main/resources/assets/betterfoliage/netherrack_blocks_default.cfg delete mode 100644 src/main/resources/assets/betterfoliage/sand_default.cfg diff --git a/src/main/java/mods/betterfoliage/mixin/MixinModelBakery.java b/src/main/java/mods/betterfoliage/mixin/MixinModelBakery.java index 0388eb6..7baa4aa 100644 --- a/src/main/java/mods/betterfoliage/mixin/MixinModelBakery.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinModelBakery.java @@ -1,7 +1,6 @@ package mods.betterfoliage.mixin; import mods.betterfoliage.BetterFoliage; -import mods.octarinecore.client.resource.AsnycSpriteProviderManager; import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.texture.AtlasTexture; import net.minecraft.profiler.IProfiler; @@ -19,9 +18,12 @@ abstract public class MixinModelBakery { @Redirect(method = processLoading, at = @At(value = "INVOKE", target = stitch)) AtlasTexture.SheetData onStitchModelTextures(AtlasTexture atlas, IResourceManager manager, Iterable idList, IProfiler profiler) { - AsnycSpriteProviderManager.StitchWrapper wrapper = BetterFoliage.INSTANCE.getBlockSprites().prepare(this, atlas, manager, idList, profiler); - AtlasTexture.SheetData sheet = atlas.stitch(manager, wrapper.getIdList(), profiler); - wrapper.complete(sheet); - return sheet; + return BetterFoliage.INSTANCE.getBlockSprites().finish( + atlas.stitch( + manager, + BetterFoliage.INSTANCE.getBlockSprites().prepare(this, manager, idList, profiler), + profiler + ), profiler + ); } } diff --git a/src/main/java/mods/betterfoliage/mixin/MixinParticleManager.java b/src/main/java/mods/betterfoliage/mixin/MixinParticleManager.java index 7a536d5..6093067 100644 --- a/src/main/java/mods/betterfoliage/mixin/MixinParticleManager.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinParticleManager.java @@ -21,9 +21,13 @@ public class MixinParticleManager { @SuppressWarnings("UnresolvedMixinReference") @Redirect(method = "*", at = @At(value = "INVOKE", target = stitch)) AtlasTexture.SheetData onStitchModelTextures(AtlasTexture atlas, IResourceManager manager, Iterable idList, IProfiler profiler) { - AsnycSpriteProviderManager.StitchWrapper wrapper = BetterFoliage.INSTANCE.getParticleSprites().prepare(this, atlas, manager, idList, profiler); - AtlasTexture.SheetData sheet = atlas.stitch(manager, wrapper.getIdList(), profiler); - wrapper.complete(sheet); - return sheet; + return BetterFoliage.INSTANCE.getParticleSprites().finish( + atlas.stitch( + manager, + BetterFoliage.INSTANCE.getParticleSprites().prepare(this, manager, idList, profiler), + profiler + ), profiler + ); } + } diff --git a/src/main/kotlin/mods/betterfoliage/client/Client.kt b/src/main/kotlin/mods/betterfoliage/client/Client.kt index 432a3a1..b68deb2 100644 --- a/src/main/kotlin/mods/betterfoliage/client/Client.kt +++ b/src/main/kotlin/mods/betterfoliage/client/Client.kt @@ -57,10 +57,10 @@ object Client { // init mod integrations val integrations = listOf( ShadersModIntegration, - OptifineCustomColors, - ForestryIntegration, - IC2RubberIntegration, - TechRebornRubberIntegration + OptifineCustomColors +// ForestryIntegration, +// IC2RubberIntegration, +// TechRebornRubberIntegration ) LeafParticleRegistry.init() diff --git a/src/main/kotlin/mods/betterfoliage/client/config/Config.kt b/src/main/kotlin/mods/betterfoliage/client/config/Config.kt index 8aad302..8c9becc 100644 --- a/src/main/kotlin/mods/betterfoliage/client/config/Config.kt +++ b/src/main/kotlin/mods/betterfoliage/client/config/Config.kt @@ -120,7 +120,7 @@ object Config : DelegatingConfig(BetterFoliageMod.MOD_ID, BetterFoliageMod.MOD_I val windStrength by double(min=0.1, max=2.0, default=0.5) val stormStrength by double(min=0.1, max=2.0, default=0.8) val size by double(min=0.25, max=1.5, default=0.75).lang("size") - val chance by double(min=0.001, max=1.0, default=0.05) + val chance by double(min=0.001, max=1.0, default=0.02) val perturb by double(min=0.01, max=1.0, default=0.25) val lifetime by double(min=1.0, max=15.0, default=5.0) val opacityHack by boolean(true) @@ -153,10 +153,7 @@ object BlockConfig { val crops = blocks("crop_default.cfg") val logBlocks = blocks("log_blocks_default.cfg") val logModels = models("log_models_default.cfg") - val sand = blocks("sand_default.cfg") val lilypad = blocks("lilypad_default.cfg") - val cactus = blocks("cactus_default.cfg") - val netherrack = blocks("netherrack_blocks_default.cfg") init { BetterFoliageMod.bus.register(this) } private fun blocks(cfgName: String) = ConfigurableBlockMatcher(BetterFoliage.logDetail, ResourceLocation(BetterFoliageMod.MOD_ID, cfgName)).apply { list.add(this) } diff --git a/src/main/kotlin/mods/betterfoliage/client/integration/ForestryIntegration.kt b/src/main/kotlin/mods/betterfoliage/client/integration/ForestryIntegration.kt index bf06004..76c73cf 100644 --- a/src/main/kotlin/mods/betterfoliage/client/integration/ForestryIntegration.kt +++ b/src/main/kotlin/mods/betterfoliage/client/integration/ForestryIntegration.kt @@ -54,6 +54,7 @@ val ILeafSpriteProvider_getSprite = MethodRef(ILeafSpriteProvider, "getSprite", object ForestryIntegration { init { if (ModList.get().isLoaded("forestry") && allAvailable(TileLeaves_getLeaveSprite, IAlleleTreeSpecies_getLeafSpriteProvider, ILeafSpriteProvider_getSprite)) { + // Just keep it inactive for now until Forestry updates } } } diff --git a/src/main/kotlin/mods/betterfoliage/client/integration/RubberIntegration.kt b/src/main/kotlin/mods/betterfoliage/client/integration/RubberIntegration.kt index 87f1ffe..e2ea329 100644 --- a/src/main/kotlin/mods/betterfoliage/client/integration/RubberIntegration.kt +++ b/src/main/kotlin/mods/betterfoliage/client/integration/RubberIntegration.kt @@ -4,6 +4,7 @@ import mods.betterfoliage.BetterFoliage import mods.betterfoliage.client.render.LogRegistry import mods.betterfoliage.client.render.column.ColumnTextureInfo import mods.betterfoliage.client.render.column.SimpleColumnInfo +import mods.betterfoliage.client.resource.Sprite import mods.octarinecore.client.render.CombinedContext import mods.octarinecore.client.render.Quad import mods.octarinecore.client.render.lighting.QuadIconResolver @@ -12,7 +13,6 @@ import mods.octarinecore.common.rotate import mods.octarinecore.metaprog.ClassRef import mods.octarinecore.metaprog.allAvailable import net.minecraft.client.renderer.model.BlockModel -import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.util.Direction import net.minecraft.util.Direction.* import net.minecraft.util.ResourceLocation @@ -20,19 +20,23 @@ import net.minecraftforge.fml.ModList import org.apache.logging.log4j.Level import java.util.concurrent.CompletableFuture + object IC2RubberIntegration { val BlockRubWood = ClassRef("ic2.core.block.BlockRubWood") init { if (ModList.get().isLoaded("ic2") && allAvailable(BlockRubWood)) { - BetterFoliage.log(Level.INFO, "IC2 rubber support initialized") - LogRegistry.registries.add(IC2LogDiscovery) - BetterFoliage.blockSprites.providers.add(IC2LogDiscovery) + // keep it inactive for now until IC2 updates +// BetterFoliage.log(Level.INFO, "IC2 rubber support initialized") +// LogRegistry.registries.add(IC2LogDiscovery) +// BetterFoliage.blockSprites.providers.add(IC2LogDiscovery) } } } +// Probably unneeded, as TechReborn went Fabric-only +/* object TechRebornRubberIntegration { val BlockRubberLog = ClassRef("techreborn.blocks.BlockRubberLog") @@ -45,14 +49,15 @@ object TechRebornRubberIntegration { } } } + */ class RubberLogInfo( axis: Axis?, val spotDir: Direction, - topTexture: TextureAtlasSprite, - bottomTexture: TextureAtlasSprite, - val spotTexture: TextureAtlasSprite, - sideTextures: List + topTexture: Sprite, + bottomTexture: Sprite, + val spotTexture: Sprite, + sideTextures: List ) : SimpleColumnInfo(axis, topTexture, bottomTexture, sideTextures) { override val side: QuadIconResolver = { ctx: CombinedContext, idx: Int, quad: Quad -> @@ -116,6 +121,7 @@ object IC2LogDiscovery : ModelDiscovery() { } } +/* object TechRebornLogDiscovery : ModelDiscovery() { override val logger = BetterFoliage.logDetail @@ -152,4 +158,5 @@ object TechRebornLogDiscovery : ModelDiscovery() { } return null } -} \ No newline at end of file +} + */ diff --git a/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt b/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt index 53c7b35..0119521 100644 --- a/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt +++ b/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt @@ -26,7 +26,7 @@ object ShadersModIntegration { @JvmStatic val isAvailable = allAvailable(SVertexBuilder, SVertexBuilder.pushState, SVertexBuilder.pushNum, SVertexBuilder.pop) val defaultLeaves = Blocks.OAK_LEAVES.defaultState - val defaultGrass = Blocks.TALL_GRASS.defaultState + val defaultGrass = Blocks.GRASS.defaultState /** * Called from transformed ShadersMod code. diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt index c5e3276..f802e34 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt @@ -10,6 +10,7 @@ import mods.octarinecore.client.render.lighting.* import mods.octarinecore.common.allDirections import mods.octarinecore.random import net.minecraft.block.material.Material +import net.minecraft.tags.BlockTags import net.minecraft.util.Direction.Axis import net.minecraft.util.Direction.UP import net.minecraft.util.ResourceLocation @@ -41,7 +42,7 @@ class RenderCoral : RenderDecorator(BetterFoliageMod.MOD_ID, BetterFoliageMod.bu Config.enabled && Config.coral.enabled && (ctx.state(up2).material == Material.WATER || Config.coral.shallowWater) && ctx.state(up1).material == Material.WATER && - BlockConfig.sand.matchesClass(ctx.state.block) && + BlockTags.SAND.contains(ctx.state.block) && ctx.biome.category.let { it == Biome.Category.OCEAN || it == Biome.Category.BEACH } && noise[ctx.pos] < Config.coral.population diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt index bf7f529..5ca30c1 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt @@ -40,8 +40,8 @@ class RenderGrass : RenderDecorator(BetterFoliageMod.MOD_ID, BetterFoliageMod.bu val normalIcons = spriteSet { idx -> Identifier(BetterFoliageMod.MOD_ID, "blocks/better_grass_long_$idx") } val snowedIcons = spriteSet { idx -> Identifier(BetterFoliageMod.MOD_ID, "blocks/better_grass_snowed_$idx") } - val normalGenIcon by sprite { GeneratedGrass(sprite = "minecraft:blocks/tallgrass", isSnowed = false).register(BetterFoliage.asyncPack) } - val snowedGenIcon by sprite { GeneratedGrass(sprite = "minecraft:blocks/tallgrass", isSnowed = true).register(BetterFoliage.asyncPack) } + val normalGenIcon by sprite { GeneratedGrass(sprite = "minecraft:blocks/tall_grass_top", isSnowed = false).register(BetterFoliage.asyncPack) } + val snowedGenIcon by sprite { GeneratedGrass(sprite = "minecraft:blocks/tall_grass_top", isSnowed = true).register(BetterFoliage.asyncPack) } val grassModels = modelSet(64) { idx -> grassTopQuads(Config.shortGrass.heightMin, Config.shortGrass.heightMax)(idx) } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt index 6c8e314..bdcd47c 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt @@ -9,6 +9,7 @@ import mods.betterfoliage.client.resource.Identifier import mods.octarinecore.client.render.* import mods.octarinecore.client.render.lighting.* import mods.octarinecore.random +import net.minecraft.block.Blocks import net.minecraft.util.Direction.Axis import net.minecraft.util.Direction.* import org.apache.logging.log4j.Level.DEBUG @@ -25,10 +26,8 @@ class RenderNetherrack : RenderDecorator(BetterFoliageMod.MOD_ID, BetterFoliageM } - override fun isEligible(ctx: CombinedContext): Boolean { - if (!Config.enabled || !Config.netherrack.enabled) return false - return BlockConfig.netherrack.matchesClass(ctx.state.block) - } + override fun isEligible(ctx: CombinedContext) = + Config.enabled && Config.netherrack.enabled && ctx.state.block == Blocks.NETHERRACK override fun render(ctx: CombinedContext) { ctx.render() diff --git a/src/main/kotlin/mods/betterfoliage/client/texture/LeafParticleRegistry.kt b/src/main/kotlin/mods/betterfoliage/client/texture/LeafParticleRegistry.kt index 884802a..88be6fb 100644 --- a/src/main/kotlin/mods/betterfoliage/client/texture/LeafParticleRegistry.kt +++ b/src/main/kotlin/mods/betterfoliage/client/texture/LeafParticleRegistry.kt @@ -10,7 +10,6 @@ import mods.octarinecore.client.resource.Atlas import mods.octarinecore.common.sinkAsync import net.minecraft.client.particle.ParticleManager import net.minecraft.resources.IResourceManager -import net.minecraft.util.ResourceLocation import java.util.concurrent.CompletableFuture class FixedSpriteSet(val sprites: List) : SpriteSet { @@ -58,7 +57,7 @@ object LeafParticleRegistry : AsyncSpriteProvider { class TextureMatcher { data class Mapping(val domain: String?, val path: String, val type: String) { - fun matches(iconLocation: ResourceLocation): Boolean { + fun matches(iconLocation: Identifier): Boolean { return (domain == null || domain == iconLocation.namespace) && iconLocation.path.stripStart("blocks/").contains(path, ignoreCase = true) } @@ -66,10 +65,10 @@ class TextureMatcher { val mappings: MutableList = mutableListOf() - fun getType(resource: ResourceLocation) = mappings.filter { it.matches(resource) }.map { it.type }.firstOrNull() - fun getType(iconName: String) = ResourceLocation(iconName).let { getType(it) } + fun getType(resource: Identifier) = mappings.filter { it.matches(resource) }.map { it.type }.firstOrNull() + fun getType(iconName: String) = Identifier(iconName).let { getType(it) } - fun loadMappings(mappingLocation: ResourceLocation) { + fun loadMappings(mappingLocation: Identifier) { mappings.clear() resourceManager[mappingLocation]?.getLines()?.let { lines -> lines.filter { !it.startsWith("//") }.filter { !it.isEmpty() }.forEach { line -> diff --git a/src/main/kotlin/mods/octarinecore/client/resource/AsyncSpriteProviderManager.kt b/src/main/kotlin/mods/octarinecore/client/resource/AsyncSpriteProviderManager.kt index 9f920ef..9cc334a 100644 --- a/src/main/kotlin/mods/octarinecore/client/resource/AsyncSpriteProviderManager.kt +++ b/src/main/kotlin/mods/octarinecore/client/resource/AsyncSpriteProviderManager.kt @@ -34,22 +34,30 @@ class AsnycSpriteProviderManager(val profilerSection: String) { fun complete(sheet: AtlasTexture.SheetData) = onComplete(sheet) } + var currentAtlas: AtlasFuture? = null + var currentPhases: List = emptyList() + @Suppress("UNCHECKED_CAST") - fun prepare(sourceObj: Any, atlas: AtlasTexture, manager: IResourceManager, idList: Iterable, profiler: IProfiler): StitchWrapper { + fun prepare(sourceObj: Any, manager: IResourceManager, idList: Iterable, profiler: IProfiler): Set { profiler.startSection(profilerSection) val source = CompletableFuture() - val atlasFuture = AtlasFuture(idList) + currentAtlas = AtlasFuture(idList) - val phases = providers.map { it.setup(manager, source, atlasFuture) } + currentPhases = providers.map { it.setup(manager, source, currentAtlas!!) } source.complete(sourceObj as SOURCE) - phases.forEach { it.discovery.get() } + currentPhases.forEach { it.discovery.get() } - return StitchWrapper(atlasFuture.idSet) { sheet -> - atlasFuture.complete(sheet) - phases.forEach { it.cleanup.get() } - profiler.endSection() - } + return currentAtlas!!.idSet + } + + fun finish(sheetData: AtlasTexture.SheetData, profiler: IProfiler): AtlasTexture.SheetData { + currentAtlas!!.complete(sheetData) + currentPhases.forEach { it.cleanup.get() } + currentAtlas = null + currentPhases = emptyList() + profiler.endSection() + return sheetData } } diff --git a/src/main/kotlin/mods/octarinecore/client/resource/ResourceHandler.kt b/src/main/kotlin/mods/octarinecore/client/resource/ResourceHandler.kt index 5ecb390..ec1d12a 100644 --- a/src/main/kotlin/mods/octarinecore/client/resource/ResourceHandler.kt +++ b/src/main/kotlin/mods/octarinecore/client/resource/ResourceHandler.kt @@ -64,9 +64,9 @@ open class ResourceHandler( // ============================ fun sprite(id: Identifier) = sprite { id } fun sprite(idFunc: ()->Identifier) = AsyncSpriteDelegate(idFunc).apply { BetterFoliage.getSpriteManager(targetAtlas).providers.add(this) } - fun spriteSet(idFunc: (Int)->Identifier) = AsyncSpriteSet(idFunc).apply { BetterFoliage.getSpriteManager(targetAtlas).providers.add(this) } + fun spriteSet(idFunc: (Int)->Identifier) = AsyncSpriteSet(targetAtlas, idFunc).apply { BetterFoliage.getSpriteManager(targetAtlas).providers.add(this) } fun spriteSetTransformed(check: (Int)->Identifier, register: (Identifier)->Identifier) = - AsyncSpriteSet(check, register).apply { BetterFoliage.getSpriteManager(targetAtlas).providers.add(this) } + AsyncSpriteSet(targetAtlas, check, register).apply { BetterFoliage.getSpriteManager(targetAtlas).providers.add(this) } fun model(init: Model.()->Unit) = ModelHolder(init).apply { resources.add(this) } fun modelSet(num: Int, init: Model.(Int)->Unit) = ModelSet(num, init).apply { resources.add(this) } fun vectorSet(num: Int, init: (Int)-> Double3) = VectorSet(num, init).apply { resources.add(this) } @@ -108,7 +108,7 @@ interface SpriteSet { operator fun get(idx: Int): Sprite } -class AsyncSpriteSet(val idFunc: (Int)->Identifier, val transform: (Identifier)->Identifier = { it }) : AsyncSpriteProvider { +class AsyncSpriteSet(val targetAtlas: Atlas = Atlas.BLOCKS, val idFunc: (Int)->Identifier, val transform: (Identifier)->Identifier = { it }) : AsyncSpriteProvider { var num = 0 protected set protected var sprites: List = emptyList() @@ -119,7 +119,7 @@ class AsyncSpriteSet(val idFunc: (Int)->Identifier, val transform: (Identifier)- return StitchPhases( discovery = sourceF.sink { list = (0 until 16).map { idFunc(it) } - .filter { manager.hasResource( Atlas.BLOCKS.wrap(it)) } + .filter { manager.hasResource( targetAtlas.wrap(it)) } .map { transform(it) } .map { atlas.sprite(it) } }, diff --git a/src/main/resources/assets/betterfoliage/cactus_default.cfg b/src/main/resources/assets/betterfoliage/cactus_default.cfg deleted file mode 100644 index 33675c2..0000000 --- a/src/main/resources/assets/betterfoliage/cactus_default.cfg +++ /dev/null @@ -1,2 +0,0 @@ -// Vanilla -net.minecraft.block.CactusBlock diff --git a/src/main/resources/assets/betterfoliage/netherrack_blocks_default.cfg b/src/main/resources/assets/betterfoliage/netherrack_blocks_default.cfg deleted file mode 100644 index 7ff4300..0000000 --- a/src/main/resources/assets/betterfoliage/netherrack_blocks_default.cfg +++ /dev/null @@ -1,2 +0,0 @@ -// Vanilla -net.minecraft.block.NetherrackBlock diff --git a/src/main/resources/assets/betterfoliage/sand_default.cfg b/src/main/resources/assets/betterfoliage/sand_default.cfg deleted file mode 100644 index a1330e8..0000000 --- a/src/main/resources/assets/betterfoliage/sand_default.cfg +++ /dev/null @@ -1,5 +0,0 @@ -// Vanilla -net.minecraft.block.BlockSand - -// TerraFirmaCraft -com.bioxx.tfc.Blocks.Terrain.BlockSand \ No newline at end of file