Hey, I wanted to modify a mod i found : Ping.
It's built using forge_version=41.0.64.
I'd like the non-hud ping icons to have constant size regardless of the player distance to them.
I've found PingHandler.renderPing() , VertexHelper.renderPosTexColorNoZ() and PingRenderType.getPingIcon():
private static void renderPing(double px, double py, double pz, PoseStack poseStack, Camera camera, PingWrapper ping) {
Minecraft mc = Minecraft.getInstance();
poseStack.pushPose();
poseStack.translate(px, py, pz);
poseStack.mulPose(Vector3f.YP.rotationDegrees(-camera.getYRot()));
poseStack.mulPose(Vector3f.XP.rotationDegrees(camera.getXRot()));
poseStack.mulPose(Vector3f.ZP.rotationDegrees(180.0F));
PoseStack.Pose matrixEntry = poseStack.last();
Matrix4f matrix4f = matrixEntry.pose();
MultiBufferSource.BufferSource buffer = mc.renderBuffers().bufferSource();
RenderType pingType = PingRenderType.getPingIcon(TEXTURE);
VertexConsumer vertexBuilder = buffer.getBuffer(pingType);
RenderSystem.setShader(GameRenderer::getPositionTexColorShader);
float min = -0.25F - (0.25F * (float) ping.animationTimer / 20F);
float max = 0.25F + (0.25F * (float) ping.animationTimer / 20F);
// Block Overlay Background
int r = ping.color >> 16 & 255;
int g = ping.color >> 8 & 255;
int b = ping.color & 255;
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, max, PingType.BACKGROUND.getMinU(), PingType.BACKGROUND.getMaxV(), r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, max, PingType.BACKGROUND.getMaxU(), PingType.BACKGROUND.getMaxV(), r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, min, PingType.BACKGROUND.getMaxU(), PingType.BACKGROUND.getMinV(), r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, min, PingType.BACKGROUND.getMinU(), PingType.BACKGROUND.getMinV(), r, g, b, 255);
// Block Overlay Icon
float alpha = ping.type == PingType.ALERT ? mc.level != null ? (float) (1.0F + (0.01D * Math.sin(mc.level.getDayTime()))) : 0.85F : 0.85F;
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, max, ping.type.getMinU(), ping.type.getMaxV(), 1.0F, 1.0F, 1.0F, alpha);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, max, ping.type.getMaxU(), ping.type.getMaxV(), 1.0F, 1.0F, 1.0F, alpha);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, min, ping.type.getMaxU(), ping.type.getMinV(), 1.0F, 1.0F, 1.0F, alpha);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, min, ping.type.getMinU(), ping.type.getMinV(), 1.0F, 1.0F, 1.0F, alpha);
buffer.endBatch(pingType);
poseStack.popPose();
}
public static void renderPosTexColorNoZ(VertexConsumer builder, Matrix4f matrix4f, float x, float y, float u, float v, int r, int g, int b, int a) {
builder.vertex(matrix4f, x, y, 0).uv(u, v).color(r, g, b, a).endVertex();
}
public static void renderPosTexColorNoZ(VertexConsumer builder, Matrix4f matrix4f, float x, float y, float u, float v, float r, float g, float b, float a) {
builder.vertex(matrix4f, x, y, 0).uv(u, v).color(r, g, b, a).endVertex();
}
public static RenderType getPingIcon(ResourceLocation location) {
RenderType.CompositeState renderTypeState = RenderType.CompositeState.builder().setShaderState(RENDERTYPE_PING).setTextureState(new RenderStateShard.TextureStateShard(location, false, true)).setTransparencyState(TRANSLUCENT_TRANSPARENCY).setLayeringState(DISABLE_DEPTH).createCompositeState(true);
return RenderType.create("ping_icon", DefaultVertexFormat.POSITION_TEX_COLOR, VertexFormat.Mode.QUADS, RenderType.MEDIUM_BUFFER_SIZE, true, true, renderTypeState);
}
I thought that modifying the last method would be the solution but I don't know anything about graphics and Forge javadocs are empty.
Would greatly appreciate any pointers on this.