3636import com .moulberry .mixinconstraints .annotations .IfModAbsent ;
3737import net .minecraft .client .model .Model ;
3838import net .minecraft .client .renderer .OrderedSubmitNodeCollector ;
39- import net .minecraft .client .renderer .rendertype .RenderType ;
4039import net .minecraft .client .renderer .entity .layers .EquipmentLayerRenderer ;
4140import net .minecraft .client .renderer .entity .state .EntityRenderState ;
4241import net .minecraft .client .renderer .entity .state .LivingEntityRenderState ;
4342import net .minecraft .client .renderer .feature .ModelFeatureRenderer ;
43+ import net .minecraft .client .renderer .rendertype .RenderType ;
4444import net .minecraft .client .renderer .rendertype .RenderTypes ;
4545import net .minecraft .client .renderer .texture .OverlayTexture ;
4646import net .minecraft .client .renderer .texture .TextureAtlasSprite ;
5555@ IfModAbsent ("ichor" )
5656@ Mixin (EquipmentLayerRenderer .class )
5757public abstract class MixinEquipmentLayerRenderer {
58- @ 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/Identifier;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/RenderType ;armorCutoutNoCull(Lnet/minecraft/resources/Identifier;)Lnet/minecraft/client/renderer/RenderType;" ))
59- private RenderType animatium$renderLayerArmorTint (Identifier resourceLocation , Operation <RenderType > original ) {
60- if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint ) {
61- return RenderTypes .entityCutoutNoCullZOffset (resourceLocation );
62- } else {
63- return original .call (resourceLocation );
64- }
65- }
58+ @ 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/Identifier;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/rendertype/RenderTypes ;armorCutoutNoCull(Lnet/minecraft/resources/Identifier;)Lnet/minecraft/client/renderer/rendertype /RenderType;" ))
59+ private RenderType animatium$renderLayerArmorTint (Identifier resourceLocation , Operation <RenderType > original ) {
60+ if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint ) {
61+ return RenderTypes .entityCutoutNoCullZOffset (resourceLocation );
62+ } else {
63+ return original .call (resourceLocation );
64+ }
65+ }
6666
67- @ 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/Identifier;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/Sheets;armorTrimsSheet(Z)Lnet/minecraft/client/renderer/RenderType;" ))
68- private RenderType animatium$renderLayerArmorTrimTint (boolean bl , Operation <RenderType > original , @ Local TextureAtlasSprite textureAtlasSprite ) {
69- if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint ) {
70- return RenderTypes .entityCutoutNoCullZOffset (textureAtlasSprite .atlasLocation ());
71- } else {
72- return original .call (bl );
73- }
74- }
67+ @ 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/Identifier;II)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/renderer/Sheets;armorTrimsSheet(Z)Lnet/minecraft/client/renderer/rendertype /RenderType;" ))
68+ private RenderType animatium$renderLayerArmorTrimTint (boolean bl , Operation <RenderType > original , @ Local TextureAtlasSprite textureAtlasSprite ) {
69+ if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint ) {
70+ return RenderTypes .entityCutoutNoCullZOffset (textureAtlasSprite .atlasLocation ());
71+ } else {
72+ return original .call (bl );
73+ }
74+ }
7575
76- @ 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/Identifier;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 )
77- private <S > int animatium$modifyUVArmorTint (int original , @ Local (argsOnly = true ) S entityRenderState ) {
78- return animatium$getPackUv (original , (EntityRenderState ) entityRenderState );
79- }
76+ @ 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/Identifier;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 /RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V" ), index = 5 )
77+ private <S > int animatium$modifyUVArmorTint (int original , @ Local (argsOnly = true ) S entityRenderState ) {
78+ return animatium$getPackUv (original , (EntityRenderState ) entityRenderState );
79+ }
8080
81- @ 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/Identifier;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 )
82- private <S > int animatium$modifyUVTrimTint (int original , @ Local (argsOnly = true ) S entityRenderState ) {
83- return animatium$getPackUv (original , (EntityRenderState ) entityRenderState );
84- }
81+ @ 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/Identifier;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 /RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V" ), index = 5 )
82+ private <S > int animatium$modifyUVTrimTint (int original , @ Local (argsOnly = true ) S entityRenderState ) {
83+ return animatium$getPackUv (original , (EntityRenderState ) entityRenderState );
84+ }
8585
86- @ 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/Identifier;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" ))
87- 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 ) {
88- original .call (instance , model , renderState , poseStack , renderType , light , overlay , color , textureAtlasSprite , i , crumblingOverlay );
89- if (Animatium .isEnabled () &&
90- AnimatiumConfig .instance ().other .entityArmorHurtTint &&
91- AnimatiumConfig .instance ().other .armorHurtRendering &&
92- renderState instanceof LivingEntityRenderState livingEntityRenderState ) {
93- final boolean isHurt = livingEntityRenderState .hasRedOverlay ;
94- if (isHurt ) {
95- // TODO: Check if this code even does anything at all
96- // TODO: Too strong? & glint needs to be tinted hurt color
97- GlStateManager ._enableBlend ();
98- 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 ));
99- original .call (instance , model , renderState , poseStack , renderType , light , overlay , color , textureAtlasSprite , i , crumblingOverlay );
100- GlStateManager ._disableBlend ();
101- }
102- }
103- }
86+ @ 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/Identifier;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 /RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V" ))
87+ 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 ) {
88+ original .call (instance , model , renderState , poseStack , renderType , light , overlay , color , textureAtlasSprite , i , crumblingOverlay );
89+ if (Animatium .isEnabled () &&
90+ AnimatiumConfig .instance ().other .entityArmorHurtTint &&
91+ AnimatiumConfig .instance ().other .armorHurtRendering &&
92+ renderState instanceof LivingEntityRenderState livingEntityRenderState ) {
93+ final boolean isHurt = livingEntityRenderState .hasRedOverlay ;
94+ if (isHurt ) {
95+ // TODO: Check if this code even does anything at all
96+ // TODO: Too strong? & glint needs to be tinted hurt color
97+ GlStateManager ._enableBlend ();
98+ 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 ));
99+ original .call (instance , model , renderState , poseStack , renderType , light , overlay , color , textureAtlasSprite , i , crumblingOverlay );
100+ GlStateManager ._disableBlend ();
101+ }
102+ }
103+ }
104104
105- @ Unique
106- private int animatium$getPackUv (final int original , final EntityRenderState entityRenderState ) {
107- if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint && entityRenderState instanceof LivingEntityRenderState livingEntityRenderState ) {
108- return OverlayTexture .pack (OverlayTexture .u (0.0F ), OverlayTexture .v (livingEntityRenderState .hasRedOverlay ));
109- } else {
110- return original ;
111- }
112- }
105+ @ Unique
106+ private int animatium$getPackUv (final int original , final EntityRenderState entityRenderState ) {
107+ if (Animatium .isEnabled () && AnimatiumConfig .instance ().other .entityArmorHurtTint && entityRenderState instanceof LivingEntityRenderState livingEntityRenderState ) {
108+ return OverlayTexture .pack (OverlayTexture .u (0.0F ), OverlayTexture .v (livingEntityRenderState .hasRedOverlay ));
109+ } else {
110+ return original ;
111+ }
112+ }
113113}
0 commit comments