7
7
import com .minelittlepony .unicopia .Unicopia ;
8
8
import com .minelittlepony .unicopia .entity .collision .MultiBox ;
9
9
import com .minelittlepony .unicopia .entity .mob .AirBalloonEntity ;
10
+ import com .minelittlepony .unicopia .entity .mob .AirBalloonEntity .BalloonDesign ;
11
+ import com .minelittlepony .unicopia .entity .mob .AirBalloonEntity .BasketType ;
10
12
11
13
import net .minecraft .client .MinecraftClient ;
12
14
import net .minecraft .client .render .RenderLayer ;
13
15
import net .minecraft .client .render .VertexConsumerProvider ;
14
- import net .minecraft .client .render .WorldRenderer ;
16
+ import net .minecraft .client .render .VertexRendering ;
15
17
import net .minecraft .client .render .entity .*;
16
18
import net .minecraft .client .render .entity .feature .FeatureRenderer ;
17
19
import net .minecraft .client .render .entity .feature .FeatureRendererContext ;
20
+ import net .minecraft .client .render .entity .state .LivingEntityRenderState ;
18
21
import net .minecraft .client .util .math .MatrixStack ;
19
22
import net .minecraft .item .Items ;
20
23
import net .minecraft .util .Colors ;
21
24
import net .minecraft .util .Hand ;
22
25
import net .minecraft .util .Identifier ;
23
26
import net .minecraft .util .math .MathHelper ;
24
27
import net .minecraft .util .math .RotationAxis ;
28
+ import net .minecraft .util .math .Box ;
29
+ import net .minecraft .util .math .Vec3d ;
25
30
26
- public class AirBalloonEntityRenderer extends MobEntityRenderer <AirBalloonEntity , AirBalloonEntityModel > {
31
+ public class AirBalloonEntityRenderer extends MobEntityRenderer <AirBalloonEntity , AirBalloonEntityRenderer . State , AirBalloonEntityModel > {
27
32
public AirBalloonEntityRenderer (EntityRendererFactory .Context context ) {
28
33
super (context , new AirBalloonEntityModel (AirBalloonEntityModel .getBasketModelData ().createModel ()), 0 );
29
34
addFeature (new BalloonFeature (new AirBalloonEntityModel (AirBalloonEntityModel .getBurnerModelData ().createModel ()), this ,
30
- AirBalloonEntity :: hasBurner , e -> {
31
- return getComponentTexture (e .getStackInHand ( Hand . MAIN_HAND ). isOf ( Items . SOUL_LANTERN ) ? "soul_burner" : "burner" );
32
- }, (light , entity ) -> entity .isAscending () ? 0xFF00FF : light ));
35
+ i -> i . hasBurner , e -> {
36
+ return getComponentTexture (e .hasSoulFlame ? "soul_burner" : "burner" );
37
+ }, (light , entity ) -> entity .isAscending ? 0xFF00FF : light ));
33
38
addFeature (new BalloonFeature (new AirBalloonEntityModel (AirBalloonEntityModel .getCanopyModelData ().createModel ()), this ,
34
- AirBalloonEntity :: hasBalloon ,
35
- e -> getComponentTexture ("canopy/" + e .getDesign () .asString ()),
36
- (light , entity ) -> entity .hasBurner () && entity .isAscending () ? light | 0x00005F : light )
39
+ i -> i . hasBalloon ,
40
+ e -> getComponentTexture ("canopy/" + e .design .asString ()),
41
+ (light , entity ) -> entity .hasBurner && entity .isAscending ? light | 0x00005F : light )
37
42
);
38
43
addFeature (new BalloonFeature (new AirBalloonEntityModel (AirBalloonEntityModel .getSandbagsModelData ().createModel ()),
39
- this , e -> e .hasBalloon () && e .getInflation ( 1 ) >= 1 , e -> getComponentTexture ("sandbags" ),
40
- (light , entity ) -> entity .hasBurner () && entity .isAscending () ? light | 0x00003F : light ));
44
+ this , e -> e .hasBalloon && e .inflation >= 1 , e -> getComponentTexture ("sandbags" ),
45
+ (light , entity ) -> entity .hasBurner && entity .isAscending ? light | 0x00003F : light ));
41
46
}
42
47
43
48
@ Override
44
- public void render (AirBalloonEntity entity , float yaw , float tickDelta , MatrixStack matrices , VertexConsumerProvider vertices , int light ) {
49
+ public void render (State entity , MatrixStack matrices , VertexConsumerProvider vertices , int light ) {
45
50
matrices .push ();
46
- if (entity .hurtTime > 0 ) {
47
- matrices .multiply (RotationAxis .POSITIVE_X .rotationDegrees (MathHelper .sin (entity .age + tickDelta ) * 3 ));
51
+ if (entity .hurt ) {
52
+ matrices .multiply (RotationAxis .POSITIVE_X .rotationDegrees (MathHelper .sin (entity .age ) * 3 ));
48
53
}
49
- super .render (entity , yaw , tickDelta , matrices , vertices , light );
54
+ super .render (entity , matrices , vertices , light );
50
55
matrices .pop ();
51
56
52
- if (MinecraftClient .getInstance ().getEntityRenderDispatcher ().shouldRenderHitboxes () && !entity .isInvisible () && !MinecraftClient .getInstance ().hasReducedDebugInfo ()) {
53
- MultiBox .forEach (entity .getBoundingBox () , box -> {
54
- WorldRenderer .drawBox (matrices , vertices .getBuffer (RenderLayer .getLines ()), box .offset (entity .getPos () .multiply (-1 )), 1 , 1 , 1 , 1 );
57
+ if (MinecraftClient .getInstance ().getEntityRenderDispatcher ().shouldRenderHitboxes () && !entity .invisible && !MinecraftClient .getInstance ().hasReducedDebugInfo ()) {
58
+ MultiBox .forEach (entity .boundingBox , box -> {
59
+ VertexRendering .drawBox (matrices , vertices .getBuffer (RenderLayer .getLines ()), box .offset (entity .pos .multiply (-1 )), 1 , 1 , 1 , 1 );
55
60
});
56
61
}
57
62
58
63
}
59
64
65
+
66
+ @ Override
67
+ public State createRenderState () {
68
+ return new State ();
69
+ }
70
+
60
71
@ Override
61
- public Identifier getTexture (AirBalloonEntity entity ) {
62
- return getComponentTexture ("basket/" + entity .getBasketType ().id ().getPath ());
72
+ public void updateRenderState (AirBalloonEntity entity , State state , float tickDelta ) {
73
+ super .updateRenderState (entity , state , tickDelta );
74
+ state .design = entity .getDesign ();
75
+ state .basket = entity .getBasketType ();
76
+ state .inflation = entity .getInflation (tickDelta );
77
+ state .hasBurner = entity .hasBurner ();
78
+ state .hasBalloon = entity .hasBalloon ();
79
+ state .isAscending = entity .isAscending ();
80
+ state .boundingBox = entity .getBoundingBox ();
81
+ state .hasSoulFlame = entity .getStackInHand (Hand .MAIN_HAND ).isOf (Items .SOUL_LANTERN );
82
+ state .pos = entity .getPos ();
83
+ }
84
+
85
+ public static class State extends LivingEntityRenderState {
86
+ public BalloonDesign design ;
87
+ public BasketType basket ;
88
+
89
+ public float inflation ;
90
+ public boolean hasBurner ;
91
+ public boolean hasBalloon ;
92
+ public boolean isAscending ;
93
+ public boolean hasSoulFlame ;
94
+ public Box boundingBox ;
95
+ public Vec3d pos ;
63
96
}
64
97
65
98
@ Override
66
- protected float getLyingAngle (AirBalloonEntity entity ) {
67
- return 0 ;
99
+ protected Box getBoundingBox (AirBalloonEntity entity ) {
100
+ if (entity .hasBalloon ()) {
101
+ return entity .getBalloonBoundingBox ().withMinY (entity .getY ());
102
+ }
103
+ return entity .getInteriorBoundingBox ();
104
+ }
105
+
106
+ @ Override
107
+ public Identifier getTexture (State entity ) {
108
+ return getComponentTexture ("basket/" + entity .basket .id ().getPath ());
109
+ }
110
+
111
+ @ Override
112
+ protected float method_3919 () {
113
+ return 90.0F ;
68
114
}
69
115
70
116
private Identifier getComponentTexture (String componentName ) {
71
117
return Unicopia .id ("textures/entity/air_balloon/" + componentName + ".png" );
72
118
}
73
119
74
- final class BalloonFeature extends FeatureRenderer <AirBalloonEntity , AirBalloonEntityModel > {
120
+ final class BalloonFeature extends FeatureRenderer <State , AirBalloonEntityModel > {
75
121
private final AirBalloonEntityModel model ;
76
- private final Predicate <AirBalloonEntity > visibilityTest ;
77
- private final Function <AirBalloonEntity , Identifier > textureFunc ;
78
- private final BiFunction <Integer , AirBalloonEntity , Integer > lightFunc ;
122
+ private final Predicate <State > visibilityTest ;
123
+ private final Function <State , Identifier > textureFunc ;
124
+ private final BiFunction <Integer , State , Integer > lightFunc ;
79
125
80
126
public BalloonFeature (AirBalloonEntityModel model ,
81
- FeatureRendererContext <AirBalloonEntity , AirBalloonEntityModel > context ,
82
- Predicate <AirBalloonEntity > visibilityTest ,
83
- Function <AirBalloonEntity , Identifier > textureFunc ,
84
- BiFunction <Integer , AirBalloonEntity , Integer > lightFunc ) {
127
+ FeatureRendererContext <State , AirBalloonEntityModel > context ,
128
+ Predicate <State > visibilityTest ,
129
+ Function <State , Identifier > textureFunc ,
130
+ BiFunction <Integer , State , Integer > lightFunc ) {
85
131
super (context );
86
132
this .model = model ;
87
133
this .visibilityTest = visibilityTest ;
@@ -90,16 +136,11 @@ public BalloonFeature(AirBalloonEntityModel model,
90
136
}
91
137
92
138
@ Override
93
- public void render (MatrixStack matrices , VertexConsumerProvider vertices , int light , AirBalloonEntity entity ,
94
- float limbAngle , float limbDistance , float tickDelta , float animationProgress , float yaw , float pitch ) {
139
+ public void render (MatrixStack matrices , VertexConsumerProvider vertices , int light , State entity , float limbDistance , float limbAngle ) {
95
140
if (visibilityTest .test (entity )) {
96
- Identifier texture = textureFunc .apply (entity );
97
- var model = this .model ;
98
- if (texture .getPath ().indexOf ("sandbags" ) != -1 ) {
99
- model = new AirBalloonEntityModel (AirBalloonEntityModel .getSandbagsModelData ().createModel ());
100
- }
101
- render (getModel (), model , texture , matrices , vertices , lightFunc .apply (light , entity ), entity , limbAngle , limbDistance , 0 , yaw , pitch , tickDelta , Colors .WHITE );
141
+ render (model , textureFunc .apply (entity ), matrices , vertices , lightFunc .apply (light , entity ), entity , Colors .WHITE );
102
142
}
103
143
}
104
144
}
145
+
105
146
}
0 commit comments