From 5870414653f17f5488f2c9760a28c789820e5777 Mon Sep 17 00:00:00 2001 From: lukasabbe <67807954+lukasabbe@users.noreply.github.com> Date: Sat, 21 Feb 2026 17:03:21 +0100 Subject: [PATCH] Add horse --- build.gradle | 16 ++ gradle.properties | 3 +- .../simpletransporthud/Constants.java | 3 +- .../SimpleTransportHudMod.java | 8 +- .../simpletransporthud/config/Config.java | 6 + .../simpletransporthud/huds/HorseHud.java | 17 +- .../simpletransporthud/huds/RideableHud.java | 177 ++++++++++++++++++ src/main/resources/fabric.mod.json | 2 +- 8 files changed, 222 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 95920a8..660b3ff 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,7 @@ plugins { id 'fabric-loom' version '1.15-SNAPSHOT' id 'maven-publish' + id "com.modrinth.minotaur" version "2.+" } version = project.mod_version @@ -68,4 +69,19 @@ jar { from("LICENSE") { rename { "${it}_${project.archives_base_name}" } } +} + +modrinth { + token = System.getenv("MODRINTH_TOKEN") + projectId = "5iOVOX8K" //https://modrinth.com/mod/simple-transport-hud + version = project.version + versionType = project.versionType + uploadFile = jar + gameVersions = [project.minecraft_version] + loaders = ["fabric"] + dependencies { + required.project "fabric-api" + required.project "yacl" + required.project "modmenu" + } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 55d72f4..d3e12c4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,8 @@ org.gradle.jvmargs=-Xmx1G minecraft_version=1.21.11 loader_version=0.18.4 # Mod Properties -mod_version=1.0+1.21.11 +mod_version=0.2+1.21.11 +versionType=beta maven_group=com.lukasabbe archives_base_name=SimpleTransportHud # Dependencies diff --git a/src/main/java/com/lukasabbe/simpletransporthud/Constants.java b/src/main/java/com/lukasabbe/simpletransporthud/Constants.java index e6b24ab..6ebc2f4 100644 --- a/src/main/java/com/lukasabbe/simpletransporthud/Constants.java +++ b/src/main/java/com/lukasabbe/simpletransporthud/Constants.java @@ -13,6 +13,7 @@ public class Constants { public final static Identifier ElytraHudIdentifier = Identifier.fromNamespaceAndPath(MOD_ID, "elytra_hud"); public final static Identifier BoatHudIdentifier = Identifier.fromNamespaceAndPath(MOD_ID, "boat_hud"); public final static Identifier MinecartHudIdentifier = Identifier.fromNamespaceAndPath(MOD_ID, "minecart_hud"); + public final static Identifier HorseHudIdentifier = Identifier.fromNamespaceAndPath(MOD_ID, "horse_hud"); - public final static List HudIdentifiers = Arrays.asList(ElytraHudIdentifier, BoatHudIdentifier, MinecartHudIdentifier); + public final static List HudIdentifiers = Arrays.asList(ElytraHudIdentifier, BoatHudIdentifier, MinecartHudIdentifier, HorseHudIdentifier); } diff --git a/src/main/java/com/lukasabbe/simpletransporthud/SimpleTransportHudMod.java b/src/main/java/com/lukasabbe/simpletransporthud/SimpleTransportHudMod.java index cc80739..6852c0b 100644 --- a/src/main/java/com/lukasabbe/simpletransporthud/SimpleTransportHudMod.java +++ b/src/main/java/com/lukasabbe/simpletransporthud/SimpleTransportHudMod.java @@ -1,10 +1,7 @@ package com.lukasabbe.simpletransporthud; import com.lukasabbe.simpletransporthud.config.Config; -import com.lukasabbe.simpletransporthud.huds.BoatHud; -import com.lukasabbe.simpletransporthud.huds.ElytraHud; -import com.lukasabbe.simpletransporthud.huds.MinecartHud; -import com.lukasabbe.simpletransporthud.huds.SimpleHud; +import com.lukasabbe.simpletransporthud.huds.*; import com.lukasabbe.simpletransporthud.tools.ElytraTools; import com.lukasabbe.simpletransporthud.tools.EntityTools; import net.fabricmc.api.ClientModInitializer; @@ -21,7 +18,8 @@ public class SimpleTransportHudMod implements ClientModInitializer { public static List HUD_LIST = Arrays.asList( new ElytraHud(), new BoatHud(), - new MinecartHud() + new MinecartHud(), + new HorseHud() ); @Override diff --git a/src/main/java/com/lukasabbe/simpletransporthud/config/Config.java b/src/main/java/com/lukasabbe/simpletransporthud/config/Config.java index a858b51..e390189 100644 --- a/src/main/java/com/lukasabbe/simpletransporthud/config/Config.java +++ b/src/main/java/com/lukasabbe/simpletransporthud/config/Config.java @@ -37,6 +37,8 @@ public class Config { public HudPosition hudPositionBoat = HudPosition.CENTER; @SerialEntry public HudPosition hudPositionMinecart = HudPosition.CENTER; + @SerialEntry + public HudPosition hudPositionHorse = HudPosition.CENTER; //Hud speed unit @@ -46,6 +48,8 @@ public class Config { public SpeedEnum speedEnumBoat = SpeedEnum.kmh; @SerialEntry public SpeedEnum speedEnumMinecart = SpeedEnum.kmh; + @SerialEntry + public SpeedEnum speedEnumHorse = SpeedEnum.kmh; //Display speed @SerialEntry @@ -54,6 +58,8 @@ public class Config { public int boatHudDelay = 0; @SerialEntry public int minecartHudDelay = 0; + @SerialEntry + public int horseHudDelay = 0; private Map getActiveHuds() { Map activatedHuds = new IdentityHashMap<>(); diff --git a/src/main/java/com/lukasabbe/simpletransporthud/huds/HorseHud.java b/src/main/java/com/lukasabbe/simpletransporthud/huds/HorseHud.java index 0555515..5d81db2 100644 --- a/src/main/java/com/lukasabbe/simpletransporthud/huds/HorseHud.java +++ b/src/main/java/com/lukasabbe/simpletransporthud/huds/HorseHud.java @@ -1,16 +1,29 @@ package com.lukasabbe.simpletransporthud.huds; +import com.lukasabbe.simpletransporthud.Constants; +import com.lukasabbe.simpletransporthud.config.Config; import com.lukasabbe.simpletransporthud.config.HudPosition; +import com.lukasabbe.simpletransporthud.tools.EntityTools; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.Identifier; +import net.minecraft.world.entity.animal.equine.AbstractHorse; public class HorseHud extends RideableHud { + + @Override + public void render(GuiGraphics graphics, DeltaTracker tracker) { + if(!EntityTools.isRidingEntity(AbstractHorse.class)) return; + super.render(graphics, tracker); + } + @Override public Identifier getIdentifier() { - return null; + return Constants.HorseHudIdentifier; } @Override public HudPosition getHudPosition() { - return null; + return Config.HANDLER.instance().hudPositionHorse; } } diff --git a/src/main/java/com/lukasabbe/simpletransporthud/huds/RideableHud.java b/src/main/java/com/lukasabbe/simpletransporthud/huds/RideableHud.java index 283570c..07bbbe6 100644 --- a/src/main/java/com/lukasabbe/simpletransporthud/huds/RideableHud.java +++ b/src/main/java/com/lukasabbe/simpletransporthud/huds/RideableHud.java @@ -1,11 +1,188 @@ package com.lukasabbe.simpletransporthud.huds; +import com.lukasabbe.simpletransporthud.config.Config; +import com.lukasabbe.simpletransporthud.tools.EntityTools; import net.minecraft.client.DeltaTracker; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.util.Mth; public abstract class RideableHud implements SimpleHud { @Override public void render(GuiGraphics graphics, DeltaTracker tracker) { + if(!isHudActivated()) return; + if(client.noRender) return; + if(client.player == null) return; + if(EntityTools.getTime() < Config.HANDLER.instance().boatHudDelay) return; + int[] pos = getCornerPos(); + int x = pos[0]; + int y = pos[1]; + renderBackPlate(graphics); + + int textX = 5; + float textScale = 0.6f; + int whiteColor = 0xFFFFFFFF; + + //Draw speed + int speedTextY = 5; + renderCenteredScaledText(graphics, getSpeed(Config.HANDLER.instance().speedEnumBoat), x + textX, y + speedTextY, whiteColor, textScale); + + //Draw coordinates + int coordinatesTextY = 15; + int maxAvailableWidth = 40; + String coordinatesText = String.format("%.0f:%.0f:%.0f", client.player.getX(), client.player.getY(), client.player.getZ()); + int textWidth = client.font.width(coordinatesText); + float maxScale = (float) maxAvailableWidth / textWidth; + float finalScale = Math.min(textScale, maxScale); + renderCenteredScaledText(graphics, coordinatesText, x + textX, y + coordinatesTextY, whiteColor, finalScale); + + int textureCornerX = 0; + int textureCornerY = 0; + + int verticalArrowWidth = 8; + int verticalArrowHeight = 6; + + int leftGreenArrowX = x + 40; + int rightRedArrowX = x + 50; + int verticalArrowY = y + 5; + + if(client.options.keyLeft.isDown()){ + graphics.blit( + RenderPipelines.GUI_TEXTURED, + left_green_arrow, + leftGreenArrowX, verticalArrowY, + textureCornerX, textureCornerY, + verticalArrowWidth, verticalArrowHeight, + verticalArrowWidth, verticalArrowHeight + ); + graphics.blit( + RenderPipelines.GUI_TEXTURED, + right_off_red_arrow, + rightRedArrowX, verticalArrowY, + textureCornerX, textureCornerY, + verticalArrowWidth, verticalArrowHeight, + verticalArrowWidth, verticalArrowHeight + ); + } else if (client.options.keyRight.isDown()) { + graphics.blit( + RenderPipelines.GUI_TEXTURED, + left_off_green_arrow, + leftGreenArrowX, verticalArrowY, + textureCornerX, textureCornerY, + verticalArrowWidth, verticalArrowHeight, + verticalArrowWidth, verticalArrowHeight + ); + graphics.blit( + RenderPipelines.GUI_TEXTURED, + right_red_arrow, + rightRedArrowX, verticalArrowY, + textureCornerX, textureCornerY, + verticalArrowWidth, verticalArrowHeight, + verticalArrowWidth, verticalArrowHeight + ); + } else { + graphics.blit( + RenderPipelines.GUI_TEXTURED, + left_off_green_arrow, + leftGreenArrowX, verticalArrowY, + textureCornerX, textureCornerY, + verticalArrowWidth, verticalArrowHeight, + verticalArrowWidth, verticalArrowHeight + ); + graphics.blit( + RenderPipelines.GUI_TEXTURED, + right_off_red_arrow, + rightRedArrowX, verticalArrowY, + textureCornerX, textureCornerY, + verticalArrowWidth, verticalArrowHeight, + verticalArrowWidth, verticalArrowHeight + ); + } + + int arrowWidth = 6; + int arrowHeight = 8; + + int greenAndRedArrowX = x + 46; + int greenArrowY = y + 13; + int redArrowY = y + 23; + + if(client.options.keyUp.isDown()){ + graphics.blit( + RenderPipelines.GUI_TEXTURED, + green_arrow, + greenAndRedArrowX, greenArrowY, + textureCornerX, textureCornerY, + arrowWidth, arrowHeight, + arrowWidth, arrowHeight + ); + graphics.blit( + RenderPipelines.GUI_TEXTURED, + off_red_arrow, + greenAndRedArrowX, redArrowY, + textureCornerX, textureCornerY, + arrowWidth, arrowHeight, + arrowWidth, arrowHeight + ); + } else if(client.options.keyDown.isDown()) { + graphics.blit( + RenderPipelines.GUI_TEXTURED, + off_green_arrow, + greenAndRedArrowX, greenArrowY, + textureCornerX, textureCornerY, + arrowWidth, arrowHeight, + arrowWidth, arrowHeight + ); + graphics.blit( + RenderPipelines.GUI_TEXTURED, + red_arrow, + greenAndRedArrowX, redArrowY, + textureCornerX, textureCornerY, + arrowWidth, arrowHeight, + arrowWidth, arrowHeight + ); + } else { + graphics.blit( + RenderPipelines.GUI_TEXTURED, + off_green_arrow, + greenAndRedArrowX, greenArrowY, + textureCornerX, textureCornerY, + arrowWidth, arrowHeight, + arrowWidth, arrowHeight + ); + graphics.blit( + RenderPipelines.GUI_TEXTURED, + off_red_arrow, + greenAndRedArrowX, redArrowY, + textureCornerX, textureCornerY, + arrowWidth, arrowHeight, + arrowWidth, arrowHeight + ); + } + + //Compas background + + int compassWidth = 29; + int compassHeight = 29; + int compassX = x + 67; + int compassY = y + 3; + graphics.blit( + RenderPipelines.GUI_TEXTURED, + compass, + compassX, compassY, + textureCornerX, textureCornerY, + compassWidth, compassHeight, + compassWidth, compassHeight + ); + + double radians = EntityTools.getRadians(tracker.getGameTimeDeltaPartialTick(true)); + + double radius = 5; + float centerX = compassX + 14; + float centerY = compassY + 14; + float endX = Math.round(centerX + (radius * -Mth.sin(radians))); + float endY = Math.round(centerY + (radius * Mth.cos(radians))); + + drawLine(graphics, centerX, centerY, endX, endY, (int) radius, compass_pointer); } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index c86a3e7..09b2f5e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -3,7 +3,7 @@ "id": "simpletransporthud", "version": "${version}", "name": "Simple Transport HUD", - "description": "A Hud mod for different transports in Minecraft ", + "description": "A Hud mod for different transports in Minecraft", "authors": ["Lukasabbe"], "contact": { "homepage": "",