Skip to content

Commit 26c9e08

Browse files
committed
ok i'll admit this one might be a bit unnecessary
1 parent 8d0b013 commit 26c9e08

3 files changed

Lines changed: 125 additions & 56 deletions

File tree

src/main/java/meteordevelopment/meteorclient/gui/widgets/WBlock.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
import meteordevelopment.meteorclient.renderer.Texture;
1414
import meteordevelopment.meteorclient.utils.render.SimpleBlockRenderer;
1515
import net.minecraft.block.BlockState;
16+
import net.minecraft.client.MinecraftClient;
1617
import net.minecraft.client.render.ProjectionMatrix2;
17-
import net.minecraft.client.render.RenderLayers;
1818
import net.minecraft.client.render.VertexConsumerProvider;
1919
import net.minecraft.client.util.BufferAllocator;
2020
import net.minecraft.client.util.math.MatrixStack;
@@ -111,7 +111,7 @@ private static Texture renderBlock(@Nullable Texture color, BlockState state) {
111111
view.scale(0.625f, 0.625f, -0.625f);
112112
view.translate(0.5f, 0, -0.5f);
113113

114-
SimpleBlockRenderer.renderShaded(BlockPos.ORIGIN, state, new MatrixStack(), IMMEDIATE.getBuffer(RenderLayers.cutout()));
114+
SimpleBlockRenderer.renderFull(null, BlockPos.ORIGIN, state, null, new MatrixStack(), MinecraftClient.getInstance().getRenderTickCounter().getDynamicDeltaTicks(), IMMEDIATE);
115115
IMMEDIATE.draw();
116116

117117
view.popMatrix();

src/main/java/meteordevelopment/meteorclient/systems/modules/render/StorageESP.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import net.minecraft.block.ChestBlock;
3434
import net.minecraft.block.entity.*;
3535
import net.minecraft.block.enums.ChestType;
36+
import net.minecraft.client.util.math.MatrixStack;
3637
import net.minecraft.util.math.BlockPos;
3738
import net.minecraft.util.math.Direction;
3839

@@ -341,7 +342,7 @@ private void renderBox(Render3DEvent event, BlockEntity blockEntity) {
341342

342343
private void renderShader(Render3DEvent event, BlockEntity blockEntity) {
343344
vertexConsumerProvider.setColor(lineColor);
344-
SimpleBlockRenderer.renderWithBlockEntity(blockEntity, event.tickDelta, vertexConsumerProvider);
345+
SimpleBlockRenderer.renderFlat(mc.world, blockEntity.getPos(), blockEntity.getCachedState(), blockEntity, new MatrixStack(), event.tickDelta, vertexConsumerProvider);
345346
}
346347

347348
@Override

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

Lines changed: 121 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55

66
package meteordevelopment.meteorclient.utils.render;
77

8+
import meteordevelopment.meteorclient.MeteorClient;
89
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry;
910
import net.fabricmc.loader.api.FabricLoader;
1011
import net.minecraft.block.BlockRenderType;
1112
import net.minecraft.block.BlockState;
13+
import net.minecraft.block.BlockWithEntity;
1214
import net.minecraft.block.Blocks;
1315
import net.minecraft.block.entity.BlockEntity;
1416
import net.minecraft.client.MinecraftClient;
@@ -45,7 +47,6 @@
4547

4648
public abstract class SimpleBlockRenderer {
4749
private static final boolean FABRIC_FLUID_RENDERER = FabricLoader.getInstance().isModLoaded("fabric-rendering-fluids-v1");
48-
private static final MatrixStack MATRICES = new MatrixStack();
4950
private static final List<BlockModelPart> PARTS = new ArrayList<>();
5051
private static final Direction[] DIRECTIONS = Direction.values();
5152
private static final Random RANDOM = Random.create();
@@ -67,37 +68,86 @@ public abstract class SimpleBlockRenderer {
6768

6869
private SimpleBlockRenderer() {}
6970

70-
public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelta, VertexConsumerProvider vertexConsumerProvider) {
71-
MATRICES.push();
72-
MATRICES.translate(blockEntity.getPos().getX(), blockEntity.getPos().getY(), blockEntity.getPos().getZ());
71+
public static void renderFlat(@Nullable BlockRenderView renderView, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, MatrixStack matrices, float tickDelta, VertexConsumerProvider vertexConsumerProvider) {
72+
matrices.push();
73+
matrices.translate(pos.getX(), pos.getY(), pos.getZ());
74+
75+
if (renderView == null) {
76+
renderView = new StaticBlockRenderView(pos, state);
77+
}
7378

7479
// Render block model
75-
var consumer = vertexConsumerProvider.getBuffer(RenderLayers.solid());
76-
SimpleBlockRenderer.renderFlat(blockEntity.getPos(), blockEntity.getCachedState(), MATRICES, consumer);
80+
if (state.getRenderType() == BlockRenderType.MODEL) {
81+
VertexConsumer consumer = vertexConsumerProvider.getBuffer(RenderLayers.solid());
82+
83+
BlockStateModel model = mc.getBlockRenderManager().getModel(state);
84+
RANDOM.setSeed(state.getRenderingSeed(pos));
85+
model.addParts(RANDOM, PARTS);
86+
87+
matrices.translate(state.getModelOffset(pos));
88+
Matrix4f matrix4f = matrices.peek().getPositionMatrix();
89+
90+
for (BlockModelPart part : PARTS) {
91+
for (Direction direction : DIRECTIONS) {
92+
List<BakedQuad> quads = part.getQuads(direction);
93+
if (!quads.isEmpty()) renderQuads(quads, matrix4f, consumer);
94+
}
95+
96+
List<BakedQuad> quads = part.getQuads(null);
97+
if (!quads.isEmpty()) renderQuads(quads, matrix4f, consumer);
98+
}
99+
100+
PARTS.clear();
101+
}
102+
103+
// Render fluid
104+
if (!state.getFluidState().isEmpty()) {
105+
VertexConsumer consumer = vertexConsumerProvider.getBuffer(RenderLayers.solid());
106+
renderFluid(renderView, pos, state, consumer);
107+
}
77108

78109
// Render block entity
79-
BlockEntityRenderer<BlockEntity, BlockEntityRenderState> renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity);
110+
if (blockEntity != null || state.getBlock() instanceof BlockWithEntity) {
111+
if (blockEntity == null && state.getBlock() instanceof BlockWithEntity blockWithEntity) {
112+
blockEntity = blockWithEntity.createBlockEntity(pos, state);
113+
}
80114

81-
if (renderer != null && blockEntity.hasWorld() && blockEntity.getType().supports(blockEntity.getCachedState())) {
82-
SimpleBlockRenderer.provider = vertexConsumerProvider;
115+
if (blockEntity != null) {
116+
BlockEntityRenderer<BlockEntity, BlockEntityRenderState> renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity);
117+
if (renderer != null && blockEntity.getType().supports(blockEntity.getCachedState())) {
118+
try {
119+
SimpleBlockRenderer.provider = vertexConsumerProvider;
83120

84-
BlockEntityRenderState state = renderer.createRenderState();
85-
renderer.updateRenderState(blockEntity, state, tickDelta, mc.gameRenderer.getCamera().getCameraPos(), null);
86-
renderer.render(state, MATRICES, renderCommandQueue, mc.gameRenderer.getEntityRenderStates().cameraRenderState);
121+
BlockEntityRenderState renderState = renderer.createRenderState();
122+
renderer.updateRenderState(blockEntity, renderState, tickDelta, mc.gameRenderer.getCamera().getCameraPos(), null);
123+
renderer.render(renderState, matrices, renderCommandQueue, mc.gameRenderer.getEntityRenderStates().cameraRenderState);
87124

88-
renderDispatcher.render();
89-
renderCommandQueue.onNextFrame();
125+
renderDispatcher.render();
126+
renderCommandQueue.onNextFrame();
90127

91-
SimpleBlockRenderer.provider = null;
128+
SimpleBlockRenderer.provider = null;
129+
} catch (Throwable t) {
130+
MeteorClient.LOG.error("Oops! no render", t);
131+
}
132+
}
133+
}
92134
}
93135

94-
MATRICES.pop();
136+
matrices.pop();
95137
}
96138

97-
public static void renderShaded(BlockPos pos, BlockState state, MatrixStack matrices, VertexConsumer consumer) {
98-
BlockRenderView renderView = new StaticBlockRenderView(pos, state);
139+
public static void renderFull(@Nullable BlockRenderView renderView, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, MatrixStack matrices, float tickDelta, VertexConsumerProvider.Immediate vertexConsumerProvider) {
140+
matrices.push();
141+
matrices.translate(pos.getX(), pos.getY(), pos.getZ());
99142

143+
if (renderView == null) {
144+
renderView = new StaticBlockRenderView(pos, state);
145+
}
146+
147+
// Render block model
100148
if (state.getRenderType() == BlockRenderType.MODEL) {
149+
VertexConsumer consumer = vertexConsumerProvider.getBuffer(RenderLayers.cutout());
150+
101151
BlockStateModel model = mc.getBlockRenderManager().getModel(state);
102152
RANDOM.setSeed(42L);
103153
model.addParts(RANDOM, PARTS);
@@ -116,48 +166,66 @@ public static void renderShaded(BlockPos pos, BlockState state, MatrixStack matr
116166
PARTS.clear();
117167
}
118168

169+
// Render fluid
119170
if (!state.getFluidState().isEmpty()) {
120-
if (FABRIC_FLUID_RENDERER) {
121-
FluidRenderHandlerRegistry.INSTANCE.get(state.getFluidState().getFluid()).renderFluid(
122-
pos,
123-
renderView,
124-
consumer,
125-
state,
126-
state.getFluidState()
127-
);
128-
} else {
129-
MinecraftClient.getInstance().getBlockRenderManager().renderFluid(
130-
pos,
131-
renderView,
132-
consumer,
133-
state,
134-
state.getFluidState()
135-
);
136-
}
171+
VertexConsumer consumer = vertexConsumerProvider.getBuffer(RenderLayers.cutout());
172+
renderFluid(renderView, pos, state, consumer);
137173
}
138-
}
139-
140-
public static void renderFlat(BlockPos pos, BlockState state, MatrixStack matrices, VertexConsumer consumer) {
141-
if (state.getRenderType() != BlockRenderType.MODEL) return;
142-
143-
BlockStateModel model = mc.getBlockRenderManager().getModel(state);
144-
RANDOM.setSeed(state.getRenderingSeed(pos));
145-
model.addParts(RANDOM, PARTS);
146-
147-
matrices.translate(state.getModelOffset(pos));
148-
Matrix4f matrix4f = matrices.peek().getPositionMatrix();
149174

150-
for (BlockModelPart part : PARTS) {
151-
for (Direction direction : DIRECTIONS) {
152-
List<BakedQuad> quads = part.getQuads(direction);
153-
if (!quads.isEmpty()) renderQuads(quads, matrix4f, consumer);
175+
// Render block entity
176+
if (blockEntity != null || state.getBlock() instanceof BlockWithEntity) {
177+
if (blockEntity == null && state.getBlock() instanceof BlockWithEntity blockWithEntity) {
178+
blockEntity = blockWithEntity.createBlockEntity(pos, state);
154179
}
155180

156-
List<BakedQuad> quads = part.getQuads(null);
157-
if (!quads.isEmpty()) renderQuads(quads, matrix4f, consumer);
181+
if (blockEntity != null) {
182+
BlockEntityRenderer<BlockEntity, BlockEntityRenderState> renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity);
183+
if (renderer != null && blockEntity.getType().supports(blockEntity.getCachedState())) {
184+
try {
185+
RenderDispatcher renderDispatcher = new RenderDispatcher(
186+
renderCommandQueue,
187+
mc.getBlockRenderManager(),
188+
vertexConsumerProvider,
189+
mc.getAtlasManager(),
190+
NoopOutlineVertexConsumerProvider.INSTANCE,
191+
NoopImmediateVertexConsumerProvider.INSTANCE,
192+
mc.textRenderer
193+
);
194+
195+
BlockEntityRenderState renderState = renderer.createRenderState();
196+
renderer.updateRenderState(blockEntity, renderState, tickDelta, mc.gameRenderer.getCamera().getCameraPos(), null);
197+
renderer.render(renderState, matrices, renderCommandQueue, mc.gameRenderer.getEntityRenderStates().cameraRenderState);
198+
199+
renderDispatcher.render();
200+
renderCommandQueue.onNextFrame();
201+
} catch (Throwable t) {
202+
MeteorClient.LOG.error("Oops! no render", t);
203+
}
204+
}
205+
}
158206
}
159207

160-
PARTS.clear();
208+
matrices.pop();
209+
}
210+
211+
private static void renderFluid(BlockRenderView renderView, BlockPos pos, BlockState state, VertexConsumer consumer) {
212+
if (FABRIC_FLUID_RENDERER) {
213+
FluidRenderHandlerRegistry.INSTANCE.get(state.getFluidState().getFluid()).renderFluid(
214+
pos,
215+
renderView,
216+
consumer,
217+
state,
218+
state.getFluidState()
219+
);
220+
} else {
221+
MinecraftClient.getInstance().getBlockRenderManager().renderFluid(
222+
pos,
223+
renderView,
224+
consumer,
225+
state,
226+
state.getFluidState()
227+
);
228+
}
161229
}
162230

163231
private static void renderQuads(List<BakedQuad> quads, Matrix4f matrix4f, VertexConsumer consumer) {

0 commit comments

Comments
 (0)