74 lines
3.5 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|