1+ package coreforge .nice .client ;
2+
3+ import net .minecraft .client .MinecraftClient ;
4+ import net .minecraft .client .render .VertexConsumerProvider ;
5+ import net .minecraft .client .render .entity .feature .FeatureRenderer ;
6+ import net .minecraft .client .render .entity .feature .FeatureRendererContext ;
7+ import net .minecraft .client .render .entity .model .BipedEntityModel ;
8+ import net .minecraft .client .render .entity .model .EntityModel ;
9+ import net .minecraft .client .render .entity .model .ModelWithArms ;
10+ import net .minecraft .client .render .model .json .ModelTransformation ;
11+ import net .minecraft .client .util .math .MatrixStack ;
12+ import net .minecraft .entity .LivingEntity ;
13+ import net .minecraft .item .ItemStack ;
14+ import net .minecraft .item .Items ;
15+ import net .minecraft .util .Arm ;
16+ import net .minecraft .util .math .Vec3f ;
17+
18+ public class DragonHeadFeatureRenderer <T extends LivingEntity , M extends EntityModel <T > & ModelWithArms > extends FeatureRenderer <T , M > {
19+ public DragonHeadFeatureRenderer (FeatureRendererContext <T , M > featureRendererContext ) {
20+ super (featureRendererContext );
21+ }
22+
23+ public void render (MatrixStack matrixStack , VertexConsumerProvider vertexConsumerProvider , int i , T livingEntity , float f , float g , float h , float j , float k , float l ) {
24+ boolean bl = livingEntity .getMainArm () == Arm .RIGHT ;
25+ ItemStack itemStack = new ItemStack (Items .DRAGON_HEAD );//bl ? livingEntity.getOffHandStack() : livingEntity.getMainHandStack();
26+ ItemStack itemStack2 = new ItemStack (Items .DRAGON_HEAD );//bl ? livingEntity.getMainHandStack() : livingEntity.getOffHandStack();
27+ if (!itemStack .isEmpty () || !itemStack2 .isEmpty ()) {
28+ matrixStack .push ();
29+ if (this .getContextModel ().child ) {
30+ float m = 0.5F ;
31+ matrixStack .translate (0.0D , 0.75D , 0.0D );
32+ matrixStack .scale (0.5F , 0.5F , 0.5F );
33+ }
34+
35+ this .renderItem (livingEntity , itemStack2 , ModelTransformation .Mode .THIRD_PERSON_RIGHT_HAND , Arm .RIGHT , matrixStack , vertexConsumerProvider , i );
36+ this .renderItem (livingEntity , itemStack , ModelTransformation .Mode .THIRD_PERSON_LEFT_HAND , Arm .LEFT , matrixStack , vertexConsumerProvider , i );
37+ this .renderBoot (livingEntity ,itemStack ,ModelTransformation .Mode .THIRD_PERSON_LEFT_HAND ,matrixStack ,vertexConsumerProvider ,i ,true );
38+ this .renderBoot (livingEntity ,itemStack2 ,ModelTransformation .Mode .THIRD_PERSON_RIGHT_HAND ,matrixStack ,vertexConsumerProvider ,i ,false );
39+ matrixStack .pop ();
40+ }
41+ }
42+
43+ protected void renderItem (LivingEntity entity , ItemStack stack , ModelTransformation .Mode transformationMode , Arm arm , MatrixStack matrices , VertexConsumerProvider vertexConsumers , int light ) {
44+ if (!stack .isEmpty ()) {
45+ matrices .push ();
46+ ((ModelWithArms )this .getContextModel ()).setArmAngle (arm , matrices );
47+ //((BipedEntityModel)this.getContextModel()).leftLeg.rotate(matrices);
48+ matrices .multiply (Vec3f .POSITIVE_X .getDegreesQuaternion (-90.0F ));
49+ matrices .multiply (Vec3f .POSITIVE_Y .getDegreesQuaternion (180.0F ));
50+ boolean bl = arm == Arm .LEFT ;
51+ matrices .translate ((double )((float )(bl ? -1 : 1 ) / 16.0F ), 0.125D , -0.625D );
52+ MinecraftClient .getInstance ().getHeldItemRenderer ().renderItem (entity , stack , transformationMode , bl , matrices , vertexConsumers , light );
53+ matrices .pop ();
54+ }
55+ }
56+
57+ private void renderBoot (LivingEntity entity , ItemStack stack , ModelTransformation .Mode transformationMode , MatrixStack matrices , VertexConsumerProvider vertexConsumers , int light , boolean left ){
58+ matrices .push ();
59+ //((ModelWithArms)this.getContextModel()).setArmAngle(arm, matrices);
60+ if (left ) {
61+ ((BipedEntityModel ) this .getContextModel ()).leftLeg .rotate (matrices );
62+ } else {
63+ ((BipedEntityModel ) this .getContextModel ()).rightLeg .rotate (matrices );
64+ }
65+ matrices .multiply (Vec3f .POSITIVE_X .getDegreesQuaternion (-90.0F ));
66+ matrices .multiply (Vec3f .POSITIVE_Y .getDegreesQuaternion (180.0F ));
67+ matrices .translate ((double )((float )(left ? -1 : 1 ) / 16.0F ), 0.125D , -0.645D );
68+ MinecraftClient .getInstance ().getHeldItemRenderer ().renderItem (entity , stack , transformationMode , left , matrices , vertexConsumers , light );
69+ matrices .pop ();
70+ }
71+ }
0 commit comments