Skip to content

Commit 6444bd4

Browse files
committed
Fix SimpleBlockRenderer and WireframeEntityRenderer
1 parent 9d6907e commit 6444bd4

File tree

5 files changed

+177
-42
lines changed

5 files changed

+177
-42
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client).
3+
* Copyright (c) Meteor Development.
4+
*/
5+
6+
package meteordevelopment.meteorclient.utils.render;
7+
8+
import net.minecraft.client.render.RenderLayer;
9+
import net.minecraft.client.render.VertexConsumer;
10+
import net.minecraft.client.render.VertexConsumerProvider;
11+
12+
public class NoopImmediateVertexConsumerProvider extends VertexConsumerProvider.Immediate {
13+
public static final NoopImmediateVertexConsumerProvider INSTANCE = new NoopImmediateVertexConsumerProvider();
14+
15+
private NoopImmediateVertexConsumerProvider() {
16+
super(null, null);
17+
}
18+
19+
@Override
20+
public VertexConsumer getBuffer(RenderLayer layer) {
21+
return NoopVertexConsumer.INSTANCE;
22+
}
23+
24+
@Override
25+
public void draw() {
26+
}
27+
28+
@Override
29+
public void draw(RenderLayer layer) {
30+
}
31+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client).
3+
* Copyright (c) Meteor Development.
4+
*/
5+
6+
package meteordevelopment.meteorclient.utils.render;
7+
8+
import net.minecraft.client.render.OutlineVertexConsumerProvider;
9+
import net.minecraft.client.render.RenderLayer;
10+
import net.minecraft.client.render.VertexConsumer;
11+
12+
public class NoopOutlineVertexConsumerProvider extends OutlineVertexConsumerProvider {
13+
public static final NoopOutlineVertexConsumerProvider INSTANCE = new NoopOutlineVertexConsumerProvider();
14+
15+
private NoopOutlineVertexConsumerProvider() {
16+
}
17+
18+
@Override
19+
public VertexConsumer getBuffer(RenderLayer layer) {
20+
return NoopVertexConsumer.INSTANCE;
21+
}
22+
23+
@Override
24+
public void draw() {
25+
}
26+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client).
3+
* Copyright (c) Meteor Development.
4+
*/
5+
6+
package meteordevelopment.meteorclient.utils.render;
7+
8+
import net.minecraft.client.render.VertexConsumer;
9+
10+
public class NoopVertexConsumer implements VertexConsumer {
11+
public static final NoopVertexConsumer INSTANCE = new NoopVertexConsumer();
12+
13+
private NoopVertexConsumer() {
14+
}
15+
16+
@Override
17+
public VertexConsumer vertex(float x, float y, float z) {
18+
return this;
19+
}
20+
21+
@Override
22+
public VertexConsumer color(int red, int green, int blue, int alpha) {
23+
return this;
24+
}
25+
26+
@Override
27+
public VertexConsumer texture(float u, float v) {
28+
return this;
29+
}
30+
31+
@Override
32+
public VertexConsumer overlay(int u, int v) {
33+
return this;
34+
}
35+
36+
@Override
37+
public VertexConsumer light(int u, int v) {
38+
return this;
39+
}
40+
41+
@Override
42+
public VertexConsumer normal(float x, float y, float z) {
43+
return this;
44+
}
45+
}

src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import net.minecraft.client.render.VertexConsumerProvider;
1515
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
1616
import net.minecraft.client.render.block.entity.state.BlockEntityRenderState;
17+
import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl;
18+
import net.minecraft.client.render.command.RenderDispatcher;
1719
import net.minecraft.client.render.model.BakedQuad;
1820
import net.minecraft.client.render.model.BlockModelPart;
1921
import net.minecraft.client.render.model.BlockStateModel;
@@ -34,6 +36,20 @@ public abstract class SimpleBlockRenderer {
3436
private static final Direction[] DIRECTIONS = Direction.values();
3537
private static final Random RANDOM = Random.create();
3638

39+
private static final OrderedRenderCommandQueueImpl renderCommandQueue = new OrderedRenderCommandQueueImpl();
40+
41+
private static final RenderDispatcher renderDispatcher = new RenderDispatcher(
42+
renderCommandQueue,
43+
mc.getBlockRenderManager(),
44+
new WrapperImmediateVertexConsumerProvider(),
45+
mc.getAtlasManager(),
46+
NoopOutlineVertexConsumerProvider.INSTANCE,
47+
NoopImmediateVertexConsumerProvider.INSTANCE,
48+
mc.textRenderer
49+
);
50+
51+
private static VertexConsumerProvider provider;
52+
3753
private SimpleBlockRenderer() {}
3854

3955
public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelta, IVertexConsumerProvider vertexConsumerProvider) {
@@ -43,9 +59,16 @@ public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelt
4359
BlockEntityRenderer<BlockEntity, BlockEntityRenderState> renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity);
4460

4561
if (renderer != null && blockEntity.hasWorld() && blockEntity.getType().supports(blockEntity.getCachedState())) {
62+
SimpleBlockRenderer.provider = vertexConsumerProvider;
63+
4664
BlockEntityRenderState state = renderer.createRenderState();
4765
renderer.updateRenderState(blockEntity, state, tickDelta, mc.gameRenderer.getCamera().getPos(), null);
48-
renderer.render(state, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue(), mc.gameRenderer.getEntityRenderStates().cameraRenderState);
66+
renderer.render(state, MATRICES, renderCommandQueue, mc.gameRenderer.getEntityRenderStates().cameraRenderState);
67+
68+
renderDispatcher.render();
69+
renderCommandQueue.onNextFrame();
70+
71+
SimpleBlockRenderer.provider = null;
4972
}
5073

5174
vertexConsumerProvider.setOffset(0, 0, 0);
@@ -90,4 +113,23 @@ private static void renderQuads(List<BakedQuad> quads, float offsetX, float offs
90113
}
91114
}
92115
}
116+
117+
private static class WrapperImmediateVertexConsumerProvider extends VertexConsumerProvider.Immediate {
118+
private WrapperImmediateVertexConsumerProvider() {
119+
super(null, null);
120+
}
121+
122+
@Override
123+
public VertexConsumer getBuffer(RenderLayer layer) {
124+
return provider.getBuffer(layer);
125+
}
126+
127+
@Override
128+
public void draw() {
129+
}
130+
131+
@Override
132+
public void draw(RenderLayer layer) {
133+
}
134+
}
93135
}

src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java

Lines changed: 32 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,10 @@
1616
import net.minecraft.client.render.RenderPhase;
1717
import net.minecraft.client.render.VertexConsumer;
1818
import net.minecraft.client.render.VertexConsumerProvider;
19-
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
2019
import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl;
20+
import net.minecraft.client.render.command.RenderDispatcher;
2121
import net.minecraft.client.render.entity.EntityRenderer;
2222
import net.minecraft.client.render.entity.state.EntityRenderState;
23-
import net.minecraft.client.render.state.CameraRenderState;
2423
import net.minecraft.client.util.math.MatrixStack;
2524
import net.minecraft.entity.Entity;
2625
import net.minecraft.util.math.MathHelper;
@@ -32,7 +31,18 @@ public class WireframeEntityRenderer {
3231
private static final MatrixStack matrices = new MatrixStack();
3332

3433
private static Renderer3D renderer;
35-
private static final OrderedRenderCommandQueue entityRenderCommandQueue = new OrderedRenderCommandQueueImpl();
34+
35+
private static final OrderedRenderCommandQueueImpl renderCommandQueue = new OrderedRenderCommandQueueImpl();
36+
37+
private static final RenderDispatcher renderDispatcher = new RenderDispatcher(
38+
renderCommandQueue,
39+
mc.getBlockRenderManager(),
40+
MyVertexConsumerProvider.INSTANCE,
41+
mc.getAtlasManager(),
42+
NoopOutlineVertexConsumerProvider.INSTANCE,
43+
NoopImmediateVertexConsumerProvider.INSTANCE,
44+
mc.textRenderer
45+
);
3646

3747
private static Color sideColor;
3848
private static Color lineColor;
@@ -68,16 +78,21 @@ public static void render(Render3DEvent event, Entity entity, double scale, Colo
6878

6979
matrices.push();
7080
matrices.scale((float) scale, (float) scale, (float) scale);
71-
renderer.render(state, matrices, entityRenderCommandQueue, new CameraRenderState());
72-
// todo this just adds the entities to a list, we need to actually render them somewhere by calling
73-
// net.minecraft.class_11688.method_73012
81+
renderer.render(state, matrices, renderCommandQueue, mc.gameRenderer.getEntityRenderStates().cameraRenderState);
7482
matrices.pop();
83+
84+
renderDispatcher.render();
85+
renderCommandQueue.onNextFrame();
7586
}
7687

77-
private static class MyVertexConsumerProvider implements VertexConsumerProvider {
88+
private static class MyVertexConsumerProvider extends VertexConsumerProvider.Immediate {
7889
public static final MyVertexConsumerProvider INSTANCE = new MyVertexConsumerProvider();
7990
private final Object2ObjectOpenHashMap<RenderLayer, MyVertexConsumer> buffers = new Object2ObjectOpenHashMap<>();
8091

92+
protected MyVertexConsumerProvider() {
93+
super(null, null);
94+
}
95+
8196
@Override
8297
public VertexConsumer getBuffer(RenderLayer layer) {
8398
//noinspection ConstantValue
@@ -94,6 +109,16 @@ public VertexConsumer getBuffer(RenderLayer layer) {
94109

95110
return vertexConsumer;
96111
}
112+
113+
@Override
114+
public void draw() {
115+
throw new RuntimeException();
116+
}
117+
118+
@Override
119+
public void draw(RenderLayer layer) {
120+
throw new RuntimeException();
121+
}
97122
}
98123

99124
private static class MyVertexConsumer implements VertexConsumer {
@@ -153,38 +178,4 @@ public VertexConsumer normal(float x, float y, float z) {
153178
return this;
154179
}
155180
}
156-
157-
private static class NoopVertexConsumer implements VertexConsumer {
158-
private static final NoopVertexConsumer INSTANCE = new NoopVertexConsumer();
159-
160-
@Override
161-
public VertexConsumer vertex(float x, float y, float z) {
162-
return this;
163-
}
164-
165-
@Override
166-
public VertexConsumer color(int red, int green, int blue, int alpha) {
167-
return this;
168-
}
169-
170-
@Override
171-
public VertexConsumer texture(float u, float v) {
172-
return this;
173-
}
174-
175-
@Override
176-
public VertexConsumer overlay(int u, int v) {
177-
return this;
178-
}
179-
180-
@Override
181-
public VertexConsumer light(int u, int v) {
182-
return this;
183-
}
184-
185-
@Override
186-
public VertexConsumer normal(float x, float y, float z) {
187-
return this;
188-
}
189-
}
190181
}

0 commit comments

Comments
 (0)