EAA_MOD/src/main/java/net/saltymc/eaa/custom/ping/CustomPlayerListHud.java
2022-09-25 13:43:20 +02:00

74 lines
3.5 KiB
Java

package net.saltymc.eaa.custom.ping;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.hud.PlayerListHud;
import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.client.util.math.MatrixStack;
import net.saltymc.eaa.function.TagFunction;
import net.saltymc.eaa.mixin.PlayerListHudInvoker;
/**
* By: https://github.com/vladmarica/better-ping-display-fabric/
*/
public final class CustomPlayerListHud {
public static final PingConfig config = new PingConfig();
private static final int PING_TEXT_RENDER_OFFSET = -13;
private static final int PING_BARS_WIDTH = 11;
private static final int OFFSET = 1;
public static void renderPingDisplay(
MinecraftClient client, PlayerListHud hud, MatrixStack matrixStack, int width, int x, int y, PlayerListEntry player) {
TextRenderer textRenderer = client.textRenderer;
String pingString = String.format(config.getTextFormatString(), player.getLatency());
int pingStringWidth = textRenderer.getWidth(pingString);
int pingTextColor = config.shouldAutoColorPingText() ? PingColors.getColor(player.getLatency()) : config.getTextColor();
int textX = width + x - pingStringWidth + PING_TEXT_RENDER_OFFSET;
if (!config.shouldRenderPingBars()) {
textX += PING_BARS_WIDTH;
}
// Draw the ping text for the given player
textRenderer.drawWithShadow(matrixStack, pingString, (float) textX, (float) y, pingTextColor);
/*
* PLAYER TAG
*/
// Calculate position before ping display
String pingStringWith3Digits = String.format(config.getTextFormatString(), 900); // Generate pingtext for 900ms
int pingStringWith3DigitsWidth = textRenderer.getWidth(pingStringWith3Digits); // calculate legth of text
int newX = x + width - pingStringWith3DigitsWidth + PING_TEXT_RENDER_OFFSET; // fix offset looks nicer should be right before ping text if 3 digits long
int twoDigits = textRenderer.getWidth("10") + OFFSET ;
int offset_tag_playername = newX - twoDigits; // behind ping - length of grade text
TagDTO playerTAG = TagFunction.getScoreboardTag(player.getProfile().getId().toString()); // retrieve Tag object
//float tmp_x = offset_tag_playername - ((twoDigits - textRenderer.getWidth(playerTAG.getGrade() < 1 ? "|" : playerTAG.getGrade() +"")) / 2.0f);
String gradeText = playerTAG.getGrade() < 1 ? "|" : playerTAG.getGrade() +""; // if not given draw a pipe
textRenderer.drawWithShadow(matrixStack,
gradeText,
(float) offset_tag_playername + ((float)twoDigits - (textRenderer.getWidth(gradeText) / 2.0F )), (float) y, playerTAG.getGradeColor());
offset_tag_playername -= textRenderer.getWidth(playerTAG.getType().getTag()) + OFFSET; // subtract tag name length to offset
textRenderer.drawWithShadow(matrixStack, playerTAG.getType().getTag(), (float)offset_tag_playername, (float)y, playerTAG.getType().getColor()); // draw tag name
/*
* END
*/
if (config.shouldRenderPingBars()) {
((PlayerListHudInvoker) hud).invokeRenderLatencyIcon(matrixStack, width, x, y, player);
} else {
// If we don't render ping bars, we need to reset the render system color so the rest
// of the player list renders properly
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
}
}
}