diff --git a/build.gradle b/build.gradle index c0b2934..75b1288 100644 --- a/build.gradle +++ b/build.gradle @@ -69,5 +69,5 @@ modrinth { uploadFile = remapJar gameVersions = ["${project.minecraft_version}"] loaders = ["fabric"] - dependencies = [new VersionDependency("3KmOcp6b", "required")] + dependencies = [new VersionDependency("EsaWeELS", "required")] } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index d973560..09a88cf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,11 +1,11 @@ org.gradle.jvmargs=-Xmx1G -minecraft_version=1.19 -yarn_mappings=1.19+build.1 +minecraft_version=1.19.2 +yarn_mappings=1.19.2+build.1 loader_version=0.14.9 -mod_version = 0.2.5 +mod_version = 0.2.6 maven_group = com.github.clevernucleus archives_base_name = armorrenderlib -fabric_api_version=0.58.0+1.19 +fabric_api_version=0.59.0+1.19.2 diff --git a/src/main/java/com/github/clevernucleus/armorrenderlib/impl/ArmorRenderLibImpl.java b/src/main/java/com/github/clevernucleus/armorrenderlib/impl/ArmorRenderLibImpl.java index 3517fc8..76a9984 100644 --- a/src/main/java/com/github/clevernucleus/armorrenderlib/impl/ArmorRenderLibImpl.java +++ b/src/main/java/com/github/clevernucleus/armorrenderlib/impl/ArmorRenderLibImpl.java @@ -34,7 +34,7 @@ private static , A extends if(item.getSlotType() != slot) return; var entityRenderer = MinecraftClient.getInstance().getEntityRenderDispatcher().getRenderer(entity); ArmorFeatureRenderer armorFeatureRenderer = (ArmorFeatureRenderer)((FeatureRendererAccessor)entityRenderer).getFeatureRenderer(); - A model = ((ArmorFeatureRendererInvoker)armorFeatureRenderer).invokeGetArmor(slot); + A model = ((ArmorTextureCache)armorFeatureRenderer).getArmorCustom(slot); contextModel.setAttributes((BipedEntityModel)model); ((ArmorFeatureRendererInvoker)armorFeatureRenderer).invokeSetVisible(model, slot); @@ -44,7 +44,7 @@ private static , A extends float green = (float)(color >> 8 & 0xFF) / 255.0F; float blue = (float)(color & 0xFF) / 255.0F; - VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumers, RenderLayer.getArmorCutoutNoCull(((ArmorTextureCache)armorFeatureRenderer).getOrCache(path)), false, glint); + VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumers, RenderLayer.getArmorCutoutNoCull(((ArmorTextureCache)armorFeatureRenderer).getOrCache(path)), false, glint); model.render(matrices, vertexConsumer, light, OverlayTexture.DEFAULT_UV, red, green, blue, 1.0F); }); } diff --git a/src/main/java/com/github/clevernucleus/armorrenderlib/impl/ArmorTextureCache.java b/src/main/java/com/github/clevernucleus/armorrenderlib/impl/ArmorTextureCache.java index 492415a..29fb42d 100644 --- a/src/main/java/com/github/clevernucleus/armorrenderlib/impl/ArmorTextureCache.java +++ b/src/main/java/com/github/clevernucleus/armorrenderlib/impl/ArmorTextureCache.java @@ -1,7 +1,10 @@ package com.github.clevernucleus.armorrenderlib.impl; +import net.minecraft.entity.EquipmentSlot; import net.minecraft.util.Identifier; -public interface ArmorTextureCache { +public interface ArmorTextureCache { + A getArmorCustom(EquipmentSlot slot); + Identifier getOrCache(final String path); } diff --git a/src/main/java/com/github/clevernucleus/armorrenderlib/mixin/ArmorFeatureRendererInvoker.java b/src/main/java/com/github/clevernucleus/armorrenderlib/mixin/ArmorFeatureRendererInvoker.java index 541d6e5..ca2a948 100644 --- a/src/main/java/com/github/clevernucleus/armorrenderlib/mixin/ArmorFeatureRendererInvoker.java +++ b/src/main/java/com/github/clevernucleus/armorrenderlib/mixin/ArmorFeatureRendererInvoker.java @@ -10,8 +10,6 @@ @Mixin(ArmorFeatureRenderer.class) public interface ArmorFeatureRendererInvoker, A extends BipedEntityModel> { - @Invoker("getArmor") - public A invokeGetArmor(EquipmentSlot slot); @Invoker("setVisible") public void invokeSetVisible(A bipedModel, EquipmentSlot slot); diff --git a/src/main/java/com/github/clevernucleus/armorrenderlib/mixin/ArmorFeatureRendererMixin.java b/src/main/java/com/github/clevernucleus/armorrenderlib/mixin/ArmorFeatureRendererMixin.java index bf0e49e..f4b1334 100644 --- a/src/main/java/com/github/clevernucleus/armorrenderlib/mixin/ArmorFeatureRendererMixin.java +++ b/src/main/java/com/github/clevernucleus/armorrenderlib/mixin/ArmorFeatureRendererMixin.java @@ -9,15 +9,35 @@ import com.github.clevernucleus.armorrenderlib.impl.ArmorTextureCache; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; +import net.minecraft.client.render.entity.model.BipedEntityModel; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; import net.minecraft.util.Identifier; -@Mixin(value = ArmorFeatureRenderer.class, priority = 900) -abstract class ArmorFeatureRendererMixin implements ArmorTextureCache { +@Mixin(ArmorFeatureRenderer.class) +abstract class ArmorFeatureRendererMixin, A extends BipedEntityModel> implements ArmorTextureCache { @Shadow @Final private static Map ARMOR_TEXTURE_CACHE; + @Shadow + @Final + private A leggingsModel; + + @Shadow + @Final + private A bodyModel; + + /* + * We do this instead of just an invoker because Geckolib Injects into #getArmor and runs an instanced set/get exiting the method, + * which causes the game to crash anytime that method is accessed from anywhere else - and we want to be compatible with Geckolib. + */ + @Override + public A getArmorCustom(EquipmentSlot slot) { + return slot == EquipmentSlot.LEGS ? this.leggingsModel : this.bodyModel; + } + @Override public Identifier getOrCache(final String path) { return ARMOR_TEXTURE_CACHE.computeIfAbsent(path, Identifier::new);