diff --git a/build.gradle.kts b/build.gradle.kts index 1bdd0ab..c4ce310 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,29 +8,28 @@ plugins { } apply(plugin = "org.ajoberstar.grgit") +val gitHash = (project.ext.get("grgit") as Grgit).head().abbreviatedId +val semVer = "${project.version}+$gitHash" +val jarName = "BetterFoliage-$semVer-Fabric-${properties["mcVersion"]}" + repositories { maven("http://maven.fabricmc.net/") maven("https://minecraft.curseforge.com/api/maven") - maven("http://maven.sargunv.s3-website-us-west-2.amazonaws.com/") maven("http://maven.modmuss50.me/") maven("https://grondag-repo.appspot.com").credentials { username = "guest"; password = "" } maven("https://jitpack.io") } -val gitHash = (project.ext.get("grgit") as Grgit).head().abbreviatedId - -val semVer = "${project.version}+$gitHash" - -val jarName = "BetterFoliage-$semVer-Fabric-${properties["mcVersion"]}" -print("VERSION: $jarName") dependencies { "minecraft"("com.mojang:minecraft:${properties["mcVersion"]}") "mappings"("net.fabricmc:yarn:${properties["yarnMappings"]}:v2") + // basic Fabric stuff "modImplementation"("net.fabricmc:fabric-loader:${properties["loaderVersion"]}") "modImplementation"("net.fabricmc.fabric-api:fabric-api:${properties["fabricVersion"]}") "modImplementation"("net.fabricmc:fabric-language-kotlin:${properties["fabricKotlinVersion"]}") + // configuration handling "modImplementation"("io.github.prospector:modmenu:${properties["modMenuVersion"]}") listOf("modImplementation", "include").forEach { configuration -> configuration("me.shedaniel.cloth:config-2:${properties["clothConfigVersion"]}") @@ -47,11 +46,6 @@ dependencies { sourceSets { get("main").ext["refMap"] = "betterfoliage.refmap.json" - get("main").resources.srcDir("src/forge/resources") - get("main").java.srcDir("src/forge/java") -} -kotlin.sourceSets { - get("main").kotlin.srcDir("src/forge/kotlin") } java { @@ -60,7 +54,6 @@ java { } kotlin { - target.platformType target.compilations.configureEach { kotlinOptions.jvmTarget = "1.8" kotlinOptions.freeCompilerArgs += listOf("-Xno-param-assertions", "-Xno-call-assertions") @@ -73,5 +66,4 @@ tasks.getByName("processResources") { tasks.getByName("remapJar") { archiveName = "$jarName.jar" - exclude("net") } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 4468a61..6b77f14 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,5 @@ kotlinVersion=1.3.60 fabricKotlinVersion=1.3.60+build.1 clothConfigVersion=1.8 -autoConfigVersion=1.2.0+mc1.14.4 - modMenuVersion=1.7.6+build.115 fiberVersion=0.8.0-2 \ No newline at end of file diff --git a/src/main/java/mods/betterfoliage/mixin/MixinModelLoader.java b/src/main/java/mods/betterfoliage/mixin/MixinModelLoader.java index b75f960..f96a954 100644 --- a/src/main/java/mods/betterfoliage/mixin/MixinModelLoader.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinModelLoader.java @@ -20,8 +20,9 @@ public class MixinModelLoader { @Inject(at = @At("HEAD"), method = "addModel") private void addModelHook(ModelIdentifier id, CallbackInfo info) { + // use the same trick fabric-api does to get around the no-mixins-in-constructors policy if (id == MISSING) { - ModelLoadingCallback.EVENT.invoker().beginLoadModels((ModelLoader) (Object)this, resourceManager); + ModelLoadingCallback.EVENT.invoker().beginLoadModels((ModelLoader) (Object) this, resourceManager); } } } diff --git a/src/main/kotlin/mods/betterfoliage/Events.kt b/src/main/kotlin/mods/betterfoliage/Events.kt index d13a212..1d47131 100644 --- a/src/main/kotlin/mods/betterfoliage/Events.kt +++ b/src/main/kotlin/mods/betterfoliage/Events.kt @@ -34,6 +34,9 @@ interface ClientWorldLoadCallback { } } +/** + * Event fired after [BlockModels.reload] finishes. + */ interface BlockModelsReloadCallback { fun reloadBlockModels(blockModels: BlockModels) diff --git a/src/main/kotlin/mods/betterfoliage/resource/discovery/BakedModelReplacer.kt b/src/main/kotlin/mods/betterfoliage/resource/discovery/BakedModelReplacer.kt index eaf2155..e924a07 100644 --- a/src/main/kotlin/mods/betterfoliage/resource/discovery/BakedModelReplacer.kt +++ b/src/main/kotlin/mods/betterfoliage/resource/discovery/BakedModelReplacer.kt @@ -25,17 +25,10 @@ import java.util.function.Supplier // net.minecraft.client.render.block.BlockModels.models val BlockModels_models = YarnHelper.requiredField>("net.minecraft.class_773", "field_4162", "Ljava/util/Map;") -/** Threadsafe collector for sprite IDs */ -class SpriteCollectorSync { - val idSet = Collections.synchronizedSet(mutableSetOf()) - fun add(id: Identifier) = id.apply { idSet.add(this) } - fun dump(target: ClientSpriteRegistryCallback.Registry) { idSet.forEach { target.register(it) } } -} - class BakedModelReplacer : ModelLoadingCallback, ClientSpriteRegistryCallback, BlockModelsReloadCallback, Invalidator, HasLogger { override val logger get() = BetterFoliage.logDetail - val discoverers = mutableListOf() + val discoverers = mutableListOf() override val callbacks = mutableListOfUnit>>() protected var keys = emptyMap() @@ -46,6 +39,7 @@ class BakedModelReplacer : ModelLoadingCallback, ClientSpriteRegistryCallback, B var currentLoader: ModelLoader? = null override fun beginLoadModels(loader: ModelLoader, manager: ResourceManager) { + // Step 1: get a hold of the ModelLoader instance when model reloading starts currentLoader = loader log("reloading block discovery configuration") BetterFoliage.blockConfig.reloadConfig(manager) @@ -53,6 +47,7 @@ class BakedModelReplacer : ModelLoadingCallback, ClientSpriteRegistryCallback, B } override fun registerSprites(atlasTexture: SpriteAtlasTexture, registry: ClientSpriteRegistryCallback.Registry) { + // Step 2: ModelLoader is finished with the unbaked models by now, we can inspect them log("discovering blocks") val idSet = Collections.synchronizedSet(mutableSetOf()) val allKeys = discoverers.map { @@ -77,6 +72,7 @@ class BakedModelReplacer : ModelLoadingCallback, ClientSpriteRegistryCallback, B } override fun reloadBlockModels(blockModels: BlockModels) { + // Step 3: replace the baked models with our own log("block model baking finished") val modelMap = blockModels[BlockModels_models] as MutableMap keys.forEach { (state, key) -> diff --git a/src/main/kotlin/mods/betterfoliage/util/Winding.kt b/src/main/kotlin/mods/betterfoliage/util/Winding.kt index 612054f..d5407a4 100644 --- a/src/main/kotlin/mods/betterfoliage/util/Winding.kt +++ b/src/main/kotlin/mods/betterfoliage/util/Winding.kt @@ -33,7 +33,7 @@ val aoWinding = allDirections.map { when(it) { SOUTH -> (UP to WEST).ccwWinding() WEST -> (SOUTH to UP).ccwWinding() EAST -> (SOUTH to DOWN).ccwWinding() -} } +} }.toTypedArray() /** * Indexing for undirected box corners (component order does not matter).