Hi all. New to modding so this is probably a silly question but I've searched and searched but cannot find any guides or sample code that works for 1.17.1
I have successfully created a client-side only mod that displays the player's coordinates on the screen and am now trying to draw a simple line in the world. Unfortunately, everything I have tried results in nothing displaying or a crash.
My latest crash is
Cannot invoke "net.minecraft.client.renderer.ShaderInstance.setSampler(String, Object)" because "shaderinstance" is null
Here is the code I have so far
public class MyRenderType extends RenderType {
public MyRenderType(String p_173178_, VertexFormat p_173179_, VertexFormat.Mode p_173180_, int p_173181_, boolean p_173182_, boolean p_173183_, Runnable p_173184_, Runnable p_173185_) {
super(p_173178_, p_173179_, p_173180_, p_173181_, p_173182_, p_173183_, p_173184_, p_173185_);
}
private static final LineStateShard THICK_LINES = new LineStateShard(OptionalDouble.of(3.0));
public static final RenderType OVERLAY_LINES = create("overlay_lines",
DefaultVertexFormat.POSITION_COLOR,
VertexFormat.Mode.LINES,
256,
true,
true,
CompositeState.builder()
.setLineState(THICK_LINES)
.setLayeringState(VIEW_OFFSET_Z_LAYERING)
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setTextureState(NO_TEXTURE)
.setDepthTestState(NO_DEPTH_TEST)
.setCullState(NO_CULL)
.setLightmapState(NO_LIGHTMAP)
.setWriteMaskState(COLOR_WRITE)
.createCompositeState(false)
);
}
///////////////
@SubscribeEvent
public static void drawLast(RenderWorldLastEvent event) {
MultiBufferSource.BufferSource buffer = MultiBufferSource.immediate(Tesselator.getInstance().getBuilder());
VertexConsumer builder = buffer.getBuffer(MyRenderType.OVERLAY_LINES);
PoseStack matrixStack = event.getMatrixStack();
Vec3 pos = minecraft.player.position();
matrixStack.pushPose();
matrixStack.translate(-pos.x, -pos.y, -pos.z);
Matrix4f matrix = matrixStack.last().pose();
// There's also a version of the vertex method that doesn't take matrixStack, I tried that too but it made no difference.
builder.vertex(matrixStack, (float)-5 + 0.5f, (float)0 + 0.5f, (float)5 + 0.5f)
.color(1,0,0,1f)
.endVertex();
builder.vertex(matrixStack, (float)5 + 0.5f, (float)0 + 0.5f, (float)5 + 0.5f)
.color(1, 0, 0, 1f)
.endVertex();
// I tried adding these lines but it made no difference.
//RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
//RenderSystem.setShader(GameRenderer::getPositionColorShader);
buffer.endBatch(); // crashes here
matrixStack.popPose();
}
Any help is much appreciated