From bf7795df22ca7892fae1238403feebb57c005562 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Sat, 7 Dec 2024 13:26:03 +0100 Subject: WIP: Port to compilation on 1.21.4 --- build.gradle.kts | 22 +- buildSrc/build.gradle.kts | 2 +- gradle/libs.versions.toml | 27 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../moe/nea/firmament/javaplugin/InitReplacer.java | 8 + .../javaplugin/IntermediaryMethodReplacer.java | 7 +- .../moe/nea/firmament/javaplugin/MappingTree.java | 69 ++--- .../java/moe/nea/firmament/javaplugin/Utils.java | 2 +- .../java/moe/nea/firmament/init/EarlyRiser.java | 2 +- .../moe/nea/firmament/init/HandledScreenRiser.java | 1 - .../nea/firmament/init/ItemColorsSodiumRiser.java | 64 ----- .../firmament/mixins/CustomModelEventPatch.java | 36 --- .../firmament/mixins/CustomSkullTexturePatch.java | 21 -- .../mixins/IncomingPacketListenerPatches.java | 3 +- .../mixins/ReplaceTextColorInHandledScreen.java | 48 ---- .../custommodels/ApplyHeadModelInItemRenderer.java | 35 --- .../custommodels/BakedModelDataHolderBasic.java | 42 --- .../custommodels/BakedModelDataHolderBuiltin.java | 43 --- .../custommodels/BakedOverrideDataHolder.java | 28 -- .../custommodels/HeadModelReplacerPatch.java | 57 ---- .../mixins/custommodels/ItemColorRemovalPatch.java | 39 --- .../ItemModelGeneratorJsonUnbakedModelCopy.java | 22 -- .../custommodels/ItemRendererTintContextPatch.java | 35 --- .../custommodels/JsonUnbakedModelDataHolder.java | 130 --------- .../custommodels/ModelOverrideDataHolder.java | 28 -- .../mixins/custommodels/PatchArmorTexture.java | 29 -- .../PatchJsonUnbakedModelDeserializer.java | 31 --- .../custommodels/PatchLegacyArmorLayerSupport.java | 22 -- .../custommodels/PatchOverrideDeserializer.java | 50 ---- .../ProvideBakerToJsonUnbakedModelPatch.java | 27 -- .../custommodels/ReferenceCustomModelsPatch.java | 36 --- .../custommodels/ReplaceBlockBreakSoundPatch.java | 27 -- .../custommodels/ReplaceBlockHitSoundPatch.java | 30 -- .../ReplaceBlockRenderManagerBlockModel.java | 38 --- .../custommodels/ReplaceFallbackBlockModel.java | 21 -- .../TestForFirmamentOverridePredicatesPatch.java | 68 ----- src/main/kotlin/events/BakeExtraModelsEvent.kt | 13 +- src/main/kotlin/events/CustomItemModelEvent.kt | 31 +-- src/main/kotlin/features/FeatureManager.kt | 2 - src/main/kotlin/features/chat/ChatLinks.kt | 239 ++++++++-------- src/main/kotlin/features/debug/PowerUserTools.kt | 11 +- .../kotlin/features/texturepack/BakedModelExtra.kt | 30 -- .../features/texturepack/BakedOverrideData.kt | 14 - .../features/texturepack/CustomBlockTextures.kt | 301 --------------------- .../texturepack/CustomGlobalArmorOverrides.kt | 155 ----------- .../features/texturepack/CustomGlobalTextures.kt | 164 ----------- .../texturepack/CustomModelOverrideParser.kt | 82 ------ .../features/texturepack/CustomSkyBlockTextures.kt | 135 --------- .../features/texturepack/CustomTextColors.kt | 66 ----- .../texturepack/FirmamentModelPredicate.kt | 8 - .../texturepack/FirmamentModelPredicateParser.kt | 8 - .../texturepack/JsonUnbakedModelFirmExtra.kt | 16 -- .../features/texturepack/ModelOverrideData.kt | 15 - .../kotlin/features/texturepack/RarityMatcher.kt | 69 ----- .../kotlin/features/texturepack/StringMatcher.kt | 159 ----------- .../kotlin/features/texturepack/TintOverrides.kt | 75 ----- .../texturepack/predicates/AlwaysPredicate.kt | 19 -- .../texturepack/predicates/AndPredicate.kt | 28 -- .../texturepack/predicates/DisplayNamePredicate.kt | 22 -- .../predicates/ExtraAttributesPredicate.kt | 271 ------------------- .../texturepack/predicates/ItemPredicate.kt | 34 --- .../texturepack/predicates/LorePredicate.kt | 22 -- .../texturepack/predicates/NotPredicate.kt | 21 -- .../texturepack/predicates/NumberMatcher.kt | 124 --------- .../features/texturepack/predicates/OrPredicate.kt | 29 -- .../texturepack/predicates/PetPredicate.kt | 66 ----- src/main/kotlin/gui/entity/FakeWorld.kt | 5 + src/main/kotlin/repo/RepoModResourcePack.kt | 156 +++++------ src/main/resources/firmament.accesswidener | 19 -- .../features/texturepack/CustomBlockTextures.kt | 301 +++++++++++++++++++++ .../texturepack/CustomGlobalArmorOverrides.kt | 171 ++++++++++++ .../features/texturepack/CustomGlobalTextures.kt | 154 +++++++++++ .../texturepack/CustomModelOverrideParser.kt | 103 +++++++ .../features/texturepack/CustomSkyBlockTextures.kt | 117 ++++++++ .../features/texturepack/CustomTextColors.kt | 66 +++++ .../texturepack/FirmamentModelPredicate.kt | 8 + .../texturepack/FirmamentModelPredicateParser.kt | 8 + .../FirmamentRootPredicateSerializer.kt | 23 ++ .../features/texturepack/PredicateModel.kt | 85 ++++++ .../features/texturepack/RarityMatcher.kt | 69 +++++ .../features/texturepack/StringMatcher.kt | 159 +++++++++++ .../features/texturepack/TintOverrides.kt | 75 +++++ .../texturepack/predicates/AlwaysPredicate.kt | 19 ++ .../texturepack/predicates/AndPredicate.kt | 28 ++ .../texturepack/predicates/DisplayNamePredicate.kt | 22 ++ .../predicates/ExtraAttributesPredicate.kt | 271 +++++++++++++++++++ .../texturepack/predicates/ItemPredicate.kt | 34 +++ .../texturepack/predicates/LorePredicate.kt | 22 ++ .../texturepack/predicates/NotPredicate.kt | 21 ++ .../texturepack/predicates/NumberMatcher.kt | 124 +++++++++ .../features/texturepack/predicates/OrPredicate.kt | 29 ++ .../texturepack/predicates/PetPredicate.kt | 66 +++++ .../custommodels/ApplyHeadModelInItemRenderer.java | 11 + .../custommodels/CustomSkullTexturePatch.java | 26 ++ .../mixins/custommodels/PatchArmorTexture.java | 30 ++ .../custommodels/PatchLegacyArmorLayerSupport.java | 23 ++ .../custommodels/ReferenceCustomModelsPatch.java | 31 +++ .../custommodels/ReplaceBlockBreakSoundPatch.java | 27 ++ .../custommodels/ReplaceBlockHitSoundPatch.java | 30 ++ .../ReplaceBlockRenderManagerBlockModel.java | 38 +++ .../custommodels/ReplaceFallbackBlockModel.java | 21 ++ .../mixins/custommodels/ReplaceItemModelPatch.java | 24 ++ .../ReplaceTextColorInHandledScreen.java | 48 ++++ .../kotlin/process/SubscribeAnnotationProcessor.kt | 1 + 104 files changed, 2590 insertions(+), 3256 deletions(-) delete mode 100644 src/main/java/moe/nea/firmament/init/ItemColorsSodiumRiser.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/CustomModelEventPatch.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/CustomSkullTexturePatch.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/ReplaceTextColorInHandledScreen.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ApplyHeadModelInItemRenderer.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/BakedModelDataHolderBasic.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/BakedModelDataHolderBuiltin.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/BakedOverrideDataHolder.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/HeadModelReplacerPatch.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ItemColorRemovalPatch.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ItemModelGeneratorJsonUnbakedModelCopy.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ItemRendererTintContextPatch.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/JsonUnbakedModelDataHolder.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ModelOverrideDataHolder.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/PatchArmorTexture.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/PatchJsonUnbakedModelDeserializer.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/PatchLegacyArmorLayerSupport.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/PatchOverrideDeserializer.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ProvideBakerToJsonUnbakedModelPatch.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ReferenceCustomModelsPatch.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ReplaceBlockBreakSoundPatch.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ReplaceBlockHitSoundPatch.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ReplaceBlockRenderManagerBlockModel.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/ReplaceFallbackBlockModel.java delete mode 100644 src/main/java/moe/nea/firmament/mixins/custommodels/TestForFirmamentOverridePredicatesPatch.java delete mode 100644 src/main/kotlin/features/texturepack/BakedModelExtra.kt delete mode 100644 src/main/kotlin/features/texturepack/BakedOverrideData.kt delete mode 100644 src/main/kotlin/features/texturepack/CustomBlockTextures.kt delete mode 100644 src/main/kotlin/features/texturepack/CustomGlobalArmorOverrides.kt delete mode 100644 src/main/kotlin/features/texturepack/CustomGlobalTextures.kt delete mode 100644 src/main/kotlin/features/texturepack/CustomModelOverrideParser.kt delete mode 100644 src/main/kotlin/features/texturepack/CustomSkyBlockTextures.kt delete mode 100644 src/main/kotlin/features/texturepack/CustomTextColors.kt delete mode 100644 src/main/kotlin/features/texturepack/FirmamentModelPredicate.kt delete mode 100644 src/main/kotlin/features/texturepack/FirmamentModelPredicateParser.kt delete mode 100644 src/main/kotlin/features/texturepack/JsonUnbakedModelFirmExtra.kt delete mode 100644 src/main/kotlin/features/texturepack/ModelOverrideData.kt delete mode 100644 src/main/kotlin/features/texturepack/RarityMatcher.kt delete mode 100644 src/main/kotlin/features/texturepack/StringMatcher.kt delete mode 100644 src/main/kotlin/features/texturepack/TintOverrides.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/AlwaysPredicate.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/AndPredicate.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/DisplayNamePredicate.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/ExtraAttributesPredicate.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/ItemPredicate.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/LorePredicate.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/NotPredicate.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/NumberMatcher.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/OrPredicate.kt delete mode 100644 src/main/kotlin/features/texturepack/predicates/PetPredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTextures.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomGlobalArmorOverrides.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomGlobalTextures.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomModelOverrideParser.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomSkyBlockTextures.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomTextColors.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/FirmamentModelPredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/FirmamentModelPredicateParser.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/FirmamentRootPredicateSerializer.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/PredicateModel.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/RarityMatcher.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/StringMatcher.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/TintOverrides.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/AlwaysPredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/AndPredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/DisplayNamePredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ExtraAttributesPredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ItemPredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/LorePredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/NotPredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/NumberMatcher.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/OrPredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/PetPredicate.kt create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ApplyHeadModelInItemRenderer.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/CustomSkullTexturePatch.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/PatchArmorTexture.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/PatchLegacyArmorLayerSupport.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReferenceCustomModelsPatch.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceBlockBreakSoundPatch.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceBlockHitSoundPatch.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceBlockRenderManagerBlockModel.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceFallbackBlockModel.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceItemModelPatch.java create mode 100644 src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceTextColorInHandledScreen.java diff --git a/build.gradle.kts b/build.gradle.kts index 1d5478f..c74a424 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,7 +25,7 @@ plugins { alias(libs.plugins.kotlin.plugin.ksp) // alias(libs.plugins.loom) // TODO: use arch loom once they update to 1.8 - id("fabric-loom") version "1.8.9" + id("fabric-loom") version "1.9.2" alias(libs.plugins.shadow) id("moe.nea.licenseextractificator") id("moe.nea.mc-auto-translations") version "0.1.0" @@ -129,13 +129,8 @@ val collectTranslations by tasks.registering(CollectTranslations::class) { val compatSourceSets: MutableSet = mutableSetOf() fun createIsolatedSourceSet(name: String, path: String = "compat/$name", isEnabled: Boolean = true): SourceSet { val ss = sourceSets.create(name) { - if (isEnabled) { - this.java.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java"))) - this.kotlin.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java"))) - } else { - this.java.setSrcDirs(listOf()) - this.kotlin.setSrcDirs(listOf()) - } + this.java.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java"))) + this.kotlin.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java"))) } val mainSS = sourceSets.main.get() val upperName = ss.name.capitalizeN() @@ -221,15 +216,16 @@ val testAgent by configurations.creating { val configuredSourceSet = createIsolatedSourceSet("configured", isEnabled = false) // Wait for update (also low prio, because configured sucks) -val sodiumSourceSet = createIsolatedSourceSet("sodium") +val sodiumSourceSet = createIsolatedSourceSet("sodium", isEnabled = false) val citResewnSourceSet = createIsolatedSourceSet("citresewn", isEnabled = false) // TODO: Wait for update -val yaclSourceSet = createIsolatedSourceSet("yacl") +val yaclSourceSet = createIsolatedSourceSet("yacl", isEnabled = false) val explosiveEnhancementSourceSet = createIsolatedSourceSet("explosiveEnhancement", isEnabled = false) // TODO: wait for their port val wildfireGenderSourceSet = createIsolatedSourceSet("wildfireGender", isEnabled = false) // TODO: wait on their port -val modmenuSourceSet = createIsolatedSourceSet("modmenu") -val reiSourceSet = createIsolatedSourceSet("rei") -val moulconfigSourceSet = createIsolatedSourceSet("moulconfig") +val modmenuSourceSet = createIsolatedSourceSet("modmenu", isEnabled = false) +val reiSourceSet = createIsolatedSourceSet("rei", isEnabled = false) +val moulconfigSourceSet = createIsolatedSourceSet("moulconfig", isEnabled = false) +val customTexturesSourceSet = createIsolatedSourceSet("texturePacks", "texturePacks") dependencies { // Minecraft dependencies diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index d89c20e..54719bc 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -3,7 +3,7 @@ // SPDX-License-Identifier: CC0-1.0 plugins { - kotlin("jvm") version "1.8.10" + kotlin("jvm") version "2.1.0" `kotlin-dsl` } repositories { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 74de8e8..b8ed2f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,21 +3,23 @@ # SPDX-License-Identifier: CC0-1.0 [versions] -minecraft = "1.21.3" +minecraft = "1.21.4" # Update from https://kotlinlang.org/ -kotlin = "2.0.21" +kotlin = "2.1.0" # Update from https://github.com/google/ksp/releases -kotlin_ksp = "2.0.21-1.0.26" +kotlin_ksp = "2.1.0-1.0.29" # Update from https://linkie.shedaniel.me/dependencies?loader=fabric fabric_loader = "0.16.9" -fabric_api = "0.107.0+1.21.3" -fabric_kotlin = "1.12.3+kotlin.2.0.21" -yarn = "1.21.3+build.2" +fabric_api = "0.110.5+1.21.4" +yarn = "1.21.4+build.1" +modmenu = "13.0.0-beta.1" +architectury = "15.0.1" rei = "17.0.789" -modmenu = "12.0.0-beta.1" -architectury = "14.0.4" + +# Update from https://maven.fabricmc.net/net/fabricmc/fabric-language-kotlin/ +fabric_kotlin = "1.13.0+kotlin.2.1.0" # Update from https://maven.architectury.dev/dev/architectury/loom/dev.architectury.loom.gradle.plugin/ loom = "1.7.414" @@ -26,16 +28,16 @@ loom = "1.7.414" qolify = "1.6.0-1.21.1" # Update from https://modrinth.com/mod/sodium/versions?l=fabric -sodium = "mc1.21.3-0.6.0-beta.4-fabric" +sodium = "mc1.21.4-0.6.2-fabric" # Update from https://modrinth.com/mod/freecam/versions?l=fabric -freecammod = "vomskVK3" +freecammod = "1.3.1+mc1.21.3" # Update from https://modrinth.com/mod/no-chat-reports/versions?l=fabric ncr = "Fabric-1.21.3-v2.10.0" # Update from https://modrinth.com/mod/female-gender/versions?l=fabric -femalegender = "kJmjQvAS" +femalegender = "4.3+1.21.4" # Update from https://modrinth.com/mod/explosive-enhancement/versions?l=fabric explosiveenhancement = "1.2.3-1.21.0" @@ -49,12 +51,13 @@ citresewn = "1.2.0+1.21" devauth = "1.2.0" # Update from https://ktor.io/ -ktor = "3.0.1" +ktor = "3.0.2" # Update from https://repo.nea.moe/#/releases/moe/nea/neurepoparser neurepoparser = "1.6.0" # Update from https://github.com/HotswapProjects/HotswapAgent/releases +# TODO: bump to 2.0.1 hotswap_agent = "1.4.2-SNAPSHOT" # Update from https://github.com/LlamaLad7/MixinExtras/tags diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f861d18..6e2ced2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -4,6 +4,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/InitReplacer.java b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/InitReplacer.java index a0d28ab..7ba3b44 100644 --- a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/InitReplacer.java +++ b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/InitReplacer.java @@ -59,6 +59,14 @@ public class InitReplacer extends TreeScanner { var target = plugin.utils.getAnnotationValue(jcAnnotation, "value"); var targetClass = plugin.utils.resolveClassLiteralExpression(target).tsym.flatName().toString(); var intermediaryClass = mappingTree.resolveClassToIntermediary(targetClass); + if (intermediaryClass == null){ + plugin.utils.reportError( + compilationUnitTree.getSourceFile(), + jcNode.init, + "Unknown class name " + targetClass + ); + return super.visitVariable(node, unused); + } var remapper = treeMaker.Select(treeMaker.This(classTree.type), names.fromString("remapper")); var remappingCall = treeMaker.Apply( List.nil(), diff --git a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/IntermediaryMethodReplacer.java b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/IntermediaryMethodReplacer.java index d3040b7..cb87b20 100644 --- a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/IntermediaryMethodReplacer.java +++ b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/IntermediaryMethodReplacer.java @@ -57,7 +57,12 @@ public class IntermediaryMethodReplacer extends TreeScanner { } var head = node.typeargs.head; var resolved = plugin.utils.resolveClassName(head, compilationUnit); - var mappedName = mappings.resolveClassToIntermediary(resolved.tsym.flatName().toString()); + var sourceName = resolved.tsym.flatName().toString(); + var mappedName = mappings.resolveClassToIntermediary(sourceName); + if (mappedName == null) { + plugin.utils.reportError(sourceFile, node, "Unknown class name " + sourceName); + return; + } fieldAccess.name = plugin.names.fromString("id"); node.typeargs = List.nil(); node.args = List.of(plugin.treeMaker.Literal(mappedName)); diff --git a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/MappingTree.java b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/MappingTree.java index 7a270b7..eef5f9a 100644 --- a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/MappingTree.java +++ b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/MappingTree.java @@ -9,40 +9,43 @@ import java.util.stream.Collectors; public class MappingTree { - private final Map classLookup; - private final int targetIndex; - private final int sourceIndex; + private final Map classLookup; + private final int targetIndex; + private final int sourceIndex; - public MappingTree(TinyFile tinyV2File, String sourceNamespace, String targetNamespace) { - sourceIndex = tinyV2File.getHeader().getNamespaces().indexOf(sourceNamespace); - if (sourceIndex < 0) - throw new RuntimeException("Could not find source namespace " + sourceNamespace + " in mappings file."); - this.classLookup = tinyV2File - .getClassEntries() - .stream() - .collect(Collectors.toMap(it -> it.getClassNames().get(sourceIndex), it -> it)); - targetIndex = tinyV2File.getHeader().getNamespaces().indexOf(targetNamespace); - if (targetIndex < 0) - throw new RuntimeException("Could not find target namespace " + targetNamespace + " in mappings file."); - } + public MappingTree(TinyFile tinyV2File, String sourceNamespace, String targetNamespace) { + sourceIndex = tinyV2File.getHeader().getNamespaces().indexOf(sourceNamespace); + if (sourceIndex < 0) + throw new RuntimeException("Could not find source namespace " + sourceNamespace + " in mappings file."); + this.classLookup = tinyV2File + .getClassEntries() + .stream() + .collect(Collectors.toMap(it -> it.getClassNames().get(sourceIndex), it -> it)); + targetIndex = tinyV2File.getHeader().getNamespaces().indexOf(targetNamespace); + if (targetIndex < 0) + throw new RuntimeException("Could not find target namespace " + targetNamespace + " in mappings file."); + } - public String resolveMethodToIntermediary(String className, String methodName) { - var classData = classLookup.get(className.replace(".", "/")); - TinyMethod candidate = null; - for (TinyMethod method : classData.getMethods()) { - if (method.getMethodNames().get(sourceIndex).equals(methodName)) { - if (candidate != null) { - throw new RuntimeException("Found two candidates for method " + className + "." + methodName); - } - candidate = method; - } - } - return candidate.getMethodNames().get(targetIndex); - } + public String resolveMethodToIntermediary(String className, String methodName) { + var classData = classLookup.get(className.replace(".", "/")); + TinyMethod candidate = null; + for (TinyMethod method : classData.getMethods()) { + if (method.getMethodNames().get(sourceIndex).equals(methodName)) { + if (candidate != null) { + throw new RuntimeException("Found two candidates for method " + className + "." + methodName); + } + candidate = method; + } + } + return candidate.getMethodNames().get(targetIndex); + } - public String resolveClassToIntermediary(String className) { - return classLookup.get(className.replace(".", "/")) - .getClassNames().get(targetIndex) - .replace("/", "."); - } + public String resolveClassToIntermediary(String className) { + var cls = classLookup.get(className.replace(".", "/")); + if (cls == null) { + return null; + } + return cls.getClassNames().get(targetIndex) + .replace("/", "."); + } } diff --git a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/Utils.java b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/Utils.java index d9008bd..4c8806d 100644 --- a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/Utils.java +++ b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/Utils.java @@ -111,7 +111,7 @@ public class Utils { var error = diagnostics.error( JCDiagnostic.DiagnosticFlag.API, log.currentSource(), - ((JCTree) node).pos(), + node == null ? null : ((JCTree) node).pos(), "firmament.generic", message ); diff --git a/src/main/java/moe/nea/firmament/init/EarlyRiser.java b/src/main/java/moe/nea/firmament/init/EarlyRiser.java index 9734e94..5441255 100644 --- a/src/main/java/moe/nea/firmament/init/EarlyRiser.java +++ b/src/main/java/moe/nea/firmament/init/EarlyRiser.java @@ -7,6 +7,6 @@ public class EarlyRiser implements Runnable { new ClientPlayerRiser().addTinkerers(); new HandledScreenRiser().addTinkerers(); new SectionBuilderRiser().addTinkerers(); - new ItemColorsSodiumRiser().addTinkerers(); +// TODO: new ItemColorsSodiumRiser().addTinkerers(); } } diff --git a/src/main/java/moe/nea/firmament/init/HandledScreenRiser.java b/src/main/java/moe/nea/firmament/init/HandledScreenRiser.java index 355a666..f7db18c 100644 --- a/src/main/java/moe/nea/firmament/init/HandledScreenRiser.java +++ b/src/main/java/moe/nea/firmament/init/HandledScreenRiser.java @@ -3,7 +3,6 @@ package moe.nea.firmament.init; import me.shedaniel.mm.api.ClassTinkerers; import net.minecraft.client.gui.Element; -import net.minecraft.client.gui.ParentElement; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.tree.ClassNode; diff --git a/src/main/java/moe/nea/firmament/init/ItemColorsSodiumRiser.java b/src/main/java/moe/nea/firmament/init/ItemColorsSodiumRiser.java deleted file mode 100644 index 80ee9aa..0000000 --- a/src/main/java/moe/nea/firmament/init/ItemColorsSodiumRiser.java +++ /dev/null @@ -1,64 +0,0 @@ -package moe.nea.firmament.init; - -import me.shedaniel.mm.api.ClassTinkerers; -import moe.nea.firmament.util.ErrorUtil; -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.color.item.ItemColorProvider; -import net.minecraft.client.color.item.ItemColors; -import net.minecraft.item.ItemStack; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.Type; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.VarInsnNode; - -public class ItemColorsSodiumRiser extends RiserUtils { - @IntermediaryName(ItemColors.class) - String ItemColors; - @IntermediaryName(ItemColorProvider.class) - String ItemColorProvider; - @IntermediaryName(ItemStack.class) - String ItemStack; - String getColorProvider = "sodium$getColorProvider"; - Type getColorProviderDesc = Type.getMethodType(getTypeForClassName(ItemColorProvider), - getTypeForClassName(ItemStack)); - - @Override - public void addTinkerers() { - ClassTinkerers.addTransformation(ItemColors, this::addSodiumOverride, true); - } - - private void addSodiumOverride(ClassNode classNode) { - var node = findMethod(classNode, getColorProvider, getColorProviderDesc); - if (node == null) { - if (!FabricLoader.getInstance().isModLoaded("sodium")) - ErrorUtil.INSTANCE.softError("Sodium is present, but sodium color override could not be injected."); - return; - } - var p = node.instructions.getFirst(); - while (p != null) { - if (p.getOpcode() == Opcodes.ARETURN) { - node.instructions.insertBefore( - p, - mkOverrideSodiumCall() - ); - } - p = p.getNext(); - } - } - - private InsnList mkOverrideSodiumCall() { - var insnList = new InsnList(); - insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); - insnList.add(new InsnNode(Opcodes.SWAP)); - insnList.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, - getTypeForClassName(ItemColors).getInternalName(), - "overrideSodium_firmament", - Type.getMethodType(getTypeForClassName(ItemColorProvider), - getTypeForClassName(ItemColorProvider)).getDescriptor(), - false)); - return insnList; - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/CustomModelEventPatch.java b/src/main/java/moe/nea/firmament/mixins/CustomModelEventPatch.java deleted file mode 100644 index e0a7544..0000000 --- a/src/main/java/moe/nea/firmament/mixins/CustomModelEventPatch.java +++ /dev/null @@ -1,36 +0,0 @@ - - -package moe.nea.firmament.mixins; - -import moe.nea.firmament.events.CustomItemModelEvent; -import moe.nea.firmament.features.texturepack.CustomGlobalTextures; -import net.minecraft.client.render.item.ItemModels; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.BakedModelManager; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Identifier; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Map; - -@Mixin(ItemModels.class) -public class CustomModelEventPatch { - - @Inject(method = "getModel(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/client/render/model/BakedModel;", at = @At("HEAD"), cancellable = true) - public void onGetModel(ItemStack stack, CallbackInfoReturnable cir) { - var $this = (ItemModels) (Object) this; - var model = CustomItemModelEvent.getModel(stack, $this); - if (model == null) { - model = CustomGlobalTextures.replaceGlobalModel($this, stack); - } - if (model != null) { - cir.setReturnValue(model); - } - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/CustomSkullTexturePatch.java b/src/main/java/moe/nea/firmament/mixins/CustomSkullTexturePatch.java deleted file mode 100644 index f3b616a..0000000 --- a/src/main/java/moe/nea/firmament/mixins/CustomSkullTexturePatch.java +++ /dev/null @@ -1,21 +0,0 @@ - - -package moe.nea.firmament.mixins; - -import moe.nea.firmament.features.texturepack.CustomSkyBlockTextures; -import net.minecraft.block.SkullBlock; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.block.entity.SkullBlockEntityRenderer; -import net.minecraft.component.type.ProfileComponent; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(SkullBlockEntityRenderer.class) -public class CustomSkullTexturePatch { - @Inject(method = "getRenderLayer", at = @At("HEAD"), cancellable = true) - private static void onGetRenderLayer(SkullBlock.SkullType type, ProfileComponent profile, CallbackInfoReturnable cir) { - CustomSkyBlockTextures.INSTANCE.modifySkullTexture(type, profile, cir); - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/IncomingPacketListenerPatches.java b/src/main/java/moe/nea/firmament/mixins/IncomingPacketListenerPatches.java index 80a9fd5..a7c3875 100644 --- a/src/main/java/moe/nea/firmament/mixins/IncomingPacketListenerPatches.java +++ b/src/main/java/moe/nea/firmament/mixins/IncomingPacketListenerPatches.java @@ -18,7 +18,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientPlayNetworkHandler.class) public abstract class IncomingPacketListenerPatches { - @ModifyExpressionValue(method = "onCommandTree", at = @At(value = "NEW", target = "(Lcom/mojang/brigadier/tree/RootCommandNode;)Lcom/mojang/brigadier/CommandDispatcher;", remap = false)) public CommandDispatcher onOnCommandTree(CommandDispatcher dispatcher) { MaskCommands.Companion.publish(new MaskCommands(dispatcher)); @@ -31,7 +30,7 @@ public abstract class IncomingPacketListenerPatches { packet.getParameters(), new Vec3d(packet.getX(), packet.getY(), packet.getZ()), new Vector3f(packet.getOffsetX(), packet.getOffsetY(), packet.getOffsetZ()), - packet.isLongDistance(), + packet.isImportant(), packet.getCount(), packet.getSpeed() ); diff --git a/src/main/java/moe/nea/firmament/mixins/ReplaceTextColorInHandledScreen.java b/src/main/java/moe/nea/firmament/mixins/ReplaceTextColorInHandledScreen.java deleted file mode 100644 index c9fb073..0000000 --- a/src/main/java/moe/nea/firmament/mixins/ReplaceTextColorInHandledScreen.java +++ /dev/null @@ -1,48 +0,0 @@ -package moe.nea.firmament.mixins; - - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import moe.nea.firmament.features.texturepack.CustomTextColors; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ingame.AnvilScreen; -import net.minecraft.client.gui.screen.ingame.BeaconScreen; -import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.gui.screen.ingame.InventoryScreen; -import net.minecraft.client.gui.screen.ingame.MerchantScreen; -import net.minecraft.text.Text; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin({HandledScreen.class, InventoryScreen.class, CreativeInventoryScreen.class, MerchantScreen.class, - AnvilScreen.class, BeaconScreen.class}) -public class ReplaceTextColorInHandledScreen { - - // To my future self: double check those mixins, but don't be too concerned about errors. Some of the wrapopertions - // only apply in some of the specified subclasses. - - @WrapOperation( - method = "drawForeground", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/gui/DrawContext;drawText(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;IIIZ)I"), - expect = 0, - require = 0) - private int replaceTextColorWithVariableShadow(DrawContext instance, TextRenderer textRenderer, Text text, int x, int y, int color, boolean shadow, Operation original) { - return original.call(instance, textRenderer, text, x, y, CustomTextColors.INSTANCE.mapTextColor(text, color), shadow); - } - - @WrapOperation( - method = "drawForeground", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;III)I"), - expect = 0, - require = 0) - private int replaceTextColorWithShadow(DrawContext instance, TextRenderer textRenderer, Text text, int x, int y, int color, Operation original) { - return original.call(instance, textRenderer, text, x, y, CustomTextColors.INSTANCE.mapTextColor(text, color)); - } - -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/ApplyHeadModelInItemRenderer.java b/src/main/java/moe/nea/firmament/mixins/custommodels/ApplyHeadModelInItemRenderer.java deleted file mode 100644 index dac65fe..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/ApplyHeadModelInItemRenderer.java +++ /dev/null @@ -1,35 +0,0 @@ - -package moe.nea.firmament.mixins.custommodels; - -import com.llamalad7.mixinextras.sugar.Local; -import com.llamalad7.mixinextras.sugar.ref.LocalRef; -import moe.nea.firmament.features.texturepack.BakedModelExtra; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ModelTransformationMode; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ItemRenderer.class) -public class ApplyHeadModelInItemRenderer { - @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;ZF)V", - at = @At("HEAD")) - private void applyHeadModel(ItemStack stack, ModelTransformationMode transformationMode, boolean leftHanded, - MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, - BakedModel model, boolean useInventoryModel, float z, CallbackInfo ci, - @Local(argsOnly = true) LocalRef modelMut - ) { - var extra = BakedModelExtra.cast(model); - if (transformationMode == ModelTransformationMode.HEAD && extra != null) { - var headModel = extra.getHeadModel_firmament(); - if (headModel != null) { - modelMut.set(headModel); - } - } - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/BakedModelDataHolderBasic.java b/src/main/java/moe/nea/firmament/mixins/custommodels/BakedModelDataHolderBasic.java deleted file mode 100644 index 3ed2177..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/BakedModelDataHolderBasic.java +++ /dev/null @@ -1,42 +0,0 @@ - -package moe.nea.firmament.mixins.custommodels; - -import moe.nea.firmament.features.texturepack.BakedModelExtra; -import moe.nea.firmament.features.texturepack.TintOverrides; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.BasicBakedModel; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(BasicBakedModel.class) -public class BakedModelDataHolderBasic implements BakedModelExtra { - - @Unique - private BakedModel headModel; - - @Unique - @Nullable - private TintOverrides tintOverrides; - - @Nullable - @Override - public BakedModel getHeadModel_firmament() { - return headModel; - } - - @Override - public void setHeadModel_firmament(@Nullable BakedModel headModel) { - this.headModel = headModel; - } - - @Override - public @Nullable TintOverrides getTintOverrides_firmament() { - return tintOverrides; - } - - @Override - public void setTintOverrides_firmament(@Nullable TintOverrides tintOverrides) { - this.tintOverrides = tintOverrides; - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/BakedModelDataHolderBuiltin.java b/src/main/java/moe/nea/firmament/mixins/custommodels/BakedModelDataHolderBuiltin.java deleted file mode 100644 index 87aecb1..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/BakedModelDataHolderBuiltin.java +++ /dev/null @@ -1,43 +0,0 @@ - -package moe.nea.firmament.mixins.custommodels; - -import moe.nea.firmament.features.texturepack.BakedModelExtra; -import moe.nea.firmament.features.texturepack.TintOverrides; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.BuiltinBakedModel; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(BuiltinBakedModel.class) -public class BakedModelDataHolderBuiltin implements BakedModelExtra { - - @Unique - @Nullable - private BakedModel headModel; - - @Unique - @Nullable - private TintOverrides tintOverrides; - - @Override - public @Nullable TintOverrides getTintOverrides_firmament() { - return tintOverrides; - } - - @Override - public void setTintOverrides_firmament(@Nullable TintOverrides tintOverrides) { - this.tintOverrides = tintOverrides; - } - - @Nullable - @Override - public BakedModel getHeadModel_firmament() { - return headModel; - } - - @Override - public void setHeadModel_firmament(@Nullable BakedModel headModel) { - this.headModel = headModel; - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/BakedOverrideDataHolder.java b/src/main/java/moe/nea/firmament/mixins/custommodels/BakedOverrideDataHolder.java deleted file mode 100644 index 26972b1..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/BakedOverrideDataHolder.java +++ /dev/null @@ -1,28 +0,0 @@ - -package moe.nea.firmament.mixins.custommodels; - -import moe.nea.firmament.features.texturepack.BakedOverrideData; -import moe.nea.firmament.features.texturepack.FirmamentModelPredicate; -import net.minecraft.client.render.model.json.ModelOverrideList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(ModelOverrideList.BakedOverride.class) -public class BakedOverrideDataHolder implements BakedOverrideData { - - @Unique - private FirmamentModelPredicate[] firmamentOverrides; - - @Nullable - @Override - public FirmamentModelPredicate[] getFirmamentOverrides() { - return firmamentOverrides; - } - - @Override - public void setFirmamentOverrides(@NotNull FirmamentModelPredicate[] overrides) { - this.firmamentOverrides = overrides; - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/HeadModelReplacerPatch.java b/src/main/java/moe/nea/firmament/mixins/custommodels/HeadModelReplacerPatch.java deleted file mode 100644 index 26c331e..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/HeadModelReplacerPatch.java +++ /dev/null @@ -1,57 +0,0 @@ - -package moe.nea.firmament.mixins.custommodels; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import moe.nea.firmament.features.texturepack.BakedModelExtra; -import net.minecraft.block.AbstractSkullBlock; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.LivingEntityRenderer; -import net.minecraft.client.render.entity.feature.HeadFeatureRenderer; -import net.minecraft.client.render.entity.model.EntityModel; -import net.minecraft.client.render.entity.model.ModelWithHead; -import net.minecraft.client.render.entity.state.LivingEntityRenderState; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(HeadFeatureRenderer.class) -public class HeadModelReplacerPatch & ModelWithHead> { - /** - * This class serves to disable the replacing of head models with the vanilla block model. Vanilla first selects loads - * the model containing the head model regularly in {@link LivingEntityRenderer#updateRenderState}, but then discards - * the model in {@link HeadFeatureRenderer#render(MatrixStack, VertexConsumerProvider, int, LivingEntityRenderState, float, float)} - * if it detects a skull block. This serves to disable that functionality if a head model override is present. - */ - @WrapOperation(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/LivingEntityRenderState;FF)V", - at = @At(value = "INVOKE", target = "Lnet/minecraft/item/BlockItem;getBlock()Lnet/minecraft/block/Block;")) - private Block replaceSkull(BlockItem instance, Operation original, @Local BakedModel bakedModel) { - var oldBlock = original.call(instance); - if (oldBlock instanceof AbstractSkullBlock) { - var extra = BakedModelExtra.cast(bakedModel); - if (extra != null && extra.getHeadModel_firmament() != null) - return Blocks.ENCHANTING_TABLE; // Any non skull block. Let's choose the enchanting table because it is very distinct. - } - return oldBlock; - } - - /** - * We disable the has model override, since texture packs get precedent to server data. - */ - @WrapOperation(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/LivingEntityRenderState;FF)V", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/feature/ArmorFeatureRenderer;hasModel(Lnet/minecraft/item/ItemStack;Lnet/minecraft/entity/EquipmentSlot;)Z")) - private boolean replaceHasModel(ItemStack stack, EquipmentSlot slot, Operation original, - @Local BakedModel bakedModel) { - var extra = BakedModelExtra.cast(bakedModel); - if (extra != null && extra.getHeadModel_firmament() != null) - return false; - return original.call(stack, slot); - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/ItemColorRemovalPatch.java b/src/main/java/moe/nea/firmament/mixins/custommodels/ItemColorRemovalPatch.java deleted file mode 100644 index 8c76c60..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/ItemColorRemovalPatch.java +++ /dev/null @@ -1,39 +0,0 @@ -package moe.nea.firmament.mixins.custommodels; - -import moe.nea.firmament.features.texturepack.TintOverrides; -import moe.nea.firmament.init.ItemColorsSodiumRiser; -import net.minecraft.client.color.item.ItemColorProvider; -import net.minecraft.client.color.item.ItemColors; -import net.minecraft.item.ItemStack; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(ItemColors.class) -public class ItemColorRemovalPatch { - - /** - * @see ItemColorsSodiumRiser - */ - private @Nullable ItemColorProvider overrideSodium_firmament(@Nullable ItemColorProvider original) { - var tintOverrides = TintOverrides.Companion.getCurrentOverrides(); - if (!tintOverrides.hasOverrides()) return original; - return (stack, tintIndex) -> { - var override = tintOverrides.getOverride(tintIndex); - if (override != null) return override; - if (original != null) return original.getColor(stack, tintIndex); - return -1; - }; - } - - - @Inject(method = "getColor", at = @At("HEAD"), cancellable = true) - private void overrideGetColorCall(ItemStack item, int tintIndex, CallbackInfoReturnable cir) { - var tintOverrides = TintOverrides.Companion.getCurrentOverrides(); - var override = tintOverrides.getOverride(tintIndex); - if (override != null) - cir.setReturnValue(override); - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/ItemModelGeneratorJsonUnbakedModelCopy.java b/src/main/java/moe/nea/firmament/mixins/custommodels/ItemModelGeneratorJsonUnbakedModelCopy.java deleted file mode 100644 index 89d0411..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/ItemModelGeneratorJsonUnbakedModelCopy.java +++ /dev/null @@ -1,22 +0,0 @@ - -package moe.nea.firmament.mixins.custommodels; - -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import com.llamalad7.mixinextras.sugar.Local; -import moe.nea.firmament.features.texturepack.JsonUnbakedModelFirmExtra; -import net.minecraft.client.render.model.json.ItemModelGenerator; -import net.minecraft.client.render.model.json.JsonUnbakedModel; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(ItemModelGenerator.class) -public class ItemModelGeneratorJsonUnbakedModelCopy { - @ModifyReturnValue(method = "create", at = @At("RETURN")) - private JsonUnbakedModel copyExtraModelData(JsonUnbakedModel original, @Local(argsOnly = true) JsonUnbakedModel oldModel) { - var extra = ((JsonUnbakedModelFirmExtra) original); - var oldExtra = ((JsonUnbakedModelFirmExtra) oldModel); - extra.setHeadModel_firmament(oldExtra.getHeadModel_firmament()); - extra.setTintOverrides_firmament(oldExtra.getTintOverrides_firmament()); - return original; - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/ItemRendererTintContextPatch.java b/src/main/java/moe/nea/firmament/mixins/custommodels/ItemRendererTintContextPatch.java deleted file mode 100644 index 8c5411b..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/ItemRendererTintContextPatch.java +++ /dev/null @@ -1,35 +0,0 @@ -package moe.nea.firmament.mixins.custommodels; - -import moe.nea.firmament.features.texturepack.BakedModelExtra; -import moe.nea.firmament.features.texturepack.TintOverrides; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ModelTransformationMode; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(value = ItemRenderer.class, priority = 1010) -public class ItemRendererTintContextPatch { - @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;ZF)V", - at = @At(value = "HEAD"), allow = 1) - private void onStartRendering(ItemStack stack, ModelTransformationMode transformationMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model, boolean useInventoryModel, float z, CallbackInfo ci) { - var extra = BakedModelExtra.cast(model); - if (extra != null) { - TintOverrides.Companion.enter(extra.getTintOverrides_firmament()); - } - } - - @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;ZF)V", - at = @At("TAIL"), allow = 1) - private void onEndRendering(ItemStack stack, ModelTransformationMode transformationMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model, boolean useInventoryModel, float z, CallbackInfo ci) { - var extra = BakedModelExtra.cast(model); - if (extra != null) { - TintOverrides.Companion.exit(extra.getTintOverrides_firmament()); - } - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/JsonUnbakedModelDataHolder.java b/src/main/java/moe/nea/firmament/mixins/custommodels/JsonUnbakedModelDataHolder.java deleted file mode 100644 index a5bb34f..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/JsonUnbakedModelDataHolder.java +++ /dev/null @@ -1,130 +0,0 @@ -package moe.nea.firmament.mixins.custommodels; - -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import com.llamalad7.mixinextras.sugar.Local; -import moe.nea.firmament.features.texturepack.BakedModelExtra; -import moe.nea.firmament.features.texturepack.JsonUnbakedModelFirmExtra; -import moe.nea.firmament.features.texturepack.TintOverrides; -import moe.nea.firmament.util.ErrorUtil; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.Baker; -import net.minecraft.client.render.model.ModelRotation; -import net.minecraft.client.render.model.UnbakedModel; -import net.minecraft.client.render.model.json.JsonUnbakedModel; -import net.minecraft.util.Identifier; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.Objects; - -@Mixin(JsonUnbakedModel.class) -public abstract class JsonUnbakedModelDataHolder implements JsonUnbakedModelFirmExtra { - @Shadow - @Nullable - protected JsonUnbakedModel parent; - - @Shadow - public abstract String toString(); - - @Unique - @Nullable - public Identifier headModel; - @Unique - @Nullable - public TintOverrides tintOverrides; - @Unique - @Nullable - public TintOverrides mergedTintOverrides; - - @Override - public void setTintOverrides_firmament(@Nullable TintOverrides tintOverrides) { - this.tintOverrides = tintOverrides; - this.mergedTintOverrides = null; - } - - @Override - public @NotNull TintOverrides getTintOverrides_firmament() { - if (mergedTintOverrides != null) - return mergedTintOverrides; - var mergedTintOverrides = parent == null ? new TintOverrides() - : ((JsonUnbakedModelFirmExtra) parent).getTintOverrides_firmament(); - if (tintOverrides != null) - mergedTintOverrides = tintOverrides.mergeWithParent(mergedTintOverrides); - this.mergedTintOverrides = mergedTintOverrides; - return mergedTintOverrides; - } - - @Override - public void setHeadModel_firmament(@Nullable Identifier identifier) { - this.headModel = identifier; - } - - @Override - public @Nullable Identifier getHeadModel_firmament() { - if (this.headModel != null) return this.headModel; - if (this.parent == null) return null; - return ((JsonUnbakedModelFirmExtra) this.parent).getHeadModel_firmament(); - } - - @Inject(method = "resolve", at = @At("HEAD")) - private void addDependencies(UnbakedModel.Resolver resolver, CallbackInfo ci) { - var headModel = getHeadModel_firmament(); - if (headModel != null) { - resolver.resolve(headModel); - } - } - - private void addExtraBakeInfo(BakedModel bakedModel, Baker baker) { - if (!this.toString().contains("minecraft") && this.toString().contains("crimson")) { - System.out.println("Found non minecraft model " + this); - } - var extra = BakedModelExtra.cast(bakedModel); - if (extra != null) { - var headModel = getHeadModel_firmament(); - if (headModel != null) { - extra.setHeadModel_firmament(baker.bake(headModel, ModelRotation.X0_Y0)); - } - if (getTintOverrides_firmament().hasOverrides()) { - extra.setTintOverrides_firmament(getTintOverrides_firmament()); - } - } - } - - /** - * @see ProvideBakerToJsonUnbakedModelPatch - */ - @Override - public void storeExtraBaker_firmament(@NotNull Baker baker) { - this.storedBaker = baker; - } - - @Unique - private Baker storedBaker; - - @ModifyReturnValue( - method = "bake(Ljava/util/function/Function;Lnet/minecraft/client/render/model/ModelBakeSettings;Z)Lnet/minecraft/client/render/model/BakedModel;", - at = @At("RETURN")) - private BakedModel bakeExtraInfoWithoutBaker(BakedModel original) { - if (storedBaker != null) { - addExtraBakeInfo(original, storedBaker); - storedBaker = null; - } - return original; - } - - @ModifyReturnValue( - method = { - "bake(Lnet/minecraft/client/render/model/Baker;Ljava/util/function/Function;Lnet/minecraft/client/render/model/ModelBakeSettings;)Lnet/minecraft/client/render/model/BakedModel;" - }, - at = @At(value = "RETURN")) - private BakedModel bakeExtraInfo(BakedModel original, @Local(argsOnly = true) Baker baker) { - addExtraBakeInfo(original, baker); - return original; - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/ModelOverrideDataHolder.java b/src/main/java/moe/nea/firmament/mixins/custommodels/ModelOverrideDataHolder.java deleted file mode 100644 index 5f9689a..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/ModelOverrideDataHolder.java +++ /dev/null @@ -1,28 +0,0 @@ - -package moe.nea.firmament.mixins.custommodels; - -import moe.nea.firmament.features.texturepack.FirmamentModelPredicate; -import moe.nea.firmament.features.texturepack.ModelOverrideData; -import net.minecraft.client.render.model.json.ModelOverride; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(ModelOverride.class) -public class ModelOverrideDataHolder implements ModelOverrideData { - - @Unique - private FirmamentModelPredicate[] overrides; - - @Nullable - @Override - public FirmamentModelPredicate[] getFirmamentOverrides() { - return overrides; - } - - @Override - public void setFirmamentOverrides(@NotNull FirmamentModelPredicate[] overrides) { - this.overrides = overrides; - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/PatchArmorTexture.java b/src/main/java/moe/nea/firmament/mixins/custommodels/PatchArmorTexture.java deleted file mode 100644 index 4468150..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/PatchArmorTexture.java +++ /dev/null @@ -1,29 +0,0 @@ - -package moe.nea.firmament.mixins.custommodels; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import moe.nea.firmament.features.texturepack.CustomGlobalArmorOverrides; -import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; -import net.minecraft.component.type.EquippableComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Identifier; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -import java.util.Optional; - -@Mixin(ArmorFeatureRenderer.class) -public class PatchArmorTexture { - @WrapOperation( - method = "renderArmor", - at = @At(value = "INVOKE", target = "Lnet/minecraft/component/type/EquippableComponent;model()Ljava/util/Optional;")) - private Optional overrideLayers( - EquippableComponent instance, Operation> original, @Local(argsOnly = true) ItemStack itemStack - ) { - // TODO: check that all armour items are naturally equippable and have the equppable component. otherwise our call here will not be reached. - var overrides = CustomGlobalArmorOverrides.overrideArmor(itemStack); - return overrides.or(() -> original.call(instance)); - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/PatchJsonUnbakedModelDeserializer.java b/src/main/java/moe/nea/firmament/mixins/custommodels/PatchJsonUnbakedModelDeserializer.java deleted file mode 100644 index d6c25b5..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/PatchJsonUnbakedModelDeserializer.java +++ /dev/null @@ -1,31 +0,0 @@ - -package moe.nea.firmament.mixins.custommodels; - -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import com.llamalad7.mixinextras.sugar.Local; -import moe.nea.firmament.features.texturepack.JsonUnbakedModelFirmExtra; -import moe.nea.firmament.features.texturepack.TintOverrides; -import net.minecraft.client.render.model.json.JsonUnbakedModel; -import net.minecraft.util.Identifier; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(JsonUnbakedModel.Deserializer.class) -public class PatchJsonUnbakedModelDeserializer { - @ModifyReturnValue(method = "deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/client/render/model/json/JsonUnbakedModel;", - at = @At("RETURN")) - private JsonUnbakedModel addHeadModel(JsonUnbakedModel original, @Local JsonObject jsonObject) { - var headModel = jsonObject.get("firmament:head_model"); - var extra = ((JsonUnbakedModelFirmExtra) original); - if (headModel instanceof JsonPrimitive prim && prim.isString()) { - extra.setHeadModel_firmament(Identifier.of(prim.getAsString())); - } - var tintOverrides = jsonObject.get("firmament:tint_overrides"); - if (tintOverrides instanceof JsonObject object) { - extra.setTintOverrides_firmament(TintOverrides.Companion.parse(object)); - } - return original; - } -} diff --git a/src/main/java/moe/nea/firmament/mixins/custommodels/PatchLegacyArmorLayerSupport.java b/src/main/java/moe/nea/firmament/mixins/custommodels/PatchLegacyArmorLayerSupport.java deleted file mode 100644 index 8c0b3f8..0000000 --- a/src/main/java/moe/nea/firmament/mixins/custommodels/PatchLegacyArmorLayerSupport.java +++ /dev/null @@ -1,22 +0,0 @@ -package moe.nea.firmament.mixins.custommodels; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import moe.nea.firmament.features.texturepack.CustomGlobalArmorOverrides; -import net.minecraft.client.render.entity.equipment.EquipmentModelLoader; -import net.minecraft.client.render.entity.equipment.EquipmentRenderer; -import net.minecraft.item.equipment.EquipmentModel; -import net.minecraft.util.Identifier; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(EquipmentRenderer.class) -public class PatchLegacyArmorLayerSupport { - @WrapOperation(method = "render(Lnet/minecraft/item/equipment/EquipmentModel$LayerType;Lnet/minecraft/util/Identifier;Lnet/minecraft/client/model/Model;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/util/Ident