Add a few config options

This commit is contained in:
lukasabbe
2026-02-21 14:12:17 +01:00
parent 87ca99fb3c
commit 2f02c2466e
10 changed files with 85 additions and 4 deletions
@@ -6,6 +6,7 @@ import com.lukasabbe.simplehud.huds.ElytraHud;
import com.lukasabbe.simplehud.huds.MinecartHud; import com.lukasabbe.simplehud.huds.MinecartHud;
import com.lukasabbe.simplehud.huds.SimpleHud; import com.lukasabbe.simplehud.huds.SimpleHud;
import com.lukasabbe.simplehud.tools.ElytraTools; import com.lukasabbe.simplehud.tools.ElytraTools;
import com.lukasabbe.simplehud.tools.EntityTools;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; 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)) (guiGraphics, deltaTracker) -> renderScaled(guiGraphics, deltaTracker, simpleHud))
); );
ClientTickEvents.END_CLIENT_TICK.register(client -> ElytraTools.tickElytraTools()); 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){ public static void renderScaled(GuiGraphics graphics, DeltaTracker tracker, SimpleHud simpleHud){
@@ -47,6 +47,14 @@ public class Config {
@SerialEntry @SerialEntry
public SpeedEnum speedEnumMinecart = SpeedEnum.kmh; public SpeedEnum speedEnumMinecart = SpeedEnum.kmh;
//Display speed
@SerialEntry
public int elytraHudDelay = 2;
@SerialEntry
public int boatHudDelay = 0;
@SerialEntry
public int minecartHudDelay = 0;
private Map<String, Boolean> getActiveHuds() { private Map<String, Boolean> getActiveHuds() {
Map<String, Boolean> activatedHuds = new IdentityHashMap<>(); Map<String, Boolean> activatedHuds = new IdentityHashMap<>();
for(var simpleHudIdentifier : Constants.HudIdentifiers){ for(var simpleHudIdentifier : Constants.HudIdentifiers){
@@ -6,7 +6,6 @@ import dev.isxander.yacl3.api.*;
import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder;
import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder; import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder;
import dev.isxander.yacl3.gui.controllers.cycling.EnumController; 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.client.gui.screens.Screen;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@@ -60,6 +59,13 @@ public class ModMenu implements ModMenuApi {
.binding(HudPosition.CENTER, () -> instance.hudPositionElytra, newVal -> instance.hudPositionElytra = newVal) .binding(HudPosition.CENTER, () -> instance.hudPositionElytra, newVal -> instance.hudPositionElytra = newVal)
.customController(opt -> new EnumController<>(opt, HudPosition.class)) .customController(opt -> new EnumController<>(opt, HudPosition.class))
.build()) .build())
.option(Option
.<Integer>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()) .build())
.category(ConfigCategory .category(ConfigCategory
.createBuilder() .createBuilder()
@@ -78,6 +84,38 @@ public class ModMenu implements ModMenuApi {
.binding(HudPosition.CENTER, () -> instance.hudPositionBoat, newVal -> instance.hudPositionBoat = newVal) .binding(HudPosition.CENTER, () -> instance.hudPositionBoat, newVal -> instance.hudPositionBoat = newVal)
.customController(opt -> new EnumController<>(opt, HudPosition.class)) .customController(opt -> new EnumController<>(opt, HudPosition.class))
.build()) .build())
.option(Option
.<Integer>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
.<SpeedEnum>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
.<HudPosition>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
.<Integer>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()) .build())
.save(() -> Config.HANDLER.save()) .save(() -> Config.HANDLER.save())
.build().generateScreen(parent); .build().generateScreen(parent);
@@ -3,6 +3,7 @@ package com.lukasabbe.simplehud.huds;
import com.lukasabbe.simplehud.Constants; import com.lukasabbe.simplehud.Constants;
import com.lukasabbe.simplehud.config.Config; import com.lukasabbe.simplehud.config.Config;
import com.lukasabbe.simplehud.config.HudPosition; import com.lukasabbe.simplehud.config.HudPosition;
import com.lukasabbe.simplehud.tools.ElytraTools;
import com.lukasabbe.simplehud.tools.EntityTools; import com.lukasabbe.simplehud.tools.EntityTools;
import net.minecraft.client.DeltaTracker; import net.minecraft.client.DeltaTracker;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
@@ -19,6 +20,8 @@ public class BoatHud implements SimpleHud {
if(client.noRender) return; if(client.noRender) return;
if(!EntityTools.isRidingEntity(Boat.class)) return; if(!EntityTools.isRidingEntity(Boat.class)) return;
if(client.player == null) return; if(client.player == null) return;
if(EntityTools.getTime() < Config.HANDLER.instance().boatHudDelay) return;
int[] pos = getCornerPos(); int[] pos = getCornerPos();
int x = pos[0]; int x = pos[0];
@@ -20,6 +20,7 @@ public class ElytraHud implements SimpleHud {
if(!ElytraTools.isFlying()) return; if(!ElytraTools.isFlying()) return;
if(client.noRender) return; if(client.noRender) return;
if(client.player == null) return; if(client.player == null) return;
if(ElytraTools.getTime() < Config.HANDLER.instance().elytraHudDelay) return;
int[] pos = getCornerPos(); int[] pos = getCornerPos();
int x = pos[0]; int x = pos[0];
@@ -18,6 +18,7 @@ public class MinecartHud implements SimpleHud {
if(client.noRender) return; if(client.noRender) return;
if(!EntityTools.isRidingEntity(Minecart.class)) return; if(!EntityTools.isRidingEntity(Minecart.class)) return;
if(client.player == null) return; if(client.player == null) return;
if(EntityTools.getTime() < Config.HANDLER.instance().minecartHudDelay) return;
int[] pos = getCornerPos(); int[] pos = getCornerPos();
int x = pos[0]; int x = pos[0];
@@ -1,7 +1,6 @@
package com.lukasabbe.simplehud.huds; package com.lukasabbe.simplehud.huds;
import com.lukasabbe.simplehud.Constants; import com.lukasabbe.simplehud.Constants;
import com.lukasabbe.simplehud.SimpleHudMod;
import com.lukasabbe.simplehud.config.Config; import com.lukasabbe.simplehud.config.Config;
import com.lukasabbe.simplehud.config.HudPosition; import com.lukasabbe.simplehud.config.HudPosition;
import com.lukasabbe.simplehud.config.SpeedEnum; import com.lukasabbe.simplehud.config.SpeedEnum;
@@ -34,7 +33,7 @@ public interface SimpleHud {
HudPosition getHudPosition(); HudPosition getHudPosition();
default boolean isHudActivated(){ default boolean isHudActivated(){
return Config.HANDLER.instance().HudActivatedList.get(getIdentifier().toShortString()); return Config.HANDLER.instance().HudActivatedList.get(getIdentifier().toShortString());
} }
default void renderBackPlate(GuiGraphics graphics){ default void renderBackPlate(GuiGraphics graphics){
@@ -12,8 +12,19 @@ public class ElytraTools {
private static double speed = 0; private static double speed = 0;
private static long ticks = 0;
public static void tickElytraTools(){ public static void tickElytraTools(){
calculateSpeed(); calculateSpeed();
if(!isFlying()){
ticks = 0;
}else{
ticks++;
}
}
public static long getTime(){
return (ticks / 20);
} }
public static void calculateSpeed(){ public static void calculateSpeed(){
@@ -6,6 +6,21 @@ import net.minecraft.util.Mth;
import org.jspecify.annotations.Nullable; import org.jspecify.annotations.Nullable;
public class EntityTools { 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){ public static boolean isRidingEntity(Class<?> entityType){
var player = getLocalPlayer(); var player = getLocalPlayer();
if(player == null) return false; if(player == null) return false;
@@ -27,5 +27,8 @@
"simple_hud.config.category.general.option.safe_area.name": "Ignore Safe Area", "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.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.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"
} }