From 2f02c2466ecc4ed74e5fd6ab858b562f5da44050 Mon Sep 17 00:00:00 2001 From: lukasabbe <67807954+lukasabbe@users.noreply.github.com> Date: Sat, 21 Feb 2026 14:12:17 +0100 Subject: [PATCH] Add a few config options --- .../com/lukasabbe/simplehud/SimpleHudMod.java | 2 + .../lukasabbe/simplehud/config/Config.java | 8 ++++ .../lukasabbe/simplehud/config/ModMenu.java | 40 ++++++++++++++++++- .../com/lukasabbe/simplehud/huds/BoatHud.java | 3 ++ .../lukasabbe/simplehud/huds/ElytraHud.java | 1 + .../lukasabbe/simplehud/huds/MinecartHud.java | 1 + .../lukasabbe/simplehud/huds/SimpleHud.java | 3 +- .../simplehud/tools/ElytraTools.java | 11 +++++ .../simplehud/tools/EntityTools.java | 15 +++++++ .../assets/simplehud/lang/en_us.json | 5 ++- 10 files changed, 85 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/lukasabbe/simplehud/SimpleHudMod.java b/src/main/java/com/lukasabbe/simplehud/SimpleHudMod.java index 814028e..6b86202 100644 --- a/src/main/java/com/lukasabbe/simplehud/SimpleHudMod.java +++ b/src/main/java/com/lukasabbe/simplehud/SimpleHudMod.java @@ -6,6 +6,7 @@ import com.lukasabbe.simplehud.huds.ElytraHud; import com.lukasabbe.simplehud.huds.MinecartHud; import com.lukasabbe.simplehud.huds.SimpleHud; import com.lukasabbe.simplehud.tools.ElytraTools; +import com.lukasabbe.simplehud.tools.EntityTools; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; @@ -32,6 +33,7 @@ public class SimpleHudMod implements ClientModInitializer { (guiGraphics, deltaTracker) -> renderScaled(guiGraphics, deltaTracker, simpleHud)) ); ClientTickEvents.END_CLIENT_TICK.register(client -> ElytraTools.tickElytraTools()); + ClientTickEvents.END_CLIENT_TICK.register(client -> EntityTools.tickEntityTools()); } public static void renderScaled(GuiGraphics graphics, DeltaTracker tracker, SimpleHud simpleHud){ diff --git a/src/main/java/com/lukasabbe/simplehud/config/Config.java b/src/main/java/com/lukasabbe/simplehud/config/Config.java index a6beaee..ea6a5d9 100644 --- a/src/main/java/com/lukasabbe/simplehud/config/Config.java +++ b/src/main/java/com/lukasabbe/simplehud/config/Config.java @@ -47,6 +47,14 @@ public class Config { @SerialEntry public SpeedEnum speedEnumMinecart = SpeedEnum.kmh; + //Display speed + @SerialEntry + public int elytraHudDelay = 2; + @SerialEntry + public int boatHudDelay = 0; + @SerialEntry + public int minecartHudDelay = 0; + private Map getActiveHuds() { Map activatedHuds = new IdentityHashMap<>(); for(var simpleHudIdentifier : Constants.HudIdentifiers){ diff --git a/src/main/java/com/lukasabbe/simplehud/config/ModMenu.java b/src/main/java/com/lukasabbe/simplehud/config/ModMenu.java index e686a59..3b4d9f0 100644 --- a/src/main/java/com/lukasabbe/simplehud/config/ModMenu.java +++ b/src/main/java/com/lukasabbe/simplehud/config/ModMenu.java @@ -6,7 +6,6 @@ import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder; import dev.isxander.yacl3.gui.controllers.cycling.EnumController; -import dev.isxander.yacl3.gui.controllers.slider.IntegerSliderController; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; @@ -60,6 +59,13 @@ public class ModMenu implements ModMenuApi { .binding(HudPosition.CENTER, () -> instance.hudPositionElytra, newVal -> instance.hudPositionElytra = newVal) .customController(opt -> new EnumController<>(opt, HudPosition.class)) .build()) + .option(Option + .createBuilder() + .name(Component.translatable("simple_hud.config.category.elytra_options.option.delay_hud.name")) + .description(OptionDescription.of(Component.translatable("simple_hud.config.category.elytra_options.option.delay_hud.description"))) + .binding(2, () -> instance.elytraHudDelay, newVal -> instance.elytraHudDelay = newVal) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 30).step(1)) + .build()) .build()) .category(ConfigCategory .createBuilder() @@ -78,6 +84,38 @@ public class ModMenu implements ModMenuApi { .binding(HudPosition.CENTER, () -> instance.hudPositionBoat, newVal -> instance.hudPositionBoat = newVal) .customController(opt -> new EnumController<>(opt, HudPosition.class)) .build()) + .option(Option + .createBuilder() + .name(Component.translatable("simple_hud.config.category.elytra_options.option.delay_hud.name")) + .description(OptionDescription.of(Component.translatable("simple_hud.config.category.elytra_options.option.delay_hud.description"))) + .binding(2, () -> instance.boatHudDelay, newVal -> instance.boatHudDelay = newVal) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 30).step(1)) + .build()) + .build()) + .category(ConfigCategory + .createBuilder() + .name(Component.translatable("simple_hud.config.category.minecart_hud.name")) + .option(Option + .createBuilder() + .name(Component.translatable("simple_hud.config.category.elytra_options.option.speed_enum.name")) + .description(OptionDescription.of(Component.translatable("simple_hud.config.category.elytra_options.option.speed_enum.description"))) + .binding(SpeedEnum.kmh, () -> instance.speedEnumMinecart, newVal -> instance.speedEnumMinecart = newVal) + .customController(opt -> new EnumController<>(opt, SpeedEnum.class)) + .build()) + .option(Option + .createBuilder() + .name(Component.translatable("simple_hud.config.category.elytra_options.option.hud_position.name")) + .description(OptionDescription.of(Component.translatable("simple_hud.config.category.elytra_options.option.hud_position.description"))) + .binding(HudPosition.CENTER, () -> instance.hudPositionMinecart, newVal -> instance.hudPositionMinecart = newVal) + .customController(opt -> new EnumController<>(opt, HudPosition.class)) + .build()) + .option(Option + .createBuilder() + .name(Component.translatable("simple_hud.config.category.elytra_options.option.delay_hud.name")) + .description(OptionDescription.of(Component.translatable("simple_hud.config.category.elytra_options.option.delay_hud.description"))) + .binding(2, () -> instance.minecartHudDelay, newVal -> instance.minecartHudDelay = newVal) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 30).step(1)) + .build()) .build()) .save(() -> Config.HANDLER.save()) .build().generateScreen(parent); diff --git a/src/main/java/com/lukasabbe/simplehud/huds/BoatHud.java b/src/main/java/com/lukasabbe/simplehud/huds/BoatHud.java index d2068bb..19b09cf 100644 --- a/src/main/java/com/lukasabbe/simplehud/huds/BoatHud.java +++ b/src/main/java/com/lukasabbe/simplehud/huds/BoatHud.java @@ -3,6 +3,7 @@ package com.lukasabbe.simplehud.huds; import com.lukasabbe.simplehud.Constants; import com.lukasabbe.simplehud.config.Config; import com.lukasabbe.simplehud.config.HudPosition; +import com.lukasabbe.simplehud.tools.ElytraTools; import com.lukasabbe.simplehud.tools.EntityTools; import net.minecraft.client.DeltaTracker; import net.minecraft.client.gui.GuiGraphics; @@ -19,6 +20,8 @@ public class BoatHud implements SimpleHud { if(client.noRender) return; if(!EntityTools.isRidingEntity(Boat.class)) return; if(client.player == null) return; + if(EntityTools.getTime() < Config.HANDLER.instance().boatHudDelay) return; + int[] pos = getCornerPos(); int x = pos[0]; diff --git a/src/main/java/com/lukasabbe/simplehud/huds/ElytraHud.java b/src/main/java/com/lukasabbe/simplehud/huds/ElytraHud.java index 854b2ec..384e130 100644 --- a/src/main/java/com/lukasabbe/simplehud/huds/ElytraHud.java +++ b/src/main/java/com/lukasabbe/simplehud/huds/ElytraHud.java @@ -20,6 +20,7 @@ public class ElytraHud implements SimpleHud { if(!ElytraTools.isFlying()) return; if(client.noRender) return; if(client.player == null) return; + if(ElytraTools.getTime() < Config.HANDLER.instance().elytraHudDelay) return; int[] pos = getCornerPos(); int x = pos[0]; diff --git a/src/main/java/com/lukasabbe/simplehud/huds/MinecartHud.java b/src/main/java/com/lukasabbe/simplehud/huds/MinecartHud.java index 027e42c..48ec499 100644 --- a/src/main/java/com/lukasabbe/simplehud/huds/MinecartHud.java +++ b/src/main/java/com/lukasabbe/simplehud/huds/MinecartHud.java @@ -18,6 +18,7 @@ public class MinecartHud implements SimpleHud { if(client.noRender) return; if(!EntityTools.isRidingEntity(Minecart.class)) return; if(client.player == null) return; + if(EntityTools.getTime() < Config.HANDLER.instance().minecartHudDelay) return; int[] pos = getCornerPos(); int x = pos[0]; diff --git a/src/main/java/com/lukasabbe/simplehud/huds/SimpleHud.java b/src/main/java/com/lukasabbe/simplehud/huds/SimpleHud.java index a17f04c..1db452e 100644 --- a/src/main/java/com/lukasabbe/simplehud/huds/SimpleHud.java +++ b/src/main/java/com/lukasabbe/simplehud/huds/SimpleHud.java @@ -1,7 +1,6 @@ package com.lukasabbe.simplehud.huds; import com.lukasabbe.simplehud.Constants; -import com.lukasabbe.simplehud.SimpleHudMod; import com.lukasabbe.simplehud.config.Config; import com.lukasabbe.simplehud.config.HudPosition; import com.lukasabbe.simplehud.config.SpeedEnum; @@ -34,7 +33,7 @@ public interface SimpleHud { HudPosition getHudPosition(); default boolean isHudActivated(){ - return Config.HANDLER.instance().HudActivatedList.get(getIdentifier().toShortString()); + return Config.HANDLER.instance().HudActivatedList.get(getIdentifier().toShortString()); } default void renderBackPlate(GuiGraphics graphics){ diff --git a/src/main/java/com/lukasabbe/simplehud/tools/ElytraTools.java b/src/main/java/com/lukasabbe/simplehud/tools/ElytraTools.java index 1c4c190..49a6f01 100644 --- a/src/main/java/com/lukasabbe/simplehud/tools/ElytraTools.java +++ b/src/main/java/com/lukasabbe/simplehud/tools/ElytraTools.java @@ -12,8 +12,19 @@ public class ElytraTools { private static double speed = 0; + private static long ticks = 0; + public static void tickElytraTools(){ calculateSpeed(); + if(!isFlying()){ + ticks = 0; + }else{ + ticks++; + } + } + + public static long getTime(){ + return (ticks / 20); } public static void calculateSpeed(){ diff --git a/src/main/java/com/lukasabbe/simplehud/tools/EntityTools.java b/src/main/java/com/lukasabbe/simplehud/tools/EntityTools.java index 1b4480a..a2782bb 100644 --- a/src/main/java/com/lukasabbe/simplehud/tools/EntityTools.java +++ b/src/main/java/com/lukasabbe/simplehud/tools/EntityTools.java @@ -6,6 +6,21 @@ import net.minecraft.util.Mth; import org.jspecify.annotations.Nullable; public class EntityTools { + + private static long ticks = 0; + + public static void tickEntityTools(){ + if(!isRidingEntity()){ + ticks = 0; + }else{ + ticks++; + } + } + + public static long getTime(){ + return (ticks / 20); + } + public static boolean isRidingEntity(Class entityType){ var player = getLocalPlayer(); if(player == null) return false; diff --git a/src/main/resources/assets/simplehud/lang/en_us.json b/src/main/resources/assets/simplehud/lang/en_us.json index 015fa38..4a074e0 100644 --- a/src/main/resources/assets/simplehud/lang/en_us.json +++ b/src/main/resources/assets/simplehud/lang/en_us.json @@ -27,5 +27,8 @@ "simple_hud.config.category.general.option.safe_area.name": "Ignore Safe Area", "simple_hud.config.category.general.option.safe_area.description": "Move HUD to screen edges, ignoring GUI safe area margins", "simple_hud.config.category.elytra_options.option.hud_position.name": "HUD Position", - "simple_hud.config.category.elytra_options.option.hud_position.description": "Change the position of the HUD on screen" + "simple_hud.config.category.elytra_options.option.hud_position.description": "Change the position of the HUD on screen", + "simple_hud.config.category.elytra_options.option.delay_hud.name": "Delay HUD displaying", + "simple_hud.config.category.elytra_options.option.delay_hud.description": "Change the time it takes for the HUD to appear", + "simple_hud.config.category.minecart_hud.name": "Minecart HUD options" } \ No newline at end of file