Posted November 19, 20222 yr 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.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.