Skip to content

Commit f8ee33b

Browse files
committed
Bake model once and cache, fix directional rotation rendering
1 parent ed129d4 commit f8ee33b

File tree

1 file changed

+35
-40
lines changed

1 file changed

+35
-40
lines changed
Lines changed: 35 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,23 @@
11
package com.robotgryphon.compactcrafting.client.render;
22

33
import com.mojang.blaze3d.matrix.MatrixStack;
4-
import com.mojang.blaze3d.platform.GlStateManager;
54
import com.mojang.blaze3d.vertex.IVertexBuilder;
6-
import com.robotgryphon.compactcrafting.CompactCrafting;
75
import com.robotgryphon.compactcrafting.blocks.FieldProjectorBlock;
86
import com.robotgryphon.compactcrafting.blocks.tiles.FieldProjectorTile;
97
import com.robotgryphon.compactcrafting.core.Constants;
10-
import com.robotgryphon.compactcrafting.core.Registration;
118
import net.minecraft.block.BlockState;
12-
import net.minecraft.block.Blocks;
139
import net.minecraft.client.Minecraft;
14-
import net.minecraft.client.renderer.*;
10+
import net.minecraft.client.renderer.Atlases;
11+
import net.minecraft.client.renderer.BlockRendererDispatcher;
12+
import net.minecraft.client.renderer.IRenderTypeBuffer;
1513
import net.minecraft.client.renderer.model.IBakedModel;
1614
import net.minecraft.client.renderer.model.ModelManager;
17-
import net.minecraft.client.renderer.texture.AtlasTexture;
18-
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
1915
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
2016
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
21-
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
2217
import net.minecraft.util.Direction;
23-
import net.minecraft.util.ResourceLocation;
24-
import net.minecraft.util.math.BlockPos;
25-
import net.minecraft.util.math.vector.Quaternion;
2618
import net.minecraft.util.math.vector.Vector3f;
27-
import net.minecraft.world.World;
2819
import net.minecraftforge.client.model.ModelDataManager;
29-
import net.minecraftforge.client.model.ModelLoaderRegistry;
30-
import net.minecraftforge.client.model.data.EmptyModelData;
3120
import net.minecraftforge.client.model.data.IModelData;
32-
import org.lwjgl.opengl.GL11;
33-
import org.lwjgl.opengl.GLXEXTStereoTree;
3421

3522
public class FieldProjectorRenderer extends TileEntityRenderer<FieldProjectorTile> {
3623

@@ -40,6 +27,7 @@ enum RotationSpeed {
4027
FAST(1000);
4128

4229
private int speed;
30+
4331
RotationSpeed(int speed) {
4432
this.speed = speed;
4533
}
@@ -49,26 +37,43 @@ public int getSpeed() {
4937
}
5038
}
5139

52-
// private static IModel model;
53-
private static IBakedModel bakedModel;
54-
private static final ResourceLocation TEXTURE = new ResourceLocation(CompactCrafting.MOD_ID, "block/field_projector_dish");
40+
private IBakedModel bakedModelCached;
5541

5642
public FieldProjectorRenderer(TileEntityRendererDispatcher rendererDispatcherIn) {
5743
super(rendererDispatcherIn);
44+
45+
5846
}
5947

6048
@Override
6149
public void render(FieldProjectorTile tileEntityIn, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
6250
renderDish(tileEntityIn, matrixStackIn, bufferIn, combinedLightIn, combinedOverlayIn);
6351
}
6452

53+
private IBakedModel getModel() {
54+
if (bakedModelCached == null) {
55+
ModelManager models = Minecraft.getInstance()
56+
.getItemRenderer()
57+
.getItemModelMesher()
58+
.getModelManager();
59+
60+
61+
bakedModelCached = models.getModel(Constants.FIELD_DISH_RL);
62+
}
63+
64+
return bakedModelCached;
65+
}
66+
6567
private void renderDish(FieldProjectorTile te, MatrixStack mx, IRenderTypeBuffer buffer, int combinedLight, int combinedOverlay) {
66-
// GlStateManager.pushAttrib();
67-
// TextureAtlasSprite sprite = Minecraft.getInstance()
68-
// .getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE)
69-
// .apply(TEXTURE);
7068

69+
BlockState state = te.getBlockState();
70+
71+
BlockRendererDispatcher blockRenderer = Minecraft.getInstance().getBlockRendererDispatcher();
72+
73+
IVertexBuilder cutoutBlocks = buffer.getBuffer(Atlases.getCutoutBlockType());
74+
IModelData model = ModelDataManager.getModelData(te.getWorld(), te.getPos());
7175

76+
IBakedModel baked = this.getModel();
7277

7378
mx.push();
7479

@@ -78,32 +83,22 @@ private void renderDish(FieldProjectorTile te, MatrixStack mx, IRenderTypeBuffer
7883
double yaw = Math.sin(Math.toDegrees(RenderTickCounter.renderTicks) / speed.getSpeed()) * 10;
7984
// double yaw = Math.random();
8085

86+
Direction facing = state.get(FieldProjectorBlock.FACING);
87+
float angle = facing.getHorizontalAngle() - 90;
88+
mx.rotate(Vector3f.YN.rotationDegrees(angle));
89+
8190
float yDiskOffset = -0.66f;
8291
mx.translate(0.0, -yDiskOffset, 0.0);
8392
mx.rotate(Vector3f.ZP.rotationDegrees((float) yaw));
8493
mx.translate(0.0, yDiskOffset, 0.0);
8594

8695
mx.translate(-.5, 0, -.5);
8796

88-
BlockRendererDispatcher blockRenderer = Minecraft.getInstance().getBlockRendererDispatcher();
89-
ModelManager models = Minecraft.getInstance()
90-
.getItemRenderer()
91-
.getItemModelMesher()
92-
.getModelManager();
93-
94-
IBakedModel bakedModel = models.getModel(Constants.FIELD_DISH_RL);
95-
BlockState state = te.getBlockState();
96-
IVertexBuilder cutoutBlocks = buffer.getBuffer(Atlases.getCutoutBlockType());
97-
IModelData model = ModelDataManager.getModelData(te.getWorld(), te.getPos());
98-
9997
blockRenderer.getBlockModelRenderer()
100-
.renderModel(mx.getLast(), cutoutBlocks, state, bakedModel, 1, 1, 1, combinedLight, combinedOverlay,
101-
model);
102-
103-
// blockRenderer.renderBlock(state, mx, buffer, combinedLight, combinedOverlay, EmptyModelData.INSTANCE);
98+
.renderModel(mx.getLast(), cutoutBlocks, state,
99+
baked, 1, 1, 1,
100+
combinedLight, combinedOverlay, model);
104101

105102
mx.pop();
106-
107-
// GlStateManager.popAttrib();
108103
}
109104
}

0 commit comments

Comments
 (0)