diff --git a/README.md b/README.md new file mode 100644 index 0000000..5d15d33 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# SWRC Mod + +SWRC (StoneWorks Race Control) is a Minecraft Java 1.21.4 mod built using the Fabric modloader. It adds Boat Racing Control via waypoints and the ability to create tracks and operate races + +Requirements + + Minecraft Java Edition 1.21.4 + + Fabric Loader + + Fabric API + + Cloth Config API + +Installation + + Download the latest release from the Releases section. + + Install Fabric Loader for Minecraft 1.21.4. + + Place the following .jar files in your .minecraft/mods folder: + + swrc-x.x.x.jar + + fabric-api-x.x.x.jar + + cloth-config-x.x.x.jar + + Launch Minecraft with the Fabric profile. + +This mod is a work-in-progress. Expect frequent updates. Feedback is appreciated! +See the LICENSE file for more information. +Credits + + SaishoVibes + localhackerman diff --git a/build.gradle b/build.gradle index b6bcd72..8466041 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.10-SNAPSHOT' + id 'fabric-loom' version '1.11-SNAPSHOT' id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index 14f8375..57cb8c7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,16 +4,16 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21.5 -yarn_mappings=1.21.5+build.1 -loader_version=0.16.14 +minecraft_version=1.21.8 +yarn_mappings=1.21.8+build.1 +loader_version=0.17.2 # Mod Properties -mod_version=3.1.0+1.21.5 +mod_version=3.1.1+1.21.8 maven_group=uk.cloudmc.swrc archives_base_name=swrc # Dependencies -fabric_version=0.125.0+1.21.5 -modmenu_version=14.0.0-rc.2 -cloth_config_version=18.0.145 \ No newline at end of file +fabric_version=0.133.4+1.21.8 +modmenu_version=15.0.0 +cloth_config_version=19.0.147 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e644113..1b33c55 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a79..ca025c8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf1..23d15a9 100644 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -112,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -203,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. @@ -211,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 25da30d..db3a6ac 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -68,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/src/client/java/uk/cloudmc/swrc/SWRC.java b/src/client/java/uk/cloudmc/swrc/SWRC.java index 6fea5d0..ac02580 100644 --- a/src/client/java/uk/cloudmc/swrc/SWRC.java +++ b/src/client/java/uk/cloudmc/swrc/SWRC.java @@ -3,9 +3,11 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback; -import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer; +//import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback; +import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; +//import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.fabricmc.fabric.api.client.rendering.v1.hud.VanillaHudElements; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; @@ -70,16 +72,9 @@ public void onInitializeClient() { race.update(); }); - HudLayerRegistrationCallback.EVENT.register(layeredDrawer -> { - - layeredDrawer.addLayer(new IdentifiedLayer() { - @Override - public Identifier id() { - return Identifier.of(NAMESPACE, "hud"); - } - - @Override - public void render(DrawContext context, RenderTickCounter tickCounter) { + HudElementRegistry.addFirst( + Identifier.of(NAMESPACE, "hud"), + (context, tickCounter) -> { if (raceLeaderboard.shouldRender()) { raceLeaderboard.render(context, 0.0f); } @@ -105,8 +100,7 @@ public void render(DrawContext context, RenderTickCounter tickCounter) { statusHud.render(context, 0.0f); } } - }); - }); + ); WorldRenderEvents.LAST.register(trackBuilderRenderer); } diff --git a/src/client/java/uk/cloudmc/swrc/hud/BestLap.java b/src/client/java/uk/cloudmc/swrc/hud/BestLap.java index 4d7eea5..fcf47e1 100644 --- a/src/client/java/uk/cloudmc/swrc/hud/BestLap.java +++ b/src/client/java/uk/cloudmc/swrc/hud/BestLap.java @@ -1,6 +1,8 @@ package uk.cloudmc.swrc.hud; +import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; import net.minecraft.text.Text; @@ -40,7 +42,7 @@ public void render(DrawContext graphics, float tickDelta) { int scaledWidth = SWRC.minecraftClient.getWindow().getScaledWidth(); int scaledHeight = SWRC.minecraftClient.getWindow().getScaledHeight(); - RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + //DrawContext.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); int u = 32; int v = 0; @@ -53,13 +55,13 @@ public void render(DrawContext graphics, float tickDelta) { // y=\max\left(0,\min\left(p,-\frac{6px}{t^{2}}\left(x-t\right)\left\{0 style.withFormatting(Formatting.DARK_PURPLE)), scaledWidth / 2 - w / 2 + 103, animationHeight - h + 3, - 0xFFFFFF, + 0xFFFFFFFF, SWRCConfig.getInstance().leaderboard_shadow ); graphics.drawText( @@ -67,9 +69,10 @@ public void render(DrawContext graphics, float tickDelta) { Text.literal(DeltaFormat.formatMillis(flap)), scaledWidth / 2 - w / 2 + 103, animationHeight - h + 3 + 9, - 0xFFFFFF, + 0xFFFFFFFF, SWRCConfig.getInstance().leaderboard_shadow ); + //graphics.drawTexture(RenderPipelines.GUI_TEXTURED , WIDGETS_TEXTURE, scaledWidth / 2 - w / 2, animationHeight - h, u, v, w, h, 256, 256); } public void show(S2CUpdatePacket.Flap flap) { diff --git a/src/client/java/uk/cloudmc/swrc/hud/DisconnectBanner.java b/src/client/java/uk/cloudmc/swrc/hud/DisconnectBanner.java index d2e0334..7b67e16 100644 --- a/src/client/java/uk/cloudmc/swrc/hud/DisconnectBanner.java +++ b/src/client/java/uk/cloudmc/swrc/hud/DisconnectBanner.java @@ -1,6 +1,8 @@ package uk.cloudmc.swrc.hud; +import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; import net.minecraft.util.Identifier; @@ -30,7 +32,7 @@ public void render(DrawContext graphics, float tickDelta) { this.scaledWidth = SWRC.minecraftClient.getWindow().getScaledWidth(); this.scaledHeight = SWRC.minecraftClient.getWindow().getScaledHeight(); - RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + //RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); int u = 32; int v = 22; @@ -43,7 +45,7 @@ public void render(DrawContext graphics, float tickDelta) { // y=\max\left(0,\min\left(p,-\frac{6px}{t^{2}}\left(x-t\right)\left\{0 it = lines.descendingIterator(); it.hasNext(); ) { EventEntry entry = it.next(); - context.drawTextWithShadow(SWRC.minecraftClient.textRenderer, entry.line, scaledWidth - widthOfText(entry.line) - 10, h, 0xFFFFFF); + context.drawTextWithShadow(SWRC.minecraftClient.textRenderer, entry.line, scaledWidth - widthOfText(entry.line) - 10, h, 0xFFFFFFFF); h += 9; } diff --git a/src/client/java/uk/cloudmc/swrc/hud/QualiLeaderboard.java b/src/client/java/uk/cloudmc/swrc/hud/QualiLeaderboard.java index 4ac3f3d..c4c2007 100644 --- a/src/client/java/uk/cloudmc/swrc/hud/QualiLeaderboard.java +++ b/src/client/java/uk/cloudmc/swrc/hud/QualiLeaderboard.java @@ -1,6 +1,7 @@ package uk.cloudmc.swrc.hud; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.PlayerSkinDrawer; import net.minecraft.client.network.PlayerListEntry; @@ -38,7 +39,7 @@ public boolean shouldRender() { public void render(DrawContext graphics, float tickDelta) { Race race = SWRC.getRace(); - RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + //RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); int width = 50; int body_height = SWRC.getRace().raceLeaderboardPositions.size() * 9 + 2; @@ -53,13 +54,13 @@ public void render(DrawContext graphics, float tickDelta) { //renderBox(graphics, WIDGETS_TEXTURE, 0, 0, x, y, 12, body_height, width); - graphics.drawTexture(RenderLayer::getGuiTextured, WIDGETS_TEXTURE, x + 3, y + 3, 5, 0, 25, 10, 256, 256); + //graphics.drawTexture(RenderPipelines.GUI_TEXTURED, WIDGETS_TEXTURE, x + 3, y + 3, 5, 0, 25, 10, 256, 256); String header = String.format(SWRCConfig.getInstance().header_text, SWRC.getRaceName()); - renderText(graphics, header, x + 32, y + 5, 0xFFFFFF); + renderText(graphics, header, x + 32, y + 5, 0xFFFFFFFF); - renderText(graphics, String.format("Lap %s / %s", race_lap, race.getTotalLaps()), x + 46 + widthOfText(header), y + 5, 0xFFFFFF); + renderText(graphics, String.format("Lap %s / %s", race_lap, race.getTotalLaps()), x + 46 + widthOfText(header), y + 5, 0xFFFFFFFF); for (S2CUpdatePacket.RaceLeaderboardPosition position : race.raceLeaderboardPositions) { width = Math.max(width, widthOfText(position.player_name)); @@ -69,28 +70,28 @@ public void render(DrawContext graphics, float tickDelta) { int offset = 0; for (S2CUpdatePacket.RaceLeaderboardPosition position : race.raceLeaderboardPositions) { - int pos_color = 0xFFFFFF; + int pos_color = 0xFFFFFFFF; - if (offset == 0) pos_color = 0xFCBA03; - if (offset == 1) pos_color = 0xB2B1BD; - if (offset == 2) pos_color = 0x805B2B; + if (offset == 0) pos_color = 0xFFFCBA03; + if (offset == 1) pos_color = 0xFFB2B1BD; + if (offset == 2) pos_color = 0xFF805B2B; double precise_targeted_height = lerp(rowHeight.getOrDefault(position.player_name, (double) offset * 9), offset * 9, 0.05); int derived_height = (int) Math.round(precise_targeted_height); PlayerListEntry playerListEntry = SWRC.minecraftClient.getNetworkHandler().getPlayerListEntry(position.player_name); - if (playerListEntry != null) { - PlayerSkinDrawer.draw(graphics, playerListEntry.getSkinTextures(), x + 12 + 6, y + 14 + derived_height + 4, 8); - } +// if (playerListEntry != null) { +// PlayerSkinDrawer.draw(graphics, playerListEntry.getSkinTextures(), x + 12 + 6, y + 14 + derived_height + 4, 8); +// } renderText(graphics, String.format("%s", offset + 1), x + 4, y + 14 + derived_height + 4, pos_color); - renderText(graphics, String.format("%s", position.player_name), x + 28, y + 14 + derived_height + 4, 0xFFFFFF); + renderText(graphics, String.format("%s", position.player_name), x + 28, y + 14 + derived_height + 4, 0xFFFFFFFF); int start_pos = width - widthOfText("-" + DeltaFormat.formatDelta(position.time_delta)) + 110; if (position.flap == -1) { - renderText(graphics, "-", x + start_pos - 30, y + 14 + derived_height + 4, 0xEBCC34 ); + renderText(graphics, "-", x + start_pos - 30, y + 14 + derived_height + 4, 0xFFEBCC34 ); } else { if (position.time_delta == 0) { renderText( @@ -98,7 +99,7 @@ public void render(DrawContext graphics, float tickDelta) { "INTERVAL", x + start_pos + 26, y + 14 + derived_height + 4, - 0xCCCCCC + 0xFFCCCCCC ); } else { renderText( @@ -107,22 +108,27 @@ public void render(DrawContext graphics, float tickDelta) { x + start_pos + 26, y + 14 + derived_height + 4, ColorUtil.lerpColor( - 0xf5ee6a, // yellow - 0xf56a6a, // red + 0xFFf5ee6a, // yellow + 0xFFf56a6a, // red clamp((float) Math.pow(2, position.time_delta / 60000f * -5), 0, 1) ) ); } - renderText(graphics, String.format("%s", DeltaFormat.formatMillis(position.flap)), x + start_pos - 24, y + 14 + derived_height + 4, 0xEBCC34 ); + renderText(graphics, String.format("%s", DeltaFormat.formatMillis(position.flap)), x + start_pos - 24, y + 14 + derived_height + 4, 0xFFEBCC34 ); last_delta = position.time_delta; } + if (playerListEntry != null) { + PlayerSkinDrawer.draw(graphics, playerListEntry.getSkinTextures(), x + 12 + 6, y + 14 + derived_height + 4, 8); + } + rowHeight.put(position.player_name, precise_targeted_height); offset += 1; } + graphics.drawTexture(RenderPipelines.GUI_TEXTURED, WIDGETS_TEXTURE, x + 3, y + 3, 5, 0, 25, 10, 256, 256); } public static void renderText(DrawContext graphics, String text, int x, int y, int color) { diff --git a/src/client/java/uk/cloudmc/swrc/hud/RaceLeaderboard.java b/src/client/java/uk/cloudmc/swrc/hud/RaceLeaderboard.java index 03d388a..876071f 100644 --- a/src/client/java/uk/cloudmc/swrc/hud/RaceLeaderboard.java +++ b/src/client/java/uk/cloudmc/swrc/hud/RaceLeaderboard.java @@ -1,6 +1,7 @@ package uk.cloudmc.swrc.hud; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.PlayerSkinDrawer; import net.minecraft.client.network.PlayerListEntry; @@ -38,7 +39,7 @@ public boolean shouldRender() { public void render(DrawContext graphics, float tickDelta) { Race race = SWRC.getRace(); - RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + //RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); int width = 50; int body_height = SWRC.getRace().raceLeaderboardPositions.size() * 9 + 2; @@ -55,11 +56,11 @@ public void render(DrawContext graphics, float tickDelta) { //renderBox(graphics, WIDGETS_TEXTURE, 0, 0, x, y, 12, body_height, width); - graphics.drawTexture(RenderLayer::getGuiTextured, WIDGETS_TEXTURE, x + 3, y + 3, 5, 0, 25, 10, 256, 256); + //graphics.drawTexture(RenderPipelines.GUI_TEXTURED, WIDGETS_TEXTURE, x + 3, y + 3, 5, 0, 25, 10, 256, 256); String header = String.format(SWRCConfig.getInstance().header_text, SWRC.getRaceName()); - renderText(graphics, header, x + 32, y + 5, 0xFFFFFF); + renderText(graphics, header, x + 32, y + 5, 0xFFFFFFFF); if (SWRC.getRace().getTotalLaps() < 10000) { @@ -67,7 +68,7 @@ public void render(DrawContext graphics, float tickDelta) { if (SWRC.getRace().getTotalPits() == 1) s = ""; - renderText(graphics, String.format("Lap %s/%s :: %s Pit%s", race_lap, race.getTotalLaps(), race.getTotalPits(), s), x + 46 + widthOfText(header), y + 5, 0xFFFFFF); + renderText(graphics, String.format("Lap %s/%s :: %s Pit%s", race_lap, race.getTotalLaps(), race.getTotalPits(), s), x + 46 + widthOfText(header), y + 5, 0xFFFFFFFF); } for (S2CUpdatePacket.RaceLeaderboardPosition position : race.raceLeaderboardPositions) { @@ -81,23 +82,23 @@ public void render(DrawContext graphics, float tickDelta) { int offset = 0; for (S2CUpdatePacket.RaceLeaderboardPosition position : race.raceLeaderboardPositions) { - int pos_color = 0xFFFFFF; + int pos_color = 0xFFFFFFFF; - if (offset == 0) pos_color = 0xFCBA03; - if (offset == 1) pos_color = 0xB2B1BD; - if (offset == 2) pos_color = 0x805B2B; + if (offset == 0) pos_color = 0xFFFCBA03; + if (offset == 1) pos_color = 0xFFB2B1BD; + if (offset == 2) pos_color = 0xFF805B2B; double precise_targeted_height = lerp(rowHeight.getOrDefault(position.player_name, (double) offset * 9), offset * 9, 0.05); int derived_height = (int) Math.round(precise_targeted_height); PlayerListEntry playerListEntry = SWRC.minecraftClient.getNetworkHandler().getPlayerListEntry(position.player_name); - if (playerListEntry != null) { - PlayerSkinDrawer.draw(graphics, playerListEntry.getSkinTextures(), x + 12 + 6, y + 14 + derived_height + 4, 8); - } +// if (playerListEntry != null) { +// PlayerSkinDrawer.draw(graphics, playerListEntry.getSkinTextures(), x + 12 + 6, y + 14 + derived_height + 4, 8); +// } renderText(graphics, String.format("%s", offset + 1), x + 4, y + 14 + derived_height + 4, pos_color); - renderText(graphics, String.format("%s", position.player_name), x + 22 + 6, y + 14 + derived_height + 4, race.getFlap() != null && race.getFlap().getPlayerName().equals(position.player_name) ? 0x9803FC : 0xFFFFFF); + renderText(graphics, String.format("%s", position.player_name), x + 22 + 6, y + 14 + derived_height + 4, race.getFlap() != null && race.getFlap().getPlayerName().equals(position.player_name) ? 0xFF9803FC : 0xFFFFFFFF); int pits = race.pits.getOrDefault(position.player_name, 0); int laps = race.laps.getOrDefault(position.player_name, 0); @@ -105,9 +106,9 @@ public void render(DrawContext graphics, float tickDelta) { if (position.in_pit) { int start_pos = width - widthOfText("IN PIT") - 2; - renderText(graphics, "IN PIT", x + start_pos + 6, y + 14 + derived_height + 4, 0x888888 ); + renderText(graphics, "IN PIT", x + start_pos + 6, y + 14 + derived_height + 4, 0xFF888888 ); } else if (laps > race.getTotalLaps()) { - renderText(graphics, "FINISHED", x + width - 70 + 36, y + 14 + derived_height + 4, 0xAAAAAA); + renderText(graphics, "FINISHED", x + width - 70 + 36, y + 14 + derived_height + 4, 0xFFAAAAAA); } else { int start_pos = width - widthOfText("-" + DeltaFormat.formatDelta(0)) - 2; @@ -120,28 +121,32 @@ public void render(DrawContext graphics, float tickDelta) { x + start_pos + 6, y + 14 + derived_height + 4, ColorUtil.lerpColor( - 0xf5ee6a, // yellow - 0xf56a6a, // red + 0xFFf5ee6a, // yellow + 0xFFf56a6a, // red clamp((float) Math.pow(2, delta / 60000f * -5), 0, 1) ) ); } else if (delta > 0) { - renderText(graphics, "ERR", x + start_pos + 6, y + 14 + derived_height + 4, 0xDDAAAA ); + renderText(graphics, "ERR", x + start_pos + 6, y + 14 + derived_height + 4, 0xFFDDAAAA ); } else { if (offset == 0) { - renderText(graphics, "INTERVAL", x + start_pos + 6, y + 14 + derived_height + 4, 0x6af573 ); + renderText(graphics, "INTERVAL", x + start_pos + 6, y + 14 + derived_height + 4, 0xFF6af573 ); } else { - renderText(graphics, "-", x + start_pos + 6, y + 14 + derived_height + 4, 0xAAAAAA ); + renderText(graphics, "-", x + start_pos + 6, y + 14 + derived_height + 4, 0xFFAAAAAA ); } } last_delta = position.time_delta; } - renderText(graphics, String.format("%s", pits), x + width - 57 + 6, y + 14 + derived_height + 4, 0x00FFFF); + renderText(graphics, String.format("%s", pits), x + width - 57 + 6, y + 14 + derived_height + 4, 0xFF00FFFF); if (laps <= race.getTotalLaps()) { - renderText(graphics, String.format("%s", laps), x + width - 70 + 6, y + 14 + derived_height + 4, 0xFFFF00); + renderText(graphics, String.format("%s", laps), x + width - 70 + 6, y + 14 + derived_height + 4, 0xFFFFFF00); + } + + if (playerListEntry != null) { + PlayerSkinDrawer.draw(graphics, playerListEntry.getSkinTextures(), x + 12 + 6, y + 14 + derived_height + 4, 8); } rowHeight.put(position.player_name, precise_targeted_height); @@ -149,8 +154,9 @@ public void render(DrawContext graphics, float tickDelta) { offset += 1; } if (race.getFlap() != null) { - renderText(graphics, String.format("%s: %s", race.getFlap().getPlayerName(), DeltaFormat.formatMillis(race.getFlap().getTime())), x + 22, y + 14 + offset * 9 + 4, 0xAFFF14); + renderText(graphics, String.format("%s: %s", race.getFlap().getPlayerName(), DeltaFormat.formatMillis(race.getFlap().getTime())), x + 22, y + 14 + offset * 9 + 4, 0xFFAFFF14); } + graphics.drawTexture(RenderPipelines.GUI_TEXTURED, WIDGETS_TEXTURE, x + 3, y + 3, 5, 0, 25, 10, 256, 256); } public static void renderText(DrawContext graphics, String text, int x, int y, int color) { diff --git a/src/client/java/uk/cloudmc/swrc/hud/SplitTime.java b/src/client/java/uk/cloudmc/swrc/hud/SplitTime.java index dec1f65..5e05ba5 100644 --- a/src/client/java/uk/cloudmc/swrc/hud/SplitTime.java +++ b/src/client/java/uk/cloudmc/swrc/hud/SplitTime.java @@ -1,6 +1,7 @@ package uk.cloudmc.swrc.hud; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; import net.minecraft.util.Identifier; @@ -46,7 +47,7 @@ public void render(DrawContext graphics, float tickDelta) { if (race.laps.getOrDefault(SWRC.minecraftClient.player.getName().getString(), 0) > race.getTotalLaps()) return; - RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + //RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); if (selfPlace > 0) { long self_delta = race.raceLeaderboardPositions.get(selfPlace).time_delta; @@ -81,21 +82,25 @@ public void render(DrawContext graphics, float tickDelta) { x -= combined_length / 2; + renderText(graphics, time_text, x + 1, y + 1, 0xFFFFFFFF); + renderText(graphics, split_text, x + widthOfText(time_text) + 3, y + 1, 0xFFFFFFFF); + renderText(graphics, split_text, x + widthOfText(time_text) + 3, y + 1, 0xFFFFFFFF); + for (int ax = 0; ax < widthOfText(time_text) + 2; ax++) { - graphics.drawTexture(RenderLayer::getGuiTextured, WIDGETS_TEXTURE, x + ax, y, tx, ty, 1, 10, 256, 256); + graphics.drawTexture(RenderPipelines.GUI_TEXTURED, WIDGETS_TEXTURE, x + ax, y, tx, ty, 1, 10, 256, 256); for (int ay = 0; ay < 10; ay++) { - graphics.drawTexture(RenderLayer::getGuiTextured, WIDGETS_TEXTURE, x + ax, y + ay, tx, ty, 1, 1, 256, 256); + graphics.drawTexture(RenderPipelines.GUI_TEXTURED, WIDGETS_TEXTURE, x + ax, y + ay, tx, ty, 1, 1, 256, 256); } } for (int bx = 0; bx < widthOfText(split_text) + 2; bx++) { - graphics.drawTexture(RenderLayer::getGuiTextured, WIDGETS_TEXTURE, x + bx + widthOfText(time_text) + 2, y, tx + 1, ty, 1, 10, 256, 256); + graphics.drawTexture(RenderPipelines.GUI_TEXTURED, WIDGETS_TEXTURE, x + bx + widthOfText(time_text) + 2, y, tx + 1, ty, 1, 10, 256, 256); } - renderText(graphics, time_text, x + 1, y + 1, 0xFFFFFF); - renderText(graphics, split_text, x + widthOfText(time_text) + 3, y + 1, 0xFFFFFF); + /*renderText(graphics, time_text, x + 1, y + 1, 0xFFFFFF); renderText(graphics, split_text, x + widthOfText(time_text) + 3, y + 1, 0xFFFFFF); + renderText(graphics, split_text, x + widthOfText(time_text) + 3, y + 1, 0xFFFFFF);*/ } public static void renderText(DrawContext graphics, String text, int x, int y, int color) { diff --git a/src/client/java/uk/cloudmc/swrc/hud/StatusHud.java b/src/client/java/uk/cloudmc/swrc/hud/StatusHud.java index f5232d7..6c10f7f 100644 --- a/src/client/java/uk/cloudmc/swrc/hud/StatusHud.java +++ b/src/client/java/uk/cloudmc/swrc/hud/StatusHud.java @@ -3,6 +3,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; +import org.joml.Matrix3x2fStack; import uk.cloudmc.swrc.SWRC; import uk.cloudmc.swrc.SWRCConfig; import uk.cloudmc.swrc.WebsocketManager; @@ -109,35 +110,36 @@ public void render(DrawContext context, float tickDelta) { int scaledWidth = SWRC.minecraftClient.getWindow().getScaledWidth(); int scaledHeight = SWRC.minecraftClient.getWindow().getScaledHeight(); - RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + // RenderSystem.setShader(() -> GameRenderer.getPositionProgram()); - MatrixStack matrixStack = context.getMatrices(); + Matrix3x2fStack matrices = context.getMatrices(); int x = 0; int y = scaledHeight - 10; - matrixStack.push(); - matrixStack.translate(x, y, 0); + matrices.pushMatrix(); + matrices.translate(x, y); for (StatusChip chip : this.statuses) { if (!chip.shouldRender()) { continue; } - matrixStack.translate(0, -10, 0); + matrices.translate(0, -10); chip.render(context); } - matrixStack.pop(); + matrices.popMatrix(); } public static int drawTextWithBackground(DrawContext context, String text, int x, int y, int color, int padding) { int text_width = SWRC.minecraftClient.textRenderer.getWidth(text); int total_width = text_width + padding * 2; + context.drawText(SWRC.minecraftClient.textRenderer, text, x + padding, y + padding, 0xFFFFFFFF, true); context.fill(x, y, x + total_width, y + 10, color); - context.drawText(SWRC.minecraftClient.textRenderer, text, x + padding, y + padding, 0xFFFFFF, true); + //context.drawText(SWRC.minecraftClient.textRenderer, text, x + padding, y + padding, 0xFFFFFF, true); return total_width; } diff --git a/src/client/java/uk/cloudmc/swrc/hud/TimerHud.java b/src/client/java/uk/cloudmc/swrc/hud/TimerHud.java index 5cbc923..651b733 100644 --- a/src/client/java/uk/cloudmc/swrc/hud/TimerHud.java +++ b/src/client/java/uk/cloudmc/swrc/hud/TimerHud.java @@ -3,6 +3,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; +import org.joml.Matrix3x2fStack; import uk.cloudmc.swrc.SWRC; import uk.cloudmc.swrc.SWRCConfig; import uk.cloudmc.swrc.util.DeltaFormat; @@ -26,13 +27,13 @@ public void render(DrawContext context, float tickDelta) { time_remaining = SWRC.getRace().getTimerDuration() * 1000; } - RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + //RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); - MatrixStack matrixStack = context.getMatrices(); - matrixStack.push(); + Matrix3x2fStack matrixStack = context.getMatrices(); + matrixStack.pushMatrix(); - matrixStack.translate(scaledWidth - scaledHeight * .1f, scaledHeight * .1f, 0f); - matrixStack.scale(2, 2, 0); + matrixStack.translate(scaledWidth - scaledHeight * .1f, scaledHeight * .1f); + matrixStack.scale(2, 2); String label = DeltaFormat.formatMillis(time_remaining); @@ -45,6 +46,6 @@ public void render(DrawContext context, float tickDelta) { SWRCConfig.getInstance().leaderboard_shadow ); - matrixStack.pop(); + matrixStack.popMatrix(); } } diff --git a/src/client/java/uk/cloudmc/swrc/render/TrackBuilderRenderer.java b/src/client/java/uk/cloudmc/swrc/render/TrackBuilderRenderer.java index b41e9ba..cfdd5cb 100644 --- a/src/client/java/uk/cloudmc/swrc/render/TrackBuilderRenderer.java +++ b/src/client/java/uk/cloudmc/swrc/render/TrackBuilderRenderer.java @@ -87,7 +87,8 @@ public void renderCheckpoint(MatrixStack matrixStack, Camera camera, Vec3d left, public void renderPole(MatrixStack matrixStack, Camera camera, Vec3d pos, int color) { Tessellator tessellator = Tessellator.getInstance(); - RenderSystem.disableScissor(); + //RenderSystem.disableScissor(); + float prevLineWidth = RenderSystem.getShaderLineWidth(); @@ -111,7 +112,7 @@ public void renderPole(MatrixStack matrixStack, Camera camera, Vec3d pos, int co public void renderLine(MatrixStack matrixStack, Camera camera, Vec3d pos1, Vec3d pos2, int color) { Tessellator tessellator = Tessellator.getInstance(); - RenderSystem.disableScissor(); + //RenderSystem.disableScissor(); RenderSystem.lineWidth(3f); diff --git a/src/client/resources/fabric.mod.json b/src/client/resources/fabric.mod.json index 8504c68..4528daf 100644 --- a/src/client/resources/fabric.mod.json +++ b/src/client/resources/fabric.mod.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "id": "swrc", - "version": "3.1.0", + "version": "3.1.1", "name": "SW Race Control", "description": "Mod for timing and controlling races on Stoneworks @ Formula Abex", "authors": [