From 0065f53bad9bfd8c831a00e88ac04366138c9c16 Mon Sep 17 00:00:00 2001 From: Yuuki Chan Date: Thu, 8 Jun 2023 14:13:41 +0900 Subject: [PATCH] Updated for 1.20 --- README.md | 17 +- build.gradle | 15 +- gradle.properties | 10 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../BetterPingDisplayMod.java | 73 ++++---- .../vladmarica/betterpingdisplay/Config.java | 159 +++++++++--------- .../betterpingdisplay/hud/ColorUtil.java | 55 +++--- .../hud/CustomPlayerListHud.java | 50 +++--- .../betterpingdisplay/hud/PingColors.java | 55 +++--- .../mixin/PlayerListHudInvoker.java | 6 +- .../mixin/PlayerListHudMixin.java | 54 +++--- src/main/resources/fabric.mod.json | 2 +- .../betterpingdisplay/hud/ColorUtilTest.java | 2 +- 13 files changed, 241 insertions(+), 259 deletions(-) diff --git a/README.md b/README.md index da5daee..378d900 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Better Ping Display - Fabric Edition -[![](http://cf.way2muchnoise.eu/full_406343_downloads.svg)](https://curseforge.com/minecraft/mc-mods/better-ping-display-fabric) +[![](http://cf.way2muchnoise.eu/full_406343_downloads.svg)](https://curseforge.com/minecraft/mc-mods/better-ping-display-fabric) A [Fabric](https://fabricmc.net/) mod for Minecraft to display each player's ping in the player list as a number. @@ -13,12 +13,12 @@ This is a client-side mod. The server doesn't need to have it installed. It work ## Configuration This mod's config file is `betterpingdisplay.json`. It contains the following options: -| Option | Default Value | Description | -|----------------------|---------------|--------------------------------------------------------------------------------------------------------------------| -| autoColorPingText | `true` | Whether to color a player's ping based on their latency. E.g, low latency = green, high latency = red | -| renderPingBars | `false` | Whether to also draw the default Minecraft ping bars | -| pingTextColor | `#A0A0A0` | The ping text color to use. Only works whens `autoColorPingText` is false | -| pingTextFormatString | `%dms` | The format string for ping text. Must include a `%d`, which will be replaced dynamically by the actual ping value. | +| Option | Default Value | Description | +|---|---|---| +| autoColorPingText | `true` | Whether to color a player's ping based on their latency. E.g, low latency = green, high latency = red | +| renderPingBars | `false` | Whether to also draw the default Minecraft ping bars | +| pingTextColor | `#A0A0A0` | The ping text color to use. Only works whens `autoColorPingText` is false | +| pingTextFormatString | `%dms` | The format string for ping text. Must include a `%d`, which will be replaced dynamically by the actual ping value. ## Supported Minecraft Versions * **1.15.x** @@ -26,6 +26,7 @@ This mod's config file is `betterpingdisplay.json`. It contains the following op * **1.17.x** * **1.18.x** * **1.19.x** +* **1.20** ## Requirements -* [Fabric](https://fabricmc.net/) +* [Fabric](https://fabricmc.net/) \ No newline at end of file diff --git a/build.gradle b/build.gradle index 0376875..1230e96 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '0.12-SNAPSHOT' + id 'fabric-loom' version '1.2-SNAPSHOT' id 'maven-publish' } @@ -32,18 +32,10 @@ processResources { } } -tasks.withType(JavaCompile) { +tasks.withType(JavaCompile).configureEach { options.encoding = "UTF-8" } -// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task -// if it is present. -// If you remove this task, sources will not be generated. -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = "sources" - from sourceSets.main.allSource -} - jar { from "LICENSE" } @@ -56,9 +48,6 @@ publishing { artifact(remapJar) { builtBy remapJar } - artifact(sourcesJar) { - builtBy remapSourcesJar - } } } diff --git a/gradle.properties b/gradle.properties index 5ee80b0..1240c84 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,15 +3,15 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use -minecraft_version=1.19.4 -yarn_mappings=1.19.4+build.1 -loader_version=0.14.17 +minecraft_version=1.20 +yarn_mappings=1.20+build.1 +loader_version=0.14.21 # Mod Properties -mod_version = 1.1.2 +mod_version = 1.1.3 maven_group = com.vladmarica archives_base_name = BetterPingDisplay-Fabric # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api -fabric_version=0.76.0+1.19.4 +fabric_version=0.83.0+1.20 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e750102..fae0804 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/vladmarica/betterpingdisplay/BetterPingDisplayMod.java b/src/main/java/com/vladmarica/betterpingdisplay/BetterPingDisplayMod.java index 29a4e33..012b282 100644 --- a/src/main/java/com/vladmarica/betterpingdisplay/BetterPingDisplayMod.java +++ b/src/main/java/com/vladmarica/betterpingdisplay/BetterPingDisplayMod.java @@ -1,52 +1,53 @@ package com.vladmarica.betterpingdisplay; import com.vladmarica.betterpingdisplay.Config.ConfigData; -import java.io.File; -import java.nio.file.Path; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.io.File; +import java.nio.file.Path; + public class BetterPingDisplayMod implements ModInitializer { - public static final String MODID = "betterpingdisplay"; - public static final Logger LOGGER = LogManager.getLogger(MODID); - private static final String CONFIG_FILE_NAME = MODID + ".json"; - private static BetterPingDisplayMod INSTANCE; + public static final String MODID = "betterpingdisplay"; + public static final Logger LOGGER = LogManager.getLogger(MODID); + private static final String CONFIG_FILE_NAME = MODID + ".json"; + private static BetterPingDisplayMod INSTANCE; - private Config config = new Config(); + private Config config = new Config(); - @Override - public void onInitialize() { - INSTANCE = this; + @Override + public void onInitialize() { + INSTANCE = this; - Path configFilePath = FabricLoader.getInstance().getConfigDir().resolve(CONFIG_FILE_NAME); - File configFile = configFilePath.toFile(); - if (configFile.exists()) { - try { - ConfigData data = Config.loadConfigFile(configFile); - config = new Config(data); - Config.writeConfigFile(configFile, data); - } catch (Exception ex) { - LOGGER.error("Failed to load config file, using default. Error: {}", ex.getMessage()); - } - } else { - try { - LOGGER.warn("Could not find config file, creating a default one"); - Config.writeConfigFile(configFile, new ConfigData()); - } catch (Exception ex) { - LOGGER.error("Failed to write default config file. Error: {}", ex.getMessage()); - } - } + Path configFilePath = FabricLoader.getInstance().getConfigDir().resolve(CONFIG_FILE_NAME); + File configFile = configFilePath.toFile(); + if (configFile.exists()) { + try { + ConfigData data = Config.loadConfigFile(configFile); + config = new Config(data); + Config.writeConfigFile(configFile, data); + } catch (Exception ex) { + LOGGER.error("Failed to load config file, using default. Error: {}", ex.getMessage()); + } + } else { + try { + LOGGER.warn("Could not find config file, creating a default one"); + Config.writeConfigFile(configFile, new ConfigData()); + } catch (Exception ex) { + LOGGER.error("Failed to write default config file. Error: {}", ex.getMessage()); + } + } - LOGGER.info("BetterPingDisplay mod loaded"); - } + LOGGER.info("BetterPingDisplay mod loaded"); + } - public Config getConfig() { - return config; - } + public Config getConfig() { + return config; + } - public static BetterPingDisplayMod instance() { - return INSTANCE; - } + public static BetterPingDisplayMod instance() { + return INSTANCE; + } } diff --git a/src/main/java/com/vladmarica/betterpingdisplay/Config.java b/src/main/java/com/vladmarica/betterpingdisplay/Config.java index 90373a8..9e29cb8 100644 --- a/src/main/java/com/vladmarica/betterpingdisplay/Config.java +++ b/src/main/java/com/vladmarica/betterpingdisplay/Config.java @@ -3,103 +3,96 @@ package com.vladmarica.betterpingdisplay; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.Expose; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Serializable; + +import java.io.*; public class Config { - private static final int DEFAULT_PING_TEXT_COLOR = 0xA0A0A0; - private static final String DEFAULT_PING_TEXT_FORMAT = "%dms"; + private static final int DEFAULT_PING_TEXT_COLOR = 0xA0A0A0; + private static final String DEFAULT_PING_TEXT_FORMAT = "%dms"; - private final boolean autoColorPingText; - private final boolean renderPingBars; - private int textColor = DEFAULT_PING_TEXT_COLOR; - private String textFormatString = DEFAULT_PING_TEXT_FORMAT; + private final boolean autoColorPingText; + private final boolean renderPingBars; + private int textColor = DEFAULT_PING_TEXT_COLOR; + private String textFormatString = DEFAULT_PING_TEXT_FORMAT; - public Config(ConfigData configFileFormat) { - if (configFileFormat.pingTextColor.startsWith("#")) { - try { - textColor = Integer.parseInt(configFileFormat.pingTextColor.substring(1), 16); - } - catch (NumberFormatException ex) { - BetterPingDisplayMod.LOGGER.error("Config option 'pingTextColor' is invalid - it must be a hex color code"); - } - } - else { - BetterPingDisplayMod.LOGGER.error("Config option 'pingTextColor' is invalid - it must be a hex color code"); + public Config(ConfigData configFileFormat) { + if (configFileFormat.pingTextColor.startsWith("#")) { + try { + textColor = Integer.parseInt(configFileFormat.pingTextColor.substring(1), 16); + } catch (NumberFormatException ex) { + BetterPingDisplayMod.LOGGER.error("Config option 'pingTextColor' is invalid - it must be a hex color code"); + } + } else { + BetterPingDisplayMod.LOGGER.error("Config option 'pingTextColor' is invalid - it must be a hex color code"); + } + + if (configFileFormat.pingTextFormatString.contains("%d")) { + textFormatString = configFileFormat.pingTextFormatString; + } else { + BetterPingDisplayMod.LOGGER.error("Config option 'pingTextFormatString' is invalid - it needs to contain %d"); + } + + autoColorPingText = configFileFormat.autoColorPingText; + renderPingBars = configFileFormat.renderPingBars; } - if (configFileFormat.pingTextFormatString.contains("%d")) { - textFormatString = configFileFormat.pingTextFormatString; - } - else { - BetterPingDisplayMod.LOGGER.error("Config option 'pingTextFormatString' is invalid - it needs to contain %d"); + public Config() { + this(new ConfigData()); } - autoColorPingText = configFileFormat.autoColorPingText; - renderPingBars = configFileFormat.renderPingBars; - } - - public Config() { - this(new ConfigData()); - } - - public int getTextColor() { - return this.textColor; - } - - public String getTextFormatString() { - return this.textFormatString; - } - - public boolean shouldAutoColorPingText() { - return this.autoColorPingText; - } - - public boolean shouldRenderPingBars() { - return this.renderPingBars; - } - - public static ConfigData loadConfigFile(File configFile) throws IOException { - FileReader reader = null; - try { - Gson gson = new Gson(); - reader = new FileReader(configFile); - return gson.fromJson(reader, ConfigData.class); + public int getTextColor() { + return this.textColor; } - finally { - if (reader != null) { - reader.close(); - } + + public String getTextFormatString() { + return this.textFormatString; } - } - public static void writeConfigFile(File configFile, ConfigData data) throws IOException { - FileWriter writer = null; - try { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - writer = new FileWriter(configFile); - writer.write(gson.toJson(data)); - } finally { - if (writer != null) { - writer.close(); - } + public boolean shouldAutoColorPingText() { + return this.autoColorPingText; } - } - public static class ConfigData implements Serializable { - @Expose - private boolean autoColorPingText = true; + public boolean shouldRenderPingBars() { + return this.renderPingBars; + } - @Expose - private boolean renderPingBars = false; + public static ConfigData loadConfigFile(File configFile) throws IOException { + FileReader reader = null; + try { + Gson gson = new Gson(); + reader = new FileReader(configFile); + return gson.fromJson(reader, ConfigData.class); + } finally { + if (reader != null) { + reader.close(); + } + } + } - @Expose - private String pingTextColor = "#A0A0A0"; + public static void writeConfigFile(File configFile, ConfigData data) throws IOException { + FileWriter writer = null; + try { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + writer = new FileWriter(configFile); + writer.write(gson.toJson(data)); + } finally { + if (writer != null) { + writer.close(); + } + } + } - @Expose - private String pingTextFormatString = "%dms"; - } + public static class ConfigData implements Serializable { + @Expose + private boolean autoColorPingText = true; + + @Expose + private boolean renderPingBars = false; + + @Expose + private String pingTextColor = "#A0A0A0"; + + @Expose + private String pingTextFormatString = "%dms"; + } } diff --git a/src/main/java/com/vladmarica/betterpingdisplay/hud/ColorUtil.java b/src/main/java/com/vladmarica/betterpingdisplay/hud/ColorUtil.java index 0d2ff9e..249ccb7 100644 --- a/src/main/java/com/vladmarica/betterpingdisplay/hud/ColorUtil.java +++ b/src/main/java/com/vladmarica/betterpingdisplay/hud/ColorUtil.java @@ -3,36 +3,37 @@ package com.vladmarica.betterpingdisplay.hud; import com.google.common.annotations.VisibleForTesting; public final class ColorUtil { - public static int interpolate(int colorStart, int colorEnd, float offset) { - if (offset < 0 || offset > 1) { - throw new IllegalArgumentException("Offset must be between 0.0 and 1.0"); + public static int interpolate(int colorStart, int colorEnd, float offset) { + if (offset < 0 || offset > 1) { + throw new IllegalArgumentException("Offset must be between 0.0 and 1.0"); + } + + int redDiff = getRed(colorEnd) - getRed(colorStart); + int greenDiff = getGreen(colorEnd) - getGreen(colorStart); + int blueDiff = getBlue(colorEnd) - getBlue(colorStart); + + int newRed = Math.round(getRed(colorStart) + (redDiff * offset)); + int newGreen = Math.round(getGreen(colorStart) + (greenDiff * offset)); + int newBlue = Math.round(getBlue(colorStart) + (blueDiff * offset)); + + return (newRed << 16) | (newGreen << 8) | newBlue; } - int redDiff = getRed(colorEnd) - getRed(colorStart); - int greenDiff = getGreen(colorEnd) - getGreen(colorStart); - int blueDiff = getBlue(colorEnd) - getBlue(colorStart); + @VisibleForTesting + static int getRed(int color) { + return (color >> 16) & 0xFF; + } - int newRed = Math.round(getRed(colorStart) + (redDiff * offset)); - int newGreen = Math.round(getGreen(colorStart) + (greenDiff * offset)); - int newBlue = Math.round(getBlue(colorStart) + (blueDiff * offset)); + @VisibleForTesting + static int getGreen(int color) { + return (color >> 8) & 0xFF; + } - return (newRed << 16) | (newGreen << 8) | newBlue; - } + @VisibleForTesting + static int getBlue(int color) { + return color & 0xFF; + } - @VisibleForTesting - static int getRed(int color) { - return (color >> 16) & 0xFF; - } - - @VisibleForTesting - static int getGreen(int color) { - return (color >> 8) & 0xFF; - } - - @VisibleForTesting - static int getBlue(int color) { - return color & 0xFF; - } - - private ColorUtil() {} + private ColorUtil() { + } } diff --git a/src/main/java/com/vladmarica/betterpingdisplay/hud/CustomPlayerListHud.java b/src/main/java/com/vladmarica/betterpingdisplay/hud/CustomPlayerListHud.java index ed66ea5..79d5d2b 100644 --- a/src/main/java/com/vladmarica/betterpingdisplay/hud/CustomPlayerListHud.java +++ b/src/main/java/com/vladmarica/betterpingdisplay/hud/CustomPlayerListHud.java @@ -5,38 +5,36 @@ import com.vladmarica.betterpingdisplay.BetterPingDisplayMod; import com.vladmarica.betterpingdisplay.Config; import com.vladmarica.betterpingdisplay.mixin.PlayerListHudInvoker; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.PlayerListHud; import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.client.util.math.MatrixStack; public final class CustomPlayerListHud { - private static final int PING_TEXT_RENDER_OFFSET = -13; - private static final int PING_BARS_WIDTH = 11; - private static final Config config = BetterPingDisplayMod.instance().getConfig(); + private static final int PING_TEXT_RENDER_OFFSET = -13; + private static final int PING_BARS_WIDTH = 11; + private static final Config config = BetterPingDisplayMod.instance().getConfig(); - public static void renderPingDisplay( - MinecraftClient client, PlayerListHud hud, MatrixStack matrixStack, int width, int x, int y, PlayerListEntry player) { - TextRenderer textRenderer = client.textRenderer; + public static void renderPingDisplay( + MinecraftClient client, PlayerListHud hud, DrawContext context, int width, int x, int y, PlayerListEntry player) { + String pingString = String.format(config.getTextFormatString(), player.getLatency()); + int pingStringWidth = client.textRenderer.getWidth(pingString); + int pingTextColor = config.shouldAutoColorPingText() + ? PingColors.getColor(player.getLatency()) : config.getTextColor(); + int textX = width + x - pingStringWidth + PING_TEXT_RENDER_OFFSET; - 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; + } - if (!config.shouldRenderPingBars()) { - textX += PING_BARS_WIDTH; + // Draw the ping text for the given player + context.drawTextWithShadow(client.textRenderer, pingString, textX, y, pingTextColor); + + if (config.shouldRenderPingBars()) { + ((PlayerListHudInvoker) hud).invokeRenderLatencyIcon(context, 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); + } } - - // Draw the ping text for the given player - textRenderer.drawWithShadow(matrixStack, pingString, (float) textX, (float) y, pingTextColor); - - 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); - } - } } diff --git a/src/main/java/com/vladmarica/betterpingdisplay/hud/PingColors.java b/src/main/java/com/vladmarica/betterpingdisplay/hud/PingColors.java index 578bc66..a22a09a 100644 --- a/src/main/java/com/vladmarica/betterpingdisplay/hud/PingColors.java +++ b/src/main/java/com/vladmarica/betterpingdisplay/hud/PingColors.java @@ -3,37 +3,38 @@ package com.vladmarica.betterpingdisplay.hud; import net.minecraft.util.math.MathHelper; public final class PingColors { - public static final int PING_START = 0; - public static final int PING_MID = 150; - public static final int PING_END = 300; + public static final int PING_START = 0; + public static final int PING_MID = 150; + public static final int PING_END = 300; - public static final int COLOR_GREY = 0x535353; - public static final int COLOR_START = 0x00E676; - public static final int COLOR_MID = 0xD6CD30; - public static final int COLOR_END = 0xE53935; + public static final int COLOR_GREY = 0x535353; + public static final int COLOR_START = 0x00E676; + public static final int COLOR_MID = 0xD6CD30; + public static final int COLOR_END = 0xE53935; - public static int getColor(int ping) { - if (ping < PING_START) { - return COLOR_GREY; + public static int getColor(int ping) { + if (ping < PING_START) { + return COLOR_GREY; + } + + if (ping < PING_MID) { + return ColorUtil.interpolate( + COLOR_START, + COLOR_MID, + computeOffset(PING_START, PING_MID, ping)); + } + + return ColorUtil.interpolate( + COLOR_MID, + COLOR_END, + computeOffset(PING_MID, PING_END, Math.min(ping, PING_END))); } - if (ping < PING_MID) { - return ColorUtil.interpolate( - COLOR_START, - COLOR_MID, - computeOffset(PING_START, PING_MID, ping)); + private static float computeOffset(int start, int end, int value) { + float offset = (value - start) / (float) (end - start); + return MathHelper.clamp(offset, 0.0F, 1.0F); } - return ColorUtil.interpolate( - COLOR_MID, - COLOR_END, - computeOffset(PING_MID, PING_END, Math.min(ping, PING_END))); - } - - private static float computeOffset(int start, int end, int value) { - float offset = (value - start) / (float) ( end - start); - return MathHelper.clamp(offset, 0.0F, 1.0F); - } - - private PingColors() {} + private PingColors() { + } } diff --git a/src/main/java/com/vladmarica/betterpingdisplay/mixin/PlayerListHudInvoker.java b/src/main/java/com/vladmarica/betterpingdisplay/mixin/PlayerListHudInvoker.java index 1b61772..5d57e0c 100644 --- a/src/main/java/com/vladmarica/betterpingdisplay/mixin/PlayerListHudInvoker.java +++ b/src/main/java/com/vladmarica/betterpingdisplay/mixin/PlayerListHudInvoker.java @@ -1,13 +1,13 @@ package com.vladmarica.betterpingdisplay.mixin; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.PlayerListHud; import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(PlayerListHud.class) public interface PlayerListHudInvoker { - @Invoker("renderLatencyIcon") - void invokeRenderLatencyIcon(MatrixStack matrices, int width, int x, int y, PlayerListEntry entry); + @Invoker("renderLatencyIcon") + void invokeRenderLatencyIcon(DrawContext context, int width, int x, int y, PlayerListEntry entry); } diff --git a/src/main/java/com/vladmarica/betterpingdisplay/mixin/PlayerListHudMixin.java b/src/main/java/com/vladmarica/betterpingdisplay/mixin/PlayerListHudMixin.java index 9df6cad..e1612b5 100644 --- a/src/main/java/com/vladmarica/betterpingdisplay/mixin/PlayerListHudMixin.java +++ b/src/main/java/com/vladmarica/betterpingdisplay/mixin/PlayerListHudMixin.java @@ -2,11 +2,9 @@ package com.vladmarica.betterpingdisplay.mixin; import com.vladmarica.betterpingdisplay.hud.CustomPlayerListHud; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.PlayerListHud; import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.scoreboard.Scoreboard; -import net.minecraft.scoreboard.ScoreboardObjective; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -19,32 +17,32 @@ import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(PlayerListHud.class) public abstract class PlayerListHudMixin { - @Unique - @Final - private static final int PLAYER_SLOT_EXTRA_WIDTH = 45; + @Unique + @Final + private static final int PLAYER_SLOT_EXTRA_WIDTH = 45; - @Shadow - @Final - private MinecraftClient client; + @Shadow + @Final + private MinecraftClient client; - /** - * Increases the int constant {@code 13} in the {@link PlayerListHud#render} method by - * {@value #PLAYER_SLOT_EXTRA_WIDTH}. This constant is used to define the width of the "slots" in the player list. - * In order to fit the ping text, this needs to be increased. - */ - @ModifyConstant(method = "render", constant = @Constant(intValue = 13)) - private int modifySlotWidthConstant(int original) { - return original + PLAYER_SLOT_EXTRA_WIDTH; - } + /** + * Increases the int constant {@code 13} in the {@link PlayerListHud#render} method by + * {@value #PLAYER_SLOT_EXTRA_WIDTH}. This constant is used to define the width of the "slots" in the player list. + * In order to fit the ping text, this needs to be increased. + */ + @ModifyConstant(method = "render", constant = @Constant(intValue = 13)) + private int modifySlotWidthConstant(int original) { + return original + PLAYER_SLOT_EXTRA_WIDTH; + } - /** - * Redirects the call to {@code renderLatencyIcon} in {@link PlayerListHud#render} to instead call - * {@link CustomPlayerListHud#renderPingDisplay}. - */ - @Redirect(method = "render", - at = @At(value = "INVOKE", target = "net/minecraft/client/gui/hud/PlayerListHud.renderLatencyIcon(Lnet/minecraft/client/util/math/MatrixStack;IIILnet/minecraft/client/network/PlayerListEntry;)V")) - private void redirectRenderLatencyIconCall( - PlayerListHud instance, MatrixStack matrices, int width, int x, int y, @NotNull PlayerListEntry entry) { - CustomPlayerListHud.renderPingDisplay(client, instance, matrices, width, x, y, entry); - } + /** + * Redirects the call to {@code renderLatencyIcon} in {@link PlayerListHud#render} to instead call + * {@link CustomPlayerListHud#renderPingDisplay}. + */ + @Redirect(method = "render", + at = @At(value = "INVOKE", target = "net/minecraft/client/gui/hud/PlayerListHud.renderLatencyIcon(Lnet/minecraft/client/gui/DrawContext;IIILnet/minecraft/client/network/PlayerListEntry;)V")) + private void redirectRenderLatencyIconCall( + PlayerListHud instance, DrawContext context, int width, int x, int y, @NotNull PlayerListEntry entry) { + CustomPlayerListHud.renderPingDisplay(client, instance, context, width, x, y, entry); + } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index e9b7af9..7e3b308 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "id": "betterpingdisplay", - "version": "1.1.1", + "version": "1.1.3", "name": "Better Ping Display", "description": "Shows the actual ping number instead of just bars in the player list!", diff --git a/src/test/java/com/vladmarica/betterpingdisplay/hud/ColorUtilTest.java b/src/test/java/com/vladmarica/betterpingdisplay/hud/ColorUtilTest.java index 51c4ab2..936717b 100644 --- a/src/test/java/com/vladmarica/betterpingdisplay/hud/ColorUtilTest.java +++ b/src/test/java/com/vladmarica/betterpingdisplay/hud/ColorUtilTest.java @@ -46,4 +46,4 @@ public class ColorUtilTest { assertThrows(IllegalArgumentException.class, () -> ColorUtil.interpolate(0, 1, -0.1F)); assertThrows(IllegalArgumentException.class, () -> ColorUtil.interpolate(0, 1, 1.1F)); } -} +} \ No newline at end of file