From f54257f9873d31bd463a15b07adf1be4ee52c95a Mon Sep 17 00:00:00 2001 From: Boxadactle <109389081+Boxadactle@users.noreply.github.com> Date: Mon, 19 Feb 2024 20:05:21 -0800 Subject: [PATCH] add DirectionRenderer --- .../CoordinatesDisplay.java | 3 +- .../coordinatesdisplay/config/ModConfig.java | 2 +- .../hud/renderer/DirectionRenderer.java | 153 ++++++++++++++++++ .../hud/renderer/SpawnpointRenderer.java | 5 +- .../assets/coordinatesdisplay/lang/en_us.json | 10 ++ .../assets/coordinatesdisplay/lang/es_es.json | 10 ++ .../assets/coordinatesdisplay/lang/ja_jp.json | 10 ++ .../assets/coordinatesdisplay/lang/ko_kr.json | 10 ++ .../assets/coordinatesdisplay/lang/ru_ru.json | 10 ++ 9 files changed, 208 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DirectionRenderer.java diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesDisplay.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesDisplay.java index 9fbacee..4a58c4b 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesDisplay.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesDisplay.java @@ -23,7 +23,7 @@ public class CoordinatesDisplay { public static final String MOD_ID = "coordinatesdisplay"; - public static final String VERSION = "6.0.0"; + public static final String VERSION = "9.0.0"; public static final String VERSION_STRING = MOD_NAME + " v" + VERSION; @@ -63,6 +63,7 @@ public static void init() { CoordinatesHuds.register(NetherOverworldRenderer.class); CoordinatesHuds.register(HotbarRenderer.class); CoordinatesHuds.register(SpawnpointRenderer.class); + CoordinatesHuds.register(DirectionRenderer.class); LOGGER.info("Initializing hud"); HUD = new Hud(); diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/ModConfig.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/ModConfig.java index 19fc7e2..21ef786 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/ModConfig.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/ModConfig.java @@ -44,7 +44,7 @@ public class ModConfig implements BConfig { public boolean showDeathPosInChat = true; public int padding = 5; - public int textPadding = 10; + public int textPadding = 5; public String posChatMessage = "{x} {y} {z}"; public String copyPosMessage = "{x}, {y}, {z}"; diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DirectionRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DirectionRenderer.java new file mode 100644 index 0000000..49d1c2e --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DirectionRenderer.java @@ -0,0 +1,153 @@ +package dev.boxadactle.coordinatesdisplay.hud.renderer; + +import dev.boxadactle.boxlib.layouts.component.LayoutContainerComponent; +import dev.boxadactle.boxlib.layouts.component.ParagraphComponent; +import dev.boxadactle.boxlib.layouts.layout.ColumnLayout; +import dev.boxadactle.boxlib.layouts.layout.PaddingLayout; +import dev.boxadactle.boxlib.layouts.layout.RowLayout; +import dev.boxadactle.boxlib.math.geometry.Rect; +import dev.boxadactle.boxlib.math.geometry.Vec3; +import dev.boxadactle.boxlib.math.mathutils.NumberFormatter; +import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.ModUtil; +import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; +import dev.boxadactle.coordinatesdisplay.position.Position; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import oshi.util.tuples.Triplet; + +@DisplayMode( + value = "direction", + hasChunkData = false, + hasBiome = false, + hasMCVersion = false, + hasDimension = false +) +public class DirectionRenderer implements HudRenderer { + + private enum Direction { + POSITIVE_Z(Component.translatable("hud.coordinatesdisplay.direction.positive", "Z")), // south + NEGATIVE_X(Component.translatable("hud.coordinatesdisplay.direction.negative", "X")), // east + NEGATIVE_Z(Component.translatable("hud.coordinatesdisplay.direction.negative", "Z")), // north + POSITIVE_X(Component.translatable("hud.coordinatesdisplay.direction.positive", "X")), // west + + POSITIVE_Y(Component.translatable("hud.coordinatesdisplay.direction.positive", "Y")), // up + NEGATIVE_Y(Component.translatable("hud.coordinatesdisplay.direction.negative", "Y")); // down + + public final Component component; + + Direction(Component component) { + this.component = component; + } + + public static Direction fromYaw(double yaw) { + return Direction.values()[(int) Math.round(yaw / 90.0F) & 3]; + } + + public static Direction fromPitch(double pitch) { + return pitch > 0 ? POSITIVE_Y : NEGATIVE_Y; + } + } + + // reused from MinRenderer + private String[] createYawComponents(double yaw) { + // compiled using the debug screen + String[][] directions = { + // X Z + { "_", "+" }, + { "-", "+" }, + { "-", "_" }, + { "-", "-" }, + { "_", "-" }, + { "+", "-" }, + { "+", "_" }, + { "+", "+" } + }; + + return directions[(int) Math.round(yaw / 45.0F) & 7]; + } + + @Override + public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) { + NumberFormatter formatter = genFormatter(); + Triplet player = this.roundPosition(pos.position.getPlayerPos(), pos.position.getBlockPos(), CoordinatesDisplay.getConfig().decimalPlaces); + + ColumnLayout hud = new ColumnLayout(0, 0, config().textPadding); + RowLayout row = new RowLayout(0, 0, config().textPadding * 2); + + if (config().renderXYZ) { + Component xtext = definition("x", value(player.getA())); + Component ytext = definition("y", value(player.getB())); + Component ztext = definition("z", value(player.getC())); + + row.addComponent(new ParagraphComponent( + 0, + xtext, + ytext, + ztext + )); + } + + // we just reuse the compass renderer from the spawnpoint renderer + SpawnpointRenderer.CompassRenderer compassRenderer = new SpawnpointRenderer.CompassRenderer(pos, new BlockPos(0, 0, 0)); + compassRenderer.size = 28; + + RowLayout r = new RowLayout(0, 0, 0); + r.addComponent(compassRenderer); + row.addComponent(new LayoutContainerComponent(new PaddingLayout(0, 0, 4, r))); + + hud.addComponent(new LayoutContainerComponent(row)); + + // direction + ParagraphComponent direction = new ParagraphComponent(0); + + double yaw = pos.headRot.wrapYaw(); + + if (config().renderDirection) { + String[] components = createYawComponents(yaw); + Component intText = definition( + Component.literal( + components[0] + " (" + + formatter.formatDecimal(compassRenderer.calculateRelativeDirection(pos.position.getBlockPos(), new Vec3<>(0, 0, 0), yaw)) + "°) " + + components[1] + ) + ); + + String dir = ModUtil.getDirectionFromYaw(yaw); + + Component directionText = definition( + "direction", + value(resolveDirection(dir)), + value(resolveDirection(dir, true)) + ); + + direction.add(intText); + direction.add(directionText); + } + + if (config().renderDirectionInt) { + Direction directionFromYaw = Direction.fromYaw(yaw); + Component yawText = definition( + "yaw", + value(formatter.formatDecimal(yaw)), + value(directionFromYaw.component) + ); + + Direction pitchFromYaw = Direction.fromPitch(pos.headRot.wrapPitch()); + Component pitchText = definition( + "pitch", + value(formatter.formatDecimal(pos.headRot.wrapPitch())), + value(pitchFromYaw.component) + ); + + direction.add(yawText); + direction.add(pitchText); + } + + hud.addComponent(direction); + + return renderHud(guiGraphics, new PaddingLayout(x, y, config().padding, hud)); + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/SpawnpointRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/SpawnpointRenderer.java index a240904..619c238 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/SpawnpointRenderer.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/SpawnpointRenderer.java @@ -171,7 +171,7 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi public static class CompassRenderer extends LayoutComponent { BlockPos spawnpoint; - int size = 32; + public int size = 32; public CompassRenderer(Position component, BlockPos spawnpoint) { super(component); @@ -189,7 +189,7 @@ public int getHeight() { return size; } - private double calculateRelativeDirection(Vec3 pos1, Vec3 pos2, double yaw) { + public double calculateRelativeDirection(Vec3 pos1, Vec3 pos2, double yaw) { int x = pos2.getX() - pos1.getX(); int z = pos2.getZ() - pos1.getZ(); @@ -232,7 +232,6 @@ private ResourceLocation resolveCompassTexture(double d) { public void render(GuiGraphics graphics, int x, int y) { double degrees = calculateRelativeDirection(component.position.getBlockPos(), new Vec3<>(spawnpoint.getX(), spawnpoint.getY(), spawnpoint.getZ()), component.headRot.wrapYaw()); ResourceLocation compassTexture = resolveCompassTexture(degrees); - int size = 32; graphics.blit( compassTexture, x, y, diff --git a/common/src/main/resources/assets/coordinatesdisplay/lang/en_us.json b/common/src/main/resources/assets/coordinatesdisplay/lang/en_us.json index b092c82..cba0043 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/en_us.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/en_us.json @@ -83,6 +83,16 @@ "hud.coordinatesdisplay.spawnpoint.y": "Y: %s", "hud.coordinatesdisplay.spawnpoint.z": "Z: %s", + "hud.coordinatesdisplay.direction": "Direction", + "hud.coordinatesdisplay.direction.x": "X: %s", + "hud.coordinatesdisplay.direction.y": "Y: %s", + "hud.coordinatesdisplay.direction.z": "Z: %s", + "hud.coordinatesdisplay.direction.direction": "Facing %s (%s)", + "hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)", + "hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)", + "hud.coordinatesdisplay.direction.positive": "positive %s", + "hud.coordinatesdisplay.direction.negative": "negative %s", + "screen.coordinatesdisplay.config": "Config for %s", "screen.coordinatesdisplay.confirmreset": "Confirm Reset to Default", "screen.coordinatesdisplay.render": "Rendering Config for %s", diff --git a/common/src/main/resources/assets/coordinatesdisplay/lang/es_es.json b/common/src/main/resources/assets/coordinatesdisplay/lang/es_es.json index 161bc39..b47121d 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/es_es.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/es_es.json @@ -83,6 +83,16 @@ "hud.coordinatesdisplay.spawnpoint.y": "Y: %s", "hud.coordinatesdisplay.spawnpoint.z": "Z: %s", + "hud.coordinatesdisplay.direction": "Dirección", + "hud.coordinatesdisplay.direction.x": "X: %s", + "hud.coordinatesdisplay.direction.y": "Y: %s", + "hud.coordinatesdisplay.direction.z": "Z: %s", + "hud.coordinatesdisplay.direction.direction": "Mirando al %s (%s)", + "hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)", + "hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)", + "hud.coordinatesdisplay.direction.positive": "%s positivo", + "hud.coordinatesdisplay.direction.negative": "%s negativo", + "screen.coordinatesdisplay.config": "Configuración de %s", "screen.coordinatesdisplay.confirmreset": "Confirme que desea restaurar la configurción por defecto", "screen.coordinatesdisplay.render": "Configuración de renderizado de %s", diff --git a/common/src/main/resources/assets/coordinatesdisplay/lang/ja_jp.json b/common/src/main/resources/assets/coordinatesdisplay/lang/ja_jp.json index fb393a1..754c5d2 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/ja_jp.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/ja_jp.json @@ -83,6 +83,16 @@ "hud.coordinatesdisplay.spawnpoint.y": "Y: %s", "hud.coordinatesdisplay.spawnpoint.z": "Z: %s", + "hud.coordinatesdisplay.direction": "Direction", + "hud.coordinatesdisplay.direction.x": "X: %s", + "hud.coordinatesdisplay.direction.y": "Y: %s", + "hud.coordinatesdisplay.direction.z": "Z: %s", + "hud.coordinatesdisplay.direction.direction": "Facing %s (%s)", + "hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)", + "hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)", + "hud.coordinatesdisplay.direction.positive": "positive %s", + "hud.coordinatesdisplay.direction.negative": "negative %s", + "screen.coordinatesdisplay.config": "%sの設定", "screen.coordinatesdisplay.confirmreset": "デフォルトにリセットを確認", "screen.coordinatesdisplay.render": "%sの描画設定", diff --git a/common/src/main/resources/assets/coordinatesdisplay/lang/ko_kr.json b/common/src/main/resources/assets/coordinatesdisplay/lang/ko_kr.json index 3d2d8aa..c2ee581 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/ko_kr.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/ko_kr.json @@ -83,6 +83,16 @@ "hud.coordinatesdisplay.spawnpoint.y": "Y: %s", "hud.coordinatesdisplay.spawnpoint.z": "Z: %s", + "hud.coordinatesdisplay.direction": "Direction", + "hud.coordinatesdisplay.direction.x": "X: %s", + "hud.coordinatesdisplay.direction.y": "Y: %s", + "hud.coordinatesdisplay.direction.z": "Z: %s", + "hud.coordinatesdisplay.direction.direction": "Facing %s (%s)", + "hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)", + "hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)", + "hud.coordinatesdisplay.direction.positive": "positive %s", + "hud.coordinatesdisplay.direction.negative": "negative %s", + "screen.coordinatesdisplay.config": "%s 환경설정", "screen.coordinatesdisplay.confirmreset": "기본값으로 초기화 확인", "screen.coordinatesdisplay.render": "%s 의 렌더링 구성", diff --git a/common/src/main/resources/assets/coordinatesdisplay/lang/ru_ru.json b/common/src/main/resources/assets/coordinatesdisplay/lang/ru_ru.json index 3461685..dad3830 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/ru_ru.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/ru_ru.json @@ -83,6 +83,16 @@ "hud.coordinatesdisplay.spawnpoint.y": "Y: %s", "hud.coordinatesdisplay.spawnpoint.z": "Z: %s", + "hud.coordinatesdisplay.direction": "Direction", + "hud.coordinatesdisplay.direction.x": "X: %s", + "hud.coordinatesdisplay.direction.y": "Y: %s", + "hud.coordinatesdisplay.direction.z": "Z: %s", + "hud.coordinatesdisplay.direction.direction": "Facing %s (%s)", + "hud.coordinatesdisplay.direction.yaw": "Yaw: %s (%s)", + "hud.coordinatesdisplay.direction.pitch": "Pitch: %s (%s)", + "hud.coordinatesdisplay.direction.positive": "positive %s", + "hud.coordinatesdisplay.direction.negative": "negative %s", + "screen.coordinatesdisplay.config": "Конфигурация для %s", "screen.coordinatesdisplay.confirmreset": "Подтвердить сброс настроек по умолчанию", "screen.coordinatesdisplay.render": "Рендеринг конфигурации для %s",