Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id 'fabric-loom' version '1.10-SNAPSHOT'
id 'fabric-loom' version '1.11-SNAPSHOT'
id 'maven-publish'
}

Expand Down
14 changes: 7 additions & 7 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
fabric_version=0.133.4+1.21.8
modmenu_version=15.0.0
cloth_config_version=19.0.147
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
Expand Down
10 changes: 6 additions & 4 deletions gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 8 additions & 14 deletions src/client/java/uk/cloudmc/swrc/SWRC.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand All @@ -105,8 +100,7 @@ public void render(DrawContext context, RenderTickCounter tickCounter) {
statusHud.render(context, 0.0f);
}
}
});
});
);

WorldRenderEvents.LAST.register(trackBuilderRenderer);
}
Expand Down
11 changes: 7 additions & 4 deletions src/client/java/uk/cloudmc/swrc/hud/BestLap.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -53,23 +55,24 @@ public void render(DrawContext graphics, float tickDelta) {
// y=\max\left(0,\min\left(p,-\frac{6px}{t^{2}}\left(x-t\right)\left\{0<x<t\right\}\right)\right) :: p = peak :: t = ticks on screen
int animationHeight = (int) Math.floor(Math.max(0, Math.min(p, -(6 * p * x)/(ON_SCREEN_TIME * ON_SCREEN_TIME) * (x - ON_SCREEN_TIME))));

graphics.drawTexture(RenderLayer::getGuiTextured, WIDGETS_TEXTURE, scaledWidth / 2 - w / 2, animationHeight - h, u, v, w, h, 256, 256);
graphics.drawTexture(RenderPipelines.GUI_TEXTURED , WIDGETS_TEXTURE, scaledWidth / 2 - w / 2, animationHeight - h, u, v, w, h, 256, 256);
graphics.drawText(
SWRC.minecraftClient.textRenderer,
Text.literal(flap_owner).styled(style -> style.withFormatting(Formatting.DARK_PURPLE)),
scaledWidth / 2 - w / 2 + 103,
animationHeight - h + 3,
0xFFFFFF,
0xFFFFFFFF,
SWRCConfig.getInstance().leaderboard_shadow
);
graphics.drawText(
SWRC.minecraftClient.textRenderer,
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) {
Expand Down
6 changes: 4 additions & 2 deletions src/client/java/uk/cloudmc/swrc/hud/DisconnectBanner.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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<x<t\right\}\right)\right) :: p = peak :: t = ticks on screen
int animationHeight = (int) Math.floor(Math.max(0, Math.min(p, -(6 * p * x)/(ON_SCREEN_TIME * ON_SCREEN_TIME) * (x - ON_SCREEN_TIME))));

graphics.drawTexture(RenderLayer::getGuiTextured, WIDGETS_TEXTURE, scaledWidth / 2 - w / 2, animationHeight - h, u, v, w, h, 256, 256);
graphics.drawTexture(RenderPipelines.GUI_TEXTURED, WIDGETS_TEXTURE, scaledWidth / 2 - w / 2, animationHeight - h, u, v, w, h, 256, 256);
}

public void show() {
Expand Down
4 changes: 2 additions & 2 deletions src/client/java/uk/cloudmc/swrc/hud/EventsQueue.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void render(DrawContext context, 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);

calculated_height = lerp(calculated_height, lines.size() * 9, 0.05);

Expand All @@ -48,7 +48,7 @@ public void render(DrawContext context, float tickDelta) {
for (Iterator<EventEntry> 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;
}
Expand Down
40 changes: 23 additions & 17 deletions src/client/java/uk/cloudmc/swrc/hud/QualiLeaderboard.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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));
Expand All @@ -69,36 +70,36 @@ 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(
graphics,
"INTERVAL",
x + start_pos + 26,
y + 14 + derived_height + 4,
0xCCCCCC
0xFFCCCCCC
);
} else {
renderText(
Expand All @@ -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) {
Expand Down
Loading