77import hellfirepvp .modularmachinery .common .base .Mods ;
88import hellfirepvp .modularmachinery .common .data .Config ;
99import hellfirepvp .modularmachinery .common .tiles .base .TileMultiblockMachineController ;
10+ import io .netty .util .internal .ThrowableUtil ;
1011import net .minecraft .client .Minecraft ;
1112import net .minecraft .client .renderer .BufferBuilder ;
1213import net .minecraft .client .renderer .GlStateManager ;
2122import software .bernie .geckolib3 .core .IAnimatable ;
2223import software .bernie .geckolib3 .core .IAnimatableModel ;
2324import software .bernie .geckolib3 .core .controller .AnimationController ;
24- import software .bernie .geckolib3 .core .util .Color ;
2525import software .bernie .geckolib3 .geo .render .built .*;
2626
2727import javax .vecmath .Vector3f ;
3030import java .util .WeakHashMap ;
3131
3232@ SuppressWarnings ({"unchecked" , "rawtypes" })
33- @ Optional .Interface (iface = "software.bernie.geckolib3.renderers.geo.IGeoRenderer" , modid = "geckolib3" )
3433public class MachineControllerRenderer extends TileEntitySpecialRenderer <TileMultiblockMachineController > {
3534
3635 public static final MachineControllerRenderer INSTANCE = new MachineControllerRenderer ();
@@ -70,21 +69,14 @@ protected static void rotateBlock(EnumFacing facing) {
7069 }
7170 }
7271
73- private static EnumFacing getFacing (TileMultiblockMachineController tile ) {
74- return tile .getControllerRotation ();
75- }
76-
77- public static Color getRenderColor (TileMultiblockMachineController animatable , float partialTicks ) {
78- return Color .ofRGBA (255 , 255 , 255 , 255 );
79- }
80-
81- public static int getUniqueID (TileMultiblockMachineController animatable ) {
82- return animatable .hashCode ();
83- }
84-
8572 @ Override
8673 public void render (TileMultiblockMachineController te , double x , double y , double z , float partialTicks , int destroyStage , float alpha ) {
87- this .render (te , x , y , z , partialTicks , destroyStage );
74+ try {
75+ this .render (te , x , y , z , partialTicks , destroyStage );
76+ } catch (Throwable e ) {
77+ ModularMachinery .log .warn ("Failed to render controller model!" );
78+ ModularMachinery .log .warn (ThrowableUtil .stackTraceToString (e ));
79+ }
8880 }
8981
9082 @ Optional .Method (modid = "geckolib3" )
@@ -102,40 +94,47 @@ public void render(TileMultiblockMachineController tile, double x, double y, dou
10294 OpenGlHelper .setLightmapTextureCoords (OpenGlHelper .lightmapTexUnit , lx , ly );
10395 GlStateManager .setActiveTexture (OpenGlHelper .defaultTexUnit );
10496
105- GlStateManager .pushMatrix ();
106- GlStateManager .translate (x , y , z );
107- GlStateManager .translate (0 , 0.01f , 0 );
108- GlStateManager .translate (0.5 , 0 , 0.5 );
109-
110- rotateBlock (getFacing (tile ));
111-
11297 Minecraft .getMinecraft ().renderEngine .bindTexture (modelProvider .getTextureLocation ());
113- render (modelProvider , tile , partialTicks );
114- GlStateManager .popMatrix ();
98+ render (modelProvider , tile , x , y , z , partialTicks );
11599 }
116100
117101 @ Optional .Method (modid = "geckolib3" )
118102 public void render (final MachineControllerModel modelProvider ,
119103 final TileMultiblockMachineController tile ,
104+ double x , double y , double z ,
120105 final float partialTicks )
121106 {
122107 GlStateManager .disableCull ();
123108 GlStateManager .enableRescaleNormal ();
109+ GlStateManager .tryBlendFuncSeparate (GlStateManager .SourceFactor .SRC_ALPHA , GlStateManager .DestFactor .ONE_MINUS_SRC_ALPHA , GlStateManager .SourceFactor .ONE , GlStateManager .DestFactor .ZERO );
110+ GlStateManager .alphaFunc (516 , 0.1F );
111+ GlStateManager .enableBlend ();
112+ GlStateManager .depthMask (true );
113+ GlStateManager .shadeModel (7425 );
114+
115+ GlStateManager .pushMatrix ();
116+ GlStateManager .translate (x , y , z );
117+ GlStateManager .translate (0 , 0.01f , 0 );
118+ GlStateManager .translate (0.5 , 0 , 0.5 );
119+ rotateBlock (tile .getControllerRotation ());
124120
125121 if (Config .asyncControllerModelRender ) {
126- renderWithBuffer (tile , partialTicks );
122+ renderWithBuffer (tile );
127123 } else {
128- renderWithDefault (modelProvider , tile , partialTicks );
124+ renderWithDefault (modelProvider , tile );
129125 }
130126
127+ GlStateManager .popMatrix ();
128+ GlStateManager .resetColor ();
131129 GlStateManager .disableRescaleNormal ();
132130 GlStateManager .enableCull ();
133131 }
134132
135- private void renderWithBuffer (final TileMultiblockMachineController animatable , final float partialTicks ) {
133+ @ Optional .Method (modid = "geckolib3" )
134+ private void renderWithBuffer (final TileMultiblockMachineController animatable ) {
136135 GeoModelRenderTask task = TASKS .get (animatable );
137136 if (task == null ) {
138- task = new GeoModelRenderTask (this , animatable , partialTicks );
137+ task = new GeoModelRenderTask (this , animatable );
139138 task .compute ();
140139 } else if (!task .isDone ()) {
141140 long current = System .currentTimeMillis ();
@@ -146,73 +145,57 @@ private void renderWithBuffer(final TileMultiblockMachineController animatable,
146145 }
147146 }
148147
149- GlStateManager .tryBlendFuncSeparate (GlStateManager .SourceFactor .SRC_ALPHA , GlStateManager .DestFactor .ONE_MINUS_SRC_ALPHA , GlStateManager .SourceFactor .ONE , GlStateManager .DestFactor .ZERO );
150- GlStateManager .alphaFunc (516 , 0.1F );
151- GlStateManager .enableBlend ();
152- GlStateManager .depthMask (true );
153- GlStateManager .shadeModel (7425 );
154-
155148 task .draw ();
156-
157- GlStateManager .resetColor ();
158-
159149 task .reinitialize ();
160150 TASKS .put (animatable , (GeoModelRenderTask ) TaskExecutor .FORK_JOIN_POOL .submit (task ));
161151 }
162152
153+ @ Optional .Method (modid = "geckolib3" )
163154 private void renderWithDefault (final MachineControllerModel modelProvider ,
164- final TileMultiblockMachineController tile ,
165- final float partialTicks )
155+ final TileMultiblockMachineController ctrl )
166156 {
167157 GeoModel model = modelProvider .getModel ();
168- modelProvider .setLivingAnimations (tile , getUniqueID ( tile ));
158+ modelProvider .setLivingAnimations (ctrl , ctrl . hashCode ( ));
169159
170160 BufferBuilder builder = Tessellator .getInstance ().getBuffer ();
171-
172161 builder .begin (GL11 .GL_QUADS , VERTEX_FORMAT );
173162
174- Color renderColor = getRenderColor (tile , partialTicks );
175- float r = (float ) renderColor .getRed () / 255f ;
176- float g = (float ) renderColor .getGreen () / 255f ;
177- float b = (float ) renderColor .getBlue () / 255f ;
178- float a = (float ) renderColor .getAlpha () / 255f ;
179-
180163 // Render all top level bones
181164 for (GeoBone group : model .topLevelBones ) {
182- renderRecursively (builder , group , r , g , b , a );
165+ renderRecursively (builder , group , 1F , 1F , 1F , 1F );
183166 }
184167
185168 Tessellator .getInstance ().draw ();
186169 }
187170
188- public void renderAsync (TileMultiblockMachineController tile , BufferBuilder buffer , BufferBuilder emissiveBuffer , float partialTicks ) {
171+ @ Optional .Method (modid = "geckolib3" )
172+ public void renderAsync (TileMultiblockMachineController tile ,
173+ BufferBuilder buffer , BufferBuilder emissiveBuffer )
174+ {
189175 MachineControllerModel modelProvider = tile .getCurrentModel ();
190176 if (modelProvider == null ) {
191177 return ;
192178 }
193179 GeoModel model = modelProvider .getModel ();
194180 synchronized (model ) {
195- modelProvider .setLivingAnimations (tile , getUniqueID (tile ));
196-
181+ modelProvider .setLivingAnimations (tile , tile .hashCode ());
197182 buffer .begin (GL11 .GL_QUADS , VERTEX_FORMAT );
198-
199- Color renderColor = getRenderColor (tile , partialTicks );
200- float r = (float ) renderColor .getRed () / 255f ;
201- float g = (float ) renderColor .getGreen () / 255f ;
202- float b = (float ) renderColor .getBlue () / 255f ;
203- float a = (float ) renderColor .getAlpha () / 255f ;
183+ emissiveBuffer .begin (GL11 .GL_QUADS , VERTEX_FORMAT );
204184
205185 // Render all top level bones
206186 for (GeoBone group : model .topLevelBones ) {
207- renderRecursively (buffer , emissiveBuffer , group , r , g , b , a );
187+ renderRecursively (buffer , emissiveBuffer , group , 1F , 1F , 1F , 1F );
208188 }
209189
190+ emissiveBuffer .finishDrawing ();
210191 buffer .finishDrawing ();
211192 }
212193 }
213194
214195 @ Optional .Method (modid = "geckolib3" )
215- public void renderRecursively (BufferBuilder buffer , GeoBone bone , float red , float green , float blue , float alpha ) {
196+ public void renderRecursively (BufferBuilder buffer , GeoBone bone ,
197+ float red , float green , float blue , float alpha )
198+ {
216199 boolean emissive = bone .name .equals ("emissive" );
217200 float lastBrightnessX = 0 ;
218201 float lastBrightnessY = 0 ;
@@ -221,7 +204,7 @@ public void renderRecursively(BufferBuilder buffer, GeoBone bone, float red, flo
221204 lastBrightnessX = OpenGlHelper .lastBrightnessX ;
222205 lastBrightnessY = OpenGlHelper .lastBrightnessY ;
223206 OpenGlHelper .setLightmapTextureCoords (OpenGlHelper .lightmapTexUnit , 240f , 240f );
224- buffer .begin (GL11 .GL_QUADS , DefaultVertexFormats . POSITION_TEX_COLOR_NORMAL );
207+ buffer .begin (GL11 .GL_QUADS , VERTEX_FORMAT );
225208 }
226209
227210 MatrixStack matrixStack = MATRIX_STACK .get ();
@@ -250,12 +233,15 @@ public void renderRecursively(BufferBuilder buffer, GeoBone bone, float red, flo
250233 if (emissive ) {
251234 Tessellator .getInstance ().draw ();
252235 OpenGlHelper .setLightmapTextureCoords (OpenGlHelper .lightmapTexUnit , lastBrightnessX , lastBrightnessY );
253- buffer .begin (GL11 .GL_QUADS , DefaultVertexFormats . POSITION_TEX_COLOR_NORMAL );
236+ buffer .begin (GL11 .GL_QUADS , VERTEX_FORMAT );
254237 }
255238 }
256239
257240 @ Optional .Method (modid = "geckolib3" )
258- public void renderRecursively (BufferBuilder buffer , BufferBuilder emissiveBuffer , GeoBone bone , float red , float green , float blue , float alpha ) {
241+ public void renderRecursively (BufferBuilder buffer , BufferBuilder emissiveBuffer ,
242+ GeoBone bone ,
243+ float red , float green , float blue , float alpha )
244+ {
259245 boolean emissive = bone .name .equals ("emissive" );
260246
261247 MatrixStack matrixStack = MATRIX_STACK .get ();
@@ -284,7 +270,10 @@ public void renderRecursively(BufferBuilder buffer, BufferBuilder emissiveBuffer
284270 }
285271
286272 @ Optional .Method (modid = "geckolib3" )
287- public void renderCube (final BufferBuilder builder , final GeoCube cube , final float red , final float green , final float blue , final float alpha ) {
273+ public void renderCube (final BufferBuilder builder ,
274+ final GeoCube cube ,
275+ final float red , final float green , final float blue , final float alpha )
276+ {
288277 MatrixStack matrixStack = MATRIX_STACK .get ();
289278 matrixStack .moveToPivot (cube );
290279 matrixStack .rotate (cube );
0 commit comments