3030import com .llamalad7 .mixinextras .sugar .Local ;
3131import com .mojang .blaze3d .opengl .GlConst ;
3232import com .mojang .blaze3d .opengl .GlStateManager ;
33- import com .mojang .blaze3d .platform .DepthTestFunction ;
3433import com .mojang .blaze3d .platform .DestFactor ;
3534import com .mojang .blaze3d .platform .SourceFactor ;
3635import com .mojang .blaze3d .vertex .PoseStack ;
37- import net .minecraft .client .Minecraft ;
3836import net .minecraft .client .model .Model ;
3937import net .minecraft .client .renderer .OrderedSubmitNodeCollector ;
4038import net .minecraft .client .renderer .RenderType ;
5452
5553@ Mixin (EquipmentLayerRenderer .class )
5654public abstract class MixinEquipmentLayerRenderer {
57- @ WrapOperation (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/RenderType;armorCutoutNoCull(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/renderer/RenderType;" ))
58- private RenderType animatium$renderLayerArmorTint (ResourceLocation resourceLocation , Operation <RenderType > original ) {
59- if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint ) {
60- return RenderType .entityCutoutNoCullZOffset (resourceLocation );
61- } else {
62- return original .call (resourceLocation );
63- }
64- }
55+ @ WrapOperation (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/RenderType;armorCutoutNoCull(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/renderer/RenderType;" ))
56+ private RenderType animatium$renderLayerArmorTint (ResourceLocation resourceLocation , Operation <RenderType > original ) {
57+ if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint ) {
58+ return RenderType .entityCutoutNoCullZOffset (resourceLocation );
59+ } else {
60+ return original .call (resourceLocation );
61+ }
62+ }
6563
66- @ WrapOperation (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/Sheets;armorTrimsSheet(Z)Lnet/minecraft/client/renderer/RenderType;" ))
67- private RenderType animatium$renderLayerArmorTrimTint (boolean bl , Operation <RenderType > original , @ Local TextureAtlasSprite textureAtlasSprite ) {
68- if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint ) {
69- return RenderType .entityCutoutNoCullZOffset (textureAtlasSprite .atlasLocation ());
70- } else {
71- return original .call (bl );
72- }
73- }
64+ @ WrapOperation (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/Sheets;armorTrimsSheet(Z)Lnet/minecraft/client/renderer/RenderType;" ))
65+ private RenderType animatium$renderLayerArmorTrimTint (boolean bl , Operation <RenderType > original , @ Local TextureAtlasSprite textureAtlasSprite ) {
66+ if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint ) {
67+ return RenderType .entityCutoutNoCullZOffset (textureAtlasSprite .atlasLocation ());
68+ } else {
69+ return original .call (bl );
70+ }
71+ }
7472
75- @ ModifyArg (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/OrderedSubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V" ), index = 5 )
76- private <S > int animatium$modifyUVArmorTint (int original , @ Local (argsOnly = true ) S entityRenderState ) {
77- return animatium$getPackUv (original , (EntityRenderState ) entityRenderState );
78- }
73+ @ ModifyArg (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/OrderedSubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V" ), index = 5 )
74+ private <S > int animatium$modifyUVArmorTint (int original , @ Local (argsOnly = true ) S entityRenderState ) {
75+ return animatium$getPackUv (original , (EntityRenderState ) entityRenderState );
76+ }
7977
80- @ ModifyArg (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/OrderedSubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V" ), index = 5 )
81- private <S > int animatium$modifyUVTrimTint (int original , @ Local (argsOnly = true ) S entityRenderState ) {
82- return animatium$getPackUv (original , (EntityRenderState ) entityRenderState );
83- }
78+ @ ModifyArg (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/OrderedSubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V" ), index = 5 )
79+ private <S > int animatium$modifyUVTrimTint (int original , @ Local (argsOnly = true ) S entityRenderState ) {
80+ return animatium$getPackUv (original , (EntityRenderState ) entityRenderState );
81+ }
8482
85- @ WrapOperation (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/OrderedSubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V" ))
86- private <S > void animatium$armorHurtRendering (OrderedSubmitNodeCollector instance , Model <? super S > model , S renderState , PoseStack poseStack , RenderType renderType , int light , int overlay , int color , TextureAtlasSprite textureAtlasSprite , int i , ModelFeatureRenderer .CrumblingOverlay crumblingOverlay , Operation <Void > original ) {
87- original .call (instance , model , renderState , poseStack , renderType , light , overlay , color , textureAtlasSprite , i , crumblingOverlay );
88- if (Animatium .isEnabled () &&
89- AnimatiumConfig .instance ().other .entityArmorHurtTint &&
90- AnimatiumConfig .instance ().other .armorHurtRendering &&
91- renderState instanceof LivingEntityRenderState livingEntityRenderState ) {
92- // TODO: Check if this code even does anything at all
93- // TODO: Too strong? & glint needs to be tinted hurt color
94- boolean isHurt = livingEntityRenderState .hasRedOverlay ;
95- if (isHurt ) {
96- // Code sourced from 1.7/1.8
97- Minecraft .getInstance ().gameRenderer .lightTexture ().turnOffLightLayer ();
98- GlStateManager ._enableBlend ();
99- GlStateManager ._blendFuncSeparate (GlConst .toGl (SourceFactor .SRC_ALPHA ), GlConst .toGl (DestFactor .ONE_MINUS_SRC_ALPHA ), GlConst .toGl (SourceFactor .SRC_ALPHA ), GlConst .toGl (DestFactor .ONE_MINUS_SRC_ALPHA ));
100- GlStateManager ._depthFunc (GlConst .toGl (DepthTestFunction .EQUAL_DEPTH_TEST ));
101- original .call (instance , model , renderState , poseStack , renderType , light , overlay , color , textureAtlasSprite , i , crumblingOverlay );
102- GlStateManager ._depthFunc (GlConst .toGl (DepthTestFunction .LEQUAL_DEPTH_TEST ));
103- GlStateManager ._disableBlend ();
104- Minecraft .getInstance ().gameRenderer .lightTexture ().turnOnLightLayer ();
105- }
106- }
107- }
83+ @ WrapOperation (method = "renderLayers(Lnet/minecraft/client/resources/model/EquipmentClientInfo$LayerType;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/world/item/ItemStack;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/resources/ResourceLocation;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/OrderedSubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V" ))
84+ private <S > void animatium$armorHurtRendering (OrderedSubmitNodeCollector instance , Model <? super S > model , S renderState , PoseStack poseStack , RenderType renderType , int light , int overlay , int color , TextureAtlasSprite textureAtlasSprite , int i , ModelFeatureRenderer .CrumblingOverlay crumblingOverlay , Operation <Void > original ) {
85+ original .call (instance , model , renderState , poseStack , renderType , light , overlay , color , textureAtlasSprite , i , crumblingOverlay );
86+ if (Animatium .isEnabled () &&
87+ AnimatiumConfig .instance ().other .entityArmorHurtTint &&
88+ AnimatiumConfig .instance ().other .armorHurtRendering &&
89+ renderState instanceof LivingEntityRenderState livingEntityRenderState ) {
90+ boolean isHurt = livingEntityRenderState .hasRedOverlay ;
91+ if (isHurt ) {
92+ // TODO: Check if this code even does anything at all
93+ // TODO: Too strong? & glint needs to be tinted hurt color
94+ GlStateManager ._enableBlend ();
95+ GlStateManager ._blendFuncSeparate (GlConst .toGl (SourceFactor .SRC_ALPHA ), GlConst .toGl (DestFactor .ONE_MINUS_SRC_ALPHA ), GlConst .toGl (SourceFactor .SRC_ALPHA ), GlConst .toGl (DestFactor .ONE_MINUS_SRC_ALPHA ));
96+ original .call (instance , model , renderState , poseStack , renderType , light , overlay , color , textureAtlasSprite , i , crumblingOverlay );
97+ GlStateManager ._disableBlend ();
98+ }
99+ }
100+ }
108101
109- @ Unique
110- private int animatium$getPackUv (int original , EntityRenderState entityRenderState ) {
111- if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint && entityRenderState instanceof LivingEntityRenderState livingEntityRenderState ) {
112- return OverlayTexture .pack (OverlayTexture .u (0.0F ), OverlayTexture .v (livingEntityRenderState .hasRedOverlay ));
113- } else {
114- return original ;
115- }
116- }
102+ @ Unique
103+ private int animatium$getPackUv (int original , EntityRenderState entityRenderState ) {
104+ if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint && entityRenderState instanceof LivingEntityRenderState livingEntityRenderState ) {
105+ return OverlayTexture .pack (OverlayTexture .u (0.0F ), OverlayTexture .v (livingEntityRenderState .hasRedOverlay ));
106+ } else {
107+ return original ;
108+ }
109+ }
117110}
0 commit comments