diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..a40d949 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,29 @@ +--- +name: Bug report +about: Report any bugs that cause issues when playing +title: '' +labels: bug +assignees: '' + +--- + +## Clear and Consise description of the issue + +**What happened**? + + +**What did you expect to happen?** + + +**Steps to reproduce the issue:** + + +## Mod Information +**Minecraft version:** +**Mod version:** +**Other relevant mods:** + +**Relevant logs (if applicable):** +Pastebin link or attachment + +## Screenshots or videos: (Optional) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..11fc491 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/question-or-support.md b/.github/ISSUE_TEMPLATE/question-or-support.md new file mode 100644 index 0000000..9a32e84 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question-or-support.md @@ -0,0 +1,20 @@ +--- +name: Question or Support +about: Ask any questions about the mod +title: '' +labels: question +assignees: '' + +--- + +## Clear and concise description of your problem + +**What are you trying to achieve?** + + +**What is happening instead?** + + +## Relevant details about your setup +**Minecraft version:** +**Mod version:** diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 432c584..a42eb23 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,24 +17,24 @@ jobs: runs-on: windows-latest steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - - - name: Build with Gradle - run: ./gradlew build - - - name: Upload fabric - uses: actions/upload-artifact@v3 - with: - name: fabric-build - path: fabric/build/libs - - - name: Upload forge - uses: actions/upload-artifact@v3 - with: - name: forge-build - path: forge/build/libs \ No newline at end of file + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v3 + with: + java-version: '21' + distribution: 'temurin' + + - name: Build with Gradle + run: ./gradlew build + + - name: Upload fabric + uses: actions/upload-artifact@v3 + with: + name: fabric-build + path: fabric/build/libs + + - name: Upload forge + uses: actions/upload-artifact@v3 + with: + name: forge-build + path: forge/build/libs diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d5674b5..1229bf5 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -9,8 +9,6 @@ name: Publish on: push: branches: [ "latest" ] - pull_request: - branches: [ "latest" ] permissions: contents: read @@ -22,10 +20,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '17' + java-version: '21' distribution: 'temurin' - name: Build with Gradle @@ -48,3 +46,8 @@ jobs: env: CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }} MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} + + - name: Create GitHub release + run: ./gradlew githubRelease + env: + GITHUB_TOKEN: ${{ secrets.REPOSITORY_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..8d0aa90 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,2 @@ +## Changes +- Backport to 1.20 \ No newline at end of file diff --git a/README.md b/README.md index 1908c4f..0ccf5ab 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Coordinates Display is a Client-side mod that adds an HUD to show your position, # Dependencies -Both versions of this mod embed [BoxLib](https://github.com/Boxadactle/BoxLib/), a Client-side library mod developed by me. +#### Versions 10.0.0+ of this mod require [BoxLib](https://modrinth.com/mod/boxlib) a Client-side library mod developed by me. ## Fabric diff --git a/build.gradle b/build.gradle index ef0d23d..1158842 100644 --- a/build.gradle +++ b/build.gradle @@ -1,47 +1,93 @@ plugins { - id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.1-SNAPSHOT" apply false + id 'dev.architectury.loom' version '1.7-SNAPSHOT' apply false + id 'architectury-plugin' version '3.4-SNAPSHOT' + id 'com.github.johnrengelman.shadow' version '8.1.1' apply false id "me.shedaniel.unified-publishing" version "0.1.+" + id "com.github.breadmoirai.github-release" version "2.5.2" } architectury { - minecraft = rootProject.minecraft_version + minecraft = project.minecraft_version } -subprojects { - apply plugin: "dev.architectury.loom" - - loom { - silentMojangMappingsLicense() - } - - dependencies { - minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" - // The following line declares the mojmap mappings, you may use other mappings as well - mappings loom.officialMojangMappings() - } +allprojects { + group = rootProject.maven_group + version = rootProject.mod_version } -allprojects { - apply plugin: "java" - apply plugin: "architectury-plugin" - apply plugin: "maven-publish" +subprojects { + apply plugin: 'dev.architectury.loom' + apply plugin: 'architectury-plugin' + apply plugin: 'maven-publish' - archivesBaseName = rootProject.archives_base_name - version = rootProject.mod_version - group = rootProject.maven_group + base { + // Set up a suffixed format for the mod jar names, e.g. `example-fabric`. + archivesName = "$rootProject.archives_name-$project.name" + } repositories { maven { url = "https://maven.boxadactle.dev/" } maven { url = "https://maven.terraformersmc.com/releases/" } } - tasks.withType(JavaCompile) { - options.encoding = "UTF-8" - options.release = 17 + dependencies { + minecraft "net.minecraft:minecraft:$rootProject.minecraft_version" + mappings loom.officialMojangMappings() } java { + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. withSourcesJar() + + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + tasks.withType(JavaCompile).configureEach { + it.options.release = 17 + } + + // Configure Maven publishing. + publishing { + publications { + mavenJava(MavenPublication) { + artifactId = base.archivesName.get() + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + // Notice: This block does NOT have the same function as the block in the top level. + // The repositories here will be used for publishing your artifact, not for + // retrieving dependencies. + } } } + +githubRelease { + owner = "Boxadactle" + repo = "coordinates-display" + tagName = "$project.version" + targetCommitish = "latest" + releaseName = "Coordinates Display $project.version" + generateReleaseNotes = true + body = """"Coordinates Display $project.version for Minecraft $project.minecraft_version" + +${new File(rootProject.rootDir, project.changelog_file).text} +""" + authorization = "Token ${System.getenv("GITHUB_TOKEN")}" + + var files = [] + for (String platform : project.enabled_platforms.split(',')) { + files += fileTree("$platform/build/libs") { + include "*$project.version*" + } + } + releaseAssets = files + +// dryRun = true +} \ No newline at end of file diff --git a/common/build.gradle b/common/build.gradle index 80408a3..734f561 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,25 +1,12 @@ -dependencies { - // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies - // Do NOT use other classes from fabric loader - modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" - - modCompileOnlyApi("dev.boxadactle:Boxlib:${rootProject.boxlib_version}") { transitive = true } -} - architectury { - common("fabric", "forge") + common rootProject.enabled_platforms.split(',') } -publishing { - publications { - mavenCommon(MavenPublication) { - artifactId = rootProject.archives_base_name - from components.java - } - } +dependencies { + // We depend on Fabric Loader here to use the Fabric @Environment annotations, + // which get remapped to the correct annotations on each platform. + // Do NOT use other classes from Fabric Loader. + modImplementation "net.fabricmc:fabric-loader:$rootProject.fabric_loader_version" - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } + modImplementation "dev.boxadactle:Boxlib-common:$rootProject.boxlib_version" } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/Bindings.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/Bindings.java new file mode 100644 index 0000000..d85b8e3 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/Bindings.java @@ -0,0 +1,81 @@ +package dev.boxadactle.coordinatesdisplay; + +import com.mojang.blaze3d.platform.InputConstants; +import dev.boxadactle.boxlib.scheduling.Scheduling; +import dev.boxadactle.boxlib.util.ClientUtils; +import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.screen.CoordinatesScreen; +import dev.boxadactle.coordinatesdisplay.screen.config.PositionScreen; +import dev.boxadactle.coordinatesdisplay.position.Position; +import dev.boxadactle.coordinatesdisplay.registry.DisplayMode; +import net.minecraft.client.KeyMapping; +import org.lwjgl.glfw.GLFW; + +public class Bindings { + + public static final KeyMapping hudEnabled = new KeyMapping("key.coordinatesdisplay.hudenabled", GLFW.GLFW_KEY_H, "category.coordinatesdisplay"); + + public static final KeyMapping coordinatesGUIKeybind = new KeyMapping("key.coordinatesdisplay.coordinatesgui", GLFW.GLFW_KEY_C, "category.coordinatesdisplay"); + + public static final KeyMapping copyLocation = new KeyMapping("key.coordinatesdisplay.copypos", -1, "category.coordinatesdisplay"); + public static final KeyMapping sendLocation = new KeyMapping("key.coordinatesdisplay.sendpos", -1, "category.coordinatesdisplay"); + public static final KeyMapping copyPosTp = new KeyMapping("key.coordinatesdisplay.copypostp", -1, "category.coordinatesdisplay"); + + public static final KeyMapping changeHudPosition = new KeyMapping("key.coordinatesdisplay.changeHudPos", GLFW.GLFW_KEY_F9, "category.coordinatesdisplay"); + public static final KeyMapping cycleDisplayMode = new KeyMapping("key.coordinatesdisplay.cycleDisplayMode", GLFW.GLFW_KEY_M, "category.coordinatesdisplay"); + + public static void toggleHud() { + CoordinatesDisplay.LOGGER.info("Toggling HUD visibility"); + CoordinatesDisplay.CONFIG.get().enabled = !CoordinatesDisplay.CONFIG.get().enabled; + CoordinatesDisplay.CONFIG.save(); + } + + public static void coordinatesGui() { + Scheduling.nextTick(() -> ClientUtils.setScreen(new CoordinatesScreen(Position.of(WorldUtils.getPlayer())))); + } + + public static void copyLocation(Position pos) { + ClientUtils.getKeyboard().setClipboard(ModUtil.parseText(CoordinatesDisplay.CONFIG.get().copyPosMessage, pos)); + CoordinatesDisplay.LOGGER.player.info("Copied to clipboard!"); + CoordinatesDisplay.LOGGER.info("Copied location to clipboard"); + } + + public static void sendLocation(Position pos) { + CoordinatesDisplay.LOGGER.player.publicChat(ModUtil.parseText(CoordinatesDisplay.CONFIG.get().posChatMessage, pos)); + CoordinatesDisplay.LOGGER.info("Sent position as chat message"); + } + + public static void copyTeleportCommand(Position pos) { + ClientUtils.getKeyboard().setClipboard(CoordinatesDisplay.getConfig().teleportMode.toCommand(pos)); + + CoordinatesDisplay.LOGGER.player.info("Copied position as teleport command!"); + } + + public static void openHudPositionGui() { + Scheduling.nextTick(() -> ClientUtils.setScreen(new PositionScreen(null))); + } + + public static void cycleDisplayMode() { + if (!InputConstants.isKeyDown(ClientUtils.getWindow(), 340)) CoordinatesDisplay.getConfig().renderMode = DisplayMode.nextMode(CoordinatesDisplay.getConfig().renderMode); + else CoordinatesDisplay.getConfig().renderMode = DisplayMode.previousMode(CoordinatesDisplay.getConfig().renderMode); + + CoordinatesDisplay.CONFIG.save(); + } + + public static void checkBindings(Position pos) { + if (hudEnabled.consumeClick()) toggleHud(); + + if (coordinatesGUIKeybind.consumeClick()) coordinatesGui(); + + if (copyLocation.consumeClick()) copyLocation(pos); + + if (sendLocation.consumeClick()) sendLocation(pos); + + if (copyPosTp.consumeClick()) copyTeleportCommand(pos); + + if (changeHudPosition.consumeClick()) openHudPositionGui(); + + if (cycleDisplayMode.consumeClick()) cycleDisplayMode(); + } + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesDisplay.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesDisplay.java index e021bdb..77e1b96 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesDisplay.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesDisplay.java @@ -1,21 +1,11 @@ package dev.boxadactle.coordinatesdisplay; -import com.mojang.blaze3d.platform.InputConstants; +import dev.boxadactle.boxlib.command.BCommandManager; import dev.boxadactle.boxlib.config.BConfigClass; import dev.boxadactle.boxlib.config.BConfigHandler; -import dev.boxadactle.boxlib.math.mathutils.Mappers; -import dev.boxadactle.boxlib.util.ClientUtils; import dev.boxadactle.boxlib.util.ModLogger; -import dev.boxadactle.boxlib.util.WorldUtils; -import dev.boxadactle.coordinatesdisplay.config.screen.ConfigScreen; -import dev.boxadactle.coordinatesdisplay.config.screen.HudPositionScreen; -import dev.boxadactle.coordinatesdisplay.hud.CoordinatesHuds; +import dev.boxadactle.coordinatesdisplay.command.CoordinatesCommand; import dev.boxadactle.coordinatesdisplay.hud.Hud; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; -import dev.boxadactle.coordinatesdisplay.hud.renderer.*; -import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.client.Minecraft; public class CoordinatesDisplay { @@ -23,7 +13,7 @@ public class CoordinatesDisplay { public static final String MOD_ID = "coordinatesdisplay"; - public static final String VERSION = "8.0.0"; + public static final String VERSION = "9.1.0"; public static final String VERSION_STRING = MOD_NAME + " v" + VERSION; @@ -39,33 +29,24 @@ public class CoordinatesDisplay { public static final ModLogger LOGGER = new ModLogger(MOD_NAME); - public static boolean shouldConfigGuiOpen = false; - public static boolean shouldCoordinatesGuiOpen = false; - public static boolean shouldHudPositionGuiOpen = false; - public static boolean shouldHudRender = true; public static BConfigClass CONFIG; public static Hud HUD; - public static void init() { + static { LOGGER.info("Initializing " + MOD_NAME + " v" + VERSION); - LOGGER.info("Loading config file"); + // register commands + BCommandManager.register(CoordinatesCommand.create()); + } + + public static void init() { + // register config CONFIG = BConfigHandler.registerConfig(ModConfig.class); - LOGGER.info("Registering hud renderers"); - CoordinatesHuds.register(DefaultRenderer.class); - CoordinatesHuds.register(MinRenderer.class); - CoordinatesHuds.register(MaxRenderer.class); - CoordinatesHuds.register(LineRenderer.class); - CoordinatesHuds.register(NetherOverworldRenderer.class); - CoordinatesHuds.register(HotbarRenderer.class); - CoordinatesHuds.register(SpawnpointRenderer.class); - CoordinatesHuds.register(DirectionRenderer.class); - - LOGGER.info("Initializing hud"); + // initialize HUD HUD = new Hud(); } @@ -73,119 +54,4 @@ public static ModConfig getConfig() { return CONFIG.get(); } - public static void tick() { - if (shouldConfigGuiOpen) { - ClientUtils.setScreen(new ConfigScreen(null)); - shouldConfigGuiOpen = false; - } - - if (shouldCoordinatesGuiOpen) { - Position pos = Position.of(WorldUtils.getPlayer()); - - ClientUtils.setScreen(new CoordinatesScreen(pos)); - - shouldCoordinatesGuiOpen = false; - } - - if (shouldHudPositionGuiOpen) { - ClientUtils.setScreen(new HudPositionScreen(null)); - shouldHudPositionGuiOpen = false; - } - } - - public static class BiomeColors { - - public static int getBiomeColor(String name, int defaultColor) { - - return switch (name) { - case "Eroded Badlands", "Badlands" -> 0xb55a26; - case "Bamboo Jungle" -> 0x2be625; - case "Snowy Beach", "Snowy Plains", "Snowy Slopes", "Snowy Taiga", "Basalt Deltas" -> 0xadadad; - case "Beach" -> 0xc5c93a; - case "Birch Forest", "Old Growth Birch Forest" -> 0xdecc7a; - case "Cold Ocean" -> 0x738ae6; - case "Crimson Forest", "Nether Wastes" -> 0xad201d; - case "Dark Forest" -> 0x452309; - case "River", "Ocean", "Deep Cold Ocean" -> 0x161d78; - case "Deep Dark" -> 0x03273d; - case "Deep Frozen Ocean" -> 0x1e4054; - case "Deep Lukewarm Ocean" -> 0x235b63; - case "Deep Ocean" -> 0x15115c; - case "End Barrens", "End Highlands", "End Midlands", "Small End Islands", "Desert" -> 0xb3ac30; - case "Dripstone Caves" -> 0x665f50; - case "Flower Forest", "Forest", "Lush Caves", "Meadow" -> 0x32701c; - case "Frozen Ocean", "Frozen Peaks", "Frozen River", "Ice Spikes" -> 0x34c4c9; - case "Grove", "Jagged Peaks" -> 0xacb0a7; - case "Jungle" -> 0x85c41f; - case "Lukewarm Ocean" -> 0x3d9ba8; - case "Mushroom Fields" -> 0x4c4654; - case "Old Growth Pine Taiga", "Old Growth Spruce Forest" -> 0x3b230d; - case "Plains", "Sunflower Plains" -> 0x4dd115; - case "Savanna", "Savanna Plateau" -> 0x5c701c; - case "Cherry Grove" -> 0xd863e0; - default -> defaultColor; - }; - - } - - public static int getDimensionColor(String name, int defaultColor) { - return switch (name) { - case "Overworld" -> 0x00ff00; - case "Nether" -> 0xff0000; - case "End" -> 0x0000ff; - default -> { - if (name.contains("The ")) { - yield getDimensionColor(name.substring(4), defaultColor); - } else { - yield defaultColor; - } - } - }; - } - - } - - public static class Bindings { - public static void visible() { - CONFIG.get().visible = !CONFIG.get().visible; - CONFIG.save(); - LOGGER.info("Updated visible property in config file"); - } - - public static void coordinatesGui() { - shouldCoordinatesGuiOpen = true; - } - - public static void copyLocation(Position pos) { - ClientUtils.getKeyboard().setClipboard(ModUtil.parseText(CONFIG.get().copyPosMessage, pos)); - LOGGER.player.info("Copied to clipboard!"); - LOGGER.info("Copied location to clipboard"); - } - - public static void sendLocation(Position pos) { - LOGGER.player.info(ModUtil.parseText(CONFIG.get().posChatMessage, pos)); - LOGGER.info("Sent position as chat message"); - } - - public static void copyTeleportCommand(Position pos) { - ClientUtils.getKeyboard().setClipboard(getConfig().teleportMode.toCommand(pos)); - - LOGGER.player.info("Copied position as teleport command!"); - } - - public static void openHudPositionGui() { - shouldHudPositionGuiOpen = true; - } - - public static void cycleDisplayMode() { - CoordinatesHuds.RegisteredRenderer renderer; - - if (!InputConstants.isKeyDown(ClientUtils.getWindow(), 340)) renderer = CoordinatesHuds.nextRenderer(getConfig().renderMode); - else renderer = CoordinatesHuds.previousRenderer(getConfig().renderMode); - - getConfig().renderMode = renderer.getId(); - CONFIG.save(); - } - } - } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/ModConfig.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/ModConfig.java new file mode 100644 index 0000000..1f68c72 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/ModConfig.java @@ -0,0 +1,65 @@ +package dev.boxadactle.coordinatesdisplay; + +import dev.boxadactle.boxlib.config.BConfig; +import dev.boxadactle.boxlib.config.BConfigFile; +import dev.boxadactle.boxlib.util.GuiUtils; +import dev.boxadactle.coordinatesdisplay.registry.*; + +import java.lang.reflect.Field; + +@BConfigFile("coordinatesdisplay") +public class ModConfig implements BConfig { + + public boolean enabled = true; + + public int decimalPlaces = 0; + public DisplayMode renderMode = DisplayMode.DEFAULT; + public StartCorner startCorner = StartCorner.TOP_LEFT; + public VisibilityFilter visibilityFilter = VisibilityFilter.ALWAYS; + public int hudX = 0; + public int hudY = 0; + public float hudScale = 1.0f; + public boolean hudTextShadow = true; + + public boolean renderBackground = true; + public boolean renderXYZ = true; + public boolean renderChunkData = true; + public boolean renderDirection = true; + public boolean renderDirectionInt = true; + public boolean renderBiome = true; + public boolean biomeColors = true; + public boolean dimensionColors = true; + public boolean renderMCVersion = true; + public boolean renderDimension = true; + + public int definitionColor = GuiUtils.GREEN; + public int dataColor = GuiUtils.WHITE; + public int deathPosColor = GuiUtils.AQUA; + public int backgroundColor = 0x405c5c5c; + + public boolean displayPosOnDeathScreen = true; + public boolean showDeathPosInChat = true; + + public int padding = 5; + public int textPadding = 5; + + public String posChatMessage = "{x} {y} {z}"; + public String copyPosMessage = "{x}, {y}, {z}"; + public boolean includeDecimalsWhenCopying = true; + public TeleportMode teleportMode = TeleportMode.EXECUTE; + + public static void checkValidity(ModConfig config) throws NullPointerException { + Class clazz = config.getClass(); + + for (Field field : clazz.getDeclaredFields()) { + try { + if (field.get(config) == null) { + throw new NullPointerException("Field " + field.getName() + " is null"); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + +} \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/ModUtil.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/ModUtil.java index 9adf69a..ed12369 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/ModUtil.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/ModUtil.java @@ -2,15 +2,17 @@ import com.mojang.datafixers.util.Pair; import dev.architectury.injectables.annotations.ExpectPlatform; +import dev.boxadactle.boxlib.util.GuiUtils; +import dev.boxadactle.boxlib.util.WorldUtils; import dev.boxadactle.coordinatesdisplay.position.Position; import dev.boxadactle.boxlib.math.geometry.Vec3; import dev.boxadactle.boxlib.util.ClientUtils; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; import net.minecraft.core.Vec3i; import net.minecraft.network.chat.*; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; @@ -20,6 +22,7 @@ import java.io.File; import java.io.IOException; import java.text.DecimalFormat; +import java.util.Objects; @SuppressWarnings("unchecked") public class ModUtil { @@ -29,7 +32,7 @@ public static String parseText(String text, Position pos) { Minecraft c = ClientUtils.getClient(); String newTextComponent = text; - DecimalFormat decimalFormat = new DecimalFormat(CoordinatesDisplay.CONFIG.get().shouldRoundWhenCopying ? "0.00" : "0"); + DecimalFormat decimalFormat = new DecimalFormat(CoordinatesDisplay.CONFIG.get().includeDecimalsWhenCopying ? "0.00" : "0"); Vec3 player = pos.position.getPlayerPos(); @@ -39,13 +42,13 @@ public static String parseText(String text, Position pos) { String direction = getDirectionFromYaw(Mth.wrapDegrees(c.cameraEntity.getXRot())); - Pair[] supported = new Pair[]{ + Pair[] supported = new Pair[]{ new Pair<>("dimension", pos.world.getDimension(true)), new Pair<>("x", x), new Pair<>("y", y), new Pair<>("z", z), new Pair<>("direction", direction), - new Pair<>("name", c.player.getDisplayName().getString()) + new Pair<>("name", Objects.requireNonNull(c.player.getDisplayName()).getString()) }; for (Pair pair : supported) { newTextComponent = newTextComponent.replaceAll("\\{" + pair.getFirst() + "}", (String) pair.getSecond()); @@ -76,7 +79,6 @@ public static String toBaritoneCommand(Position pos) { int y = (int)Math.round(pos.position.getPlayerPos().getY()); int z = (int)Math.round(pos.position.getPlayerPos().getZ()); - String dimension = pos.world.getDimension(false); return String.format("#goto %s %s %s", x, y, z); } @@ -92,11 +94,11 @@ public static Component makeDeathPositionComponent(Position pos) { Component position = Component.translatable("message.coordinatesdisplay.deathlocation", x, y, z, pos.world.getDimension(false)).withStyle((style -> style .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.translatable("message.coordinatesdisplay.teleport"))) - .withColor((CoordinatesDisplay.CONFIG.get().deathPosColor)) + .withColor(TextColor.fromRgb(CoordinatesDisplay.CONFIG.get().deathPosColor)) .withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, String.format(command, x, y, z))) )); - return Component.translatable("message.coordinatesdisplay.deathpos", position).withStyle(style -> style.withColor((CoordinatesDisplay.CONFIG.get().definitionColor))); + return GuiUtils.colorize(Component.translatable("message.coordinatesdisplay.deathpos", position), CoordinatesDisplay.CONFIG.get().definitionColor); } @ExpectPlatform @@ -145,13 +147,17 @@ public static String getDirectionFromYaw(double degrees) { return direction; } - // copy + pasted from DebugHud.class - public static String printBiome(Holder p_205375_) { - if (p_205375_ != null) { - return p_205375_.unwrap().map((p_205377_) -> p_205377_.location().toString(), (p_205367_) -> "[unregistered " + p_205367_ + "]"); - } else { - return "minecraft:plains"; + public static Component getBiomeComponent(ResourceLocation key, Biome biome, boolean colored, int defaultColor) { + if (biome == null && WorldUtils.getWorld() != null) { + return GuiUtils.colorize(Component.translatable("hud.coordinatesdisplay.biome.unknown"), defaultColor); } + + return GuiUtils.colorize( + Component.translatable("biome." + key.getNamespace() + "." + key.getPath()), + colored ? + WorldColors.getBiomeColor(key, biome): + defaultColor + ); } public static boolean isMouseHovering(int mouseX, int mouseY, int boxX, int boxY, int boxWidth, int boxHeight) { @@ -163,25 +169,13 @@ public static String getNamespace(String id) { return id.split(":")[0]; } - public static int calculatePointDistance(int x, int y, int x1, int y1) { + public static float calculatePointDistance(int x, int y, int x1, int y1) { int deltaX = x1 - x; int deltaY = y1 - y; double distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); - return (int) Math.abs(distance); - } - - public static float calculateMouseScale(int x, int y, int w, int h, int mouseX, int mouseY) { - int value1 = calculatePointDistance(x, y, x + w, y + h); - int value2 = calculatePointDistance(x, y, mouseX, mouseY); - float scaleFactor = (float) value2 / value1; - - scaleFactor = Math.max(0.5f, Math.min(2.0f, scaleFactor)); - - scaleFactor = Math.round(scaleFactor * 100.0f) / 100.0f; - - return scaleFactor; + return (float) distance; } public static boolean or(T val, T ...compare) { @@ -210,10 +204,6 @@ public static boolean not(T val, T ...compare) { return toReturn; } - public static BlockPos toBlockPos(Vec3 pos) { - return new BlockPos(pos.getX(), pos.getY(), pos.getZ()); - } - public static Vec3i doubleVecToIntVec(net.minecraft.world.phys.Vec3 vec) { return new Vec3i((int)Math.round(vec.x), (int)Math.round(vec.y), (int)Math.round(vec.z)); } @@ -222,4 +212,8 @@ public static Vec3 fromMinecraftVector(net.minecraft.world.phys.Vec3 vec return new Vec3<>(vec3d.x, vec3d.y, vec3d.z); } + public static BlockPos toBlockPos(Vec3 vec) { + return new BlockPos(vec.getX(), vec.getY(), vec.getZ()); + } + } \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/WorldColors.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/WorldColors.java new file mode 100644 index 0000000..4d9894a --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/WorldColors.java @@ -0,0 +1,41 @@ +package dev.boxadactle.coordinatesdisplay; + +import dev.boxadactle.boxlib.util.WorldUtils; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; + +import java.awt.*; + +public class WorldColors { + + public static int getBiomeColor(ResourceLocation key, Biome biome) { + if (biome == null) { + return 0x24BC07; + } + + String biomeName = key.getPath().toLowerCase(); + + if (biomeName.contains("end")) return 0xC5BE8B; + if (biomeName.contains("ocean") || biomeName.contains("river") || biomeName.contains("swamp")) return biome.getWaterColor(); + if (biomeName.contains("nether")) return new Color(biome.getFogColor()).brighter().brighter().getRGB(); + if (biomeName.contains("icy")) return 0x84ecf0; + if (biomeName.contains("beach")) return 0xfade55; + else return biome.getFoliageColor(); + } + + public static int getDimensionColor(String name, int defaultColor) { + return switch (name.toLowerCase()) { + case "overworld" -> 0x00ff00; + case "nether" -> 0xff0000; + case "end" -> 0xC5BE8B; + default -> { + if (name.startsWith("The ")) { + yield getDimensionColor(name.substring(4), defaultColor); + } else { + yield defaultColor; + } + } + }; + } + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/ConfigSubcommand.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/ConfigSubcommand.java new file mode 100644 index 0000000..ae1d747 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/ConfigSubcommand.java @@ -0,0 +1,61 @@ +package dev.boxadactle.coordinatesdisplay.command; + +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import dev.boxadactle.boxlib.command.BCommandManager; +import dev.boxadactle.boxlib.command.BCommandSourceStack; +import dev.boxadactle.boxlib.command.api.BClientSubcommand; +import dev.boxadactle.boxlib.scheduling.Scheduling; +import dev.boxadactle.boxlib.util.ClientUtils; +import dev.boxadactle.boxlib.util.GuiUtils; +import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.ModUtil; +import dev.boxadactle.coordinatesdisplay.screen.ConfigScreen; + +public class ConfigSubcommand implements BClientSubcommand { + @Override + public ArgumentBuilder getSubcommand() { + return BCommandManager.literal("config") + .executes(this::openConfigGui); + } + + @Override + public void build(ArgumentBuilder builder) { + builder.then(BCommandManager.literal("file") + .executes(this::openConfigFile) + ); + + builder.then(BCommandManager.literal("reload") + .executes(this::reloadConfig) + ); + + builder.then(BCommandManager.literal("gui") + .executes(this::openConfigGui) + ); + } + + private int openConfigGui(CommandContext ignored) { + Scheduling.nextTick(() -> ClientUtils.setScreen(new ConfigScreen(null))); + CoordinatesDisplay.LOGGER.info("Opening Config GUI"); + + return 0; + } + + private int openConfigFile(CommandContext ignored) { + if (ModUtil.openConfigFile()) { + CoordinatesDisplay.LOGGER.player.info(GuiUtils.getTranslatable("command.coordinatesdisplay.config.open.success")); + return 0; + } else { + CoordinatesDisplay.LOGGER.info(GuiUtils.getTranslatable("command.coordinatesdisplay.config.open.fail")); + return 1; + } + } + + private int reloadConfig(CommandContext ignored) { + CoordinatesDisplay.CONFIG.reload(); + CoordinatesDisplay.LOGGER.player.info(GuiUtils.getTranslatable("command.coordinatesdisplay.config.reload")); + CoordinatesDisplay.LOGGER.info("Reloaded all config"); + + return 0; + } +} \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/CoordinatesCommand.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/CoordinatesCommand.java new file mode 100644 index 0000000..533cad9 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/CoordinatesCommand.java @@ -0,0 +1,71 @@ +package dev.boxadactle.coordinatesdisplay.command; + +import com.google.common.collect.ImmutableList; +import com.mojang.brigadier.context.CommandContext; +import dev.boxadactle.boxlib.command.BCommandSourceStack; +import dev.boxadactle.boxlib.command.api.BClientCommand; +import dev.boxadactle.boxlib.scheduling.Scheduling; +import dev.boxadactle.boxlib.util.ClientUtils; +import dev.boxadactle.boxlib.util.GuiUtils; +import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.screen.CoordinatesScreen; +import dev.boxadactle.coordinatesdisplay.screen.config.PositionScreen; +import dev.boxadactle.coordinatesdisplay.position.Position; +import net.minecraft.network.chat.Component; + +import java.util.List; + +public class CoordinatesCommand { + + public static BClientCommand create() { + return BClientCommand.create("coordinates", CoordinatesCommand::openCoordinatesScreen) + .registerSubcommand(new ConfigSubcommand()) + .registerSubcommand(new CornerSubcommand()) + .registerSubcommand("help", CoordinatesCommand::showHelpMessage) + .registerSubcommand(new ModeSubcommand()) + .registerSubcommand(new VisibilitySubcommand()) + .registerSubcommand("movehud", CoordinatesCommand::moveHud) + .registerSubcommand(new PositionSubcommand()) + .registerSubcommand("toggle", CoordinatesCommand::toggle); + } + + private static int openCoordinatesScreen(CommandContext ignored) { + Scheduling.nextTick(() -> ClientUtils.setScreen(new CoordinatesScreen(Position.of(WorldUtils.getPlayer())))); + + return 0; + } + + private static int toggle(CommandContext ignored) { + CoordinatesDisplay.getConfig().enabled = !CoordinatesDisplay.getConfig().enabled; + CoordinatesDisplay.CONFIG.save(); + + return 0; + } + + private static int showHelpMessage(CommandContext ignored) { + List components = ImmutableList.of( + GuiUtils.colorize(Component.translatable("command.coordinatesdisplay.helpmenu"), GuiUtils.AQUA), + Component.translatable("command.coordinatesdisplay.config"), + Component.translatable("command.coordinatesdisplay.gui"), + Component.translatable("command.coordinatesdisplay.help"), + Component.translatable("command.coordinatesdisplay.mode"), + Component.translatable("command.coordinatesdisplay.movehud"), + Component.translatable("command.coordinatesdisplay.position"), + Component.translatable("command.coordinatesdisplay.visibility") + ); + + components.forEach(c -> { + CoordinatesDisplay.LOGGER.player.chat(c); + }); + + return 0; + } + + private static int moveHud(CommandContext ignored) { + Scheduling.nextTick(() -> ClientUtils.setScreen(new PositionScreen(null))); + + return 0; + } + +} \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/CornerSubcommand.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/CornerSubcommand.java new file mode 100644 index 0000000..f024dcc --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/CornerSubcommand.java @@ -0,0 +1,43 @@ +package dev.boxadactle.coordinatesdisplay.command; + +import com.mojang.brigadier.builder.ArgumentBuilder; +import dev.boxadactle.boxlib.command.BCommandManager; +import dev.boxadactle.boxlib.command.BCommandSourceStack; +import dev.boxadactle.boxlib.command.api.BClientSubcommand; +import dev.boxadactle.boxlib.math.geometry.Dimension; +import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.boxlib.util.ClientUtils; +import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.registry.StartCorner; + +public class CornerSubcommand implements BClientSubcommand { + @Override + public ArgumentBuilder getSubcommand() { + return BCommandManager.literal("corner"); + } + + @Override + public void build(ArgumentBuilder builder) { + StartCorner[] corners = StartCorner.values(); + + for (StartCorner corner : corners) { + builder.then(BCommandManager.literal(corner.name().toLowerCase()) + .executes(c -> { + Vec2 relative = corner.getModifier().getRelativePos( + CoordinatesDisplay.HUD.getRect(), + new Dimension<>( + Math.round(ClientUtils.getClient().getWindow().getGuiScaledWidth() / CoordinatesDisplay.getConfig().hudScale), + Math.round(ClientUtils.getClient().getWindow().getGuiScaledHeight() / CoordinatesDisplay.getConfig().hudScale) + ) + ); + + CoordinatesDisplay.getConfig().hudX = relative.getX(); + CoordinatesDisplay.getConfig().hudY = relative.getY(); + CoordinatesDisplay.getConfig().startCorner = corner; + CoordinatesDisplay.CONFIG.save(); + return 0; + }) + ); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/ModeSubcommand.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/ModeSubcommand.java new file mode 100644 index 0000000..7ce2d42 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/ModeSubcommand.java @@ -0,0 +1,30 @@ +package dev.boxadactle.coordinatesdisplay.command; + +import com.mojang.brigadier.builder.ArgumentBuilder; +import dev.boxadactle.boxlib.command.BCommandManager; +import dev.boxadactle.boxlib.command.BCommandSourceStack; +import dev.boxadactle.boxlib.command.api.BClientSubcommand; +import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.registry.DisplayMode; + +public class ModeSubcommand implements BClientSubcommand { + @Override + public ArgumentBuilder getSubcommand() { + return BCommandManager.literal("mode"); + } + + @Override + public void build(ArgumentBuilder builder) { + DisplayMode[] modes = DisplayMode.values(); + + for (DisplayMode mode : modes) { + builder.then(BCommandManager.literal(mode.getId()) + .executes(c -> { + CoordinatesDisplay.getConfig().renderMode = mode; + CoordinatesDisplay.CONFIG.save(); + return 0; + }) + ); + } + } +} \ No newline at end of file diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/PositionCommand.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/PositionSubcommand.java similarity index 52% rename from forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/PositionCommand.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/command/PositionSubcommand.java index a9408aa..41b4c36 100644 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/PositionCommand.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/PositionSubcommand.java @@ -1,42 +1,42 @@ -package dev.boxadactle.coordinatesdisplay.forge.command; +package dev.boxadactle.coordinatesdisplay.command; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.context.CommandContext; +import dev.boxadactle.boxlib.command.BCommandManager; +import dev.boxadactle.boxlib.command.BCommandSourceStack; +import dev.boxadactle.boxlib.command.api.BClientSubcommand; +import dev.boxadactle.boxlib.util.GuiUtils; import dev.boxadactle.boxlib.util.WorldUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; import dev.boxadactle.coordinatesdisplay.ModUtil; import dev.boxadactle.coordinatesdisplay.position.Position; import net.minecraft.client.Minecraft; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.commands.Commands; -public class PositionCommand extends CoordinatesCommand { +public class PositionSubcommand implements BClientSubcommand { @Override - public String getName() { - return "position"; + public ArgumentBuilder getSubcommand() { + return BCommandManager.literal("position"); } @Override - public void build(LiteralArgumentBuilder builder) { - + public void build(ArgumentBuilder builder) { // send in chat - builder.then(Commands.literal("chat") + builder.then(BCommandManager.literal("chat") .executes(this::sendPosInChat) ); // copy to clipboard - builder.then(Commands.literal("copy") + builder.then(BCommandManager.literal("copy") .executes(this::copyPos) ); // copy as tp - builder.then(Commands.literal("copytp") + builder.then(BCommandManager.literal("copytp") .executes(this::copyPosTp) ); - } - private int sendPosInChat(CommandContext context) { + private int sendPosInChat(CommandContext ignored) { Position pos = Position.of(WorldUtils.getPlayer()); @@ -46,32 +46,29 @@ private int sendPosInChat(CommandContext context) { return 0; } - private int copyPos(CommandContext context) { - + private int copyPos(CommandContext context) { Position pos = Position.of(WorldUtils.getPlayer()); Minecraft.getInstance().keyboardHandler.setClipboard(ModUtil.parseText(CoordinatesDisplay.CONFIG.get().copyPosMessage, pos)); - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.position.copy")); + CoordinatesDisplay.LOGGER.player.info(GuiUtils.getTranslatable("command.coordinatesdisplay.position.copy")); CoordinatesDisplay.LOGGER.info("Copied location to clipboard"); return 0; - } - private int copyPosTp(CommandContext context) { + private int copyPosTp(CommandContext context) { try { Position pos = Position.of(WorldUtils.getPlayer()); Minecraft.getInstance().keyboardHandler.setClipboard(CoordinatesDisplay.getConfig().teleportMode.toCommand(pos)); - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.position.copytp")); + CoordinatesDisplay.LOGGER.player.info(GuiUtils.getTranslatable("command.coordinatesdisplay.position.copytp")); return 0; } catch (Exception ignored) { - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.internalError")); + CoordinatesDisplay.LOGGER.player.info(GuiUtils.getTranslatable("command.coordinatesdisplay.internalError")); return 1; } - } -} +} \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/VisibilitySubcommand.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/VisibilitySubcommand.java new file mode 100644 index 0000000..3d4473e --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/command/VisibilitySubcommand.java @@ -0,0 +1,30 @@ +package dev.boxadactle.coordinatesdisplay.command; + +import com.mojang.brigadier.builder.ArgumentBuilder; +import dev.boxadactle.boxlib.command.BCommandManager; +import dev.boxadactle.boxlib.command.BCommandSourceStack; +import dev.boxadactle.boxlib.command.api.BClientSubcommand; +import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.registry.VisibilityFilter; + +public class VisibilitySubcommand implements BClientSubcommand { + @Override + public ArgumentBuilder getSubcommand() { + return BCommandManager.literal("visibility"); + } + + @Override + public void build(ArgumentBuilder builder) { + VisibilityFilter[] modes = VisibilityFilter.values(); + + for (VisibilityFilter mode : modes) { + builder.then(BCommandManager.literal(mode.getId()) + .executes(c -> { + CoordinatesDisplay.getConfig().visibilityFilter = mode; + CoordinatesDisplay.CONFIG.save(); + return 0; + }) + ); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/ModConfig.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/ModConfig.java deleted file mode 100644 index 21ef786..0000000 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/ModConfig.java +++ /dev/null @@ -1,87 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.config; - -import dev.boxadactle.boxlib.core.BoxLib; -import dev.boxadactle.boxlib.config.BConfig; -import dev.boxadactle.boxlib.config.BConfigFile; -import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; -import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; -import dev.boxadactle.coordinatesdisplay.hud.renderer.*; -import dev.boxadactle.coordinatesdisplay.hud.modifier.*; -import dev.boxadactle.coordinatesdisplay.position.Position; -import dev.boxadactle.coordinatesdisplay.ModUtil; - -import java.util.function.Function; - -@BConfigFile("coordinates-display") -public class ModConfig implements BConfig { - - public boolean visible = true; - public int decimalPlaces = 0; - public String renderMode = "default"; - public StartCorner startCorner = StartCorner.TOP_LEFT; - public int hudX = 0; - public int hudY = 0; - public float hudScale = 1.0f; - public boolean hudTextShadow = true; - - public boolean renderBackground = true; - public boolean renderXYZ = true; - public boolean renderChunkData = true; - public boolean renderDirection = true; - public boolean renderDirectionInt = true; - public boolean renderBiome = true; - public boolean biomeColors = true; - public boolean dimensionColors = true; - public boolean renderMCVersion = true; - public boolean renderDimension = true; - - public int definitionColor = 0x55FF55; - public int dataColor = 0xFFFFFF; - public int deathPosColor = 0x55FFFF; - public int backgroundColor = 0x405c5c5c; - - public boolean displayPosOnDeathScreen = true; - public boolean showDeathPosInChat = true; - - public int padding = 5; - public int textPadding = 5; - - public String posChatMessage = "{x} {y} {z}"; - public String copyPosMessage = "{x}, {y}, {z}"; - public boolean shouldRoundWhenCopying = true; - public TeleportMode teleportMode = TeleportMode.EXECUTE; - - public enum TeleportMode { - EXECUTE(ModUtil::toExecuteCommand), - TP(ModUtil::toTeleportCommand), - BARITONE(ModUtil::toBaritoneCommand); - - final Function converter; - - TeleportMode(Function converter) { - this.converter = converter; - } - - public String toCommand(Position pos) { - return converter.apply(pos); - } - } - - public enum StartCorner { - TOP_LEFT(TopLeftModifier.class), - TOP_RIGHT(TopRightModifier.class), - BOTTOM_LEFT(BottomLeftModifier.class), - BOTTOM_RIGHT(BottomRightModifier.class); - - final HudPositionModifier modifier; - - StartCorner(Class modifier) { - this.modifier = BoxLib.initializeClass(modifier); - } - - public HudPositionModifier getModifier() { - return modifier; - } - } - -} \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/HudPositionScreen.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/HudPositionScreen.java deleted file mode 100644 index e423d49..0000000 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/HudPositionScreen.java +++ /dev/null @@ -1,222 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.config.screen; - -import dev.boxadactle.boxlib.gui.BOptionScreen; -import dev.boxadactle.boxlib.math.geometry.Dimension; -import dev.boxadactle.boxlib.math.geometry.Rect; -import dev.boxadactle.boxlib.math.geometry.Vec2; -import dev.boxadactle.boxlib.math.mathutils.Clamps; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.boxlib.util.WorldUtils; -import dev.boxadactle.coordinatesdisplay.config.HudHelper; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; -import dev.boxadactle.coordinatesdisplay.ModUtil; -import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.Component; - -public class HudPositionScreen extends BOptionScreen implements HudHelper { - - int x; - int y; - float scale; - - int hudOffsetX; - int hudOffsetY; - - boolean clickDelta = false; - boolean scaleDelta = false; - boolean moveDelta = false; - - Position pos; - - int delay = 10; - - boolean isDragging = false; - - public HudPositionScreen(Screen parent) { - super(parent); - - x = CoordinatesDisplay.CONFIG.get().hudX; - y = CoordinatesDisplay.CONFIG.get().hudY; - scale = CoordinatesDisplay.CONFIG.get().hudScale; - - pos = WorldUtils.getWorld() != null - ? Position.of(WorldUtils.getPlayer()) - : generatePositionData(); - - CoordinatesDisplay.shouldHudRender = false; - } - - @Override - protected boolean shouldRenderScrollingWidget() { - return false; - } - - @Override - public boolean mouseClicked(double d, double e, int i) { - isDragging = true; - return super.mouseClicked(d, e, i); - } - - @Override - public boolean mouseReleased(double d, double e, int i) { - isDragging = false; - return super.mouseReleased(d, e, i); - } - - @Override - public void render(GuiGraphics p_96562_, int mouseX, int mouseY, float delta) { - this.renderBackground(p_96562_, mouseX, mouseY, delta); - super.render(p_96562_, mouseX, mouseY, delta); - - HudPositionModifier modifier = CoordinatesDisplay.getConfig().startCorner.getModifier(); - - if (isDragging && delay == 0) { - if (CoordinatesDisplay.HUD.isScaleButtonHovered(mouseX, mouseY) && !scaleDelta && !moveDelta) scaleDelta = true; - - if (!scaleDelta) { - if (!clickDelta) { - clickDelta = true; - - Dimension distance = getDistance( - new Vec2<>(Math.round(mouseX / scale), Math.round(mouseY / scale)), - calculateCorner(CoordinatesDisplay.HUD.getRect(), config().startCorner) - ); - hudOffsetX = distance.getWidth(); - hudOffsetY = distance.getHeight(); - } - - Vec2 vec = modifier.translateVector(new Vec2<>( - Clamps.clamp(Math.round(mouseX / scale) - hudOffsetX, 0, Math.round(this.width / scale)), - Clamps.clamp(Math.round(mouseY / scale) - hudOffsetY, 0, Math.round(this.height / scale)) - ), - new Dimension<>( - Math.round(minecraft.getWindow().getGuiScaledWidth() / scale), - Math.round(minecraft.getWindow().getGuiScaledHeight() / scale) - ), - ModConfig.StartCorner.TOP_LEFT - ); - - x = vec.getX(); - y = vec.getY(); - - if (!moveDelta) moveDelta = true; - - } else { - if (!clickDelta) { - clickDelta = true; - - hudOffsetX = config().hudX; - hudOffsetY = config().hudY; - } - - Vec2 mouse = ModConfig.StartCorner.TOP_LEFT.getModifier().translateVector( - new Vec2<>( - (mouseX), - (mouseY) - ), new Dimension<>( - Math.round(minecraft.getWindow().getGuiScaledWidth()), - Math.round(minecraft.getWindow().getGuiScaledHeight()) - ), - config().startCorner - ); - scale = ModUtil.calculateMouseScale( - Math.round(config().hudX * scale), - Math.round(config().hudY * scale), - CoordinatesDisplay.HUD.getWidth(), CoordinatesDisplay.HUD.getHeight(), - Math.abs(mouse.getX()), Math.abs(mouse.getY()) - ); - - x = Math.round(hudOffsetX / scale); - y = Math.round(hudOffsetY / scale); - - } - } else { - if (delay != 0) delay -= 1; - } - - if (!isDragging && clickDelta) { - clickDelta = false; - scaleDelta = false; - moveDelta = false; - } - - CoordinatesDisplay.HUD.render( - p_96562_, - pos, - x, y, - CoordinatesDisplay.getConfig().renderMode, - CoordinatesDisplay.getConfig().startCorner, - CoordinatesDisplay.HUD.isHovered(mouseX, mouseY), - scale - ); - - } - - private Vec2 calculateCorner(Rect size, ModConfig.StartCorner corner) { - Vec2 s = new Vec2<>(size.getX(), size.getY()); - - switch (corner) { - case TOP_RIGHT: - s.setX(size.getMaxX()); - break; - - case BOTTOM_LEFT: - s.setY(size.getMaxY()); - break; - - case BOTTOM_RIGHT: - s.setX(size.getMaxX()); - s.setY(size.getMaxY()); - break; - - default: - break; - } - - return s; - } - - @Override - public void onClose() { - super.onClose(); - - CoordinatesDisplay.CONFIG.get().hudX = x; - CoordinatesDisplay.CONFIG.get().hudY = y; - CoordinatesDisplay.CONFIG.get().hudScale = scale; - - if (WorldUtils.getWorld() != null) { - CoordinatesDisplay.CONFIG.save(); - } - - CoordinatesDisplay.shouldHudRender = true; - } - - @Override - protected Component getName() { - return Component.translatable("screen.coordinatesdispaly.hudposition"); - } - - @Override - protected void initFooter(int startX, int startY) { - this.addRenderableWidget(createSaveButton(startX, startY, b -> this.onClose())); - } - - @Override - protected void initConfigButtons() { - } - - @Override - public boolean shouldCloseOnEsc() { - return false; - } - - private Dimension getDistance(Vec2 vec1, Vec2 vec2) { - int distanceX = vec1.getX() - vec2.getX(); - int distanceY = vec1.getY() - vec2.getY(); - - return new Dimension<>(distanceX, distanceY); - } -} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/CoordinatesHuds.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/CoordinatesHuds.java deleted file mode 100644 index 570b516..0000000 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/CoordinatesHuds.java +++ /dev/null @@ -1,120 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.hud; - -import dev.boxadactle.boxlib.core.BoxLib; -import dev.boxadactle.boxlib.util.GuiUtils; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import net.minecraft.network.chat.Component; - -import java.util.HashMap; -import java.util.Locale; - -public class CoordinatesHuds { - - public static final HashMap registeredOverlays = new HashMap<>(); - - public static RegisteredRenderer register(Class renderer) { - RegisteredRenderer overlay = new RegisteredRenderer(renderer); - - if (registeredOverlays.containsKey(overlay.getId())) { - throw new IllegalStateException("Attempting to register renderer with duplicate id: " + overlay.getId()); - } - - registeredOverlays.put(overlay.getId(), overlay); - CoordinatesDisplay.LOGGER.info("Registered renderer: " + overlay.getId()); - return overlay; - } - - public static RegisteredRenderer getRenderer(String id) { - String idLower = id.toLowerCase(Locale.ROOT); - RegisteredRenderer r = registeredOverlays.get(idLower); - if (r != null) return r; - throw new UnknownRendererException(idLower); - } - - public static RegisteredRenderer nextRenderer(String value) { - if (registeredOverlays.isEmpty()) { - throw new IllegalStateException("Attempting to get next renderer when there are no registered renderers!"); - } - - RegisteredRenderer renderer = getRenderer(value); - if (renderer == null) { - return registeredOverlays.values().iterator().next(); - } - - int index = 0; - for (RegisteredRenderer r : registeredOverlays.values()) { - if (r == renderer) { - break; - } - index++; - } - - if (index == registeredOverlays.size() - 1) { - return registeredOverlays.values().iterator().next(); - } else { - return registeredOverlays.values().toArray(new RegisteredRenderer[0])[index + 1]; - } - } - - public static RegisteredRenderer previousRenderer(String value) { - if (registeredOverlays.isEmpty()) { - throw new IllegalStateException("Attempting to get previous renderer when there are no registered renderers!"); - } - - RegisteredRenderer renderer = getRenderer(value); - if (renderer == null) { - return registeredOverlays.values().iterator().next(); - } - - int index = 0; - for (RegisteredRenderer r : registeredOverlays.values()) { - if (r == renderer) { - break; - } - index++; - } - - if (index == 0) { - return registeredOverlays.values().toArray(new RegisteredRenderer[0])[registeredOverlays.size() - 1]; - } else { - return registeredOverlays.values().toArray(new RegisteredRenderer[0])[index - 1]; - } - } - - public static class RegisteredRenderer { - HudRenderer renderer; - DisplayMode metadata; - - public RegisteredRenderer(Class renderer) { - this.renderer = BoxLib.initializeClass(renderer); - - DisplayMode m = renderer.getAnnotation(DisplayMode.class); - if (m != null) { - metadata = m; - } else { - throw new IllegalStateException("Attempting to register Hud renderer without Hud.Renderer annotation!"); - } - } - - public HudRenderer getRenderer() { - return renderer; - } - - public DisplayMode getMetadata() { - return metadata; - } - - public Component getComponent() { - return Component.translatable(renderer.getNameKey()); - } - - public String getName() { - return GuiUtils.getTranslatable(renderer.getTranslationKey()); - } - - public String getId() { - return metadata.value(); - } - } - -} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/Hud.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/Hud.java index 8d8644e..bb1e407 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/Hud.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/Hud.java @@ -1,17 +1,23 @@ package dev.boxadactle.coordinatesdisplay.hud; import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.layouts.RenderingLayout; import dev.boxadactle.boxlib.math.geometry.Dimension; import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.boxlib.math.mathutils.Clamps; import dev.boxadactle.boxlib.util.ClientUtils; import dev.boxadactle.boxlib.util.RenderUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; import dev.boxadactle.coordinatesdisplay.ModUtil; +import dev.boxadactle.coordinatesdisplay.registry.DisplayMode; +import dev.boxadactle.coordinatesdisplay.registry.StartCorner; +import dev.boxadactle.coordinatesdisplay.registry.VisibilityFilter; import dev.boxadactle.coordinatesdisplay.position.Position; import net.minecraft.client.gui.GuiGraphics; +import java.lang.reflect.InvocationTargetException; + public class Hud { Rect size = new Rect<>(0, 0, 0, 0); @@ -36,56 +42,75 @@ public boolean isScaleButtonHovered(int mouseX, int mouseY) { return scaleButton.containsPoint(new Vec2<>(Math.round(mouseX / scale), Math.round(mouseY / scale))); } - public void render(GuiGraphics guiGraphics, Position pos, int x, int y, String renderMode, ModConfig.StartCorner startCorner, boolean moveOverlay) { + public boolean shouldRender(VisibilityFilter filter) throws UnknownVisibilityFilterException { + boolean bl = true; + + // have you ever seen anyone use this operand + bl &= !ClientUtils.getOptions().hideGui; + bl &= !ClientUtils.getOptions().renderDebug; + bl &= CoordinatesDisplay.shouldHudRender; + bl &= filter.getFilter().isVisible(); + + return bl && CoordinatesDisplay.getConfig().enabled; + } + + public RenderingLayout preRender(Position pos, int x, int y, DisplayMode renderMode, StartCorner startCorner) { try { - CoordinatesHuds.RegisteredRenderer overlay = CoordinatesHuds.getRenderer(renderMode); + RenderingLayout layout = renderMode.getRenderer().renderOverlay(x, y, pos); - if (overlay == null) { - throw new UnknownRendererException(renderMode); - } + Rect startSize = layout.calculateRect(); - // only way to do this is the use the size of the hud from the previous frame - Rect newPos = overlay.getMetadata().ignoreTranslations() ? new Rect<>(x, y, size.getWidth(), size.getHeight()) : startCorner.getModifier().translateRect(new Rect<>(x, y, size.getWidth(), size.getHeight()), new Dimension<>( + Dimension window = new Dimension<>( Math.round(ClientUtils.getClient().getWindow().getGuiScaledWidth() / scale), Math.round(ClientUtils.getClient().getWindow().getGuiScaledHeight() / scale) - ), ModConfig.StartCorner.TOP_LEFT); + ); + Rect newPos = renderMode.getMetadata().ignoreTranslations() ? + renderMode.getMetadata().positionModifier().getDeclaredConstructor().newInstance().getPosition(startSize, window) : + startCorner.getModifier().translateRect(startSize, window); + + layout.setPosition(newPos.getX(), newPos.getY()); + + return layout; + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + public void render(GuiGraphics guiGraphics, RenderingLayout layout, DisplayMode renderMode) { + try { + Rect size = HudRenderer.renderHud(guiGraphics, layout, renderMode.getMetadata().hasBackground()); - Rect size = overlay.getRenderer().renderOverlay(guiGraphics, newPos.getX(), newPos.getY(), pos); this.size.setX(size.getX()); this.size.setY(size.getY()); this.size.setWidth(size.getWidth()); this.size.setHeight(size.getHeight()); - - if (moveOverlay && overlay.getMetadata().allowMove()) { - renderMoveOverlay(guiGraphics, newPos.getX(), newPos.getY()); - } } catch (NullPointerException e) { CoordinatesDisplay.LOGGER.error("An unexpected error occurred!"); CoordinatesDisplay.LOGGER.printStackTrace(e); } } - public void render(GuiGraphics guiGraphics, Position pos, int x, int y, String renderMode, ModConfig.StartCorner startCorner, boolean moveOverlay, float scale) { - try { - CoordinatesHuds.RegisteredRenderer overlay = CoordinatesHuds.getRenderer(renderMode); + public void render(GuiGraphics guiGraphics, Position pos, int x, int y, DisplayMode renderMode, StartCorner startCorner) { + RenderingLayout layout = preRender(pos, x, y, renderMode, startCorner); - if (overlay == null) { - throw new UnknownRendererException(renderMode); - } + render(guiGraphics, layout, renderMode); + } - if (!overlay.getMetadata().ignoreTranslations()) { - PoseStack matrices = guiGraphics.pose(); + public void render(GuiGraphics guiGraphics, Position pos, int x, int y, DisplayMode renderMode, StartCorner startCorner, float scale) { + try { + if (!renderMode.getMetadata().ignoreTranslations()) { + PoseStack stack = guiGraphics.pose(); - matrices.pushPose(); + stack.pushPose(); - matrices.scale(scale, scale, scale); + stack.scale(scale, scale, scale); this.scale = scale; - render(guiGraphics, pos, x, y, renderMode, startCorner, moveOverlay); + render(guiGraphics, pos, x, y, renderMode, startCorner); - matrices.popPose(); - } else render(guiGraphics, pos, x, y, renderMode, startCorner, moveOverlay); + stack.popPose(); + } else render(guiGraphics, pos, x, y, renderMode, startCorner); } catch (NullPointerException e) { CoordinatesDisplay.LOGGER.printStackTrace(e); } @@ -103,7 +128,7 @@ public int getHeight() { return size.getHeight(); } - private void renderMoveOverlay(GuiGraphics guiGraphics, int x, int y) { + public void renderMoveOverlay(GuiGraphics guiGraphics, int x, int y) { int color = 0x50c7c7c7; scaleSize = 5; int scaleColor = 0x99d9fffa; @@ -112,35 +137,26 @@ private void renderMoveOverlay(GuiGraphics guiGraphics, int x, int y) { RenderUtils.drawSquare(guiGraphics, x, y, size.getWidth(), size.getHeight(), color); // scale square - scaleButton = calculateScaleButton(CoordinatesDisplay.getConfig().startCorner); + scaleButton = new Rect<>( + size.getMaxX() - scaleSize, + size.getMaxY() - scaleSize, + scaleSize, scaleSize + ); int scaleX = scaleButton.getX(); int scaleY = scaleButton.getY(); RenderUtils.drawSquare(guiGraphics, scaleX, scaleY, scaleSize, scaleSize, scaleColor); } - private Rect calculateScaleButton(ModConfig.StartCorner corner) { - Rect pos = new Rect<>( - size.getX() + size.getWidth() - scaleSize, - size.getY() + size.getHeight() - scaleSize, - scaleSize, scaleSize - ); + public float calculateScale(int x, int y, int mouseX, int mouseY) { + float rectSize = ModUtil.calculatePointDistance(x, y, x + size.getWidth(), y + size.getY()); + float mouseSize = ModUtil.calculatePointDistance(x, y, mouseX, mouseY); - switch (corner) { - case TOP_RIGHT: - pos.setX(size.getX()); - break; - case BOTTOM_LEFT: - pos.setY(size.getY()); - break; - case BOTTOM_RIGHT: - pos.setX(size.getX()); - pos.setY(size.getY()); - break; - default: - break; - } + float scaleFactor = mouseSize / rectSize; + + scaleFactor = Math.round(scaleFactor * 10) / 10.0f; + scaleFactor = Clamps.clamp(scaleFactor, 0.5f, 2.0f); - return pos; + return scaleFactor; } public int getX() { diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/DisplayMode.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudDisplayMode.java similarity index 90% rename from common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/DisplayMode.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudDisplayMode.java index 63eb5bf..6335ca3 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/DisplayMode.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudDisplayMode.java @@ -15,7 +15,7 @@ */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -public @interface DisplayMode { +public @interface HudDisplayMode { /** * The id for the renderer. *

@@ -46,6 +46,16 @@ */ boolean ignoreTranslations() default false; + /** + * The class for the position modifier. + *

+ * This is useful for when you want to use a specific location for a renderer + * You must change ignoreTranslations to true in order to use this feature + * + * @return the class for the position modifier + */ + Class positionModifier() default HudPositionModifier.Basic.class; + /** * Whether to allow the hud to be moved by the user *

diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudPositionModifier.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudPositionModifier.java index ec3a5e7..f7d2515 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudPositionModifier.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudPositionModifier.java @@ -3,13 +3,31 @@ import dev.boxadactle.boxlib.math.geometry.Dimension; import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.boxlib.math.geometry.Vec2; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import net.minecraft.client.Minecraft; public interface HudPositionModifier { - Vec2 translateVector(Vec2 original, Dimension window, ModConfig.StartCorner currentCorner); + Vec2 translateVector(Vec2 original, Dimension window); - Rect translateRect(Rect rect, Dimension window, ModConfig.StartCorner currentCorner); + Rect translateRect(Rect rect, Dimension window); + Vec2 getRelativeVec(Vec2 leftTop, Dimension window); + + Vec2 getStartCorner(Rect rect); + + default Vec2 getRelativePos(Rect rect, Dimension window) { + return getRelativeVec(getStartCorner(rect), window); + } + + @FunctionalInterface + interface BasicPositionModifier { + Rect getPosition(Rect rect, Dimension ignored); + } + + class Basic implements BasicPositionModifier { + + @Override + public Rect getPosition(Rect rect, Dimension ignored) { + return rect; + } + } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudRenderer.java index 6c4e29f..16661d1 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudRenderer.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudRenderer.java @@ -1,5 +1,6 @@ package dev.boxadactle.coordinatesdisplay.hud; +import com.mojang.blaze3d.vertex.PoseStack; import dev.boxadactle.boxlib.layouts.RenderingLayout; import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.boxlib.math.geometry.Vec3; @@ -7,11 +8,10 @@ import dev.boxadactle.boxlib.util.GuiUtils; import dev.boxadactle.boxlib.util.RenderUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; +import dev.boxadactle.coordinatesdisplay.ModConfig; import dev.boxadactle.coordinatesdisplay.position.Position; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -import oshi.util.tuples.Triplet; public interface HudRenderer { @@ -22,11 +22,7 @@ default ModConfig config() { } default void drawInfo(GuiGraphics guiGraphics, Component component, int x, int y, int color) { - guiGraphics.drawString(GuiUtils.getTextRenderer(), component, x, y, color, CoordinatesDisplay.CONFIG.get().hudTextShadow); - } - - default void drawInfo(GuiGraphics guiGraphics, Component component, int x, int y) { - drawInfo(guiGraphics, component, x, y, GuiUtils.WHITE); + RenderUtils.drawText(guiGraphics, component, x, y, color); } @@ -38,7 +34,7 @@ default String getTranslationKey() { } default String getNameKey() { - DisplayMode metadata = this.getClass().getAnnotation(DisplayMode.class); + HudDisplayMode metadata = this.getClass().getAnnotation(HudDisplayMode.class); if (metadata != null) { if (!metadata.translationKey().isEmpty()) { return metadata.translationKey(); @@ -62,6 +58,10 @@ default Component definition(String t) { return GuiUtils.colorize(Component.literal(t), CoordinatesDisplay.getConfig().definitionColor); } + default Component definition(GlobalTexts t, Object ...args) { + return definition(t.get(args)); + } + default Component definition(String k, Object ...args) { return definition(translation(k, args)); } @@ -74,8 +74,8 @@ default Component value(Component t) { return GuiUtils.colorize(t, CoordinatesDisplay.getConfig().dataColor); } - default Component valueTranslation(String k, Object ...args) { - return value(translation(k, args)); + default Component value(GlobalTexts t, Object ...args) { + return value(t.get(args)); } default Component resolveDirection(String direction, boolean useShort) { @@ -90,11 +90,11 @@ default Component resolveDirection(String direction) { return resolveDirection(direction, false); } - default Rect renderHud(GuiGraphics guiGraphics, RenderingLayout hudRenderer) { + static Rect renderHud(GuiGraphics guiGraphics, RenderingLayout hudRenderer, boolean background) { Rect r = hudRenderer.calculateRect(); - if (config().renderBackground) { - RenderUtils.drawSquare(guiGraphics, r, config().backgroundColor); + if (CoordinatesDisplay.getConfig().renderBackground && background) { + RenderUtils.drawSquare(guiGraphics, r, CoordinatesDisplay.getConfig().backgroundColor); } hudRenderer.render(guiGraphics); @@ -122,25 +122,11 @@ default Triplet roundPosition(Vec3 pos, Vec3 createXYZ(String x, String y, String z) { return new Triplet<>( - createLine("x", x), - createLine("y", y), - createLine("z", z) + definition(GlobalTexts.X, value(x)), + definition(GlobalTexts.Y, value(y)), + definition(GlobalTexts.Z, value(z)) ); } @@ -155,6 +141,29 @@ default NumberFormatter genFormatter() { // HUD RENDERER METHOD - Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos); + RenderingLayout renderOverlay(int x, int y, Position pos); + + enum GlobalTexts { + X("hud.coordinatesdisplay.x"), + Y("hud.coordinatesdisplay.y"), + Z("hud.coordinatesdisplay.z"), + XYZ("hud.coordinatesdisplay.xyz"), + CHUNK_X("hud.coordinatesdisplay.chunk_x"), + CHUNK_Y("hud.coordinatesdisplay.chunk_y"), + CHUNK_Z("hud.coordinatesdisplay.chunk_z"), + FACING("hud.corodinatesdisplay.facing"), + BIOME("hud.coordinatesdisplay.biome"), + DIMENSION("hud.coordinatesdisplay.dimension"); + + final String key; + + GlobalTexts(String key) { + this.key = key; + } + + public Component get(Object ...args) { + return Component.translatable(key, args); + } + } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudVisibility.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudVisibility.java new file mode 100644 index 0000000..879369f --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudVisibility.java @@ -0,0 +1,16 @@ +package dev.boxadactle.coordinatesdisplay.hud; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface HudVisibility { + + String value(); + + String translationKey() default ""; + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudVisibilityFilter.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudVisibilityFilter.java new file mode 100644 index 0000000..ecb2293 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/HudVisibilityFilter.java @@ -0,0 +1,24 @@ +package dev.boxadactle.coordinatesdisplay.hud; + +public interface HudVisibilityFilter { + + boolean isVisible(); + + default String getNameKey() { + HudVisibility metadata = this.getClass().getAnnotation(HudVisibility.class); + if (metadata != null) { + if (!metadata.translationKey().isEmpty()) { + return metadata.translationKey(); + } else { + return "hud.coordinatesdisplay.filter." + metadata.value(); + } + } else { + throw new RuntimeException("Cannot use hud text helpers without specifying a translation key!"); + } + } + + default String getTranslationKey() { + return getNameKey() + "."; + } + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/Triplet.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/Triplet.java new file mode 100644 index 0000000..f9a3c8d --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/Triplet.java @@ -0,0 +1,25 @@ +package dev.boxadactle.coordinatesdisplay.hud; + +public class Triplet { + F first; + S second; + T third; + + public Triplet(F first, S second, T third) { + this.first = first; + this.second = second; + this.third = third; + } + + public F getA() { + return first; + } + + public S getB() { + return second; + } + + public T getC() { + return third; + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/UnknownVisibilityFilterException.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/UnknownVisibilityFilterException.java new file mode 100644 index 0000000..db32b39 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/UnknownVisibilityFilterException.java @@ -0,0 +1,16 @@ +package dev.boxadactle.coordinatesdisplay.hud; + +/** + * Thrown when attempting to use a visibility filter that has not been registered. + * + * @since 10.0.0 + * @see HudVisibilityFilter + * @see Hud + */ +public class UnknownVisibilityFilterException extends RuntimeException { + + public UnknownVisibilityFilterException(String filter) { + super("Could not find overlay with id " + filter + "!"); + } + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomLeftModifier.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomLeftModifier.java index 306ec5e..cb7262d 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomLeftModifier.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomLeftModifier.java @@ -4,62 +4,27 @@ import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.boxlib.math.geometry.Vec2; import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; public class BottomLeftModifier implements HudPositionModifier { @Override - public Vec2 translateVector(Vec2 original, Dimension window, ModConfig.StartCorner currentCorner) { - int translatedX = original.getX(); - int translatedY = original.getY(); - - int x = original.getX(); - int y = original.getY(); - - int windowWidth = window.getWidth(); - int windowHeight = window.getHeight(); - - switch (currentCorner) { - case TOP_LEFT: - translatedY = windowHeight - y; - break; - case TOP_RIGHT: - translatedX = windowWidth - x; - translatedY = windowHeight - y; - break; - case BOTTOM_RIGHT: - translatedX = windowWidth - x; - break; - // For BOTTOM_LEFT corner, no translation needed - default: - break; - } - - return new Vec2<>(translatedX, translatedY); + public Vec2 translateVector(Vec2 original, Dimension window) { + return new Vec2<>(original.getX(), window.getHeight() - original.getY()); } @Override - public Rect translateRect(Rect rect, Dimension window, ModConfig.StartCorner currentCorner) { - int translatedX = rect.getX(); - int translatedY = rect.getY(); - - switch (currentCorner) { - case TOP_LEFT: - translatedY = window.getHeight() - rect.getY() - rect.getHeight(); - break; - case TOP_RIGHT: - translatedX = window.getWidth() - rect.getX() - rect.getWidth(); - translatedY = window.getHeight() - rect.getY() - rect.getHeight(); - break; - case BOTTOM_RIGHT: - translatedX = window.getWidth() - rect.getX() - rect.getWidth(); - break; - default: - break; - } - + public Rect translateRect(Rect rect, Dimension window) { Rect r = rect.clone(); - r.setX(translatedX); - r.setY(translatedY); + r.setY(window.getHeight() - rect.getY() - rect.getHeight()); return r; } + + @Override + public Vec2 getRelativeVec(Vec2 leftTop, Dimension window) { + return translateVector(leftTop, window); + } + + @Override + public Vec2 getStartCorner(Rect rect) { + return new Vec2<>(rect.getX(), rect.getMaxY()); + } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomModifier.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomModifier.java new file mode 100644 index 0000000..19a419f --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomModifier.java @@ -0,0 +1,48 @@ +package dev.boxadactle.coordinatesdisplay.hud.modifier; + +import dev.boxadactle.boxlib.math.geometry.Dimension; +import dev.boxadactle.boxlib.math.geometry.Rect; +import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; + +public class BottomModifier implements HudPositionModifier { + @Override + public Vec2 translateVector(Vec2 original, Dimension window) { + int x = original.getX(); + int y = original.getY(); + + int windowWidth = window.getWidth(); + int windowHeight = window.getHeight(); + + return new Vec2<>(windowWidth / 2 + x, windowHeight - y); + } + + @Override + public Rect translateRect(Rect rect, Dimension window) { + int x = rect.getX(); + int y = rect.getY(); + int width = rect.getWidth(); + int height = rect.getHeight(); + + int windowWidth = window.getWidth(); + int windowHeight = window.getHeight(); + + Rect r = rect.clone(); + r.setX(windowWidth / 2 + x - width / 2); + r.setY(windowHeight - y - height); + return r; + } + + @Override + public Vec2 getRelativeVec(Vec2 leftTop, Dimension window) { + return new Vec2<>( + leftTop.getX() - window.getWidth() / 2, + window.getHeight() - leftTop.getY() + ); + } + + @Override + public Vec2 getStartCorner(Rect rect) { + return new Vec2<>(rect.getX() + rect.getWidth() / 2, rect.getMaxY()); + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomRightModifier.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomRightModifier.java index fb28e98..d948ec3 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomRightModifier.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/BottomRightModifier.java @@ -3,63 +3,36 @@ import dev.boxadactle.boxlib.math.geometry.Dimension; import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.coordinatesdisplay.registry.StartCorner; import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; public class BottomRightModifier implements HudPositionModifier { @Override - public Vec2 translateVector(Vec2 original, Dimension window, ModConfig.StartCorner currentCorner) { - int translatedX = original.getX(); - int translatedY = original.getY(); - + public Vec2 translateVector(Vec2 original, Dimension window) { int x = original.getX(); int y = original.getY(); int windowWidth = window.getWidth(); int windowHeight = window.getHeight(); - switch (currentCorner) { - case TOP_LEFT: - translatedX = windowWidth - x; - translatedY = windowHeight - y; - break; - case TOP_RIGHT: - translatedY = windowHeight - y; - break; - case BOTTOM_LEFT: - translatedX = windowWidth - x; - break; - // For BOTTOM_RIGHT corner, no translation needed - default: - break; - } - - return new Vec2<>(translatedX, translatedY); + return new Vec2<>(windowWidth - x, windowHeight - y); } @Override - public Rect translateRect(Rect rect, Dimension window, ModConfig.StartCorner currentCorner) { - int translatedX = rect.getX(); - int translatedY = rect.getY(); - - switch (currentCorner) { - case TOP_LEFT: - translatedX = window.getWidth() - rect.getX() - rect.getWidth(); - translatedY = window.getHeight() - rect.getY() - rect.getHeight(); - break; - case TOP_RIGHT: - translatedY = window.getHeight() - rect.getY() - rect.getHeight(); - break; - case BOTTOM_LEFT: - translatedX = window.getWidth() - rect.getX() - rect.getWidth(); - break; - default: - break; - } - + public Rect translateRect(Rect rect, Dimension window) { Rect r = rect.clone(); - r.setX(translatedX); - r.setY(translatedY); + r.setX(window.getWidth() - rect.getX() - rect.getWidth()); + r.setY(window.getHeight() - rect.getY() - rect.getHeight()); return r; } + + @Override + public Vec2 getRelativeVec(Vec2 leftTop, Dimension window) { + return translateVector(leftTop, window); + } + + @Override + public Vec2 getStartCorner(Rect rect) { + return new Vec2<>(rect.getMaxX(), rect.getMaxY()); + } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/LeftModifier.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/LeftModifier.java new file mode 100644 index 0000000..1b9b631 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/LeftModifier.java @@ -0,0 +1,43 @@ +package dev.boxadactle.coordinatesdisplay.hud.modifier; + +import dev.boxadactle.boxlib.math.geometry.Dimension; +import dev.boxadactle.boxlib.math.geometry.Rect; +import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; + +public class LeftModifier implements HudPositionModifier { + @Override + public Vec2 translateVector(Vec2 original, Dimension window) { + int x = original.getX(); + int y = original.getY(); + + int windowHeight = window.getHeight(); + + return new Vec2<>(x, windowHeight / 2 + y); + } + + @Override + public Rect translateRect(Rect rect, Dimension window) { + int y = rect.getY(); + int height = rect.getHeight(); + + int windowHeight = window.getHeight(); + + Rect r = rect.clone(); + r.setY(windowHeight / 2 + y - height / 2); + return r; + } + + @Override + public Vec2 getRelativeVec(Vec2 leftTop, Dimension window) { + return new Vec2<>( + leftTop.getX(), + leftTop.getY() - window.getHeight() / 2 + ); + } + + @Override + public Vec2 getStartCorner(Rect rect) { + return new Vec2<>(rect.getX(), rect.getY() + rect.getHeight() / 2); + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/RightModifier.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/RightModifier.java new file mode 100644 index 0000000..39b7f13 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/RightModifier.java @@ -0,0 +1,48 @@ +package dev.boxadactle.coordinatesdisplay.hud.modifier; + +import dev.boxadactle.boxlib.math.geometry.Dimension; +import dev.boxadactle.boxlib.math.geometry.Rect; +import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; + +public class RightModifier implements HudPositionModifier { + @Override + public Vec2 translateVector(Vec2 original, Dimension window) { + int x = original.getX(); + int y = original.getY(); + + int windowWidth = window.getWidth(); + int windowHeight = window.getHeight(); + + return new Vec2<>(windowWidth - x, windowHeight / 2 + y); + } + + @Override + public Rect translateRect(Rect rect, Dimension window) { + int x = rect.getX(); + int width = rect.getWidth(); + int y = rect.getY(); + int height = rect.getHeight(); + + int windowWidth = window.getWidth(); + int windowHeight = window.getHeight(); + + Rect r = rect.clone(); + r.setX(windowWidth - x - width); + r.setY(windowHeight / 2 + y - height / 2); + return r; + } + + @Override + public Vec2 getRelativeVec(Vec2 leftTop, Dimension window) { + return new Vec2<>( + window.getWidth() - leftTop.getX(), + leftTop.getY() - window.getHeight() / 2 + ); + } + + @Override + public Vec2 getStartCorner(Rect rect) { + return new Vec2<>(rect.getMaxX(), rect.getY() + rect.getHeight() / 2); + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopLeftModifier.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopLeftModifier.java index 605f4eb..63fe173 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopLeftModifier.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopLeftModifier.java @@ -3,63 +3,28 @@ import dev.boxadactle.boxlib.math.geometry.Dimension; import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.coordinatesdisplay.registry.StartCorner; import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; public class TopLeftModifier implements HudPositionModifier { @Override - public Vec2 translateVector(Vec2 original, Dimension window, ModConfig.StartCorner currentCorner) { - int translatedX = original.getX(); - int translatedY = original.getY(); - - int x = original.getX(); - int y = original.getY(); - - int windowWidth = window.getWidth(); - int windowHeight = window.getHeight(); - - switch (currentCorner) { - case TOP_RIGHT: - translatedX = windowWidth - x; - break; - case BOTTOM_LEFT: - translatedY = windowHeight - y; - break; - case BOTTOM_RIGHT: - translatedX = windowWidth - x; - translatedY = windowHeight - y; - break; - // For TOP_LEFT corner, no translation needed - default: - break; - } - - return new Vec2<>(translatedX, translatedY); + public Vec2 translateVector(Vec2 original, Dimension window) { + return original; } @Override - public Rect translateRect(Rect rect, Dimension window, ModConfig.StartCorner currentCorner) { - int translatedX = rect.getX(); - int translatedY = rect.getY(); + public Rect translateRect(Rect rect, Dimension window) { + return rect; + } - switch (currentCorner) { - case TOP_RIGHT: - translatedX = window.getWidth() - rect.getX() - rect.getWidth(); - break; - case BOTTOM_LEFT: - translatedY = window.getHeight() - rect.getY() - rect.getHeight(); - break; - case BOTTOM_RIGHT: - translatedX = window.getWidth() - rect.getX() - rect.getWidth(); - translatedY = window.getHeight() - rect.getY() - rect.getHeight(); - break; - default: - break; - } + @Override + public Vec2 getRelativeVec(Vec2 leftTop, Dimension window) { + return leftTop; + } - Rect r = rect.clone(); - r.setX(translatedX); - r.setY(translatedY); - return r; + @Override + public Vec2 getStartCorner(Rect rect) { + return new Vec2<>(rect.getX(), rect.getY()); } + } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopModifier.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopModifier.java new file mode 100644 index 0000000..348b8ad --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopModifier.java @@ -0,0 +1,43 @@ +package dev.boxadactle.coordinatesdisplay.hud.modifier; + +import dev.boxadactle.boxlib.math.geometry.Dimension; +import dev.boxadactle.boxlib.math.geometry.Rect; +import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; + +public class TopModifier implements HudPositionModifier { + @Override + public Vec2 translateVector(Vec2 original, Dimension window) { + int x = original.getX(); + int y = original.getY(); + + int windowWidth = window.getWidth(); + + return new Vec2<>(windowWidth / 2 + x, y); + } + + @Override + public Rect translateRect(Rect rect, Dimension window) { + int x = rect.getX(); + int width = rect.getWidth(); + + int windowWidth = window.getWidth(); + + Rect r = rect.clone(); + r.setX(windowWidth / 2 + x - width / 2); + return r; + } + + @Override + public Vec2 getRelativeVec(Vec2 leftTop, Dimension window) { + return new Vec2<>( + leftTop.getX() - window.getWidth() / 2, + leftTop.getY() + ); + } + + @Override + public Vec2 getStartCorner(Rect rect) { + return new Vec2<>(rect.getX() + rect.getWidth() / 2, rect.getY()); + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopRightModifier.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopRightModifier.java index 962d52f..3500b22 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopRightModifier.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/modifier/TopRightModifier.java @@ -3,63 +3,35 @@ import dev.boxadactle.boxlib.math.geometry.Dimension; import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.coordinatesdisplay.registry.StartCorner; import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; public class TopRightModifier implements HudPositionModifier { @Override - public Vec2 translateVector(Vec2 original, Dimension window, ModConfig.StartCorner currentCorner) { - int translatedX = original.getX(); + public Vec2 translateVector(Vec2 original, Dimension window) { int translatedY = original.getY(); int x = original.getX(); - int y = original.getY(); int windowWidth = window.getWidth(); - int windowHeight = window.getHeight(); - switch (currentCorner) { - case TOP_LEFT: - translatedX = windowWidth - x; - break; - case BOTTOM_LEFT: - translatedX = windowWidth - x; - translatedY = windowHeight - y; - break; - case BOTTOM_RIGHT: - translatedY = windowHeight - y; - break; - // For TOP_RIGHT corner, no translation needed - default: - break; - } - - return new Vec2<>(translatedX, translatedY); + return new Vec2<>(windowWidth - x, translatedY); } @Override - public Rect translateRect(Rect rect, Dimension window, ModConfig.StartCorner currentCorner) { - int translatedX = rect.getX(); - int translatedY = rect.getY(); - - switch (currentCorner) { - case TOP_LEFT: - translatedX = window.getWidth() - rect.getX() - rect.getWidth(); - break; - case BOTTOM_LEFT: - translatedX = window.getWidth() - rect.getX() - rect.getWidth(); - translatedY = window.getHeight() - rect.getY() - rect.getHeight(); - break; - case BOTTOM_RIGHT: - translatedY = window.getHeight() - rect.getY() - rect.getHeight(); - break; - default: - break; - } - + public Rect translateRect(Rect rect, Dimension window) { Rect r = rect.clone(); - r.setX(translatedX); - r.setY(translatedY); + r.setX(window.getWidth() - rect.getX() - rect.getWidth()); return r; } + + @Override + public Vec2 getRelativeVec(Vec2 leftTop, Dimension window) { + return translateVector(leftTop, window); + } + + @Override + public Vec2 getStartCorner(Rect rect) { + return new Vec2<>(rect.getMaxX(), rect.getY()); + } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/ChunkRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/ChunkRenderer.java new file mode 100644 index 0000000..9dc4a72 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/ChunkRenderer.java @@ -0,0 +1,97 @@ +package dev.boxadactle.coordinatesdisplay.hud.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.layouts.RenderingLayout; +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.Vec2; +import dev.boxadactle.boxlib.util.ClientUtils; +import dev.boxadactle.coordinatesdisplay.ModUtil; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; +import dev.boxadactle.coordinatesdisplay.position.Position; +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.ChunkPos; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@HudDisplayMode( + value = "chunk", + hasXYZ = false, + hasBiome = false, + hasDimension = false, + hasChunkData = false, + hasDirection = false, + hasDirectionInt = false, + hasMCVersion = false +) +public class ChunkRenderer implements HudRenderer { + + @Override + public RenderingLayout renderOverlay(int x, int y, Position pos) { + RowLayout hud = new RowLayout(0, 0, config().textPadding); + + { + ColumnLayout left = new ColumnLayout(0, 0, config().textPadding); + + // position + Vec2 chunkPos = pos.position.getChunkPos(); + Component position = definition(translation("position")); + Component chunkX = definition(GlobalTexts.CHUNK_X, value(Integer.toString(chunkPos.getX()))); + Component chunkY = definition(GlobalTexts.CHUNK_Y, value(Integer.toString(pos.position.getChunkY()))); + Component chunkZ = definition(GlobalTexts.CHUNK_Z, value(Integer.toString(chunkPos.getY()))); + + left.addComponent(new ParagraphComponent(2, position, chunkX, chunkY, chunkZ)); + + // region + ChunkPos chunkPos1 = new ChunkPos(ModUtil.toBlockPos(pos.position.getBlockPos())); + Component region = definition(translation("region")); + Component rFile = value(String.format("r.%d.%d.mca", chunkPos1.getRegionX(), chunkPos1.getRegionZ())); + Component localRegion = value(String.format("%d %d", chunkPos1.getRegionLocalX(), chunkPos1.getRegionLocalZ())); + + left.addComponent(new ParagraphComponent(2, region, rFile, localRegion)); + + hud.addComponent(new LayoutContainerComponent(left)); + } + + { + ColumnLayout right = new ColumnLayout(0, 0, config().textPadding); + + // Chunks[C] + Component chunks = definition(translation("chunks")); + + String var1 = ClientUtils.getClient().level != null ? ClientUtils.getClient().level.gatherChunkSourceStats() : "Chunks[C] W: 0/0"; + + Pattern chunksPattern = Pattern.compile("Client Chunk Cache: (\\d+), (\\d+)"); + Matcher chunksMatcher = chunksPattern.matcher(var1); + boolean var3 = chunksMatcher.find(); + Component cached = definition(translation("chunks.cached", value(var3 ? chunksMatcher.group(1) : "0"))); + Component memory = definition(translation("chunks.memory", value(var3 ? chunksMatcher.group(2) : "0"))); + + right.addComponent(new ParagraphComponent(2, chunks, cached, memory)); + + // C + Component c = definition(translation("c")); + + String var2 = ClientUtils.getClient().level != null ? ClientUtils.getClient().levelRenderer.getChunkStatistics() : "C: 0/0"; + + // why is this field private mojang + Pattern cPattern = Pattern.compile("C: (\\d+)/(\\d+) \\(s\\)"); + Matcher cMatcher = cPattern.matcher(var2); + boolean var4 = cMatcher.find(); + Component rendered = definition(translation("c.rendered", value(var4 ? cMatcher.group(1) : "0"))); + Component loaded = definition(translation("c.loaded", value(var4 ? cMatcher.group(2) : "0"))); + + right.addComponent(new ParagraphComponent(2, c, rendered, loaded)); + + hud.addComponent(new LayoutContainerComponent(right)); + } + + return new PaddingLayout(x, y, config().padding, hud); + } + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DefaultRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DefaultRenderer.java index 5118431..e28b5d0 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DefaultRenderer.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DefaultRenderer.java @@ -1,5 +1,6 @@ package dev.boxadactle.coordinatesdisplay.hud.renderer; +import dev.boxadactle.boxlib.layouts.RenderingLayout; import dev.boxadactle.boxlib.layouts.component.LayoutContainerComponent; import dev.boxadactle.boxlib.layouts.component.ParagraphComponent; import dev.boxadactle.boxlib.layouts.layout.ColumnLayout; @@ -7,24 +8,22 @@ import dev.boxadactle.boxlib.layouts.layout.RowLayout; import dev.boxadactle.boxlib.math.mathutils.NumberFormatter; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.boxlib.math.geometry.Vec2; import dev.boxadactle.boxlib.util.ClientUtils; import dev.boxadactle.boxlib.util.GuiUtils; -import dev.boxadactle.boxlib.util.RenderUtils; import dev.boxadactle.coordinatesdisplay.ModUtil; -import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; +import dev.boxadactle.coordinatesdisplay.hud.Triplet; import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.client.gui.GuiGraphics; +import dev.boxadactle.coordinatesdisplay.WorldColors; import net.minecraft.network.chat.Component; -import oshi.util.tuples.Triplet; -@DisplayMode(value = "default") +@HudDisplayMode("default") public class DefaultRenderer implements HudRenderer { @Override - public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) { + public RenderingLayout renderOverlay(int x, int y, Position pos) { NumberFormatter formatter = genFormatter(); Triplet player = this.roundPosition(pos.position.getPlayerPos(), pos.position.getBlockPos(), CoordinatesDisplay.getConfig().decimalPlaces); Vec2 chunkPos = pos.position.getChunkPos(); @@ -39,9 +38,9 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi ParagraphComponent row2 = new ParagraphComponent(0); if (config().renderXYZ) { - Component xtext = definition("x", value(player.getA())); - Component ytext = definition("y", value(player.getB())); - Component ztext = definition("z", value(player.getC())); + Component xtext = definition(GlobalTexts.X, value(player.getA())); + Component ytext = definition(GlobalTexts.Y, value(player.getB())); + Component ztext = definition(GlobalTexts.Z, value(player.getC())); row1.addComponent(new ParagraphComponent( 0, @@ -52,8 +51,8 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi } if (config().renderChunkData) { - Component chunkx = definition("chunk.x", value(chunkPos.getX().toString())); - Component chunkz = definition("chunk.z", value(chunkPos.getY().toString())); + Component chunkx = definition(GlobalTexts.CHUNK_X, value(chunkPos.getX().toString())); + Component chunkz = definition(GlobalTexts.CHUNK_Z, value(chunkPos.getY().toString())); row1.addComponent(new ParagraphComponent( 0, @@ -63,46 +62,37 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi } if (config().renderDirection) { - Component direction = translation( - "direction", - definition(resolveDirection(ModUtil.getDirectionFromYaw(pos.headRot.wrapYaw()))), - config().renderDirectionInt ? - value(GuiUtils.parentheses(Component.literal(formatter.formatDecimal(pos.headRot.wrapYaw())))) + Component direction = Component.empty() + .append(definition(resolveDirection(ModUtil.getDirectionFromYaw(pos.headRot.wrapYaw())))) + .append(" ") + .append(config().renderDirectionInt ? + value("(" + formatter.formatDecimal(pos.headRot.wrapYaw()) + ")") : Component.empty() - ); + ); row2.add(direction); } if (config().renderBiome || config().renderDimension) { - String biomestring = pos.world.getBiome(true); - Component coloredBiomestring = GuiUtils.colorize( - Component.literal(biomestring), - config().biomeColors ? - CoordinatesDisplay.BiomeColors.getBiomeColor(biomestring, config().dataColor) : - config().dataColor - ); - Component biome = definition( - "biome", - coloredBiomestring - ); + Component biomeString = ModUtil.getBiomeComponent(pos.world.getBiomeKey(), pos.world.getBiome(), config().biomeColors, config().dataColor); + Component biome = definition(GlobalTexts.BIOME, biomeString); String dimensionstring = pos.world.getDimension(true); Component coloredDimensionstring = GuiUtils.colorize( Component.literal(dimensionstring), - config().dimensionColors ? - CoordinatesDisplay.BiomeColors.getDimensionColor(dimensionstring, config().dataColor) : - config().dataColor + config().biomeColors ? + WorldColors.getDimensionColor(dimensionstring, config().definitionColor) : + config().definitionColor ); Component dimension = definition( - "dimension", + GlobalTexts.DIMENSION, coloredDimensionstring ); Component biomeDimension = (config().renderDimension ? (config().renderBiome ? coloredDimensionstring : dimension).copy() : Component.empty()) .append(config().renderDimension && config().renderBiome ? definition(": ") : Component.empty()) - .append(config().renderBiome ? (config().renderDimension ? coloredBiomestring : biome) : Component.empty()); + .append(config().renderBiome ? (config().renderDimension ? biomeString : biome) : Component.empty()); row2.add(biomeDimension); } @@ -116,8 +106,6 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi hud.addComponent(new LayoutContainerComponent(row1)); hud.addComponent(row2); - PaddingLayout hudRenderer = new PaddingLayout(x, y, p, hud); - - return renderHud(guiGraphics, hudRenderer); + return new PaddingLayout(x, y, p, hud); } } 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 index 49d1c2e..8f81ca9 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DirectionRenderer.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/DirectionRenderer.java @@ -1,24 +1,24 @@ package dev.boxadactle.coordinatesdisplay.hud.renderer; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.layouts.RenderingLayout; 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.HudDisplayMode; import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; +import dev.boxadactle.coordinatesdisplay.hud.Triplet; 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( +@HudDisplayMode( value = "direction", hasChunkData = false, hasBiome = false, @@ -70,7 +70,7 @@ private String[] createYawComponents(double yaw) { } @Override - public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) { + public RenderingLayout renderOverlay(int x, int y, Position pos) { NumberFormatter formatter = genFormatter(); Triplet player = this.roundPosition(pos.position.getPlayerPos(), pos.position.getBlockPos(), CoordinatesDisplay.getConfig().decimalPlaces); @@ -78,9 +78,9 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi 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())); + Component xtext = definition(GlobalTexts.X, value(player.getA())); + Component ytext = definition(GlobalTexts.Y, value(player.getB())); + Component ztext = definition(GlobalTexts.Z, value(player.getC())); row.addComponent(new ParagraphComponent( 0, @@ -148,6 +148,6 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi hud.addComponent(direction); - return renderHud(guiGraphics, new PaddingLayout(x, y, config().padding, hud)); + return new PaddingLayout(x, y, config().padding, hud); } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/HotbarRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/HotbarRenderer.java index eafcad7..1fa313a 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/HotbarRenderer.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/HotbarRenderer.java @@ -1,21 +1,27 @@ package dev.boxadactle.coordinatesdisplay.hud.renderer; +import dev.boxadactle.boxlib.layouts.RenderingLayout; +import dev.boxadactle.boxlib.layouts.component.CenteredParagraphComponent; +import dev.boxadactle.boxlib.layouts.layout.ColumnLayout; +import dev.boxadactle.boxlib.math.geometry.Dimension; import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.boxlib.util.ClientUtils; -import dev.boxadactle.boxlib.util.GuiUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; import dev.boxadactle.coordinatesdisplay.ModUtil; +import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; -import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.Triplet; import dev.boxadactle.coordinatesdisplay.mixin.OverlayMessageTimeAccessor; import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -import oshi.util.tuples.Triplet; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; -@DisplayMode( +@HudDisplayMode( value = "hotbar", ignoreTranslations = true, + positionModifier = HotbarRenderer.HotbarPosition.class, allowMove = false, hasBackground = false, hasXYZ = false, @@ -29,44 +35,49 @@ public class HotbarRenderer implements HudRenderer { @Override - public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) { + public RenderingLayout renderOverlay(int x, int y, Position pos) { + if (((OverlayMessageTimeAccessor) ClientUtils.getClient().gui).getOverlayMessageTime() > 0) { + return new ColumnLayout(0, 0, 0); + } + Triplet player = this.roundPosition(pos.position.getPlayerPos(), pos.position.getBlockPos(), CoordinatesDisplay.getConfig().decimalPlaces); - Component xyz = definition("xyz", + Component xyz = definition(GlobalTexts.XYZ, value(player.getA()), value(player.getB()), value(player.getC()) ); - Component direction = definition("direction", resolveDirection(ModUtil.getDirectionFromYaw(pos.headRot.wrapYaw()))); + Component direction = definition(GlobalTexts.FACING, value(resolveDirection(ModUtil.getDirectionFromYaw(pos.headRot.wrapYaw())))); - String biomestring = pos.world.getBiome(true); - Component biome = GuiUtils.colorize( - Component.literal(biomestring), - CoordinatesDisplay.CONFIG.get().biomeColors ? - CoordinatesDisplay.BiomeColors.getBiomeColor(biomestring, CoordinatesDisplay.CONFIG.get().dataColor) : - CoordinatesDisplay.CONFIG.get().dataColor - ); + ResourceLocation bKey = pos.world.getBiomeKey(); + Biome b = pos.world.getBiome(); + Component biome = ModUtil.getBiomeComponent(bKey, b, config().biomeColors, config().dataColor); Component all = translation("all", xyz, direction, biome); - int i = GuiUtils.getTextSize(all); - Rect r; + ColumnLayout hud = new ColumnLayout(x, y, 0); + hud.addComponent(new CenteredParagraphComponent(0, all)); - if (ClientUtils.getClient().level != null && ClientUtils.getCurrentScreen() == null) { - int j = guiGraphics.guiWidth() / 2; - int k = guiGraphics.guiHeight() - 68 - 4; + return hud; + } - // make sure we don't render over any actionbar titles - if (((OverlayMessageTimeAccessor)ClientUtils.getClient().gui).getOverlayMessageTime() == 0) - drawInfo(guiGraphics, all, j - i / 2, k, GuiUtils.WHITE); + public static class HotbarPosition implements HudPositionModifier.BasicPositionModifier { + @Override + public Rect getPosition(Rect rect, Dimension ignored) { + int j = ClientUtils.getClient().getWindow().getGuiScaledWidth() / 2; + int k = ClientUtils.getClient().getWindow().getGuiScaledHeight() - 68 - 4; - r = new Rect<>(j - i / 2, k, i, 9); - } else { - drawInfo(guiGraphics, all, x, y, GuiUtils.WHITE); - r = new Rect<>(x, y, i, 9); - } + if (ClientUtils.getClient().level != null) { + Rect r = rect.clone(); + + r.setX(j - rect.getWidth() / 2); + r.setY(k); - return r; + return r; + } else { + return rect; + } + } } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/LineRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/LineRenderer.java index d868083..334d389 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/LineRenderer.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/LineRenderer.java @@ -1,20 +1,20 @@ package dev.boxadactle.coordinatesdisplay.hud.renderer; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.layouts.RenderingLayout; import dev.boxadactle.boxlib.layouts.component.LayoutContainerComponent; import dev.boxadactle.boxlib.layouts.component.TextComponent; import dev.boxadactle.boxlib.layouts.layout.PaddingLayout; import dev.boxadactle.boxlib.layouts.layout.RowLayout; -import dev.boxadactle.boxlib.math.geometry.Rect; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; import dev.boxadactle.coordinatesdisplay.ModUtil; import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; -import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.Triplet; import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -import oshi.util.tuples.Triplet; -@DisplayMode( +@HudDisplayMode( value = "line", hasChunkData = false, hasDirectionInt = false, @@ -25,15 +25,15 @@ public class LineRenderer implements HudRenderer { @Override - public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) { + public RenderingLayout renderOverlay(int x, int y, Position pos) { Triplet player = this.roundPosition(pos.position.getPlayerPos(), pos.position.getBlockPos(), CoordinatesDisplay.getConfig().decimalPlaces); RowLayout layout = new RowLayout(0, 0, config().textPadding); if (config().renderXYZ) { - Component xtext = definition("x", value(player.getA())); - Component ytext = definition("y", value(player.getB())); - Component ztext = definition("z", value(player.getC())); + Component xtext = definition(GlobalTexts.X, value(player.getA())); + Component ytext = definition(GlobalTexts.Y, value(player.getB())); + Component ztext = definition(GlobalTexts.Z, value(player.getC())); RowLayout xyz = new RowLayout(0, 0, 3); xyz.addComponent(new TextComponent(xtext)); @@ -44,22 +44,13 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi } if (config().renderDirection) { - Component direction = definition("direction", value(resolveDirection(ModUtil.getDirectionFromYaw(pos.headRot.wrapYaw())))); + Component direction = definition(GlobalTexts.FACING, value(resolveDirection(ModUtil.getDirectionFromYaw(pos.headRot.wrapYaw())))); layout.addComponent(new TextComponent(direction)); } int p = config().renderBackground ? config().padding : 0; - PaddingLayout hud = new PaddingLayout(x, y, p, layout); - return renderHud(guiGraphics, hud); - } - - private Component next(Component t1, Component t2) { - return t1.copy().append(t2); - } - - private Component addTrailingSpace(Component input) { - return input.copy().append(" "); + return new PaddingLayout(x, y, p, layout); } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/MaxRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/MaxRenderer.java index ce50e24..d5dc844 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/MaxRenderer.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/MaxRenderer.java @@ -1,32 +1,25 @@ package dev.boxadactle.coordinatesdisplay.hud.renderer; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.layouts.RenderingLayout; import dev.boxadactle.boxlib.layouts.component.ParagraphComponent; 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.Vec2; import dev.boxadactle.boxlib.math.geometry.Vec3; import dev.boxadactle.boxlib.math.mathutils.NumberFormatter; import dev.boxadactle.boxlib.util.ClientUtils; -import dev.boxadactle.boxlib.util.GuiUtils; -import dev.boxadactle.boxlib.util.RenderUtils; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; import dev.boxadactle.coordinatesdisplay.ModUtil; -import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -import org.apache.commons.compress.utils.Lists; -import oshi.util.tuples.Triplet; -import java.util.List; - -@DisplayMode("maximum") +@HudDisplayMode("maximum") public class MaxRenderer implements HudRenderer { @Override - public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) { + public RenderingLayout renderOverlay(int x, int y, Position pos) { NumberFormatter formatter = genFormatter(); ParagraphComponent component = new ParagraphComponent(config().textPadding); @@ -36,7 +29,7 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi Vec3 d = pos.position.getBlockPos(); Vec3 e = pos.position.getBlockPosInChunk(); - Component xyz = definition(translation("xyz", value(formatter.formatDecimal(b.getX())), value(formatter.formatDecimal(b.getY())), value(formatter.formatDecimal(b.getZ())))); + Component xyz = definition(GlobalTexts.XYZ, value(formatter.formatDecimal(b.getX())), value(formatter.formatDecimal(b.getY())), value(formatter.formatDecimal(b.getZ()))); Component block = definition(translation("block", value(Integer.toString(d.getX())), value(Integer.toString(d.getY())), value(Integer.toString(d.getZ())), value(Integer.toString(e.getX())), value(Integer.toString(e.getY())), value(Integer.toString(e.getZ())))); Component targeted = definition(translation("block.targeted", value(pos.block.getBlockX()), value(pos.block.getBlockY()), value(pos.block.getBlockZ()))); @@ -64,7 +57,7 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi } if (config().renderBiome) { - Component biome = definition(translation("biome", value(pos.world.getBiome(false)))); + Component biome = definition(translation("biome", value(pos.world.getBiomeKey().toString()))); component.add(biome); } @@ -85,14 +78,6 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi RowLayout r = new RowLayout(0, 0, 0); r.addComponent(component); - return renderHud(guiGraphics, new PaddingLayout(x, y, config().padding, r)); - } - - private int calculateWidth(List texts) { - return config().padding * 2 + GuiUtils.getLongestLength(texts.toArray(new Component[0])); - } - - private int calculateHeight(List texts) { - return config().padding * 2 + 11 * texts.size(); + return new PaddingLayout(x, y, config().padding, r); } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/MinRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/MinRenderer.java index cac059d..eef7c5c 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/MinRenderer.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/MinRenderer.java @@ -1,5 +1,7 @@ package dev.boxadactle.coordinatesdisplay.hud.renderer; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.layouts.RenderingLayout; import dev.boxadactle.boxlib.layouts.component.LayoutContainerComponent; import dev.boxadactle.boxlib.layouts.component.LeftParagraphComponent; import dev.boxadactle.boxlib.layouts.component.ParagraphComponent; @@ -7,20 +9,15 @@ 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.util.GuiUtils; -import dev.boxadactle.boxlib.util.RenderUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; import dev.boxadactle.coordinatesdisplay.ModUtil; -import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; +import dev.boxadactle.coordinatesdisplay.hud.Triplet; import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -import net.minecraft.world.level.levelgen.Column; -import oshi.util.tuples.Triplet; -@DisplayMode( +@HudDisplayMode( value = "minimum", hasXYZ = false, hasChunkData = false, @@ -54,7 +51,7 @@ private Component[] createDirectionComponents(double yaw) { } @Override - public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) { + public RenderingLayout renderOverlay(int x, int y, Position pos) { Triplet player = this.roundPosition(pos.position.getPlayerPos(), pos.position.getBlockPos(), CoordinatesDisplay.getConfig().decimalPlaces); RowLayout layout = new RowLayout(0, 0, config().textPadding); @@ -62,9 +59,9 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi ColumnLayout row = new ColumnLayout(0, 0, config().textPadding / 2); { // xyz - Component xtext = createLine("x", player.getA()); - Component ytext = createLine("y", player.getB()); - Component ztext = createLine("z", player.getC()); + Component xtext = definition(GlobalTexts.X, value(player.getA())); + Component ytext = definition(GlobalTexts.Y, value(player.getB())); + Component ztext = definition(GlobalTexts.Z, value(player.getC())); ParagraphComponent paragraph = new ParagraphComponent(1, xtext, ytext, ztext); row.addComponent(paragraph); @@ -72,16 +69,7 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi // biome if (config().renderBiome) { - String biomestring = pos.world.getBiome(true); - Component biome = definition( - "biome", - GuiUtils.colorize( - Component.literal(biomestring), - CoordinatesDisplay.CONFIG.get().biomeColors ? - CoordinatesDisplay.BiomeColors.getBiomeColor(biomestring, CoordinatesDisplay.CONFIG.get().dataColor) : - CoordinatesDisplay.CONFIG.get().dataColor - ) - ); + Component biome = ModUtil.getBiomeComponent(pos.world.getBiomeKey(), pos.world.getBiome(), config().biomeColors, config().definitionColor); row.addComponent(new TextComponent(biome)); } @@ -98,6 +86,6 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi layout.addComponent(new LeftParagraphComponent(1, xDirection, directionText, zDirection)); } - return renderHud(guiGraphics, new PaddingLayout(x, y, config().padding, layout)); + return new PaddingLayout(x, y, config().padding, layout); } -} \ No newline at end of file +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/NetherOverworldRenderer.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/NetherOverworldRenderer.java index 4be843c..00d7160 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/NetherOverworldRenderer.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/renderer/NetherOverworldRenderer.java @@ -1,27 +1,26 @@ package dev.boxadactle.coordinatesdisplay.hud.renderer; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.layouts.RenderingLayout; import dev.boxadactle.boxlib.layouts.component.LayoutContainerComponent; import dev.boxadactle.boxlib.layouts.component.ParagraphComponent; import dev.boxadactle.boxlib.layouts.component.TextComponent; 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.mathutils.NumberFormatter; import dev.boxadactle.boxlib.util.GuiUtils; -import dev.boxadactle.boxlib.util.RenderUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; +import dev.boxadactle.coordinatesdisplay.hud.Triplet; import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -import oshi.util.tuples.Triplet; import java.util.List; import java.util.Objects; -@DisplayMode( +@HudDisplayMode( value = "nether_overworld", hasXYZ = false, hasChunkData = false, @@ -34,7 +33,7 @@ public class NetherOverworldRenderer implements HudRenderer { @Override - public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) { + public RenderingLayout renderOverlay(int x, int y, Position pos) { try { ColumnLayout hud = new ColumnLayout(0, 0, config().textPadding); @@ -69,39 +68,28 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi hud.addComponent(new LayoutContainerComponent(coordsLayout)); hud.addComponent(dimensionComponent); - return renderHud(guiGraphics, new PaddingLayout(x, y, config().padding, hud)); + return new PaddingLayout(x, y, config().padding, hud); } catch (NullPointerException ignored) { Component error = GuiUtils.colorize(translation("error"), GuiUtils.RED); - Component dimensionText = definition(translation( - "dimension", + Component dimensionText = definition( + GlobalTexts.DIMENSION, value(pos.world.getDimension(true)) - )); + ); ColumnLayout hud = new ColumnLayout(0, 0, config().textPadding); hud.addComponent(new TextComponent(error)); hud.addComponent(new TextComponent(dimensionText)); - return renderHud(guiGraphics, new PaddingLayout(x, y, config().padding, hud)); + return new PaddingLayout(x, y, config().padding, hud); } } - private int calculateWidth(Component[][] coords, Component overworld, Component nether) { - int olength = Math.max(GuiUtils.getLongestLength(coords[0]), GuiUtils.getTextRenderer().width(overworld)); - int nlength = Math.max(GuiUtils.getLongestLength(coords[1]), GuiUtils.getTextRenderer().width(nether)); - - return config().padding * 2 + olength + nlength + config().textPadding; - } - - private int calculateHeight() { - return config().padding * 2 + GuiUtils.getTextRenderer().lineHeight * 3 + config().textPadding + 9 * 2 + config().padding; - } - private Component[] createXYZComponents(String x, String y, String z) { return new Component[] { - definition(translation("x", value(x))), - definition(translation("y", value(y))), - definition(translation("z", value(z))) + definition(GlobalTexts.X, value(x)), + definition(GlobalTexts.Y, value(y)), + definition(GlobalTexts.Z, value(z)) }; } 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 619c238..1df196b 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 @@ -1,19 +1,19 @@ package dev.boxadactle.coordinatesdisplay.hud.renderer; +import com.mojang.blaze3d.systems.RenderSystem; import dev.boxadactle.boxlib.layouts.LayoutComponent; +import dev.boxadactle.boxlib.layouts.RenderingLayout; 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.util.GuiUtils; -import dev.boxadactle.boxlib.util.RenderUtils; import dev.boxadactle.boxlib.util.WorldUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; +import dev.boxadactle.coordinatesdisplay.hud.Triplet; import dev.boxadactle.coordinatesdisplay.position.Position; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.BlockPos; @@ -21,10 +21,9 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.util.Tuple; -import oshi.util.tuples.Triplet; // this is a bit of a mess, but it still works -@DisplayMode( +@HudDisplayMode( value = "spawnpoint", hasChunkData = false, hasDirection = false, @@ -34,15 +33,10 @@ hasDimension = false ) public class SpawnpointRenderer implements HudRenderer { - - public static ResourceLocation SOUTH = new ResourceLocation("textures/item/compass_00.png"); - public static ResourceLocation WEST = new ResourceLocation("textures/item/compass_07.png"); - public static ResourceLocation NORTH = new ResourceLocation("textures/item/compass_16.png"); - public static ResourceLocation EAST = new ResourceLocation("textures/item/compass_25.png"); // unfortunately, I don't think you can access the player's // spawnpoint unless your mod is server-side - private BlockPos resolveWorldSpawn() { + public BlockPos resolveWorldSpawn() { try { return WorldUtils.getWorld().getSharedSpawnPos(); } catch (Exception e) { @@ -69,35 +63,9 @@ private Tuple, Vec3> createRelativePosition(Vec3 p return new Tuple<>(relativeVec, relativeBlock); } - - private int calculateWidth( - Component playerLabel, - Triplet player, - Component spawnpointLabel, - Triplet spawnpointXYZ - ) { - int p = CoordinatesDisplay.getConfig().padding; - int tp = CoordinatesDisplay.getConfig().textPadding; - - int pWidth = GuiUtils.getLongestLength(playerLabel, player.getA(), player.getB(), player.getC()); - int sWidth = GuiUtils.getLongestLength(spawnpointLabel, spawnpointXYZ.getA(), spawnpointXYZ.getB(), spawnpointXYZ.getC()); - - return (p * 2) + pWidth + tp + sWidth; - } - - private int calculateHeight() { - int p = CoordinatesDisplay.getConfig().padding; - int tp = CoordinatesDisplay.getConfig().textPadding; - - // we have 4 components (x, y, z, label) - int pHeight = GuiUtils.getTextHeight() * 4; - int rHeight = GuiUtils.getTextHeight() * 4; - - return (p * 2) + pHeight + tp + rHeight; - } @Override - public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Position pos) { + public RenderingLayout renderOverlay(int x, int y, Position pos) { BlockPos spawnpoint = resolveWorldSpawn(); ColumnLayout hud = new ColumnLayout(0, 0, config().textPadding); @@ -165,7 +133,7 @@ public Rect renderOverlay(GuiGraphics guiGraphics, int x, int y, Positi hud.addComponent(new LayoutContainerComponent(row1)); hud.addComponent(new LayoutContainerComponent(row2)); - return renderHud(guiGraphics, new PaddingLayout(x, y, config().padding, hud)); + return new PaddingLayout(x, y, config().padding, hud); } public static class CompassRenderer extends LayoutComponent { @@ -229,16 +197,11 @@ private ResourceLocation resolveCompassTexture(double d) { } @Override - public void render(GuiGraphics graphics, int x, int y) { + public void render(GuiGraphics guiGraphics, 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); - graphics.blit( - compassTexture, - x, y, - size, size, - size, size, - size, size - ); + + RenderSystem.enableBlend(); + guiGraphics.blit(resolveCompassTexture(degrees), x, y, 0, 0, size, size); } } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/AlwaysVisibility.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/AlwaysVisibility.java new file mode 100644 index 0000000..2d1d7d3 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/AlwaysVisibility.java @@ -0,0 +1,14 @@ +package dev.boxadactle.coordinatesdisplay.hud.visibility; + +import dev.boxadactle.coordinatesdisplay.hud.HudVisibility; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibilityFilter; + +@HudVisibility("always") +public class AlwaysVisibility implements HudVisibilityFilter { + + @Override + public boolean isVisible() { + return true; + } + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/HoldCompassVisibility.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/HoldCompassVisibility.java new file mode 100644 index 0000000..f86802b --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/HoldCompassVisibility.java @@ -0,0 +1,17 @@ +package dev.boxadactle.coordinatesdisplay.hud.visibility; + +import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibility; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibilityFilter; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +@HudVisibility("hold_compass") +public class HoldCompassVisibility implements HudVisibilityFilter { + @Override + public boolean isVisible() { + ItemStack p = WorldUtils.getPlayer().getInventory().getSelected(); + + return p.getItem() == Items.COMPASS; + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/HoldMapVisibility.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/HoldMapVisibility.java new file mode 100644 index 0000000..ba9539e --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/HoldMapVisibility.java @@ -0,0 +1,17 @@ +package dev.boxadactle.coordinatesdisplay.hud.visibility; + +import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibility; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibilityFilter; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +@HudVisibility("hold_map") +public class HoldMapVisibility implements HudVisibilityFilter { + @Override + public boolean isVisible() { + ItemStack p = WorldUtils.getPlayer().getInventory().getSelected(); + + return p.getItem() == Items.MAP || p.getItem() == Items.FILLED_MAP; + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/OwnCompassVisibility.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/OwnCompassVisibility.java new file mode 100644 index 0000000..edd0501 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/OwnCompassVisibility.java @@ -0,0 +1,18 @@ +package dev.boxadactle.coordinatesdisplay.hud.visibility; + +import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibility; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibilityFilter; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +@HudVisibility("own_compass") +public class OwnCompassVisibility implements HudVisibilityFilter { + @Override + public boolean isVisible() { + Inventory inventory = WorldUtils.getPlayer().getInventory(); + + return inventory.contains(new ItemStack(Items.COMPASS)); + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/OwnMapVisibility.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/OwnMapVisibility.java new file mode 100644 index 0000000..595ca10 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/hud/visibility/OwnMapVisibility.java @@ -0,0 +1,18 @@ +package dev.boxadactle.coordinatesdisplay.hud.visibility; + +import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibility; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibilityFilter; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +@HudVisibility("own_map") +public class OwnMapVisibility implements HudVisibilityFilter { + @Override + public boolean isVisible() { + Inventory inventory = WorldUtils.getPlayer().getInventory(); + + return inventory.contains(new ItemStack(Items.MAP)) || inventory.contains(new ItemStack(Items.FILLED_MAP)); + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/mixin/DeathScreenMixin.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/mixin/DeathScreenMixin.java index bb074c0..0f3b54a 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/mixin/DeathScreenMixin.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/mixin/DeathScreenMixin.java @@ -1,7 +1,9 @@ package dev.boxadactle.coordinatesdisplay.mixin; +import com.mojang.blaze3d.vertex.PoseStack; import dev.boxadactle.boxlib.util.ClientUtils; import dev.boxadactle.boxlib.util.GuiUtils; +import dev.boxadactle.boxlib.util.RenderUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; @@ -24,8 +26,8 @@ protected DeathScreenMixin(Component title) { @Inject(at = @At("RETURN"), method = "init") private void init(CallbackInfo ci) { if (CoordinatesDisplay.CONFIG.get().displayPosOnDeathScreen) { - this.addRenderableWidget(new Button.Builder(Component.translatable("button.coordinatesdisplay.copy"), (button) -> { - button.setMessage(Component.literal("button.coordinatesdisplay.copied")); + addRenderableWidget(new Button.Builder(Component.translatable("button.coordinatesdisplay.copy"), (button) -> { + button.setMessage(Component.translatable("button.coordinatesdisplay.copied")); button.active = false; int x = (int) Math.round(ClientUtils.getClient().player.getX()); @@ -46,8 +48,8 @@ private void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta String x = d.format(ClientUtils.getClient().player.getX()); String y = d.format(ClientUtils.getClient().player.getY()); String z = d.format(ClientUtils.getClient().player.getZ()); - Component pos = Component.translatable("message.coordinatesdisplay.location", x, y, z).withStyle(style -> style.withColor(CoordinatesDisplay.CONFIG.get().deathPosColor)); - guiGraphics.drawCenteredString(this.font, Component.translatable("message.coordinatesdisplay.deathpos", pos), this.width / 2, 115, GuiUtils.WHITE); + Component pos = GuiUtils.colorize(Component.translatable("message.coordinatesdisplay.location", x, y, z), CoordinatesDisplay.CONFIG.get().deathPosColor); + RenderUtils.drawTextCentered(guiGraphics, Component.translatable("message.coordinatesdisplay.deathpos", pos), this.width / 2, 115, GuiUtils.WHITE); } } } \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/mixin/LocalPlayerMixin.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/mixin/LocalPlayerMixin.java index 9fb749e..a7e5cb7 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/mixin/LocalPlayerMixin.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/mixin/LocalPlayerMixin.java @@ -22,8 +22,4 @@ private void respawn(CallbackInfo ci) { } } - @Inject(at = @At("RETURN"), method = "tick") - private void tick(CallbackInfo ci) { - CoordinatesDisplay.tick(); - } } \ No newline at end of file diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/position/PlayerWorldData.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/position/PlayerWorldData.java index e0ab384..92ae2f2 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/position/PlayerWorldData.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/position/PlayerWorldData.java @@ -1,36 +1,58 @@ package dev.boxadactle.coordinatesdisplay.position; -import dev.boxadactle.boxlib.util.ClientUtils; import dev.boxadactle.boxlib.util.WorldUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.ModUtil; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; public class PlayerWorldData { - String dimension; + ResourceLocation dimension; - String biomeRegistryEntry; + Holder biome; public PlayerWorldData(BlockPos player) { if (WorldUtils.getWorld() != null) { - dimension = WorldUtils.getCurrentDimension(); + dimension = WorldUtils.getPlayer().level().dimension().location(); - biomeRegistryEntry = ModUtil.printBiome(WorldUtils.getWorld().getBiome(player)); + biome = WorldUtils.getWorld().getBiome(player); } else { CoordinatesDisplay.LOGGER.warn("Client world is null! Resorting to default values."); - dimension = "minecraft:overworld"; - biomeRegistryEntry = "minecraft:plains"; + dimension = new ResourceLocation("minecraft", "overworld"); } } + private String formatName(String orig) { + StringBuilder name = new StringBuilder(); + + for (String word : orig.split("_")) { + name.append(word.substring(0, 1).toUpperCase()).append(word.substring(1)).append(" "); + } + + return name.toString().trim(); + } + public String getDimension(boolean formatted) { - return formatted ? ClientUtils.parseIdentifier(dimension) : dimension; + return formatted ? formatName(dimension.getPath()) : dimension.toString(); } - public String getBiome(boolean formatted) { - return formatted ? ClientUtils.parseIdentifier(biomeRegistryEntry) : biomeRegistryEntry; + public Biome getBiome() { + if (biome != null) { + return biome.value(); + } else { + return null; + } } + public ResourceLocation getBiomeKey() { + ResourceLocation def = new ResourceLocation("minecraft", "plains"); + if (biome == null) { + return def; + } + return biome.unwrap().map(ResourceKey::location, (biome) -> def); + } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/position/Position.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/position/Position.java index 2454b34..e03a4be 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/position/Position.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/position/Position.java @@ -15,9 +15,10 @@ public class Position { public static Position of(Player player) { Vec3 a = new Vec3<>(player.getX(), player.getY(), player.getZ()); + BlockPos b = new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()); return new Position( - a, player.chunkPosition(), player.blockPosition(), + a, new ChunkPos(b), b, player.getYHeadRot(), player.getXRot(), new PlayerTargetBlock(player) ); diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/DisplayMode.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/DisplayMode.java new file mode 100644 index 0000000..df06706 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/DisplayMode.java @@ -0,0 +1,93 @@ +package dev.boxadactle.coordinatesdisplay.registry; + +import dev.boxadactle.boxlib.core.BoxLib; +import dev.boxadactle.boxlib.util.GuiUtils; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; +import dev.boxadactle.coordinatesdisplay.hud.HudRenderer; +import dev.boxadactle.coordinatesdisplay.hud.renderer.*; +import net.minecraft.network.chat.Component; + +public enum DisplayMode { + DEFAULT(DefaultRenderer.class), + MINIMUM(MinRenderer.class), + MAXIMUM(MaxRenderer.class), + LINE(LineRenderer.class), + NETHER_OVERWORLD(NetherOverworldRenderer.class), + HOTBAR(HotbarRenderer.class), + SPAWNPOINT(SpawnpointRenderer.class), + DIRECTION(DirectionRenderer.class), + CHUNK(ChunkRenderer.class); + + final HudRenderer renderer; + final HudDisplayMode metadata; + + DisplayMode(Class renderer) { + this.renderer = BoxLib.initializeClass(renderer); + + HudDisplayMode m = renderer.getAnnotation(HudDisplayMode.class); + if (m != null) { + metadata = m; + } else { + throw new IllegalStateException("Attempting to register Hud renderer without DisplayMode annotation!"); + } + } + + public dev.boxadactle.coordinatesdisplay.hud.HudRenderer getRenderer() { + return renderer; + } + + public HudDisplayMode getMetadata() { + return metadata; + } + + public Component getComponent() { + return Component.translatable(renderer.getNameKey()); + } + + public String getName() { + return GuiUtils.getTranslatable(renderer.getTranslationKey()); + } + + public String getId() { + return metadata.value(); + } + + public static DisplayMode previousMode(DisplayMode mode) { + DisplayMode[] values = mode.getClass().getEnumConstants(); + int currentIndex = 0; + + for (DisplayMode value : values) { + if (value == mode) { + break; + } + currentIndex++; + } + + if (currentIndex <= 0) { + return values[values.length - 1]; + } else { + return values[currentIndex - 1]; + } + } + + public static DisplayMode nextMode(DisplayMode mode) { + DisplayMode[] values = mode.getClass().getEnumConstants(); + int currentIndex = 0; + + for (DisplayMode value : values) { + if (value == mode) { + break; + } + currentIndex++; + } + + currentIndex++; + + if (currentIndex < values.length) { + return values[currentIndex]; + } else { + return values[0]; + } + } + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/StartCorner.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/StartCorner.java new file mode 100644 index 0000000..2fcc6ed --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/StartCorner.java @@ -0,0 +1,26 @@ +package dev.boxadactle.coordinatesdisplay.registry; + +import dev.boxadactle.boxlib.core.BoxLib; +import dev.boxadactle.coordinatesdisplay.hud.HudPositionModifier; +import dev.boxadactle.coordinatesdisplay.hud.modifier.*; + +public enum StartCorner { + TOP_LEFT(TopLeftModifier.class), + TOP_RIGHT(TopRightModifier.class), + BOTTOM_LEFT(BottomLeftModifier.class), + BOTTOM_RIGHT(BottomRightModifier.class), + TOP(TopModifier.class), + LEFT(LeftModifier.class), + RIGHT(RightModifier.class), + BOTTOM(BottomModifier.class); + + final HudPositionModifier modifier; + + StartCorner(Class modifier) { + this.modifier = BoxLib.initializeClass(modifier); + } + + public HudPositionModifier getModifier() { + return modifier; + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/TeleportMode.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/TeleportMode.java new file mode 100644 index 0000000..e4f8c4b --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/TeleportMode.java @@ -0,0 +1,24 @@ +package dev.boxadactle.coordinatesdisplay.registry; + +import dev.boxadactle.coordinatesdisplay.ModUtil; +import dev.boxadactle.coordinatesdisplay.position.Position; + +import java.util.function.Function; + +public enum TeleportMode { + + EXECUTE(ModUtil::toExecuteCommand), + TP(ModUtil::toTeleportCommand), + BARITONE(ModUtil::toBaritoneCommand); + + final Function converter; + + TeleportMode(Function converter) { + this.converter = converter; + } + + public String toCommand(Position pos) { + return converter.apply(pos); + } + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/VisibilityFilter.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/VisibilityFilter.java new file mode 100644 index 0000000..e5dd375 --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/registry/VisibilityFilter.java @@ -0,0 +1,51 @@ +package dev.boxadactle.coordinatesdisplay.registry; + +import dev.boxadactle.boxlib.core.BoxLib; +import dev.boxadactle.boxlib.util.GuiUtils; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibility; +import dev.boxadactle.coordinatesdisplay.hud.HudVisibilityFilter; +import dev.boxadactle.coordinatesdisplay.hud.visibility.*; +import net.minecraft.network.chat.Component; + +public enum VisibilityFilter { + ALWAYS(AlwaysVisibility.class), + HOLD_COMPASS(HoldCompassVisibility.class), + OWN_COMPASS(OwnCompassVisibility.class), + HOLD_MAP(HoldMapVisibility.class), + OWN_MAP(OwnMapVisibility.class); + + HudVisibilityFilter filter; + HudVisibility metadata; + + VisibilityFilter(Class filter) { + this.filter = BoxLib.initializeClass(filter); + + HudVisibility m = filter.getAnnotation(HudVisibility.class); + if (m != null) { + metadata = m; + } else { + throw new IllegalStateException("Attempting to register Hud visibility filter without Hud.VisibilityFilter annotation!"); + } + } + + public HudVisibilityFilter getFilter() { + return filter; + } + + public HudVisibility getMetadata() { + return metadata; + } + + public Component getComponent() { + return Component.translatable(filter.getNameKey()); + } + + public String getName() { + return GuiUtils.getTranslatable(filter.getTranslationKey()); + } + + public String getId() { + return metadata.value(); + } + +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/ConfigScreen.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/ConfigScreen.java similarity index 74% rename from common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/ConfigScreen.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/ConfigScreen.java index 7a2b198..3a6ece8 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/ConfigScreen.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/ConfigScreen.java @@ -1,12 +1,15 @@ -package dev.boxadactle.coordinatesdisplay.config.screen; +package dev.boxadactle.coordinatesdisplay.screen; -import dev.boxadactle.boxlib.gui.BOptionButton; -import dev.boxadactle.boxlib.gui.BOptionScreen; -import dev.boxadactle.boxlib.gui.widget.BSpacingEntry; -import dev.boxadactle.boxlib.gui.widget.button.*; +import dev.boxadactle.boxlib.gui.config.BOptionButton; +import dev.boxadactle.boxlib.gui.config.BOptionScreen; +import dev.boxadactle.boxlib.gui.config.widget.BSpacingEntry; +import dev.boxadactle.boxlib.gui.config.widget.button.*; +import dev.boxadactle.boxlib.prompt.Prompts; import dev.boxadactle.boxlib.util.ClientUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; import dev.boxadactle.coordinatesdisplay.ModUtil; +import dev.boxadactle.coordinatesdisplay.ModConfig; +import dev.boxadactle.coordinatesdisplay.screen.config.*; import net.minecraft.client.gui.screens.ConfirmScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; @@ -16,7 +19,19 @@ public class ConfigScreen extends BOptionScreen { public ConfigScreen(Screen parent) { super(parent); - CoordinatesDisplay.CONFIG.cacheConfig(); + try { + ModConfig.checkValidity(CoordinatesDisplay.CONFIG.get()); + + CoordinatesDisplay.CONFIG.cacheConfig(); + } catch (NullPointerException e) { + Prompts.alert(this, Component.translatable("message.coordinatesdisplay.configError")); + + CoordinatesDisplay.CONFIG.resetConfig(); + CoordinatesDisplay.CONFIG.save(); + CoordinatesDisplay.CONFIG.cacheConfig(); + + CoordinatesDisplay.LOGGER.printStackTrace(e); + } } @Override @@ -26,7 +41,7 @@ protected Component getName() { @Override protected void initFooter(int startX, int startY) { - this.addRenderableWidget(createHalfCancelButton(startX, startY, b -> { + addRenderableWidget(createHalfCancelButton(startX, startY, b -> { ClientUtils.setScreen(parent); CoordinatesDisplay.CONFIG.restoreCache(); })); @@ -40,6 +55,13 @@ protected void initFooter(int startX, int startY) { @Override protected void initConfigButtons() { + // enabled + this.addConfigLine(new BBooleanButton( + "button.coordinatesdisplay.enabled", + CoordinatesDisplay.getConfig().enabled, + (val) -> CoordinatesDisplay.getConfig().enabled = val + )); + // visual settings this.addConfigLine(new BConfigScreenButton( Component.translatable("button.coordinatesdisplay.visualconfig"), diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesScreen.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/CoordinatesScreen.java similarity index 73% rename from common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesScreen.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/CoordinatesScreen.java index 5aed550..badd713 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/CoordinatesScreen.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/CoordinatesScreen.java @@ -1,11 +1,9 @@ -package dev.boxadactle.coordinatesdisplay; +package dev.boxadactle.coordinatesdisplay.screen; +import com.mojang.blaze3d.vertex.PoseStack; import dev.boxadactle.boxlib.math.geometry.Vec3; -import dev.boxadactle.boxlib.util.GuiUtils; +import dev.boxadactle.boxlib.util.*; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.boxlib.util.ClientUtils; -import dev.boxadactle.boxlib.util.MouseUtils; -import dev.boxadactle.boxlib.util.WorldUtils; import dev.boxadactle.coordinatesdisplay.ModUtil; import dev.boxadactle.coordinatesdisplay.position.Position; import net.minecraft.client.gui.GuiGraphics; @@ -23,14 +21,15 @@ public class CoordinatesScreen extends Screen { int p = 5; public CoordinatesScreen(Position pos) { - super(Component.literal("Coordinates GUI")); + super(Component.literal("Coordinates Screen")); this.pos = pos; } @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { - this.renderBackground(guiGraphics, mouseX, mouseY, delta); + this.renderBackground(guiGraphics); + super.render(guiGraphics, mouseX, mouseY, delta); Vec3 player = pos.position.getPlayerPos(); @@ -38,10 +37,8 @@ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) int z = (int)Math.round(player.getZ()); int y = (int)Math.round(player.getY()); - guiGraphics.drawCenteredString(this.font, Component.translatable("message.coordinatesdisplay.at"), this.width / 2, (this.height / 4) - 20, GuiUtils.WHITE); - guiGraphics.drawCenteredString(this.font, Component.translatable("message.coordinatesdisplay.location", x, y, z), this.width / 2, (this.height / 4), GuiUtils.WHITE); - - super.render(guiGraphics, mouseX, mouseY, delta); + RenderUtils.drawTextCentered(guiGraphics, Component.translatable("message.coordinatesdisplay.at"), this.width / 2, (this.height / 4) - 20, GuiUtils.WHITE); + RenderUtils.drawTextCentered(guiGraphics, Component.translatable("message.coordinatesdisplay.location", x, y, z), this.width / 2, (this.height / 4), GuiUtils.WHITE); } @Override @@ -50,18 +47,18 @@ public void init() { int bstart = this.height / 2 - 20; - this.addRenderableWidget(new Button.Builder(Component.translatable("button.coordinatesdisplay.copy"), button -> { + addRenderableWidget(new Button.Builder(Component.translatable("button.coordinatesdisplay.copy"), button -> { ClientUtils.getClient().keyboardHandler.setClipboard(ModUtil.parseText(CoordinatesDisplay.CONFIG.get().copyPosMessage, this.pos)); CoordinatesDisplay.LOGGER.player.info("Copied coordinates to clipboard"); onClose(); }).bounds(this.width / 2 - buttonw / 2, bstart, buttonw, buttonh).build()); - this.addRenderableWidget(new Button.Builder(Component.translatable("button.coordinatesdisplay.send"), button -> { + addRenderableWidget(new Button.Builder(Component.translatable("button.coordinatesdisplay.send"), button -> { CoordinatesDisplay.LOGGER.player.publicChat(ModUtil.parseText(CoordinatesDisplay.CONFIG.get().posChatMessage, this.pos)); onClose(); }).bounds(this.width / 2 - buttonw / 2, bstart + (buttonh + p), buttonw, buttonh).build()); - this.addRenderableWidget(new Button.Builder(Component.translatable("button.coordinatesdisplay.copytp"), button -> { + addRenderableWidget(new Button.Builder(Component.translatable("button.coordinatesdisplay.copytp"), button -> { ClientUtils.getClient().keyboardHandler.setClipboard(CoordinatesDisplay.getConfig().teleportMode.toCommand(Position.of(WorldUtils.getPlayer()))); CoordinatesDisplay.LOGGER.player.info("Copied as TP command"); onClose(); diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/HudHelper.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/HudHelper.java similarity index 73% rename from common/src/main/java/dev/boxadactle/coordinatesdisplay/config/HudHelper.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/HudHelper.java index 1f44948..136dc02 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/HudHelper.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/HudHelper.java @@ -1,9 +1,11 @@ -package dev.boxadactle.coordinatesdisplay.config; +package dev.boxadactle.coordinatesdisplay.screen; -import dev.boxadactle.boxlib.gui.widget.BCustomRenderingEntry; +import dev.boxadactle.boxlib.gui.config.widget.BCustomEntry; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.ModConfig; import dev.boxadactle.coordinatesdisplay.position.Position; import dev.boxadactle.coordinatesdisplay.ModUtil; +import dev.boxadactle.coordinatesdisplay.registry.StartCorner; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; @@ -28,16 +30,15 @@ default ModConfig config() { return CoordinatesDisplay.getConfig(); } - default BCustomRenderingEntry createHudRenderEntry(Position pos) { - return new BCustomRenderingEntry((drawContext, x, y, width, height, mouseX, mouseY, tickDelta) -> { + default BCustomEntry createHudRenderEntry(Position pos) { + return new BCustomEntry((guiGraphics, x, y, width, height, mouseX, mouseY, tickDelta) -> { CoordinatesDisplay.HUD.render( - drawContext, + guiGraphics, pos, (x + width / 2) - CoordinatesDisplay.HUD.getWidth() / 2, y + 3, CoordinatesDisplay.getConfig().renderMode, - ModConfig.StartCorner.TOP_LEFT, - false + StartCorner.TOP_LEFT ); }); } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/ColorScreen.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/ColorScreen.java similarity index 61% rename from common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/ColorScreen.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/ColorScreen.java index faf19e6..3f418cc 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/ColorScreen.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/ColorScreen.java @@ -1,11 +1,11 @@ -package dev.boxadactle.coordinatesdisplay.config.screen; +package dev.boxadactle.coordinatesdisplay.screen.config; -import dev.boxadactle.boxlib.gui.BOptionScreen; -import dev.boxadactle.boxlib.gui.widget.BSpacingEntry; -import dev.boxadactle.boxlib.gui.widget.field.*; -import dev.boxadactle.boxlib.gui.widget.label.*; +import dev.boxadactle.boxlib.gui.config.BOptionScreen; +import dev.boxadactle.boxlib.gui.config.widget.BSpacingEntry; +import dev.boxadactle.boxlib.gui.config.widget.field.*; +import dev.boxadactle.boxlib.gui.config.widget.label.*; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.HudHelper; +import dev.boxadactle.coordinatesdisplay.screen.HudHelper; import dev.boxadactle.coordinatesdisplay.ModUtil; import dev.boxadactle.coordinatesdisplay.position.Position; import net.minecraft.client.gui.screens.Screen; @@ -37,27 +37,24 @@ protected void initFooter(int startX, int startY) { protected void initConfigButtons() { // definition color - this.addConfigLine(new BCenteredLabel(Component.translatable("label.coordinatesdisplay.definitionColor"))); - - this.addConfigLine(new BHexField( - CoordinatesDisplay.getConfig().definitionColor, - newVal -> CoordinatesDisplay.getConfig().definitionColor = newVal + addConfigLine(new BCenteredLabel(Component.translatable("label.coordinatesdisplay.definitionColor"))); + addConfigLine(new BHexField( + config().definitionColor, + newVal -> config().definitionColor = newVal )); // data color - this.addConfigLine(new BCenteredLabel(Component.translatable("label.coordinatesdisplay.dataColor"))); - - this.addConfigLine(new BHexField( - CoordinatesDisplay.getConfig().dataColor, - newVal -> CoordinatesDisplay.getConfig().dataColor = newVal + addConfigLine(new BCenteredLabel(Component.translatable("label.coordinatesdisplay.dataColor"))); + addConfigLine(new BHexField( + config().dataColor, + newVal -> config().dataColor = newVal )); // deathpos color - this.addConfigLine(new BCenteredLabel(Component.translatable("label.coordinatesdisplay.deathposColor"))); - - this.addConfigLine(new BHexField( - CoordinatesDisplay.getConfig().deathPosColor, - newVal -> CoordinatesDisplay.getConfig().deathPosColor = newVal + addConfigLine(new BCenteredLabel(Component.translatable("label.coordinatesdisplay.deathposColor"))); + addConfigLine(new BHexField( + config().deathPosColor, + newVal -> config().deathPosColor = newVal )); // background color diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/DeathPosScreen.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/DeathPosScreen.java similarity index 80% rename from common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/DeathPosScreen.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/DeathPosScreen.java index 525e5a3..5433557 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/DeathPosScreen.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/DeathPosScreen.java @@ -1,11 +1,11 @@ -package dev.boxadactle.coordinatesdisplay.config.screen; +package dev.boxadactle.coordinatesdisplay.screen.config; -import dev.boxadactle.boxlib.gui.BOptionScreen; -import dev.boxadactle.boxlib.gui.widget.button.*; -import dev.boxadactle.boxlib.gui.widget.BSpacingEntry; -import dev.boxadactle.boxlib.gui.widget.label.BCenteredLabel; +import dev.boxadactle.boxlib.gui.config.BOptionScreen; +import dev.boxadactle.boxlib.gui.config.widget.button.*; +import dev.boxadactle.boxlib.gui.config.widget.BSpacingEntry; +import dev.boxadactle.boxlib.gui.config.widget.label.BCenteredLabel; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.HudHelper; +import dev.boxadactle.coordinatesdisplay.screen.HudHelper; import dev.boxadactle.coordinatesdisplay.ModUtil; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/PositionScreen.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/PositionScreen.java new file mode 100644 index 0000000..11fcefa --- /dev/null +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/PositionScreen.java @@ -0,0 +1,212 @@ +package dev.boxadactle.coordinatesdisplay.screen.config; + +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.gui.config.BOptionScreen; +import dev.boxadactle.boxlib.math.geometry.Dimension; +import dev.boxadactle.boxlib.math.geometry.Rect; +import dev.boxadactle.boxlib.math.geometry.Vec2; +import dev.boxadactle.boxlib.math.mathutils.Clamps; +import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.registry.StartCorner; +import dev.boxadactle.coordinatesdisplay.screen.HudHelper; +import dev.boxadactle.coordinatesdisplay.position.Position; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; + +public class PositionScreen extends BOptionScreen implements HudHelper { + + int x; + int y; + float scale; + + int hudOffsetX; + int hudOffsetY; + + boolean clickDelta = false; + boolean scaleDelta = false; + boolean moveDelta = false; + + Position pos; + + boolean isDragging = false; + + public PositionScreen(Screen parent) { + super(parent); + + pos = WorldUtils.getWorld() != null + ? Position.of(WorldUtils.getPlayer()) + : generatePositionData(); + + CoordinatesDisplay.shouldHudRender = false; + } + + @Override + protected void init() { + super.init(); + + Rect hud = CoordinatesDisplay.HUD.preRender(pos, config().hudX, config().hudY, config().renderMode, config().startCorner).calculateRect(); + + x = hud.getX(); + y = hud.getY(); + scale = CoordinatesDisplay.CONFIG.get().hudScale; + } + + @Override + public void render(GuiGraphics guiGraphics, int i, int j, float f) { + renderBackground(guiGraphics); + super.render(guiGraphics, i, j, f); + + if (moveHud(i, j)) { + Rect rect = Clamps.clampRect( + x, y, + CoordinatesDisplay.HUD.getWidth(), + CoordinatesDisplay.HUD.getHeight(), + 0, 0, + Math.round(width / scale), + Math.round(height / scale) + ); + + x = rect.getX(); + y = rect.getY(); + } + + CoordinatesDisplay.HUD.render( + guiGraphics, + pos, + x, + y, + config().renderMode, + StartCorner.TOP_LEFT, + scale + ); + + if (CoordinatesDisplay.HUD.isHovered(i, j)) { + PoseStack stack = guiGraphics.pose(); + + stack.pushPose(); + stack.scale(scale, scale, scale); + + CoordinatesDisplay.HUD.renderMoveOverlay(guiGraphics, x, y); + + stack.popPose(); + } + } + + public boolean moveHud(int mouseX, int mouseY) { + if (isDragging) { + if (!clickDelta) { + // it is our first time clicking the mouse + clickDelta = true; + + // so we need to see whether or not we're scaling or moving the hud + // and retrieve the hud offsets + if (CoordinatesDisplay.HUD.isScaleButtonHovered(mouseX, mouseY)) { + scaleDelta = true; + + // we retrieve the position of the hud unscaled + hudOffsetX = Math.round(x * scale); + hudOffsetY = Math.round(y * scale); + } else { + moveDelta = true; + + // we retrieve the distance between the mouse and the hud position + Dimension offset = getDistance(new Vec2<>(Math.round(mouseX / scale), Math.round(mouseY / scale)), new Vec2<>(x, y)); + hudOffsetX = offset.getWidth(); + hudOffsetY = offset.getHeight(); + } + } + + if (scaleDelta) { + scale = CoordinatesDisplay.HUD.calculateScale(hudOffsetX, hudOffsetY, mouseX, mouseY); + + x = Math.round(hudOffsetX / scale); + y = Math.round(hudOffsetY / scale); + } else { + x = Math.round(mouseX / scale) - hudOffsetX; + y = Math.round(mouseY / scale) - hudOffsetY; + } + + return true; + } else { + if (clickDelta) { + clickDelta = false; + scaleDelta = false; + moveDelta = false; + } + } + + return false; + } + + @Override + protected boolean shouldRenderScrollingWidget() { + return false; + } + + @Override + public boolean mouseClicked(double d, double e, int i) { + isDragging = true; + return super.mouseClicked(d, e, i); + } + + @Override + public boolean mouseReleased(double d, double e, int i) { + isDragging = false; + return super.mouseReleased(d, e, i); + } + + @Override + public void onClose() { + super.onClose(); + + Vec2 translated = config().startCorner.getModifier().getRelativePos( + new Rect<>( + x, y, + CoordinatesDisplay.HUD.getWidth(), + CoordinatesDisplay.HUD.getHeight() + ), + new Dimension<>( + Math.round(width / scale), + Math.round(height / scale) + ) + ); + + config().hudX = translated.getX(); + config().hudY = translated.getY(); + config().hudScale = scale; + + if (WorldUtils.getWorld() != null) { + CoordinatesDisplay.CONFIG.save(); + } + + CoordinatesDisplay.shouldHudRender = true; + } + + @Override + protected Component getName() { + return Component.translatable("screen.coordinatesdispaly.hudposition"); + } + + @Override + protected void initFooter(int startX, int startY) { + addRenderableWidget(createSaveButton(startX, startY, b -> this.onClose())); + } + + @Override + protected void initConfigButtons() { + } + + @Override + public boolean shouldCloseOnEsc() { + return false; + } + + private Dimension getDistance(Vec2 vec1, Vec2 vec2) { + int distanceX = vec1.getX() - vec2.getX(); + int distanceY = vec1.getY() - vec2.getY(); + + return new Dimension<>(distanceX, distanceY); + } +} diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/RenderScreen.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/RenderScreen.java similarity index 85% rename from common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/RenderScreen.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/RenderScreen.java index eca713f..72b2034 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/RenderScreen.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/RenderScreen.java @@ -1,14 +1,15 @@ -package dev.boxadactle.coordinatesdisplay.config.screen; +package dev.boxadactle.coordinatesdisplay.screen.config; -import dev.boxadactle.boxlib.gui.BOptionScreen; -import dev.boxadactle.boxlib.gui.widget.BSpacingEntry; -import dev.boxadactle.boxlib.gui.widget.button.BBooleanButton; -import dev.boxadactle.boxlib.gui.widget.label.BCenteredLabel; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.gui.config.BOptionScreen; +import dev.boxadactle.boxlib.gui.config.widget.BSpacingEntry; +import dev.boxadactle.boxlib.gui.config.widget.button.BBooleanButton; +import dev.boxadactle.boxlib.gui.config.widget.label.BCenteredLabel; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.HudHelper; -import dev.boxadactle.coordinatesdisplay.hud.CoordinatesHuds; -import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.screen.HudHelper; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; import dev.boxadactle.coordinatesdisplay.position.Position; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; @@ -39,7 +40,7 @@ protected void initFooter(int startX, int startY) { @Override protected void initConfigButtons() { - DisplayMode metadata = CoordinatesHuds.getRenderer(config().renderMode).getMetadata(); + HudDisplayMode metadata = config().renderMode.getMetadata(); // background this.addConfigLine(new HudOption( @@ -129,7 +130,7 @@ public HudOption(String key, Boolean value, Consumer function, boolean this.active = configEnabled; if (!configEnabled) { - this.setTooltip(Tooltip.create(Component.translatable("message.coordintatesdisplay.disabled"))); + setTooltip(Tooltip.create(Component.translatable("message.coordintatesdisplay.disabled"))); } } } diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/TextScreen.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/TextScreen.java similarity index 64% rename from common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/TextScreen.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/TextScreen.java index 60469e0..483ae72 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/TextScreen.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/TextScreen.java @@ -1,14 +1,14 @@ -package dev.boxadactle.coordinatesdisplay.config.screen; +package dev.boxadactle.coordinatesdisplay.screen.config; -import dev.boxadactle.boxlib.gui.BOptionScreen; -import dev.boxadactle.boxlib.gui.widget.button.BBooleanButton; -import dev.boxadactle.boxlib.gui.widget.button.BEnumButton; -import dev.boxadactle.boxlib.gui.widget.field.BStringField; -import dev.boxadactle.boxlib.gui.widget.label.BLabel; +import dev.boxadactle.boxlib.gui.config.BOptionScreen; +import dev.boxadactle.boxlib.gui.config.widget.button.BBooleanButton; +import dev.boxadactle.boxlib.gui.config.widget.button.BEnumButton; +import dev.boxadactle.boxlib.gui.config.widget.field.BStringField; +import dev.boxadactle.boxlib.gui.config.widget.label.BCenteredLabel; import dev.boxadactle.boxlib.util.GuiUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.HudHelper; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; +import dev.boxadactle.coordinatesdisplay.screen.HudHelper; +import dev.boxadactle.coordinatesdisplay.registry.TeleportMode; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; @@ -34,14 +34,14 @@ protected void initFooter(int startX, int startY) { protected void initConfigButtons() { // coordinates chat message - this.addConfigLine(new BLabel(Component.translatable("label.coordinatesdisplay.posChatMessage"))); + this.addConfigLine(new BCenteredLabel(Component.translatable("label.coordinatesdisplay.posChatMessage"))); this.addConfigLine(new BStringField( config().posChatMessage, newVal -> config().posChatMessage = newVal )); // copy pos message - this.addConfigLine(new BLabel(Component.translatable("label.coordinatesdisplay.copyPosMessage"))); + this.addConfigLine(new BCenteredLabel(Component.translatable("label.coordinatesdisplay.copyPosMessage"))); this.addConfigLine(new BStringField( config().copyPosMessage, newVal -> config().copyPosMessage = newVal @@ -50,15 +50,15 @@ protected void initConfigButtons() { // round when copying this.addConfigLine(new BBooleanButton( "button.coordinatesdisplay.roundwhencopying", - config().shouldRoundWhenCopying, - newVal -> config().shouldRoundWhenCopying = newVal + config().includeDecimalsWhenCopying, + newVal -> config().includeDecimalsWhenCopying = newVal )); // teleport mode this.addConfigLine(new BEnumButton<>( "button.coordinatesdisplay.tpmode", config().teleportMode, - ModConfig.TeleportMode.class, + TeleportMode.class, newVal -> config().teleportMode = newVal, GuiUtils.AQUA )); diff --git a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/VisualScreen.java b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/VisualScreen.java similarity index 61% rename from common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/VisualScreen.java rename to common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/VisualScreen.java index 0c37e31..024c3ea 100644 --- a/common/src/main/java/dev/boxadactle/coordinatesdisplay/config/screen/VisualScreen.java +++ b/common/src/main/java/dev/boxadactle/coordinatesdisplay/screen/config/VisualScreen.java @@ -1,16 +1,18 @@ -package dev.boxadactle.coordinatesdisplay.config.screen; - -import dev.boxadactle.boxlib.gui.BOptionScreen; -import dev.boxadactle.boxlib.gui.widget.BSpacingEntry; -import dev.boxadactle.boxlib.gui.widget.button.*; -import dev.boxadactle.boxlib.gui.widget.label.*; -import dev.boxadactle.boxlib.gui.widget.slider.BIntegerSlider; +package dev.boxadactle.coordinatesdisplay.screen.config; + +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.gui.config.BOptionScreen; +import dev.boxadactle.boxlib.gui.config.widget.BSpacingEntry; +import dev.boxadactle.boxlib.gui.config.widget.button.*; +import dev.boxadactle.boxlib.gui.config.widget.label.*; +import dev.boxadactle.boxlib.gui.config.widget.slider.BIntegerSlider; import dev.boxadactle.boxlib.util.GuiUtils; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.HudHelper; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import dev.boxadactle.coordinatesdisplay.hud.CoordinatesHuds; -import dev.boxadactle.coordinatesdisplay.hud.DisplayMode; +import dev.boxadactle.coordinatesdisplay.screen.HudHelper; +import dev.boxadactle.coordinatesdisplay.hud.HudDisplayMode; +import dev.boxadactle.coordinatesdisplay.registry.DisplayMode; +import dev.boxadactle.coordinatesdisplay.registry.StartCorner; +import dev.boxadactle.coordinatesdisplay.registry.VisibilityFilter; import dev.boxadactle.coordinatesdisplay.position.Position; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Tooltip; @@ -23,7 +25,7 @@ public class VisualScreen extends BOptionScreen implements HudHelper { Position pos; - BEnumButton startCornerButton; + AbstractWidget startCornerButton; AbstractWidget changeHudPosButton; public VisualScreen(Screen parent) { @@ -47,13 +49,41 @@ protected void initFooter(int startX, int startY) { @Override protected void initConfigButtons() { - // visible - this.addConfigLine(new BBooleanButton( - "button.coordinatesdisplay.visible", - config().visible, - newVal -> config().visible = newVal + // visibility filters + Consumer var2 = newVal -> config().visibilityFilter = newVal; + try { + addConfigLine(new VisibilitySelector(config().visibilityFilter, var2)); + } catch (RuntimeException ignored) { + CoordinatesDisplay.LOGGER.warn("Unknown visibility filter selected in config! Reverting to default."); + config().visibilityFilter = VisibilityFilter.ALWAYS; + + addConfigLine(new VisibilitySelector(config().visibilityFilter, var2)); + } + + startCornerButton = addConfigLine(new BEnumButton<>( + "button.coordinatesdisplay.startcorner", + config().startCorner, + StartCorner.class, + newVal -> config().startCorner = newVal, + GuiUtils.AQUA )); + // display mode + Consumer var4 = newVal -> { + config().renderMode = newVal; + verifyButtons(); + }; + try { + addConfigLine(new DisplayModeSelector(config().renderMode, var4)); + } catch (RuntimeException e) { + CoordinatesDisplay.LOGGER.warn("Unknown hud renderer selected in config! Reverting to default."); + config().renderMode = DisplayMode.DEFAULT; + + addConfigLine(new DisplayModeSelector(config().renderMode, var4)); + } + + addConfigLine(new BSpacingEntry()); + // decimal places this.addConfigLine(new DecimalPlacesSlider( "button.coordinatesdisplay.decimalPlaces", @@ -62,25 +92,6 @@ protected void initConfigButtons() { newVal -> config().decimalPlaces = newVal )); - startCornerButton = new BEnumButton<>( - "button.coordinatesdisplay.startcorner", - config().startCorner, - ModConfig.StartCorner.class, - newVal -> config().startCorner = newVal, - GuiUtils.AQUA - ); - - // display mode - this.addConfigLine( - new DisplayModeSelector( - newVal -> { - config().renderMode = newVal; - verifyButtons(); - } - ), - startCornerButton - ); - // text shadow this.addConfigLine(new BBooleanButton( "button.coordinatesdisplay.textshadow", @@ -105,10 +116,10 @@ protected void initConfigButtons() { ); // hud position screen - changeHudPosButton = (AbstractWidget) addConfigLine(new BConfigScreenButton( + changeHudPosButton = addConfigLine(new BConfigScreenButton( Component.translatable("button.coordinatesdisplay.editHudPos"), this, - HudPositionScreen::new + PositionScreen::new )); this.addConfigLine( @@ -146,7 +157,7 @@ protected void initConfigButtons() { } private void verifyButtons() { - DisplayMode metadata = CoordinatesHuds.getRenderer(config().renderMode).getMetadata(); + HudDisplayMode metadata = config().renderMode.getMetadata(); if (!metadata.ignoreTranslations()) { startCornerButton.active = true; @@ -156,7 +167,7 @@ private void verifyButtons() { startCornerButton.setTooltip(Tooltip.create(Component.translatable("message.coordintatesdisplay.disabled"))); } - if (CoordinatesHuds.getRenderer(config().renderMode).getMetadata().allowMove()) { + if (config().renderMode.getMetadata().allowMove()) { changeHudPosButton.active = true; changeHudPosButton.setTooltip(null); } else { @@ -179,24 +190,38 @@ protected String roundNumber(Integer input) { } } - public static class DisplayModeSelector extends BToggleButton { - public DisplayModeSelector(Consumer function) { + public static class VisibilitySelector extends BEnumButton { + public VisibilitySelector(VisibilityFilter value, Consumer function) { super( - "button.coordinatesdisplay.displayMode", - CoordinatesDisplay.getConfig().renderMode.toLowerCase(), - CoordinatesHuds.registeredOverlays.keySet().stream().toList(), - function + "button.coordinatesdisplay.visibility", + value, + VisibilityFilter.class, + function, + GuiUtils.AQUA ); } @Override - public String to(Component input) { - return list.get(index); + public Component from(VisibilityFilter input) { + return GuiUtils.colorize(input.getComponent(), valColor); + } + } + + public static class DisplayModeSelector extends BEnumButton { + public DisplayModeSelector(DisplayMode value, Consumer function) { + super( + "button.coordinatesdisplay.displayMode", + value, + DisplayMode.class, + function, + GuiUtils.AQUA + ); } @Override - public Component from(String input) { - return GuiUtils.colorize(CoordinatesHuds.getRenderer(list.get(index)).getComponent(), GuiUtils.AQUA); + public Component from(DisplayMode input) { + return GuiUtils.colorize(input.getComponent(), valColor); } } + } diff --git a/common/src/main/resources/assets/coordinatesdisplay/icon.png b/common/src/main/resources/assets/coordinatesdisplay/icon.png deleted file mode 100644 index 662000f..0000000 Binary files a/common/src/main/resources/assets/coordinatesdisplay/icon.png and /dev/null differ 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 cba0043..c073c09 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/en_us.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/en_us.json @@ -1,5 +1,5 @@ { - "key.coordinatesdisplay.visible": "Toggle Hud", + "key.coordinatesdisplay.hudenabled": "Toggle HUD", "key.coordinatesdisplay.coordinatesgui": "Open Coordinates GUI", "key.coordinatesdisplay.copypos": "Copy Current Position to Clipboard", "key.coordinatesdisplay.sendpos": "Send Current Position in Chat", @@ -26,26 +26,25 @@ "hud.coordinatesdisplay.west.short": "W", "hud.coordinatesdisplay.northwest.short": "NW", + "hud.coordinatesdisplay.x": "X: %s", + "hud.coordinatesdisplay.y": "Y: %s", + "hud.coordinatesdisplay.z": "Z: %s", + "hud.coordinatesdisplay.xyz": "XYZ: %s %s %s", + "hud.coordinatesdisplay.chunk_x": "Chunk X: %s", + "hud.coordinatesdisplay.chunk_y": "Chunk Y: %s", + "hud.coordinatesdisplay.chunk_z": "Chunk Z: %s", + "hud.corodinatesdisplay.facing": "Facing %s", + "hud.coordinatesdisplay.biome": "Biome: %s", + "hud.coordinatesdisplay.dimension": "Dimension: %s", + + "hud.coordinatesdisplay.biome.unknown": "Unknown", + "hud.coordinatesdisplay.default": "Default", - "hud.coordinatesdisplay.default.x": "X: %s", - "hud.coordinatesdisplay.default.y": "Y: %s", - "hud.coordinatesdisplay.default.z": "Z: %s", - "hud.coordinatesdisplay.default.chunk.x": "Chunk X: %s", - "hud.coordinatesdisplay.default.chunk.z": "Chunk Z: %s", - "hud.coordinatesdisplay.default.direction": "%s %s", - "hud.coordinatesdisplay.default.biome": "Biome: %s", - "hud.coordinatesdisplay.default.dimension": "Dimension: %s", "hud.coordinatesdisplay.default.version": "Minecraft %s", "hud.coordinatesdisplay.minimum": "Minimum", - "hud.coordinatesdisplay.minimum.x": "X: %s", - "hud.coordinatesdisplay.minimum.y": "Y: %s", - "hud.coordinatesdisplay.minimum.z": "Z: %s", - "hud.coordinatesdisplay.minimum.direction": "%s", - "hud.coordinatesdisplay.minimum.biome": "%s", "hud.coordinatesdisplay.maximum": "Maximum", - "hud.coordinatesdisplay.maximum.xyz": "XYZ: %s %s %s ", "hud.coordinatesdisplay.maximum.block": "Block XYZ: %s %s %s [%s %s %s]", "hud.coordinatesdisplay.maximum.block.targeted": "Targeted Block: %s %s %s", "hud.coordinatesdisplay.maximum.chunk": "Chunk: %s %s %s", @@ -56,43 +55,43 @@ "hud.coordinatesdisplay.maximum.dimension": "Dimension: %s (from %s)", "hud.coordinatesdisplay.line": "Line", - "hud.coordinatesdisplay.line.x": "X: %s", - "hud.coordinatesdisplay.line.y": "Y: %s", - "hud.coordinatesdisplay.line.z": "Z: %s", - "hud.coordinatesdisplay.line.direction": "Facing %s", "hud.coordinatesdisplay.nether_overworld": "Nether/Overworld", "hud.coordinatesdisplay.nether_overworld.overworld": "Overworld", "hud.coordinatesdisplay.nether_overworld.nether": "Nether", - "hud.coordinatesdisplay.nether_overworld.x": "X: %s", - "hud.coordinatesdisplay.nether_overworld.y": "Y: %s", - "hud.coordinatesdisplay.nether_overworld.z": "Z: %s", "hud.coordinatesdisplay.nether_overworld.error": "Not in overworld or nether", - "hud.coordinatesdisplay.nether_overworld.dimension": "Dimension: %s", "hud.coordinatesdisplay.hotbar": "Hotbar", "hud.coordinatesdisplay.hotbar.all": "%s / %s / %s", - "hud.coordinatesdisplay.hotbar.xyz": "XYZ: %s %s %s", - "hud.coordinatesdisplay.hotbar.direction": "Facing %s", "hud.coordinatesdisplay.spawnpoint": "World Spawn (Compass)", "hud.coordinatesdisplay.spawnpoint.player": "Player", "hud.coordinatesdisplay.spawnpoint.worldSpawn": "World Spawn", "hud.coordinatesdisplay.spawnpoint.relative": "Relative", - "hud.coordinatesdisplay.spawnpoint.x": "X: %s", - "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", + "hud.coordinatesdisplay.chunk": "Chunk", + "hud.coordinatesdisplay.chunk.position": "Position", + "hud.coordinatesdisplay.chunk.region": "Region", + "hud.coordinatesdisplay.chunk.chunks": "Chunks[C]", + "hud.coordinatesdisplay.chunk.chunks.cached": "Cached: %s", + "hud.coordinatesdisplay.chunk.chunks.memory": "Memory: %s", + "hud.coordinatesdisplay.chunk.c": "C", + "hud.coordinatesdisplay.chunk.c.rendered": "Rendered: %s", + "hud.coordinatesdisplay.chunk.c.loaded": "Loaded: %s", + + "hud.coordinatesdisplay.filter.always": "Always", + "hud.coordinatesdisplay.filter.hold_compass": "Holding a Compass", + "hud.coordinatesdisplay.filter.own_compass": "Have a Compass", + "hud.coordinatesdisplay.filter.hold_map": "Holding a Map", + "hud.coordinatesdisplay.filter.own_map": "Have a Map", + "screen.coordinatesdisplay.config": "Config for %s", "screen.coordinatesdisplay.confirmreset": "Confirm Reset to Default", "screen.coordinatesdisplay.render": "Rendering Config for %s", @@ -102,13 +101,15 @@ "screen.coordinatesdisplay.position": "Change Position of HUD", "screen.coordinatesdisplay.text": "Text Config for %s", "screen.coordinatesdispaly.hudposition": "Modifying HUD Position", + "screen.coordinatesdisplay.startcorner": "Changing Start Corner", + "button.coordinatesdisplay.enabled": "Enabled: %s", "button.coordinatesdisplay.visualconfig": "Visual Settings...", "button.coordinatesdisplay.renderconfig": "Rendering...", "button.coordinatesdisplay.colorconfig": "Colors...", "button.coordinatesdisplay.deathpos": "Death Position...", "button.coordinatesdisplay.text": "Text Settings...", - "button.coordinatesdisplay.visible": "Visible: %s", + "button.coordinatesdisplay.visibility": "Visibility: %s", "button.coordinatesdisplay.decimalPlaces": "Decimal Places: %s", "button.coordinatesdisplay.decimalPlaces.block_pos": "block pos", "button.coordinatesdisplay.displayMode": "Display Mode: %s", @@ -120,6 +121,10 @@ "button.coordinatesdisplay.startcorner.top_right": "Top Right", "button.coordinatesdisplay.startcorner.bottom_left": "Bottom Left", "button.coordinatesdisplay.startcorner.bottom_right": "Bottom Right", + "button.coordinatesdisplay.startcorner.top": "Top", + "button.coordinatesdisplay.startcorner.bottom": "Bottom", + "button.coordinatesdisplay.startcorner.left": "Left", + "button.coordinatesdisplay.startcorner.right": "Right", "button.coordinatesdisplay.editHudPos": "Edit Position of HUD...", "button.coordinatesdisplay.padding": "Padding: %s", "button.coordinatesdisplay.textpadding": "Text Padding: %s", @@ -133,7 +138,7 @@ "button.coordinatesdisplay.dimension": "Dimension: %s", "button.coordinatesdisplay.displayondeathscreen": "Display on Death Screen: %s", "button.coordinatesdisplay.sendinchat": "Send in Chat: %s", - "button.coordinatesdisplay.roundwhencopying": "Round when copying: %s", + "button.coordinatesdisplay.roundwhencopying": "Include decimals when copying: %s", "button.coordinatesdisplay.tpmode": "Teleport Mode: %s", "button.coordinatesdisplay.tpmode.execute": "/execute", "button.coordinatesdisplay.tpmode.tp": "/tp", @@ -163,6 +168,7 @@ "message.coordinatesdisplay.deathpos": "You died at %s", "message.coordinatesdisplay.teleport": "Teleport to death position", "message.coordintatesdisplay.disabled": "This option is disabled for this display mode.", + "message.coordinatesdisplay.configError": "There was an error loading your config file! Check console for stacktrace.", "button.coordinatesdisplay.copy": "Copy to Clipboard", "button.coordinatesdisplay.copied": "Copied!", @@ -171,7 +177,6 @@ "command.coordinatesdisplay.emptyArgs": "Error: please enter a valid sub-command", "command.coordinatesdisplay.internalError": "An internal error has occurred.", - "command.coordinatesdisplay.togglemessage": "Toggled Hud!", "command.coordinatesdisplay.position.copy": "Copied the location to the clipboard!", "command.coordinatesdisplay.position.copytp": "Copied position as /tp command", "command.coordinatesdisplay.config.reload": "Reloaded config!", @@ -185,5 +190,5 @@ "command.coordinatesdisplay.mode": "Mode: Select the display mode you want to be rendered on the screen.", "command.coordinatesdisplay.movehud": "Movehud: Open the gui where you can move the HUD.", "command.coordinatesdisplay.position": "Position: Do things with your position, such as sending in chat, and copying to the clipboard.", - "command.coordinatesdisplay.toggle": "Toggle: Toggle on/off the HUD." + "command.coordinatesdisplay.visibility": "Visibility: Toggle the visibility of the coordinates display." } \ No newline at end of file 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 b47121d..183bf4b 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/es_es.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/es_es.json @@ -1,5 +1,5 @@ { - "key.coordinatesdisplay.visible": "Conmutar el HUD", + "key.coordinatesdisplay.hudenabled": "Toggle HUD", "key.coordinatesdisplay.coordinatesgui": "Abrir GUI de coordenadas", "key.coordinatesdisplay.copypos": "Copiar la posición actual al portapapel", "key.coordinatesdisplay.sendpos": "Enviar la posición actual en chat", @@ -26,26 +26,25 @@ "hud.coordinatesdisplay.west.short": "W", "hud.coordinatesdisplay.northwest.short": "NW", + "hud.coordinatesdisplay.biome.unknown": "Desconocido", + + "hud.coordinatesdisplay.x": "X: %s", + "hud.coordinatesdisplay.y": "Y: %s", + "hud.coordinatesdisplay.z": "Z: %s", + "hud.coordinatesdisplay.xyz": "XYZ: %s %s %s", + "hud.coordinatesdisplay.chunk_x": "Pieza X: %s", + "hud.coordinatesdisplay.chunk_y": "Pieza Y: %s", + "hud.coordinatesdisplay.chunk_z": "Pieza Z: %s", + "hud.corodinatesdisplay.facing": "Mirando al %s", + "hud.coordinatesdisplay.biome": "Bioma: %s", + "hud.coordinatesdisplay.dimension": "Dimensión: %s", + "hud.coordinatesdisplay.default": "Por defecto", - "hud.coordinatesdisplay.default.x": "X: %s", - "hud.coordinatesdisplay.default.y": "Y: %s", - "hud.coordinatesdisplay.default.z": "Z: %s", - "hud.coordinatesdisplay.default.chunk.x": "Pieza X: %s", - "hud.coordinatesdisplay.default.chunk.z": "Pieza Z: %s", - "hud.coordinatesdisplay.default.direction": "%s %s", - "hud.coordinatesdisplay.default.biome": "Bioma: %s", - "hud.coordinatesdisplay.default.dimension": "Dimensión: %s", "hud.coordinatesdisplay.default.version": "Minecraft %s", "hud.coordinatesdisplay.minimum": "Mínimo", - "hud.coordinatesdisplay.minimum.x": "X: %s", - "hud.coordinatesdisplay.minimum.y": "Y: %s", - "hud.coordinatesdisplay.minimum.z": "Z: %s", - "hud.coordinatesdisplay.minimum.direction": "%s", - "hud.coordinatesdisplay.minimum.biome": "%s", "hud.coordinatesdisplay.maximum": "Máximo", - "hud.coordinatesdisplay.maximum.xyz": "XYZ: %s %s %s ", "hud.coordinatesdisplay.maximum.block": "XYZ del bloque: %s %s %s [%s %s %s]", "hud.coordinatesdisplay.maximum.block.targeted": "Bloque objectivo: %s %s %s", "hud.coordinatesdisplay.maximum.chunk": "Pieza: %s %s %s", @@ -56,43 +55,43 @@ "hud.coordinatesdisplay.maximum.dimension": "Dimensión: %s (de %s)", "hud.coordinatesdisplay.line": "Línea", - "hud.coordinatesdisplay.line.x": "X: %s", - "hud.coordinatesdisplay.line.y": "Y: %s", - "hud.coordinatesdisplay.line.z": "Z: %s", - "hud.coordinatesdisplay.line.direction": "Mirando al %s", "hud.coordinatesdisplay.nether_overworld": "Nether/Overworld", "hud.coordinatesdisplay.nether_overworld.overworld": "Overworld", "hud.coordinatesdisplay.nether_overworld.nether": "Nether", - "hud.coordinatesdisplay.nether_overworld.x": "X: %s", - "hud.coordinatesdisplay.nether_overworld.y": "Y: %s", - "hud.coordinatesdisplay.nether_overworld.z": "Z: %s", "hud.coordinatesdisplay.nether_overworld.error": "No estás en el Overworld o Nether", - "hud.coordinatesdisplay.nether_overworld.dimension": "Dimensión: %s", "hud.coordinatesdisplay.hotbar": "Barra de acceso rápido", "hud.coordinatesdisplay.hotbar.all": "%s / %s / %s", - "hud.coordinatesdisplay.hotbar.xyz": "XYZ: %s %s %s", - "hud.coordinatesdisplay.hotbar.direction": "Mirando al %s", - "hud.coordinatesdisplay.spawnpoint": "World Spawn (Compass)", - "hud.coordinatesdisplay.spawnpoint.player": "Player", - "hud.coordinatesdisplay.spawnpoint.worldSpawn": "World Spawn", - "hud.coordinatesdisplay.spawnpoint.relative": "Relative", - "hud.coordinatesdisplay.spawnpoint.x": "X: %s", - "hud.coordinatesdisplay.spawnpoint.y": "Y: %s", - "hud.coordinatesdisplay.spawnpoint.z": "Z: %s", + "hud.coordinatesdisplay.spawnpoint": "Punto de generación del mundo (brújula)", + "hud.coordinatesdisplay.spawnpoint.player": "Jugador", + "hud.coordinatesdisplay.spawnpoint.worldSpawn": "Punto de generación del mundo", + "hud.coordinatesdisplay.spawnpoint.relative": "Relativo", "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", + "hud.coordinatesdisplay.chunk": "Pieza", + "hud.coordinatesdisplay.chunk.position": "Posición", + "hud.coordinatesdisplay.chunk.region": "Región", + "hud.coordinatesdisplay.chunk.chunks": "Piezas[C]", + "hud.coordinatesdisplay.chunk.chunks.cached": "En caché: %s", + "hud.coordinatesdisplay.chunk.chunks.memory": "En memoria: %s", + "hud.coordinatesdisplay.chunk.c": "C", + "hud.coordinatesdisplay.chunk.c.rendered": "Renderizado: %s", + "hud.coordinatesdisplay.chunk.c.loaded": "Cargado: %s", + + "hud.coordinatesdisplay.filter.always": "Siempre", + "hud.coordinatesdisplay.filter.hold_compass": "Sostener una brújula", + "hud.coordinatesdisplay.filter.own_compass": "Tener una brújula", + "hud.coordinatesdisplay.filter.hold_map": "Sostener un mapa", + "hud.coordinatesdisplay.filter.own_map": "Tener un mapa", + "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", @@ -102,13 +101,15 @@ "screen.coordinatesdisplay.position": "Cambiar la posición del Hud", "screen.coordinatesdisplay.text": "Configuración de texto de %s", "screen.coordinatesdispaly.hudposition": "Cambiando la posición del Hud", + "screen.coordinatesdisplay.startcorner": "Cambiado la esquina inicial", + "button.coordinatesdisplay.enabled": "Activado: %s", "button.coordinatesdisplay.visualconfig": "Ajustes de visuales...", "button.coordinatesdisplay.renderconfig": "Renderizado...", "button.coordinatesdisplay.colorconfig": "Colores...", "button.coordinatesdisplay.deathpos": "Posición de muerte...", "button.coordinatesdisplay.text": "Ajustes de texto...", - "button.coordinatesdisplay.visible": "Activado: %s", + "button.coordinatesdisplay.visibility": "Visibilidad: %s", "button.coordinatesdisplay.decimalPlaces": "Cantidad de decimales: %s", "button.coordinatesdisplay.decimalPlaces.block_pos": "posición de bloque", "button.coordinatesdisplay.displayMode": "Modo: %s", @@ -120,6 +121,10 @@ "button.coordinatesdisplay.startcorner.top_right": "Arriba a la derecha", "button.coordinatesdisplay.startcorner.bottom_left": "Abajo a la izquierda", "button.coordinatesdisplay.startcorner.bottom_right": "Abajo a la derecha", + "button.coordinatesdisplay.startcorner.top": "Arriba", + "button.coordinatesdisplay.startcorner.bottom": "Abajo", + "button.coordinatesdisplay.startcorner.left": "Izquierda", + "button.coordinatesdisplay.startcorner.right": "Derecha", "button.coordinatesdisplay.editHudPos": "Editar la posición del Hud...", "button.coordinatesdisplay.padding": "Espaciado: %s", "button.coordinatesdisplay.textpadding": "Espaciado del texto: %s", @@ -133,7 +138,7 @@ "button.coordinatesdisplay.dimension": "Dimensión: %s", "button.coordinatesdisplay.displayondeathscreen": "Mostrar en el menú de la muerte: %s", "button.coordinatesdisplay.sendinchat": "Enviar en chat: %s", - "button.coordinatesdisplay.roundwhencopying": "Redondear los decimales cuando copiando: %s", + "button.coordinatesdisplay.roundwhencopying": "Incluir los decimales cuando copiando: %s", "button.coordinatesdisplay.tpmode": "Modo de teletransporte: %s", "button.coordinatesdisplay.tpmode.execute": "/execute", "button.coordinatesdisplay.tpmode.tp": "/tp", @@ -163,6 +168,7 @@ "message.coordinatesdisplay.deathpos": "Has muerto en %s", "message.coordinatesdisplay.teleport": "Ir a la posición de muerte", "message.coordintatesdisplay.disabled": "Este opcion está desactivado en este modo.", + "message.coordinatesdisplay.configError": "¡Hubo una problema al cargar tu archivo de configuración! Revisar la consola para el stacktrace.", "button.coordinatesdisplay.copy": "Copiar a portapapel", "button.coordinatesdisplay.copied": "¡Se copié la posición!", @@ -171,7 +177,6 @@ "command.coordinatesdisplay.emptyArgs": "Error: por favor envia un subcomando válido", "command.coordinatesdisplay.internalError": "Un error interno se ha ocurrido", - "command.coordinatesdisplay.togglemessage": "¡El hud se ha conmutado!", "command.coordinatesdisplay.position.copy": "La posición se ha copiado al portapapel.", "command.coordinatesdisplay.position.copytp": "La posición se ha copiado como un comando de /tp", "command.coordinatesdisplay.config.reload": "¡Refrescó la configuración!", @@ -185,5 +190,5 @@ "command.coordinatesdisplay.mode": "Mode: Seleccionar el modo de visualizaciòn que quieres renderizar en la pantalla.", "command.coordinatesdisplay.movehud": "Movehud: Abrir el menù donde se puede mover el superposiciòn.", "command.coordinatesdisplay.position": "Position: Hacer cosas con su posiciòn, como enviar en el chat, y copiando al portapapeles.", - "command.coordinatesdisplay.toggle": "Toggle: Conmutar activado/desactivado el superposiciòn." + "command.coordinatesdisplay.visibility": "Visibility: Conmutar la visibilidad del hud." } \ No newline at end of file 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 754c5d2..320e03d 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/ja_jp.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/ja_jp.json @@ -1,5 +1,5 @@ { - "key.coordinatesdisplay.visible": "HUDの切り替え", + "key.coordinatesdisplay.hudenabled": "Toggle HUD", "key.coordinatesdisplay.coordinatesgui": "座標GUIを開く", "key.coordinatesdisplay.copypos": "現在の位置をクリップボードにコピー", "key.coordinatesdisplay.sendpos": "現在の位置をチャットで送信", @@ -26,26 +26,25 @@ "hud.coordinatesdisplay.west.short": "西", "hud.coordinatesdisplay.northwest.short": "北西", + "hud.coordinatesdisplay.biome.unknown": "不明", + + "hud.coordinatesdisplay.x": "X: %s", + "hud.coordinatesdisplay.y": "Y: %s", + "hud.coordinatesdisplay.z": "Z: %s", + "hud.coordinatesdisplay.xyz": "XYZ: %s %s %s", + "hud.coordinatesdisplay.chunk_x": "チャンク X座標: %s", + "hud.coordinatesdisplay.chunk_y": "チャンク Y座標: %s", + "hud.coordinatesdisplay.chunk_z": "チャンク Z座標: %s", + "hud.corodinatesdisplay.facing": "向いている方向%s", + "hud.coordinatesdisplay.biome": "バイオーム: %s", + "hud.coordinatesdisplay.dimension": "ディメンション: %s", + "hud.coordinatesdisplay.default": "デフォルト", - "hud.coordinatesdisplay.default.x": "X座標: %s", - "hud.coordinatesdisplay.default.y": "Y座標: %s", - "hud.coordinatesdisplay.default.z": "Z座標: %s", - "hud.coordinatesdisplay.default.chunk.x": "チャンク X座標: %s", - "hud.coordinatesdisplay.default.chunk.z": "チャンク Z座標: %s", - "hud.coordinatesdisplay.default.direction": "%s %s", - "hud.coordinatesdisplay.default.biome": "バイオーム: %s", - "hud.coordinatesdisplay.default.dimension": "ディメンション: %s", "hud.coordinatesdisplay.default.version": "Minecraft %s", "hud.coordinatesdisplay.minimum": "最小", - "hud.coordinatesdisplay.minimum.x": "X座標: %s", - "hud.coordinatesdisplay.minimum.y": "Y座標: %s", - "hud.coordinatesdisplay.minimum.z": "Z座標: %s", - "hud.coordinatesdisplay.minimum.direction": "%s", - "hud.coordinatesdisplay.minimum.biome": "%s", "hud.coordinatesdisplay.maximum": "最大", - "hud.coordinatesdisplay.maximum.xyz": "XYZ座標: %s %s %s", "hud.coordinatesdisplay.maximum.block": "ブロックXYZ座標: %s %s %s [%s %s %s]", "hud.coordinatesdisplay.maximum.block.targeted": "ターゲットされたブロック: %s %s %s", "hud.coordinatesdisplay.maximum.chunk": "チャンク: %s %s %s", @@ -56,43 +55,43 @@ "hud.coordinatesdisplay.maximum.dimension": "ディメンション: %s (登録者: %s)", "hud.coordinatesdisplay.line": "ライン", - "hud.coordinatesdisplay.line.x": "X座標: %s", - "hud.coordinatesdisplay.line.y": "Y座標: %s", - "hud.coordinatesdisplay.line.z": "Z座標: %s", - "hud.coordinatesdisplay.line.direction": "向いている方向 %s", "hud.coordinatesdisplay.nether_overworld": "ネザー/オーバーワールド", "hud.coordinatesdisplay.nether_overworld.overworld": "オーバーワールド", "hud.coordinatesdisplay.nether_overworld.nether": "ネザー", - "hud.coordinatesdisplay.nether_overworld.x": "X座標: %s", - "hud.coordinatesdisplay.nether_overworld.y": "Y座標: %s", - "hud.coordinatesdisplay.nether_overworld.z": "Z座標: %s", "hud.coordinatesdisplay.nether_overworld.error": "オーバーワールドまたはネザーにいません", - "hud.coordinatesdisplay.nether_overworld.dimension": "ディメンション: %s", "hud.coordinatesdisplay.hotbar": "ホットバー", "hud.coordinatesdisplay.hotbar.all": "%s / %s / %s", - "hud.coordinatesdisplay.hotbar.xyz": "XYZ座標: %s %s %s", - "hud.coordinatesdisplay.hotbar.direction": "向いている方向 %s", "hud.coordinatesdisplay.spawnpoint": "World Spawn (Compass)", "hud.coordinatesdisplay.spawnpoint.player": "Player", "hud.coordinatesdisplay.spawnpoint.worldSpawn": "World Spawn", "hud.coordinatesdisplay.spawnpoint.relative": "Relative", - "hud.coordinatesdisplay.spawnpoint.x": "X: %s", - "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", + "hud.coordinatesdisplay.chunk": "Chunk", + "hud.coordinatesdisplay.chunk.position": "Position", + "hud.coordinatesdisplay.chunk.region": "Region", + "hud.coordinatesdisplay.chunk.chunks": "Chunks[C]", + "hud.coordinatesdisplay.chunk.chunks.cached": "Cached: %s", + "hud.coordinatesdisplay.chunk.chunks.memory": "Memory: %s", + "hud.coordinatesdisplay.chunk.c": "C", + "hud.coordinatesdisplay.chunk.c.rendered": "Rendered: %s", + "hud.coordinatesdisplay.chunk.c.loaded": "Loaded: %s", + + "hud.coordinatesdisplay.filter.always": "Always", + "hud.coordinatesdisplay.filter.hold_compass": "Holding a Compass", + "hud.coordinatesdisplay.filter.own_compass": "Have a Compass", + "hud.coordinatesdisplay.filter.hold_map": "Holding a Map", + "hud.coordinatesdisplay.filter.own_map": "Have a Map", + "screen.coordinatesdisplay.config": "%sの設定", "screen.coordinatesdisplay.confirmreset": "デフォルトにリセットを確認", "screen.coordinatesdisplay.render": "%sの描画設定", @@ -102,13 +101,15 @@ "screen.coordinatesdisplay.position": "HUDの位置を変更", "screen.coordinatesdisplay.text": "%sのテキスト設定", "screen.coordinatesdispaly.hudposition": "HUDの位置を変更", + "screen.coordinatesdisplay.startcorner": "Changing Start Corner", + "button.coordinatesdisplay.enabled": "活性化: %s", "button.coordinatesdisplay.visualconfig": "視覚設定...", "button.coordinatesdisplay.renderconfig": "描画設定...", "button.coordinatesdisplay.colorconfig": "色設定...", "button.coordinatesdisplay.deathpos": "死亡位置設定...", "button.coordinatesdisplay.text": "テキスト設定...", - "button.coordinatesdisplay.visible": "表示: %s", + "button.coordinatesdisplay.visibility": "Visibility: %s", "button.coordinatesdisplay.decimalPlaces": "小数点以下桁数: %s", "button.coordinatesdisplay.decimalPlaces.block_pos": "ブロック位置", "button.coordinatesdisplay.displayMode": "表示モード: %s", @@ -120,6 +121,10 @@ "button.coordinatesdisplay.startcorner.top_right": "右上", "button.coordinatesdisplay.startcorner.bottom_left": "左下", "button.coordinatesdisplay.startcorner.bottom_right": "右下", + "button.coordinatesdisplay.startcorner.top": "Top", + "button.coordinatesdisplay.startcorner.bottom": "Bottom", + "button.coordinatesdisplay.startcorner.left": "Left", + "button.coordinatesdisplay.startcorner.right": "Right", "button.coordinatesdisplay.editHudPos": "HUDの位置を編集...", "button.coordinatesdisplay.padding": "余白: %s", "button.coordinatesdisplay.textpadding": "テキストの余白: %s", @@ -163,6 +168,7 @@ "message.coordinatesdisplay.deathpos": "死亡地点: %s", "message.coordinatesdisplay.teleport": "死亡位置にテレポート", "message.coordintatesdisplay.disabled": "このオプションはこの表示モードでは無効です。", + "message.coordinatesdisplay.configError": "There was an error loading your config file! Check console for stacktrace.", "button.coordinatesdisplay.copy": "クリップボードにコピー", "button.coordinatesdisplay.copied": "コピーしました!", @@ -171,7 +177,6 @@ "command.coordinatesdisplay.emptyArgs": "エラー: 有効なサブコマンドを入力してください", "command.coordinatesdisplay.internalError": "内部エラーが発生しました。", - "command.coordinatesdisplay.togglemessage": "HUDの切り替えが完了しました!", "command.coordinatesdisplay.position.copy": "位置をクリップボードにコピーしました!", "command.coordinatesdisplay.position.copytp": "/tpコマンドとして位置をコピーしました", "command.coordinatesdisplay.config.reload": "設定をリロードしました!", @@ -185,5 +190,5 @@ "command.coordinatesdisplay.mode": "Mode: 画面に表示される表示モードを選択します。", "command.coordinatesdisplay.movehud": "Movehud: HUDを移動できるGUIを開きます。", "command.coordinatesdisplay.position": "Position: 位置に関する操作を行います。例: チャットに送信、クリップボードにコピー。", - "command.coordinatesdisplay.toggle": "Toggle: HUDの表示を切り替えます。" + "command.coordinatesdisplay.visibility": "Visibility: Toggle the visibility of the coordinates display." } \ No newline at end of file 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 c2ee581..eab2ca9 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/ko_kr.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/ko_kr.json @@ -1,5 +1,5 @@ { - "key.coordinatesdisplay.visible": "HUD 토글", + "key.coordinatesdisplay.hudenabled": "Toggle HUD", "key.coordinatesdisplay.coordinatesgui": "좌표 GUI 열기", "key.coordinatesdisplay.copypos": "현재 위치를 클립 보드로 복사하십시오", "key.coordinatesdisplay.sendpos": "채팅에서 현재 위치를 보내십시오", @@ -26,26 +26,25 @@ "hud.coordinatesdisplay.west.short": "서", "hud.coordinatesdisplay.northwest.short": "북서", + "hud.coordinatesdisplay.biome.unknown": "Unknown", + + "hud.coordinatesdisplay.x": "X: %s", + "hud.coordinatesdisplay.y": "Y: %s", + "hud.coordinatesdisplay.z": "Z: %s", + "hud.coordinatesdisplay.xyz": "XYZ: %s %s %s", + "hud.coordinatesdisplay.chunk_x": "청크 X: %s", + "hud.coordinatesdisplay.chunk_y": "청크 Y: %s", + "hud.coordinatesdisplay.chunk_z": "청크 Z: %s", + "hud.corodinatesdisplay.facing": "%s 향함", + "hud.coordinatesdisplay.biome": "생물체: %s", + "hud.coordinatesdisplay.dimension": "차원: %s", + "hud.coordinatesdisplay.default": "기본값", - "hud.coordinatesdisplay.default.x": "X: %s", - "hud.coordinatesdisplay.default.y": "Y: %s", - "hud.coordinatesdisplay.default.z": "Z: %s", - "hud.coordinatesdisplay.default.chunk.x": "청크 X: %s", - "hud.coordinatesdisplay.default.chunk.z": "청크 Z: %s", - "hud.coordinatesdisplay.default.direction": "%s %s", - "hud.coordinatesdisplay.default.biome": "생물체: %s", - "hud.coordinatesdisplay.default.dimension": "차원: %s", "hud.coordinatesdisplay.default.version": "Minecraft %s", "hud.coordinatesdisplay.minimum": "최소", - "hud.coordinatesdisplay.minimum.x": "X: %s", - "hud.coordinatesdisplay.minimum.y": "Y: %s", - "hud.coordinatesdisplay.minimum.z": "Z: %s", - "hud.coordinatesdisplay.minimum.direction": "%s", - "hud.coordinatesdisplay.minimum.biome": "%s", "hud.coordinatesdisplay.maximum": "최대", - "hud.coordinatesdisplay.maximum.xyz": "XYZ: %s %s %s ", "hud.coordinatesdisplay.maximum.block": "Block XYZ: %s %s %s [%s %s %s]", "hud.coordinatesdisplay.maximum.block.targeted": "Targeted Block: %s %s %s", "hud.coordinatesdisplay.maximum.chunk": "Chunk: %s %s %s", @@ -56,43 +55,43 @@ "hud.coordinatesdisplay.maximum.dimension": "Dimension: %s (from %s)", "hud.coordinatesdisplay.line": "라인", - "hud.coordinatesdisplay.line.x": "X: %s", - "hud.coordinatesdisplay.line.y": "Y: %s", - "hud.coordinatesdisplay.line.z": "Z: %s", - "hud.coordinatesdisplay.line.direction": "Facing %s", "hud.coordinatesdisplay.nether_overworld": "네더/오버월드", "hud.coordinatesdisplay.nether_overworld.overworld": "Overworld", "hud.coordinatesdisplay.nether_overworld.nether": "Nether", - "hud.coordinatesdisplay.nether_overworld.x": "X: %s", - "hud.coordinatesdisplay.nether_overworld.y": "Y: %s", - "hud.coordinatesdisplay.nether_overworld.z": "Z: %s", "hud.coordinatesdisplay.nether_overworld.error": "Not in overworld or nether", - "hud.coordinatesdisplay.nether_overworld.dimension": "Dimension: %s", "hud.coordinatesdisplay.hotbar": "핫바", "hud.coordinatesdisplay.hotbar.all": "%s / %s / %s", - "hud.coordinatesdisplay.hotbar.xyz": "XYZ: %s %s %s", - "hud.coordinatesdisplay.hotbar.direction": "Facing %s", "hud.coordinatesdisplay.spawnpoint": "World Spawn (Compass)", "hud.coordinatesdisplay.spawnpoint.player": "Player", "hud.coordinatesdisplay.spawnpoint.worldSpawn": "World Spawn", "hud.coordinatesdisplay.spawnpoint.relative": "Relative", - "hud.coordinatesdisplay.spawnpoint.x": "X: %s", - "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", + "hud.coordinatesdisplay.chunk": "Chunk", + "hud.coordinatesdisplay.chunk.position": "Position", + "hud.coordinatesdisplay.chunk.region": "Region", + "hud.coordinatesdisplay.chunk.chunks": "Chunks[C]", + "hud.coordinatesdisplay.chunk.chunks.cached": "Cached: %s", + "hud.coordinatesdisplay.chunk.chunks.memory": "Memory: %s", + "hud.coordinatesdisplay.chunk.c": "C", + "hud.coordinatesdisplay.chunk.c.rendered": "Rendered: %s", + "hud.coordinatesdisplay.chunk.c.loaded": "Loaded: %s", + + "hud.coordinatesdisplay.filter.always": "Always", + "hud.coordinatesdisplay.filter.hold_compass": "Holding a Compass", + "hud.coordinatesdisplay.filter.own_compass": "Have a Compass", + "hud.coordinatesdisplay.filter.hold_map": "Holding a Map", + "hud.coordinatesdisplay.filter.own_map": "Have a Map", + "screen.coordinatesdisplay.config": "%s 환경설정", "screen.coordinatesdisplay.confirmreset": "기본값으로 초기화 확인", "screen.coordinatesdisplay.render": "%s 의 렌더링 구성", @@ -102,14 +101,16 @@ "screen.coordinatesdisplay.position": "HUD의 위치를 변경하십시오", "screen.coordinatesdisplay.text": "%s 에 대한 텍스트 구성", "screen.coordinatesdispaly.hudposition": "Modifying HUD Position", + "screen.coordinatesdisplay.startcorner": "Changing Start Corner", + "button.coordinatesdisplay.enabled": "Enabled: %s", "button.coordinatesdisplay.visualconfig": "시각적...", "button.coordinatesdisplay.renderconfig": "렌더링...", "button.coordinatesdisplay.colorconfig": "색상...", "button.coordinatesdisplay.deathpos": "죽음의 위치", "button.coordinatesdisplay.text": "텍스트 설정...", - "button.coordinatesdisplay.visible": "화면에 표시: %s", "button.coordinatesdisplay.decimalPlaces": "소수점 표시: %s", + "button.coordinatesdisplay.visibility": "Visibility: %s", "button.coordinatesdisplay.decimalPlaces.block_pos": "블록 위치", "button.coordinatesdisplay.displayMode": "Display Mode: %s", "button.coordinatesdisplay.textshadow": "Text Shadow: %s", @@ -120,6 +121,10 @@ "button.coordinatesdisplay.startcorner.top_right": "Top Right", "button.coordinatesdisplay.startcorner.bottom_left": "Bottom Left", "button.coordinatesdisplay.startcorner.bottom_right": "Bottom Right", + "button.coordinatesdisplay.startcorner.top": "Top", + "button.coordinatesdisplay.startcorner.bottom": "Bottom", + "button.coordinatesdisplay.startcorner.left": "Left", + "button.coordinatesdisplay.startcorner.right": "Right", "button.coordinatesdisplay.editHudPos": "HUD 위치 변경...", "button.coordinatesdisplay.padding": "Padding: %s", "button.coordinatesdisplay.textpadding": "Text Padding: %s", @@ -163,6 +168,7 @@ "message.coordinatesdisplay.deathpos": "당신의 죽음 위치는 %s", "message.coordinatesdisplay.teleport": "사망 위치로 순간 이동", "message.coordintatesdisplay.disabled": "This option is disabled for this display mode.", + "message.coordinatesdisplay.configError": "There was an error loading your config file! Check console for stacktrace.", "button.coordinatesdisplay.copy": "클립보드로 복사", "button.coordinatesdisplay.copied": "복사됨!", @@ -171,7 +177,6 @@ "command.coordinatesdisplay.emptyArgs": "Error: please enter a valid sub-command", "command.coordinatesdisplay.internalError": "An internal error has occurred.", - "command.coordinatesdisplay.togglemessage": "Toggled Hud!", "command.coordinatesdisplay.position.copy": "Copied the location to the clipboard!", "command.coordinatesdisplay.position.copytp": "Copied position as /tp command", "command.coordinatesdisplay.config.reload": "Reloaded config!", @@ -185,5 +190,5 @@ "command.coordinatesdisplay.mode": "Mode: Select the display mode you want to be rendered on the screen.", "command.coordinatesdisplay.movehud": "Movehud: Open the gui where you can move the HUD.", "command.coordinatesdisplay.position": "Position: Do things with your position, such as sending in chat, and copying to the clipboard.", - "command.coordinatesdisplay.toggle": "Toggle: Toggle on/off the HUD." + "command.coordinatesdisplay.visibility": "Visibility: Toggle the visibility of the coordinates display." } \ No newline at end of file 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 dad3830..2db7858 100644 --- a/common/src/main/resources/assets/coordinatesdisplay/lang/ru_ru.json +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/ru_ru.json @@ -1,5 +1,5 @@ { - "key.coordinatesdisplay.visible": "Переключить Hud", + "key.coordinatesdisplay.hudenabled": "Toggle HUD", "key.coordinatesdisplay.coordinatesgui": "Открыть GUI для координат", "key.coordinatesdisplay.copypos": "Скопировать текущую позицию в буфер обмена", "key.coordinatesdisplay.sendpos": "Скопирать текущую позицию в чат", @@ -26,26 +26,25 @@ "hud.coordinatesdisplay.west.short": "З", "hud.coordinatesdisplay.northwest.short": "СЗ", + "hud.coordinatesdisplay.biome.unknown": "Unknown", + + "hud.coordinatesdisplay.x": "X: %s", + "hud.coordinatesdisplay.y": "Y: %s", + "hud.coordinatesdisplay.z": "Z: %s", + "hud.coordinatesdisplay.xyz": "XYZ: %s %s %s", + "hud.coordinatesdisplay.chunk_x": "Чанк X: %s", + "hud.coordinatesdisplay.chunk_y": "Чанк Y: %s", + "hud.coordinatesdisplay.chunk_z": "Чанк Z: %s", + "hud.corodinatesdisplay.facing": "Лицом к %s", + "hud.coordinatesdisplay.biome": "Биом: %s", + "hud.coordinatesdisplay.dimension": "Размерность: %s", + "hud.coordinatesdisplay.default": "умолчанию", - "hud.coordinatesdisplay.default.x": "X: %s", - "hud.coordinatesdisplay.default.y": "Y: %s", - "hud.coordinatesdisplay.default.z": "Z: %s", - "hud.coordinatesdisplay.default.chunk.x": "Чанк X: %s", - "hud.coordinatesdisplay.default.chunk.z": "Чанк Z: %s", - "hud.coordinatesdisplay.default.direction": "%s %s", - "hud.coordinatesdisplay.default.biome": "Биом: %s", - "hud.coordinatesdisplay.default.dimension": "Размерность: %s", "hud.coordinatesdisplay.default.version": "Minecraft %s", "hud.coordinatesdisplay.minimum": "минимальный", - "hud.coordinatesdisplay.minimum.x": "X: %s", - "hud.coordinatesdisplay.minimum.y": "Y: %s", - "hud.coordinatesdisplay.minimum.z": "Z: %s", - "hud.coordinatesdisplay.minimum.direction": "%s", - "hud.coordinatesdisplay.minimum.biome": "%s", "hud.coordinatesdisplay.maximum": "максимальный", - "hud.coordinatesdisplay.maximum.xyz": "XYZ: %s %s %s ", "hud.coordinatesdisplay.maximum.block": "Block XYZ: %s %s %s [%s %s %s]", "hud.coordinatesdisplay.maximum.block.targeted": "Targeted Block: %s %s %s", "hud.coordinatesdisplay.maximum.chunk": "Chunk: %s %s %s", @@ -56,43 +55,43 @@ "hud.coordinatesdisplay.maximum.dimension": "Dimension: %s (from %s)", "hud.coordinatesdisplay.line": "линия", - "hud.coordinatesdisplay.line.x": "X: %s", - "hud.coordinatesdisplay.line.y": "Y: %s", - "hud.coordinatesdisplay.line.z": "Z: %s", - "hud.coordinatesdisplay.line.direction": "Facing %s", "hud.coordinatesdisplay.nether_overworld": "Нижний мир / Нормальный мир", "hud.coordinatesdisplay.nether_overworld.overworld": "Overworld", "hud.coordinatesdisplay.nether_overworld.nether": "Nether", - "hud.coordinatesdisplay.nether_overworld.x": "X: %s", - "hud.coordinatesdisplay.nether_overworld.y": "Y: %s", - "hud.coordinatesdisplay.nether_overworld.z": "Z: %s", "hud.coordinatesdisplay.nether_overworld.error": "Not in overworld or nether", - "hud.coordinatesdisplay.nether_overworld.dimension": "Dimension: %s", "hud.coordinatesdisplay.hotbar": "Hotbar", "hud.coordinatesdisplay.hotbar.all": "%s / %s / %s", - "hud.coordinatesdisplay.hotbar.xyz": "XYZ: %s %s %s", - "hud.coordinatesdisplay.hotbar.direction": "Facing %s", "hud.coordinatesdisplay.spawnpoint": "World Spawn (Compass)", "hud.coordinatesdisplay.spawnpoint.player": "Player", "hud.coordinatesdisplay.spawnpoint.worldSpawn": "World Spawn", "hud.coordinatesdisplay.spawnpoint.relative": "Relative", - "hud.coordinatesdisplay.spawnpoint.x": "X: %s", - "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", + "hud.coordinatesdisplay.chunk": "Chunk", + "hud.coordinatesdisplay.chunk.position": "Position", + "hud.coordinatesdisplay.chunk.region": "Region", + "hud.coordinatesdisplay.chunk.chunks": "Chunks[C]", + "hud.coordinatesdisplay.chunk.chunks.cached": "Cached: %s", + "hud.coordinatesdisplay.chunk.chunks.memory": "Memory: %s", + "hud.coordinatesdisplay.chunk.c": "C", + "hud.coordinatesdisplay.chunk.c.rendered": "Rendered: %s", + "hud.coordinatesdisplay.chunk.c.loaded": "Loaded: %s", + + "hud.coordinatesdisplay.filter.always": "Always", + "hud.coordinatesdisplay.filter.hold_compass": "Holding a Compass", + "hud.coordinatesdisplay.filter.own_compass": "Have a Compass", + "hud.coordinatesdisplay.filter.hold_map": "Holding a Map", + "hud.coordinatesdisplay.filter.own_map": "Have a Map", + "screen.coordinatesdisplay.config": "Конфигурация для %s", "screen.coordinatesdisplay.confirmreset": "Подтвердить сброс настроек по умолчанию", "screen.coordinatesdisplay.render": "Рендеринг конфигурации для %s", @@ -102,13 +101,15 @@ "screen.coordinatesdisplay.position": "Изменить положение HUD", "screen.coordinatesdisplay.text": "Текст конфигурации для %s", "screen.coordinatesdispaly.hudposition": "Modifying HUD Position", + "screen.coordinatesdisplay.startcorner": "Changing Start Corner", + "button.coordinatesdisplay.enabled": "Enabled: %s", "button.coordinatesdisplay.visualconfig": "Настройки видео...", "button.coordinatesdisplay.renderconfig": "Рендеринг...", "button.coordinatesdisplay.colorconfig": "Цвета...", "button.coordinatesdisplay.deathpos": "Позиция смерти...", "button.coordinatesdisplay.text": "Текстовые настройки...", - "button.coordinatesdisplay.visible": "Видимый: %s", + "button.coordinatesdisplay.visibility": "Visibility: %s", "button.coordinatesdisplay.decimalPlaces": "Decimal Places: %s", "button.coordinatesdisplay.decimalPlaces.block_pos": "позиция блока", "button.coordinatesdisplay.displayMode": "Display Mode: %s", @@ -120,6 +121,10 @@ "button.coordinatesdisplay.startcorner.top_right": "Top Right", "button.coordinatesdisplay.startcorner.bottom_left": "Bottom Left", "button.coordinatesdisplay.startcorner.bottom_right": "Bottom Right", + "button.coordinatesdisplay.startcorner.top": "Top", + "button.coordinatesdisplay.startcorner.bottom": "Bottom", + "button.coordinatesdisplay.startcorner.left": "Left", + "button.coordinatesdisplay.startcorner.right": "Right", "button.coordinatesdisplay.editHudPos": "Изменить положение HUD...", "button.coordinatesdisplay.padding": "Заполнение: %s", "button.coordinatesdisplay.textpadding": "Заполнение текста: %s", @@ -163,6 +168,7 @@ "message.coordinatesdisplay.deathpos": "Вы умерли на %s", "message.coordinatesdisplay.teleport": "Телепортироваться в позицию смерти", "message.coordintatesdisplay.disabled": "This option is disabled for this display mode.", + "message.coordinatesdisplay.configError": "There was an error loading your config file! Check console for stacktrace.", "button.coordinatesdisplay.copy": "Скопировать в буфер обмена", "button.coordinatesdisplay.copied": "Скопировано!", @@ -171,7 +177,6 @@ "command.coordinatesdisplay.emptyArgs": "Error: please enter a valid sub-command", "command.coordinatesdisplay.internalError": "An internal error has occurred.", - "command.coordinatesdisplay.togglemessage": "Toggled Hud!", "command.coordinatesdisplay.position.copy": "Copied the location to the clipboard!", "command.coordinatesdisplay.position.copytp": "Copied position as /tp command", "command.coordinatesdisplay.config.reload": "Reloaded config!", @@ -185,5 +190,5 @@ "command.coordinatesdisplay.mode": "Mode: Select the display mode you want to be rendered on the screen.", "command.coordinatesdisplay.movehud": "Movehud: Open the gui where you can move the HUD.", "command.coordinatesdisplay.position": "Position: Do things with your position, such as sending in chat, and copying to the clipboard.", - "command.coordinatesdisplay.toggle": "Toggle: Toggle on/off the HUD." + "command.coordinatesdisplay.visibility": "Visibility: Toggle the visibility of the coordinates display." } \ No newline at end of file diff --git a/common/src/main/resources/assets/coordinatesdisplay/lang/uk_ua.json b/common/src/main/resources/assets/coordinatesdisplay/lang/uk_ua.json new file mode 100644 index 0000000..61fbb0e --- /dev/null +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/uk_ua.json @@ -0,0 +1,194 @@ +{ + "key.coordinatesdisplay.hudenabled": "Toggle HUD", + "key.coordinatesdisplay.coordinatesgui": "Відкрити меню координат", + "key.coordinatesdisplay.copypos": "Скопіювати поточні координати", + "key.coordinatesdisplay.sendpos": "Надіслати поточні координати в чат", + "key.coordinatesdisplay.copypostp": "Скопіювати поточні координати як команду /tp", + "key.coordinatesdisplay.changeHudPos": "Змінити положення інтерфейсу", + "key.coordinatesdisplay.cycleDisplayMode": "Перемкнути режим відображення (Shift — назад)", + "category.coordinatesdisplay": "Coordinates Display", + + "hud.coordinatesdisplay.north": "Північ", + "hud.coordinatesdisplay.northeast": "Північний схід", + "hud.coordinatesdisplay.east": "Схід", + "hud.coordinatesdisplay.southeast": "Південний схід", + "hud.coordinatesdisplay.south": "Південь", + "hud.coordinatesdisplay.southwest": "Південний захід", + "hud.coordinatesdisplay.west": "Захід", + "hud.coordinatesdisplay.northwest": "Північний захід", + + "hud.coordinatesdisplay.north.short": "ПН", + "hud.coordinatesdisplay.northeast.short": "ПН-СХ", + "hud.coordinatesdisplay.east.short": "СХ", + "hud.coordinatesdisplay.southeast.short": "ПД-СХ", + "hud.coordinatesdisplay.south.short": "ПД", + "hud.coordinatesdisplay.southwest.short": "ПД-ЗХ", + "hud.coordinatesdisplay.west.short": "ЗХ", + "hud.coordinatesdisplay.northwest.short": "ПН-ЗХ", + + "hud.coordinatesdisplay.biome.unknown": "Unknown", + + "hud.coordinatesdisplay.x": "X: %s", + "hud.coordinatesdisplay.y": "Y: %s", + "hud.coordinatesdisplay.z": "Z: %s", + "hud.coordinatesdisplay.xyz": "XYZ: %s %s %s", + "hud.coordinatesdisplay.chunk_x": "X чанку: %s", + "hud.coordinatesdisplay.chunk_y": "Y чанку: %s", + "hud.coordinatesdisplay.chunk_z": "Z чанку: %s", + "hud.corodinatesdisplay.facing": "Погляд на %s", + "hud.coordinatesdisplay.biome": "Біом: %s", + "hud.coordinatesdisplay.dimension": "Вимір: %s", + + "hud.coordinatesdisplay.default": "Усталений", + "hud.coordinatesdisplay.default.version": "Minecraft %s", + + "hud.coordinatesdisplay.minimum": "Мінімалістичний", + + "hud.coordinatesdisplay.maximum": "Повний", + "hud.coordinatesdisplay.maximum.block": "Координати блока: %s %s %s [%s %s %s]", + "hud.coordinatesdisplay.maximum.block.targeted": "Цільовий блок: %s %s %s", + "hud.coordinatesdisplay.maximum.chunk": "Чанк: %s %s %s", + "hud.coordinatesdisplay.maximum.direction": "Погляд на %s %s", + "hud.coordinatesdisplay.maximum.direction_int": "(%s / %s)", + "hud.coordinatesdisplay.maximum.biome": "У %s", + "hud.coordinatesdisplay.maximum.version": "Minecraft %s", + "hud.coordinatesdisplay.maximum.dimension": "Вимір: %s (з %s)", + + "hud.coordinatesdisplay.line": "Смужка", + + "hud.coordinatesdisplay.nether_overworld": "Незер/Верхній світ", + "hud.coordinatesdisplay.nether_overworld.overworld": "Верхній світ", + "hud.coordinatesdisplay.nether_overworld.nether": "Незер", + "hud.coordinatesdisplay.nether_overworld.error": "Зараз не у Незері/Верхньому світі", + + "hud.coordinatesdisplay.hotbar": "Панель швидкого доступу", + "hud.coordinatesdisplay.hotbar.all": "%s / %s / %s", + + "hud.coordinatesdisplay.spawnpoint": "Точка появи у світі (компас)", + "hud.coordinatesdisplay.spawnpoint.player": "Гравець", + "hud.coordinatesdisplay.spawnpoint.worldSpawn": "Точка появи у світі", + "hud.coordinatesdisplay.spawnpoint.relative": "Відносно", + + "hud.coordinatesdisplay.direction": "Напрямки", + "hud.coordinatesdisplay.direction.direction": "Напрямок: %s (%s)", + "hud.coordinatesdisplay.direction.yaw": "Рискання: %s (%s)", + "hud.coordinatesdisplay.direction.pitch": "Нахил: %s (%s)", + "hud.coordinatesdisplay.direction.positive": "додатне %s", + "hud.coordinatesdisplay.direction.negative": "від'ємне %s", + + "hud.coordinatesdisplay.chunk": "Chunk", + "hud.coordinatesdisplay.chunk.position": "Position", + "hud.coordinatesdisplay.chunk.region": "Region", + "hud.coordinatesdisplay.chunk.chunks": "Chunks[C]", + "hud.coordinatesdisplay.chunk.chunks.cached": "Cached: %s", + "hud.coordinatesdisplay.chunk.chunks.memory": "Memory: %s", + "hud.coordinatesdisplay.chunk.c": "C", + "hud.coordinatesdisplay.chunk.c.rendered": "Rendered: %s", + "hud.coordinatesdisplay.chunk.c.loaded": "Loaded: %s", + + "hud.coordinatesdisplay.filter.always": "Завжди", + "hud.coordinatesdisplay.filter.hold_compass": "Тримаючи компас", + "hud.coordinatesdisplay.filter.own_compass": "Маючи компас", + "hud.coordinatesdisplay.filter.hold_map": "Holding a Map", + "hud.coordinatesdisplay.filter.own_map": "Have a Map", + + "screen.coordinatesdisplay.config": "Налаштування %s", + "screen.coordinatesdisplay.confirmreset": "Підтвердження скидання до усталеного", + "screen.coordinatesdisplay.render": "Налаштування відображення (%s)", + "screen.coordinatesdisplay.color": "Налаштування кольору (%s)", + "screen.coordinatesdisplay.deathpos": "Налаштування показу місця смерті (%s)", + "screen.coordinatesdisplay.visual": "Налаштування вигляду (%s)", + "screen.coordinatesdisplay.position": "Змінити положення інтерфейсу", + "screen.coordinatesdisplay.text": "Налаштування тексту (%s)", + "screen.coordinatesdispaly.hudposition": "Зміна положення інтерфейсу", + "screen.coordinatesdisplay.startcorner": "Changing Start Corner", + + "button.coordinatesdisplay.enabled": "Enabled: %s", + "button.coordinatesdisplay.visualconfig": "Налаштування вигляду...", + "button.coordinatesdisplay.renderconfig": "Відображення...", + "button.coordinatesdisplay.colorconfig": "Кольори...", + "button.coordinatesdisplay.deathpos": "Місце смерті...", + "button.coordinatesdisplay.text": "Налаштування тексту...", + "button.coordinatesdisplay.visibility": "Видимість: %s", + "button.coordinatesdisplay.decimalPlaces": "Цифри після коми: %s", + "button.coordinatesdisplay.decimalPlaces.block_pos": "положення блока", + "button.coordinatesdisplay.displayMode": "Режим: %s", + "button.coordinatesdisplay.textshadow": "Тінь тексту: %s", + "button.coordinatesdisplay.biomecolors": "Кольори біомів: %s", + "button.coordinatesdisplay.dimensioncolors": "Кольори вимірів: %s", + "button.coordinatesdisplay.startcorner": "Кут початку: %s", + "button.coordinatesdisplay.startcorner.top_left": "Лівий верхній", + "button.coordinatesdisplay.startcorner.top_right": "Правий верхній", + "button.coordinatesdisplay.startcorner.bottom_left": "Лівий нижній", + "button.coordinatesdisplay.startcorner.bottom_right": "Правий нижній", + "button.coordinatesdisplay.startcorner.top": "Top", + "button.coordinatesdisplay.startcorner.bottom": "Bottom", + "button.coordinatesdisplay.startcorner.left": "Left", + "button.coordinatesdisplay.startcorner.right": "Right", + "button.coordinatesdisplay.editHudPos": "Змінити положення інтерфейсу...", + "button.coordinatesdisplay.padding": "Зовнішній відступ: %s", + "button.coordinatesdisplay.textpadding": "Текстовий відступ: %s", + "button.coordinatesdisplay.background": "Тло: %s", + "button.coordinatesdisplay.xyz": "Координати: %s", + "button.coordinatesdisplay.chunkpos": "Положеня чанка: %s", + "button.coordinatesdisplay.direction": "Напрямок: %s", + "button.coordinatesdisplay.biome": "Біом: %s", + "button.coordinatesdisplay.directionint": "Кут напрямку: %s", + "button.coordinatesdisplay.mcversion": "Версія Minecraft: %s", + "button.coordinatesdisplay.dimension": "Вимір: %s", + "button.coordinatesdisplay.displayondeathscreen": "Показувати на екрані смерті: %s", + "button.coordinatesdisplay.sendinchat": "Надсилати в чат: %s", + "button.coordinatesdisplay.roundwhencopying": "Заокруглювати при копіюванні: %s", + "button.coordinatesdisplay.tpmode": "Режим телепортування: %s", + "button.coordinatesdisplay.tpmode.execute": "/execute", + "button.coordinatesdisplay.tpmode.tp": "/tp", + "button.coordinatesdisplay.tpmode.baritone": "Baritone (#goto)", + + "button.coordinatesdisplay.help": "Як використовувати...", + "button.coordinatesdisplay.wiki": "Відкрити вікі...", + "button.coordinatesdisplay.configfile": "Показати файл налаштувань...", + "button.coordinatesdisplay.configfilesuccess": "Відкрито файл налаштувань...", + "button.coordinatesdisplay.configfilefail": "Не вдалося відкрити файл налаштувань", + "button.coordinatesdisplay.resetdefault": "Скинути до усталеного...", + + "label.coordinatesdisplay.preview": "Попередній перегляд", + "label.coordinatesdisplay.definitionColor": "Колір параметра", + "label.coordinatesdisplay.dataColor": "Колір значення", + "label.coordinatesdisplay.deathposColor": "Колір місця смерті", + "label.coordinatesdisplay.backgroundColor": "Колір тла (ARGB)", + "label.coordinatesdisplay.posChatMessage": "Текст, що надсилається в чат", + "label.coordinatesdisplay.copyPosMessage": "Текст, що копіюється", + + "message.coordinatesdisplay.openfilefailed": "Не вдалося відкрити файл", + "message.coordinatesdisplay.openfilesuccess": "Файл відкрито у файловому провіднику", + "message.coordinatesdisplay.confirmreset": "Ви впевнені, що хочете скинути всі ваші налаштування до усталеного?", + "message.coordinatesdisplay.at": "Поточне положення", + "message.coordinatesdisplay.location": "X: %d Y: %d Z: %d", + "message.coordinatesdisplay.deathlocation": "%d, %d, %d у %s", + "message.coordinatesdisplay.deathpos": "Ви померли на %s", + "message.coordinatesdisplay.teleport": "Телепортуватися на місце смерті", + "message.coordintatesdisplay.disabled": "Ця опція недоступна в обраному режимі.", + + + "button.coordinatesdisplay.copy": "Скопіювати в буфер обміну", + "button.coordinatesdisplay.copied": "Скопійовано!", + "button.coordinatesdisplay.send": "Надіслати в чат", + "button.coordinatesdisplay.copytp": "Скопіювати як команду для телепортації", + + "command.coordinatesdisplay.emptyArgs": "Помилка: Будь ласка, вкажіть дійсну підкоманду", + "command.coordinatesdisplay.internalError": "Стався збій", + "command.coordinatesdisplay.position.copy": "Положення скопійоване в буфер обміну!", + "command.coordinatesdisplay.position.copytp": "Положення скопійоване як команда /tp", + "command.coordinatesdisplay.config.reload": "Перезавантажено налаштування!", + "command.coordinatesdisplay.config.open.success": "Успішно відкрито файл налаштувань", + "command.coordinatesdisplay.config.open.fail": "Не вдалося відкрити файл налаштувань", + + "command.coordinatesdisplay.helpmenu": "Підкоманди /coordinates", + "command.coordinatesdisplay.config": "Config: Завантажити/збережти файл налаштувнь. Не вказуйте аргументів, щоб відкрити меню.", + "command.coordinatesdisplay.gui": "Gui: Відкрити екран координат, де ви можете робити дії з вашими координатами.", + "command.coordinatesdisplay.help": "Help: Переглянути цей список.", + "command.coordinatesdisplay.mode": "Mode: Виберіть режим показу інтерфейсу на екрані.", + "command.coordinatesdisplay.movehud": "Movehud: Відкриває меню, де ви можете переміщати інтерфейс.", + "command.coordinatesdisplay.position": "Position: Дії з вашою позицією, накшталт, надіслати її в чат або скопіювати в буфер обміну.", + "command.coordinatesdisplay.visibility": "Visibility: Перемикання видимості показу координат." +} \ No newline at end of file diff --git a/common/src/main/resources/assets/coordinatesdisplay/lang/zh_tw.json b/common/src/main/resources/assets/coordinatesdisplay/lang/zh_tw.json new file mode 100644 index 0000000..824970c --- /dev/null +++ b/common/src/main/resources/assets/coordinatesdisplay/lang/zh_tw.json @@ -0,0 +1,194 @@ +{ + "key.coordinatesdisplay.hudenabled": "切換抬頭顯示器", + "key.coordinatesdisplay.coordinatesgui": "開啟座標介面", + "key.coordinatesdisplay.copypos": "將目前位置複製到剪貼簿", + "key.coordinatesdisplay.sendpos": "在聊天中傳送目前位置", + "key.coordinatesdisplay.copypostp": "將目前位置複製為 /tp 指令", + "key.coordinatesdisplay.changeHudPos": "更改抬頭顯示器位置", + "key.coordinatesdisplay.cycleDisplayMode": "循環切換顯示模式(按住 Shift 鍵返回)", + "category.coordinatesdisplay": "座標顯示", + + "hud.coordinatesdisplay.north": "北", + "hud.coordinatesdisplay.northeast": "東北", + "hud.coordinatesdisplay.east": "東", + "hud.coordinatesdisplay.southeast": "東南", + "hud.coordinatesdisplay.south": "南", + "hud.coordinatesdisplay.southwest": "西南", + "hud.coordinatesdisplay.west": "西", + "hud.coordinatesdisplay.northwest": "西北", + + "hud.coordinatesdisplay.north.short": "北", + "hud.coordinatesdisplay.northeast.short": "東北", + "hud.coordinatesdisplay.east.short": "東", + "hud.coordinatesdisplay.southeast.short": "東南", + "hud.coordinatesdisplay.south.short": "南", + "hud.coordinatesdisplay.southwest.short": "西南", + "hud.coordinatesdisplay.west.short": "西", + "hud.coordinatesdisplay.northwest.short": "西北", + + "hud.coordinatesdisplay.biome.unknown": "未知", + + "hud.coordinatesdisplay.x": "X: %s", + "hud.coordinatesdisplay.y": "Y: %s", + "hud.coordinatesdisplay.z": "Z: %s", + "hud.coordinatesdisplay.xyz": "XYZ: %s %s %s", + "hud.coordinatesdisplay.chunk_x": "區塊 X: %s", + "hud.coordinatesdisplay.chunk_y": "區塊 Y: %s", + "hud.coordinatesdisplay.chunk_z": "區塊 Z: %s", + "hud.corodinatesdisplay.facing": "西南 %s", + "hud.coordinatesdisplay.biome": "生態域: %s", + "hud.coordinatesdisplay.dimension": "維度: %s", + + "hud.coordinatesdisplay.default": "預設", + "hud.coordinatesdisplay.default.version": "Minecraft %s", + + "hud.coordinatesdisplay.minimum": "最小", + + "hud.coordinatesdisplay.maximum": "最大", + "hud.coordinatesdisplay.maximum.block": "方塊 XYZ:%s %s %s [%s %s %s]", + "hud.coordinatesdisplay.maximum.block.targeted": "目標方塊:%s %s %s", + "hud.coordinatesdisplay.maximum.chunk": "區塊:%s %s %s", + "hud.coordinatesdisplay.maximum.direction": "面向 %s %s", + "hud.coordinatesdisplay.maximum.direction_int": "(%s / %s)", + "hud.coordinatesdisplay.maximum.biome": "位於 %s", + "hud.coordinatesdisplay.maximum.version": "Minecraft %s", + "hud.coordinatesdisplay.maximum.dimension": "維度:%s(來自 %s)", + + "hud.coordinatesdisplay.line": "行", + + "hud.coordinatesdisplay.nether_overworld": "地獄/主世界", + "hud.coordinatesdisplay.nether_overworld.overworld": "主世界", + "hud.coordinatesdisplay.nether_overworld.nether": "地獄", + "hud.coordinatesdisplay.nether_overworld.error": "不在主世界或地獄中", + + "hud.coordinatesdisplay.hotbar": "快捷欄", + "hud.coordinatesdisplay.hotbar.all": "%s / %s / %s", + + "hud.coordinatesdisplay.spawnpoint": "世界重生點(羅盤)", + "hud.coordinatesdisplay.spawnpoint.player": "玩家", + "hud.coordinatesdisplay.spawnpoint.worldSpawn": "世界重生點", + "hud.coordinatesdisplay.spawnpoint.relative": "相對", + + "hud.coordinatesdisplay.direction": "方向", + "hud.coordinatesdisplay.direction.direction": "面向 %s(%s)", + "hud.coordinatesdisplay.direction.yaw": "偏航角:%s(%s)", + "hud.coordinatesdisplay.direction.pitch": "俯仰角:%s(%s)", + "hud.coordinatesdisplay.direction.positive": "正 %s", + "hud.coordinatesdisplay.direction.negative": "負 %s", + + "hud.coordinatesdisplay.chunk": "區塊", + "hud.coordinatesdisplay.chunk.position": "位置", + "hud.coordinatesdisplay.chunk.region": "區域", + "hud.coordinatesdisplay.chunk.chunks": "區塊[C]", + "hud.coordinatesdisplay.chunk.chunks.cached": "已快取:%s", + "hud.coordinatesdisplay.chunk.chunks.memory": "記憶體:%s", + "hud.coordinatesdisplay.chunk.c": "C", + "hud.coordinatesdisplay.chunk.c.rendered": "已繪製:%s", + "hud.coordinatesdisplay.chunk.c.loaded": "已載入:%s", + + "hud.coordinatesdisplay.filter.always": "總是", + "hud.coordinatesdisplay.filter.hold_compass": "手持羅盤", + "hud.coordinatesdisplay.filter.own_compass": "擁有羅盤", + "hud.coordinatesdisplay.filter.hold_map": "手持地圖", + "hud.coordinatesdisplay.filter.own_map": "擁有地圖", + + "screen.coordinatesdisplay.config": "%s 的設定", + "screen.coordinatesdisplay.confirmreset": "確認重設為預設值", + "screen.coordinatesdisplay.render": "%s 的繪製設定", + "screen.coordinatesdisplay.color": "%s 的顏色設定", + "screen.coordinatesdisplay.deathpos": "%s 的死亡位置設定", + "screen.coordinatesdisplay.visual": "%s 的視覺設定", + "screen.coordinatesdisplay.position": "更改抬頭顯示器的位置", + "screen.coordinatesdisplay.text": "%s 的文字設定", + "screen.coordinatesdispaly.hudposition": "修改抬頭顯示器位置", + "screen.coordinatesdisplay.startcorner": "變更起始角落", + + "button.coordinatesdisplay.enabled": "已啟用:%s", + "button.coordinatesdisplay.visualconfig": "視覺設定…", + "button.coordinatesdisplay.renderconfig": "繪製…", + "button.coordinatesdisplay.colorconfig": "顏色…", + "button.coordinatesdisplay.deathpos": "死亡位置…", + "button.coordinatesdisplay.text": "文字設定…", + "button.coordinatesdisplay.visibility": "可見度:%s", + "button.coordinatesdisplay.decimalPlaces": "小數位數:%s", + "button.coordinatesdisplay.decimalPlaces.block_pos": "方塊位置", + "button.coordinatesdisplay.displayMode": "顯示模式:%s", + "button.coordinatesdisplay.textshadow": "文字陰影:%s", + "button.coordinatesdisplay.biomecolors": "生態域顏色:%s", + "button.coordinatesdisplay.dimensioncolors": "維度顏色:%s", + "button.coordinatesdisplay.startcorner": "起始角落:%s", + "button.coordinatesdisplay.startcorner.top_left": "左上方", + "button.coordinatesdisplay.startcorner.top_right": "右上方", + "button.coordinatesdisplay.startcorner.bottom_left": "左下方", + "button.coordinatesdisplay.startcorner.bottom_right": "右下方", + "button.coordinatesdisplay.startcorner.top": "頂部", + "button.coordinatesdisplay.startcorner.bottom": "底部", + "button.coordinatesdisplay.startcorner.left": "左側", + "button.coordinatesdisplay.startcorner.right": "右側", + "button.coordinatesdisplay.editHudPos": "編輯抬頭顯示器的位置…", + "button.coordinatesdisplay.padding": "填充:%s", + "button.coordinatesdisplay.textpadding": "文字填充:%s", + "button.coordinatesdisplay.background": "背景:%s", + "button.coordinatesdisplay.xyz": "XYZ:%s", + "button.coordinatesdisplay.chunkpos": "區塊位置:%s", + "button.coordinatesdisplay.direction": "方向:%s", + "button.coordinatesdisplay.biome": "生態域:%s", + "button.coordinatesdisplay.directionint": "方向整數:%s", + "button.coordinatesdisplay.mcversion": "Minecraft 版本:%s", + "button.coordinatesdisplay.dimension": "維度:%s", + "button.coordinatesdisplay.displayondeathscreen": "在死亡畫面顯示:%s", + "button.coordinatesdisplay.sendinchat": "在聊天中傳送:%s", + "button.coordinatesdisplay.roundwhencopying": "複製時包含小數:%s", + "button.coordinatesdisplay.tpmode": "傳送模式:%s", + "button.coordinatesdisplay.tpmode.execute": "/execute", + "button.coordinatesdisplay.tpmode.tp": "/tp", + "button.coordinatesdisplay.tpmode.baritone": "Baritone (#goto)", + + "button.coordinatesdisplay.help": "如何使用…", + "button.coordinatesdisplay.wiki": "開啟 Wiki…", + "button.coordinatesdisplay.configfile": "顯示設定檔案…", + "button.coordinatesdisplay.configfilesuccess": "已開啟設定檔案…", + "button.coordinatesdisplay.configfilefail": "無法開啟設定檔案", + "button.coordinatesdisplay.resetdefault": "重設為預設值…", + + "label.coordinatesdisplay.preview": "預覽", + "label.coordinatesdisplay.definitionColor": "定義顏色", + "label.coordinatesdisplay.dataColor": "資料顏色", + "label.coordinatesdisplay.deathposColor": "死亡位置顏色", + "label.coordinatesdisplay.backgroundColor": "背景顏色 (ARGB)", + "label.coordinatesdisplay.posChatMessage": "座標聊天訊息", + "label.coordinatesdisplay.copyPosMessage": "複製位置訊息", + + "message.coordinatesdisplay.openfilefailed": "無法開啟檔案", + "message.coordinatesdisplay.openfilesuccess": "已在原生資源管理器中開啟檔案", + "message.coordinatesdisplay.confirmreset": "您確定要將所有設定還原為預設值嗎?", + "message.coordinatesdisplay.at": "目前位置", + "message.coordinatesdisplay.location": "X:%d Y:%d Z:%d", + "message.coordinatesdisplay.deathlocation": "%s 的 %d, %d, %d", + "message.coordinatesdisplay.deathpos": "你在 %s 死亡", + "message.coordinatesdisplay.teleport": "傳送到死亡位置", + "message.coordintatesdisplay.disabled": "此選項在此顯示模式下已停用。", + "message.coordinatesdisplay.configError": "載入設定檔案時發生錯誤!檢查主控台以獲取堆疊追蹤。", + + "button.coordinatesdisplay.copy": "複製到剪貼簿", + "button.coordinatesdisplay.copied": "已複製!", + "button.coordinatesdisplay.send": "以聊天訊息傳送", + "button.coordinatesdisplay.copytp": "複製為傳送指令", + + "command.coordinatesdisplay.emptyArgs": "錯誤:請輸入有效的子指令", + "command.coordinatesdisplay.internalError": "發生內部錯誤。", + "command.coordinatesdisplay.position.copy": "已將位置複製到剪貼簿!", + "command.coordinatesdisplay.position.copytp": "已將位置複製為 /tp 指令", + "command.coordinatesdisplay.config.reload": "已重新載入設定!", + "command.coordinatesdisplay.config.open.success": "已成功開啟設定檔案", + "command.coordinatesdisplay.config.open.fail": "無法開啟設定檔案", + + "command.coordinatesdisplay.helpmenu": "/coordinates 子指令", + "command.coordinatesdisplay.config": "設定:載入/儲存設定檔案。未指定參數時開啟介面", + "command.coordinatesdisplay.gui": "介面:開啟座標畫面,您可以在其中使用座標進行操作。", + "command.coordinatesdisplay.help": "協助:查看此清單。", + "command.coordinatesdisplay.mode": "模式:選擇要在畫面上渲染的顯示模式。", + "command.coordinatesdisplay.movehud": "Movehud:開啟可以移動抬頭顯示器的介面。", + "command.coordinatesdisplay.position": "位置:對你的位置進行操作,例如在聊天中傳送以及複製到剪貼簿。", + "command.coordinatesdisplay.visibility": "可見度:切換座標顯示的可見度。" +} \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index d02efbb..08b49af 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.github.johnrengelman.shadow" version "7.1.2" + id 'com.github.johnrengelman.shadow' id "me.shedaniel.unified-publishing" } @@ -9,22 +9,32 @@ architectury { } configurations { - common - shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + common { + canBeResolved = true + canBeConsumed = false + } compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common developmentFabric.extendsFrom common + + // Files in this configuration will be bundled into your mod using the Shadow plugin. + // Don't use the `shadow` configuration from the plugin itself as it's meant for excluding files. + shadowBundle { + canBeResolved = true + canBeConsumed = false + } } dependencies { - modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" - modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" + modImplementation "net.fabricmc:fabric-loader:$rootProject.fabric_loader_version" - common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } + // Fabric API. This is technically optional, but you probably want it anyway. + modImplementation "net.fabricmc.fabric-api:fabric-api:$rootProject.fabric_api_version" - modApi("dev.boxadactle:Boxlib-fabric:${rootProject.boxlib_version}") { transitive = true } - include("dev.boxadactle:Boxlib-fabric:${rootProject.boxlib_version}") { transitive = true } + common(project(path: ':common', configuration: 'namedElements')) { transitive false } + shadowBundle project(path: ':common', configuration: 'transformProductionFabric') + + modImplementation("dev.boxadactle:Boxlib-fabric:${rootProject.boxlib_version}") { transitive = false } modImplementation("com.terraformersmc:modmenu:${rootProject.modmenu_version}") { transitive = false @@ -32,62 +42,36 @@ dependencies { } processResources { - inputs.property "version", project.version + inputs.property 'version', project.version - filesMatching("fabric.mod.json") { - expand "version": project.version + filesMatching('fabric.mod.json') { + expand version: project.version } } shadowJar { - configurations = [project.configurations.shadowCommon] - archiveClassifier.set("dev-shadow") + configurations = [project.configurations.shadowBundle] + archiveClassifier = 'dev-shadow' } remapJar { - inputFile.set shadowJar.archiveFile - dependsOn shadowJar - archiveClassifier.set(null) -} - -jar { - archiveClassifier.set("dev") -} - -sourcesJar { - def commonSources = project(":common").sourcesJar - dependsOn commonSources - from commonSources.archiveFile.map { zipTree(it) } -} - -components.java { - withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { - skip() - } -} - -publishing { - publications { - mavenFabric(MavenPublication) { - artifactId = rootProject.archives_base_name + "-" + project.name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } + input.set shadowJar.archiveFile } unifiedPublishing { project { - displayName = "[Fabric ${rootProject.minecraft_version}] v${rootProject.mod_version}" - version = "${rootProject.mod_version}-fabric" - changelog = "A changelog can be found here: https://github.com/Boxadactle/coordinates-display/releases/tag/${rootProject.mod_version}" - releaseType = "release" - gameVersions = [ "1.20.2" ] + displayName = "[Fabric ${rootProject.minecraft_version}] v$rootProject.mod_version" + version = "$rootProject.version-fabric" + changelog = new File(rootProject.rootDir, rootProject.changelog_file).text + releaseType = rootProject.release_type + gameVersions = Arrays.asList(rootProject.game_versions.split(",")) gameLoaders = [ "fabric", "quilt" ] + relations { + it.depends { + it.curseforge = "boxlib" + it.modrinth = "boxlib" + } + } mainPublication tasks.remapJar @@ -95,7 +79,7 @@ unifiedPublishing { if (cfToken != null) { curseforge { token = cfToken - id = "646464" + id = rootProject.project_id_curseforge } } @@ -108,4 +92,4 @@ unifiedPublishing { } } } -} +} \ No newline at end of file diff --git a/fabric/gradlew b/fabric/gradlew new file mode 100644 index 0000000..ce9444d --- /dev/null +++ b/fabric/gradlew @@ -0,0 +1,243 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" \ No newline at end of file diff --git a/fabric/gradlew.bat b/fabric/gradlew.bat new file mode 100644 index 0000000..2578005 --- /dev/null +++ b/fabric/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega \ No newline at end of file diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/CoordinatesDisplayFabric.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/CoordinatesDisplayFabric.java index dcab23c..2c3d24d 100644 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/CoordinatesDisplayFabric.java +++ b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/CoordinatesDisplayFabric.java @@ -1,53 +1,51 @@ package dev.boxadactle.coordinatesdisplay.fabric; -import com.mojang.blaze3d.systems.RenderSystem; -import dev.boxadactle.boxlib.util.ClientUtils; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.boxadactle.boxlib.util.GuiUtils; import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.Bindings; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.fabric.init.Commands; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import dev.boxadactle.coordinatesdisplay.fabric.init.Keybinds; +import dev.boxadactle.coordinatesdisplay.ModConfig; import dev.boxadactle.coordinatesdisplay.position.Position; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; public class CoordinatesDisplayFabric implements ClientModInitializer { + public static boolean deltaError = false; + @Override public void onInitializeClient() { CoordinatesDisplay.init(); - Commands.register(); - ClientTickEvents.END_CLIENT_TICK.register(this::checkBindings); HudRenderCallback.EVENT.register(this::renderHud); - Keybinds.register(); + KeyBindingHelper.registerKeyBinding(Bindings.hudEnabled); + KeyBindingHelper.registerKeyBinding(Bindings.coordinatesGUIKeybind); + KeyBindingHelper.registerKeyBinding(Bindings.copyLocation); + KeyBindingHelper.registerKeyBinding(Bindings.sendLocation); + KeyBindingHelper.registerKeyBinding(Bindings.copyPosTp); + KeyBindingHelper.registerKeyBinding(Bindings.changeHudPosition); + KeyBindingHelper.registerKeyBinding(Bindings.cycleDisplayMode); } private void checkBindings(Minecraft client) { Player player = WorldUtils.getPlayer(); if (player != null) { - Keybinds.checkBindings(Position.of(player)); + Bindings.checkBindings(Position.of(player)); } } - private void renderHud(GuiGraphics guiGraphics, float tickDelta) { - if ( - !ClientUtils.getOptions().hideGui - && CoordinatesDisplay.CONFIG.get().visible - && !ClientUtils.getClient().getDebugOverlay().showDebugScreen() - && CoordinatesDisplay.shouldHudRender - ) { - try { - RenderSystem.enableBlend(); - + private void renderHud(GuiGraphics guiGraphics, float f) { + try { + if (CoordinatesDisplay.HUD.shouldRender(CoordinatesDisplay.getConfig().visibilityFilter)) { ModConfig config = CoordinatesDisplay.getConfig(); CoordinatesDisplay.HUD.render( @@ -57,12 +55,21 @@ private void renderHud(GuiGraphics guiGraphics, float tickDelta) { config.hudY, config.renderMode, config.startCorner, - false, config.hudScale ); - } catch (NullPointerException exception) { - CoordinatesDisplay.LOGGER.printStackTrace(exception); } + } catch (NullPointerException e) { + if (CoordinatesDisplayFabric.deltaError) { + throw new RuntimeException(e); + } + + CoordinatesDisplay.LOGGER.error("Unknown error from config file"); + CoordinatesDisplay.LOGGER.printStackTrace(e); + + CoordinatesDisplay.LOGGER.player.warn(GuiUtils.getTranslatable("message.coordinatesdisplay.configError")); + CoordinatesDisplay.CONFIG.resetConfig(); + + CoordinatesDisplayFabric.deltaError = true; } } diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/ModMenuIntegration.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/ModMenuIntegration.java index 0e44f74..f3f0a29 100644 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/ModMenuIntegration.java +++ b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/ModMenuIntegration.java @@ -2,10 +2,9 @@ import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; -import dev.boxadactle.coordinatesdisplay.config.screen.ConfigScreen; +import dev.boxadactle.coordinatesdisplay.screen.ConfigScreen; public class ModMenuIntegration implements ModMenuApi { - @Override public ConfigScreenFactory getModConfigScreenFactory() { return ConfigScreen::new; diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/ConfigCommand.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/ConfigCommand.java deleted file mode 100644 index 0509a7d..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/ConfigCommand.java +++ /dev/null @@ -1,60 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.ModUtil; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; - -public class ConfigCommand extends CoordinatesCommand { - @Override - public String getName() { - return "config"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - // open config file - builder.then(ClientCommandManager.literal("file") - .executes(this::openConfigFile) - ); - - builder.then(ClientCommandManager.literal("reload") - .executes(this::reloadConfig) - ); - - - // empty args - builder.executes(this::openConfigGui); - } - - private int openConfigGui(CommandContext context) { - - CoordinatesDisplay.shouldConfigGuiOpen = true; - CoordinatesDisplay.LOGGER.info("Opening Config GUI"); - - return 0; - - } - - private int openConfigFile(CommandContext context) { - if (ModUtil.openConfigFile()) { - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.config.open.success")); - return 0; - } else { - CoordinatesDisplay.LOGGER.info(super.translatable("command.coordinatesdisplay.config.open.fail")); - return 1; - } - } - - private int reloadConfig(CommandContext context) { - CoordinatesDisplay.CONFIG.reload(); - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.config.reload")); - CoordinatesDisplay.LOGGER.info("Reloaded all config"); - - return 0; - } - -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/CoordinatesCommand.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/CoordinatesCommand.java deleted file mode 100644 index 7aba4d7..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/CoordinatesCommand.java +++ /dev/null @@ -1,11 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.command; - -import dev.boxadactle.boxlib.fabric.command.BClientCommand; - -public abstract class CoordinatesCommand extends BClientCommand { - - @Override - public String getCommandName() { - return "coordinates"; - } -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/CornerCommand.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/CornerCommand.java deleted file mode 100644 index 34388b1..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/CornerCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; - -public class CornerCommand extends CoordinatesCommand { - @Override - public String getName() { - return "corner"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - ModConfig.StartCorner[] corners = ModConfig.StartCorner.values(); - - for (ModConfig.StartCorner corner : corners) { - builder.then(ClientCommandManager.literal(corner.name().toLowerCase()) - .executes(c -> { - CoordinatesDisplay.getConfig().startCorner = corner; - CoordinatesDisplay.CONFIG.save(); - return 0; - }) - ); - } - } -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/GuiCommand.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/GuiCommand.java deleted file mode 100644 index 2bf600b..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/GuiCommand.java +++ /dev/null @@ -1,28 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; - -public class GuiCommand extends CoordinatesCommand { - @Override - public String getName() { - return "gui"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - builder.executes(this::openCoordinatesScreen); - - } - - private int openCoordinatesScreen(CommandContext context) { - - CoordinatesDisplay.shouldCoordinatesGuiOpen = true; - - return 0; - - } -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/HelpCommand.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/HelpCommand.java deleted file mode 100644 index 93e2fc0..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/HelpCommand.java +++ /dev/null @@ -1,44 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.command; - -import com.google.common.collect.ImmutableList; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.boxlib.util.GuiUtils; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.network.chat.Component; - -import java.util.List; - -public class HelpCommand extends CoordinatesCommand { - - @Override - public String getName() { - return "help"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - builder.executes(this::sendHelpMessage); - } - - private int sendHelpMessage(CommandContext context) { - List components = ImmutableList.of( - GuiUtils.colorize(Component.translatable("command.coordinatesdisplay.helpmenu"), GuiUtils.AQUA), - Component.translatable("command.coordinatesdisplay.config"), - Component.translatable("command.coordinatesdisplay.gui"), - Component.translatable("command.coordinatesdisplay.help"), - Component.translatable("command.coordinatesdisplay.mode"), - Component.translatable("command.coordinatesdisplay.movehud"), - Component.translatable("command.coordinatesdisplay.position"), - Component.translatable("command.coordinatesdisplay.toggle") - ); - - components.forEach(c -> { - CoordinatesDisplay.LOGGER.player.chat(c); - }); - - return 0; - } - -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/ModeCommand.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/ModeCommand.java deleted file mode 100644 index a7a2d4e..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/ModeCommand.java +++ /dev/null @@ -1,32 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import dev.boxadactle.coordinatesdisplay.hud.CoordinatesHuds; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; - -public class ModeCommand extends CoordinatesCommand { - @Override - public String getName() { - return "mode"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - String[] modes = CoordinatesHuds.registeredOverlays.keySet().toArray(new String[0]); - - for (String mode : modes) { - builder.then(ClientCommandManager.literal(mode.toLowerCase()) - .executes(c -> { - CoordinatesDisplay.getConfig().renderMode = mode; - CoordinatesDisplay.CONFIG.save(); - return 0; - }) - ); - } - - } -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/MoveHudCommand.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/MoveHudCommand.java deleted file mode 100644 index 4bb5226..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/MoveHudCommand.java +++ /dev/null @@ -1,28 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; - -public class MoveHudCommand extends CoordinatesCommand { - @Override - public String getName() { - return "movehud"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - builder.executes(this::openHudPositionScreen); - - } - - private int openHudPositionScreen(CommandContext context) { - - CoordinatesDisplay.shouldHudPositionGuiOpen = true; - - return 0; - - } -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/PositionCommand.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/PositionCommand.java deleted file mode 100644 index fbe7c7b..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/PositionCommand.java +++ /dev/null @@ -1,78 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.boxlib.util.WorldUtils; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.ModUtil; -import dev.boxadactle.coordinatesdisplay.position.Position; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.client.Minecraft; - -public class PositionCommand extends CoordinatesCommand { - @Override - public String getName() { - return "position"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - // send in chat - builder.then(ClientCommandManager.literal("chat") - .executes(this::sendPosInChat) - ); - - // copy to clipboard - builder.then(ClientCommandManager.literal("copy") - .executes(this::copyPos) - ); - - // copy as tp - builder.then(ClientCommandManager.literal("copytp") - .executes(this::copyPosTp) - ); - - } - - private int sendPosInChat(CommandContext context) { - - Position pos = Position.of(WorldUtils.getPlayer()); - - CoordinatesDisplay.LOGGER.player.publicChat(ModUtil.parseText(CoordinatesDisplay.CONFIG.get().posChatMessage, pos)); - CoordinatesDisplay.LOGGER.info("Sent position as chat message"); - - return 0; - } - - private int copyPos(CommandContext context) { - - Position pos = Position.of(WorldUtils.getPlayer()); - - Minecraft.getInstance().keyboardHandler.setClipboard(ModUtil.parseText(CoordinatesDisplay.CONFIG.get().copyPosMessage, pos)); - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.position.copy")); - CoordinatesDisplay.LOGGER.info("Copied location to clipboard"); - - return 0; - - } - - private int copyPosTp(CommandContext context) { - - try { - Position pos = Position.of(WorldUtils.getPlayer()); - - Minecraft.getInstance().keyboardHandler.setClipboard(CoordinatesDisplay.getConfig().teleportMode.toCommand(pos)); - - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.position.copytp")); - - return 0; - } catch (Exception ignored) { - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.internalError")); - return 1; - } - - } - -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/ToggleCommand.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/ToggleCommand.java deleted file mode 100644 index 6e65da5..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/command/ToggleCommand.java +++ /dev/null @@ -1,31 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; - -public class ToggleCommand extends CoordinatesCommand { - @Override - public String getName() { - return "toggle"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - builder.executes(this::toggleHud); - - } - - private int toggleHud(CommandContext context) { - CoordinatesDisplay.LOGGER.info("Toggling Hud"); - - CoordinatesDisplay.CONFIG.get().visible = !CoordinatesDisplay.CONFIG.get().visible; - CoordinatesDisplay.CONFIG.save(); - - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.togglemessage")); - - return 0; - } -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/init/Commands.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/init/Commands.java deleted file mode 100644 index e391fd2..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/init/Commands.java +++ /dev/null @@ -1,24 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.init; - -import dev.boxadactle.boxlib.fabric.command.BCommandManager; -import dev.boxadactle.coordinatesdisplay.fabric.command.*; -import net.minecraft.network.chat.Component; - -import java.util.List; - -public class Commands { - - public static void register() { - BCommandManager.registerCommand("coordinates", list -> { - list.add(ConfigCommand::new); - list.add(CornerCommand::new); - list.add(GuiCommand::new); - list.add(HelpCommand::new); - list.add(ModeCommand::new); - list.add(MoveHudCommand::new); - list.add(PositionCommand::new); - list.add(ToggleCommand::new); - }); - } - -} diff --git a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/init/Keybinds.java b/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/init/Keybinds.java deleted file mode 100644 index 382738a..0000000 --- a/fabric/src/main/java/dev/boxadactle/coordinatesdisplay/fabric/init/Keybinds.java +++ /dev/null @@ -1,54 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.fabric.init; - -import com.mojang.blaze3d.platform.InputConstants; -import dev.boxadactle.boxlib.math.mathutils.Mappers; -import dev.boxadactle.boxlib.util.ClientUtils; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import dev.boxadactle.coordinatesdisplay.ModUtil; -import dev.boxadactle.coordinatesdisplay.position.Position; -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.minecraft.client.KeyMapping; -import net.minecraft.client.Minecraft; -import org.lwjgl.glfw.GLFW; - -public class Keybinds { - public static KeyMapping visibleKeybind = new KeyMapping("key.coordinatesdisplay.visible", GLFW.GLFW_KEY_O, "category.coordinatesdisplay"); - public static KeyMapping coordinatesGUIKeybind = new KeyMapping("key.coordinatesdisplay.coordinatesgui", GLFW.GLFW_KEY_C, "category.coordinatesdisplay"); - - public static KeyMapping copyLocation = new KeyMapping("key.coordinatesdisplay.copypos", GLFW.GLFW_KEY_B, "category.coordinatesdisplay"); - public static KeyMapping sendLocation = new KeyMapping("key.coordinatesdisplay.sendpos", GLFW.GLFW_KEY_X, "category.coordinatesdisplay"); - public static KeyMapping copyPosTp = new KeyMapping("key.coordinatesdisplay.copypostp", GLFW.GLFW_KEY_N, "category.coordinatesdisplay"); - - public static KeyMapping changeHudPosition = new KeyMapping("key.coordinatesdisplay.changeHudPos", GLFW.GLFW_KEY_F9, "category.coordinatesdisplay"); - public static KeyMapping cycleDisplayMode = new KeyMapping("key.coordinatesdisplay.cycleDisplayMode", GLFW.GLFW_KEY_M, "category.coordinatesdisplay"); - - public static void register() { - KeyBindingHelper.registerKeyBinding(visibleKeybind); - KeyBindingHelper.registerKeyBinding(coordinatesGUIKeybind); - - KeyBindingHelper.registerKeyBinding(copyLocation); - KeyBindingHelper.registerKeyBinding(sendLocation); - KeyBindingHelper.registerKeyBinding(copyPosTp); - - KeyBindingHelper.registerKeyBinding(changeHudPosition); - KeyBindingHelper.registerKeyBinding(cycleDisplayMode); - } - - public static void checkBindings(Position pos) { - if (visibleKeybind.consumeClick()) CoordinatesDisplay.Bindings.visible(); - - if (coordinatesGUIKeybind.consumeClick()) CoordinatesDisplay.Bindings.coordinatesGui(); - - if (copyLocation.consumeClick()) CoordinatesDisplay.Bindings.copyLocation(pos); - - if (sendLocation.consumeClick()) CoordinatesDisplay.Bindings.sendLocation(pos); - - if (copyPosTp.consumeClick()) CoordinatesDisplay.Bindings.copyTeleportCommand(pos); - - if (changeHudPosition.consumeClick()) CoordinatesDisplay.Bindings.openHudPositionGui(); - - if (cycleDisplayMode.consumeClick()) CoordinatesDisplay.Bindings.cycleDisplayMode(); - } - -} diff --git a/fabric/src/main/resources/coordinatesdisplay.mixins.json b/fabric/src/main/resources/coordinatesdisplay.mixins.json deleted file mode 100644 index b8ef337..0000000 --- a/fabric/src/main/resources/coordinatesdisplay.mixins.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "dev.boxadactle.coordinatesdisplay.fabric.mixin", - "compatibilityLevel": "JAVA_17", - "client": [ - ], - "injectors": { - "defaultRequire": 1 - } -} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 3b764ea..6c8aacc 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -4,7 +4,7 @@ "version": "${version}", "name": "CoordinatesDisplay", - "description": "A mod that displays your coordinates on the in-game HUD.\n", + "description": "A mod that displays your coordinates on the in-game HUD.", "authors": [ "Boxadactle" ], "contact": {}, @@ -21,11 +21,15 @@ ] }, "mixins": [ - "coordinatesdisplay.mixins.json", "coordinatesdisplay-common.mixins.json" ], "depends": { - "fabricloader": ">=0.14.21", - "minecraft": ">=1.20.2" + "fabricloader": ">=0.15.10", + "minecraft": "1.20", + "boxlib": "10.*", + "fabric": "*" + }, + "recommends": { + "modmenu": "*" } } diff --git a/fabric/src/main/resources/icon.png b/fabric/src/main/resources/icon.png index 662000f..c808599 100644 Binary files a/fabric/src/main/resources/icon.png and b/fabric/src/main/resources/icon.png differ diff --git a/forge/build.gradle b/forge/build.gradle index 0cbb4e3..b73c0f9 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -1,95 +1,69 @@ plugins { - id "com.github.johnrengelman.shadow" version "7.1.2" + id 'com.github.johnrengelman.shadow' id "me.shedaniel.unified-publishing" } + architectury { platformSetupLoomIde() - forge() + forge {} +} + +loom { + forge { + mixinConfig "coordinatesdisplay-common.mixins.json" + } } configurations { - common - shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + common { + canBeResolved = true + canBeConsumed = false + } compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common developmentForge.extendsFrom common + + // Files in this configuration will be bundled into your mod using the Shadow plugin. + // Don't use the `shadow` configuration from the plugin itself as it's meant for excluding files. + shadowBundle { + canBeResolved = true + canBeConsumed = false + } } dependencies { - implementation project(path: ':fabric') - forge "net.minecraftforge:forge:${rootProject.forge_version}" + forge "net.minecraftforge:forge:${rootProject.minecraft_version}-${rootProject.forge_version}" - common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } + common(project(path: ':common', configuration: 'namedElements')) { transitive false } + shadowBundle project(path: ':common', configuration: 'transformProductionForge') - modCompileOnly("dev.boxadactle:Boxlib-forge:${rootProject.boxlib_version}") { transitive = true } - include("dev.boxadactle:Boxlib-forge:${rootProject.boxlib_version}") { transitive = true } + modImplementation("dev.boxadactle:Boxlib-forge:${rootProject.boxlib_version}") { transitive = true } } processResources { - inputs.property "version", project.version + inputs.property 'version', project.version - filesMatching("META-INF/mods.toml") { - expand "version": project.version + filesMatching('META-INF/mods.toml') { + expand version: project.version } } shadowJar { - exclude "fabric.mod.json" - - configurations = [project.configurations.shadowCommon] - archiveClassifier.set("dev-shadow") + configurations = [project.configurations.shadowBundle] + archiveClassifier = 'dev-shadow' } remapJar { - inputFile.set shadowJar.archiveFile - dependsOn shadowJar - archiveClassifier.set(null) -} - -jar { - archiveClassifier.set("dev") - - manifest { - attributes([ - "MixinConfigs": "coordinatesdisplay-common.mixins.json" - ]) - } -} - -sourcesJar { - def commonSources = project(":common").sourcesJar - dependsOn commonSources - from commonSources.archiveFile.map { zipTree(it) } -} - -components.java { - withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { - skip() - } -} - -publishing { - publications { - mavenForge(MavenPublication) { - artifactId = rootProject.archives_base_name + "-" + project.name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } + input.set shadowJar.archiveFile } unifiedPublishing { project { - displayName = "[Forge ${rootProject.minecraft_version}] v${rootProject.mod_version}" - version = "${rootProject.mod_version}-forge" - changelog = "A changelog can be found here: https://github.com/Boxadactle/coordinates-display/releases/tag/${rootProject.mod_version}" - releaseType = "release" - gameVersions = [ "1.20.2" ] + displayName = "[Forge ${rootProject.minecraft_version}] v$rootProject.mod_version" + version = "$rootProject.version-forge" + changelog = new File(rootProject.rootDir, rootProject.changelog_file).text + releaseType = rootProject.release_type + gameVersions = Arrays.asList(rootProject.game_versions.split(",")) gameLoaders = [ "forge" ] mainPublication tasks.remapJar @@ -98,7 +72,7 @@ unifiedPublishing { if (cfToken != null) { curseforge { token = cfToken - id = "646464" + id = rootProject.project_id_curseforge } } @@ -106,9 +80,9 @@ unifiedPublishing { if (modrinthToken != null) { modrinth { token = modrinthToken - id = "3mW8PdUo" + id = rootProject.project_id_modrinth version = "${rootProject.mod_version}-${project.name}" } } } -} +} \ No newline at end of file diff --git a/forge/gradle.properties b/forge/gradle.properties index 32f842a..37f3cc5 100644 --- a/forge/gradle.properties +++ b/forge/gradle.properties @@ -1 +1 @@ -loom.platform=forge \ No newline at end of file +loom.platform = forge \ No newline at end of file diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/CoordinatesDisplayForge.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/CoordinatesDisplayForge.java index 69f7c1f..9168565 100644 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/CoordinatesDisplayForge.java +++ b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/CoordinatesDisplayForge.java @@ -1,17 +1,16 @@ package dev.boxadactle.coordinatesdisplay.forge; import com.mojang.blaze3d.systems.RenderSystem; -import dev.boxadactle.boxlib.util.ClientUtils; +import dev.boxadactle.boxlib.util.GuiUtils; import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.Bindings; import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.forge.init.Commands; -import dev.boxadactle.coordinatesdisplay.forge.init.Keybinds; -import dev.boxadactle.coordinatesdisplay.config.screen.ConfigScreen; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; +import dev.boxadactle.coordinatesdisplay.ModConfig; +import dev.boxadactle.coordinatesdisplay.screen.ConfigScreen; import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.ConfigScreenHandler; import net.minecraftforge.client.event.InputEvent; import net.minecraftforge.client.event.RegisterKeyMappingsEvent; import net.minecraftforge.client.event.RenderGuiEvent; @@ -20,59 +19,62 @@ import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; -import static net.minecraftforge.client.ConfigScreenHandler.*; - +@SuppressWarnings("unused") @Mod(CoordinatesDisplay.MOD_ID) public class CoordinatesDisplayForge { + public static boolean deltaError = false; + public CoordinatesDisplayForge() { CoordinatesDisplay.init(); - Commands.register(); - - // what a pain - ModLoadingContext.get().registerExtensionPoint(ConfigScreenFactory.class, () -> - new ConfigScreenFactory((minecraft, screen) -> new ConfigScreen(screen))); + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> + new ConfigScreenHandler.ConfigScreenFactory((minecraft, screen) -> new ConfigScreen(screen)) + ); } @Mod.EventBusSubscriber(modid = CoordinatesDisplay.MOD_ID, value = Dist.CLIENT) - public static class ClientForgeEvents { + public static class ClientNeoforgeEvents { + @SubscribeEvent public static void keyInput(InputEvent.Key e) { Player player = WorldUtils.getPlayer(); if (player != null) { - Keybinds.checkBindings(Position.of(player)); + Bindings.checkBindings(Position.of(player)); } } @SubscribeEvent(priority = EventPriority.LOW) - public static void renderHud(RenderGuiEvent.Pre e) { - if ( - !ClientUtils.getOptions().hideGui - && CoordinatesDisplay.CONFIG.get().visible - && !ClientUtils.getClient().getDebugOverlay().showDebugScreen() - && CoordinatesDisplay.shouldHudRender - ) { - try { + public static void renderHud(RenderGuiEvent.Pre event) { + try { + if (CoordinatesDisplay.HUD.shouldRender(CoordinatesDisplay.getConfig().visibilityFilter)) { RenderSystem.enableBlend(); ModConfig config = CoordinatesDisplay.getConfig(); CoordinatesDisplay.HUD.render( - e.getGuiGraphics(), + event.getGuiGraphics(), Position.of(WorldUtils.getPlayer()), config.hudX, config.hudY, config.renderMode, config.startCorner, - false, config.hudScale ); - } catch (NullPointerException exception) { - CoordinatesDisplay.LOGGER.printStackTrace(exception); } - } + } catch (NullPointerException e) { + if (deltaError) { + throw new RuntimeException(e); + } + + CoordinatesDisplay.LOGGER.error("Unknown error from config file"); + CoordinatesDisplay.LOGGER.printStackTrace(e); + + CoordinatesDisplay.LOGGER.player.warn(GuiUtils.getTranslatable("message.coordinatesdisplay.configError")); + CoordinatesDisplay.CONFIG.resetConfig(); + deltaError = true; + } } } @@ -80,8 +82,15 @@ public static void renderHud(RenderGuiEvent.Pre e) { @Mod.EventBusSubscriber(modid = CoordinatesDisplay.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public static class ClientModEvents { @SubscribeEvent - public static void registerKeys(RegisterKeyMappingsEvent e) { - Keybinds.register(e); + public static void clientSetup(RegisterKeyMappingsEvent e) { + e.register(Bindings.hudEnabled); + e.register(Bindings.coordinatesGUIKeybind); + e.register(Bindings.copyLocation); + e.register(Bindings.sendLocation); + e.register(Bindings.copyPosTp); + e.register(Bindings.changeHudPosition); + e.register(Bindings.cycleDisplayMode); } } -} \ No newline at end of file + +} diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/ModUtilImpl.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/ModUtilImpl.java index 1a969b4..888807a 100644 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/ModUtilImpl.java +++ b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/ModUtilImpl.java @@ -6,7 +6,7 @@ public class ModUtilImpl { public static String getBlockName(Block block) { - return String.valueOf(ForgeRegistries.BLOCKS.getHolder(block)); + return String.valueOf(ForgeRegistries.BLOCKS.getKey(block)); } } diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/ConfigCommand.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/ConfigCommand.java deleted file mode 100644 index fa0ca72..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/ConfigCommand.java +++ /dev/null @@ -1,60 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.ModUtil; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.commands.Commands; - -public class ConfigCommand extends CoordinatesCommand { - @Override - public String getName() { - return "config"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - // open config file - builder.then(Commands.literal("file") - .executes(this::openConfigFile) - ); - - builder.then(Commands.literal("reload") - .executes(this::reloadConfig) - ); - - - // empty args - builder.executes(this::openConfigGui); - } - - private int openConfigGui(CommandContext context) { - - CoordinatesDisplay.shouldConfigGuiOpen = true; - CoordinatesDisplay.LOGGER.info("Opening Config GUI"); - - return 0; - - } - - private int openConfigFile(CommandContext context) { - if (ModUtil.openConfigFile()) { - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.config.open.success")); - return 0; - } else { - CoordinatesDisplay.LOGGER.info(super.translatable("command.coordinatesdisplay.config.open.fail")); - return 1; - } - } - - private int reloadConfig(CommandContext context) { - CoordinatesDisplay.CONFIG.reload(); - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.config.reload")); - CoordinatesDisplay.LOGGER.info("Reloaded all config"); - - return 0; - } - -} diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/CoordinatesCommand.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/CoordinatesCommand.java deleted file mode 100644 index 1206460..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/CoordinatesCommand.java +++ /dev/null @@ -1,11 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.command; - -import dev.boxadactle.boxlib.forge.command.BClientCommand; - -public abstract class CoordinatesCommand extends BClientCommand { - - @Override - public String getCommandName() { - return "coordinates"; - } -} diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/CornerCommand.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/CornerCommand.java deleted file mode 100644 index 6dd6636..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/CornerCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.commands.Commands; - -public class CornerCommand extends CoordinatesCommand { - @Override - public String getName() { - return "corner"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - ModConfig.StartCorner[] corners = ModConfig.StartCorner.values(); - - for (ModConfig.StartCorner corner : corners) { - builder.then(Commands.literal(corner.name().toLowerCase()) - .executes(c -> { - CoordinatesDisplay.getConfig().startCorner = corner; - CoordinatesDisplay.CONFIG.save(); - return 0; - }) - ); - } - } -} diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/GuiCommand.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/GuiCommand.java deleted file mode 100644 index 5a55b5f..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/GuiCommand.java +++ /dev/null @@ -1,28 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import net.minecraft.commands.CommandSourceStack; - -public class GuiCommand extends CoordinatesCommand { - @Override - public String getName() { - return "gui"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - builder.executes(this::openCoordinatesScreen); - - } - - private int openCoordinatesScreen(CommandContext context) { - - CoordinatesDisplay.shouldCoordinatesGuiOpen = true; - - return 0; - - } -} diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/HelpCommand.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/HelpCommand.java deleted file mode 100644 index 3078ad0..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/HelpCommand.java +++ /dev/null @@ -1,44 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.command; - -import com.google.common.collect.ImmutableList; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.boxlib.util.GuiUtils; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.network.chat.Component; - -import java.util.List; - -public class HelpCommand extends CoordinatesCommand { - - @Override - public String getName() { - return "help"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - builder.executes(this::sendHelpMessage); - } - - private int sendHelpMessage(CommandContext context) { - List components = ImmutableList.of( - GuiUtils.colorize(Component.translatable("command.coordinatesdisplay.helpmenu"), GuiUtils.AQUA), - Component.translatable("command.coordinatesdisplay.config"), - Component.translatable("command.coordinatesdisplay.gui"), - Component.translatable("command.coordinatesdisplay.help"), - Component.translatable("command.coordinatesdisplay.mode"), - Component.translatable("command.coordinatesdisplay.movehud"), - Component.translatable("command.coordinatesdisplay.position"), - Component.translatable("command.coordinatesdisplay.toggle") - ); - - components.forEach(c -> { - CoordinatesDisplay.LOGGER.player.chat(c); - }); - - return 0; - } - -} \ No newline at end of file diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/ModeCommand.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/ModeCommand.java deleted file mode 100644 index b6b4e82..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/ModeCommand.java +++ /dev/null @@ -1,32 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import dev.boxadactle.coordinatesdisplay.hud.CoordinatesHuds; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.commands.Commands; - -public class ModeCommand extends CoordinatesCommand { - @Override - public String getName() { - return "mode"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - String[] modes = CoordinatesHuds.registeredOverlays.keySet().toArray(new String[0]); - - for (String mode : modes) { - builder.then(Commands.literal(mode.toLowerCase()) - .executes(c -> { - CoordinatesDisplay.getConfig().renderMode = mode; - CoordinatesDisplay.CONFIG.save(); - return 0; - }) - ); - } - - } -} diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/MoveHudCommand.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/MoveHudCommand.java deleted file mode 100644 index 963103a..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/MoveHudCommand.java +++ /dev/null @@ -1,28 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import net.minecraft.commands.CommandSourceStack; - -public class MoveHudCommand extends CoordinatesCommand { - @Override - public String getName() { - return "movehud"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - builder.executes(this::openHudPositionScreen); - - } - - private int openHudPositionScreen(CommandContext context) { - - CoordinatesDisplay.shouldHudPositionGuiOpen = true; - - return 0; - - } -} diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/ToggleCommand.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/ToggleCommand.java deleted file mode 100644 index d6f1a7d..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/command/ToggleCommand.java +++ /dev/null @@ -1,31 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.command; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import net.minecraft.commands.CommandSourceStack; - -public class ToggleCommand extends CoordinatesCommand { - @Override - public String getName() { - return "toggle"; - } - - @Override - public void build(LiteralArgumentBuilder builder) { - - builder.executes(this::toggleHud); - - } - - private int toggleHud(CommandContext context) { - CoordinatesDisplay.LOGGER.info("Toggling Hud"); - - CoordinatesDisplay.CONFIG.get().visible = !CoordinatesDisplay.CONFIG.get().visible; - CoordinatesDisplay.CONFIG.save(); - - CoordinatesDisplay.LOGGER.player.info(super.translatable("command.coordinatesdisplay.togglemessage")); - - return 0; - } -} diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/init/Commands.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/init/Commands.java deleted file mode 100644 index 76e978b..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/init/Commands.java +++ /dev/null @@ -1,21 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.init; - -import dev.boxadactle.boxlib.forge.command.BCommandManager; -import dev.boxadactle.coordinatesdisplay.forge.command.*; - -public class Commands { - - public static void register() { - BCommandManager.registerCommand("coordinates", list -> { - list.add(ConfigCommand::new); - list.add(CornerCommand::new); - list.add(GuiCommand::new); - list.add(HelpCommand::new); - list.add(ModeCommand::new); - list.add(MoveHudCommand::new); - list.add(PositionCommand::new); - list.add(ToggleCommand::new); - }); - } - -} diff --git a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/init/Keybinds.java b/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/init/Keybinds.java deleted file mode 100644 index b39b199..0000000 --- a/forge/src/main/java/dev/boxadactle/coordinatesdisplay/forge/init/Keybinds.java +++ /dev/null @@ -1,54 +0,0 @@ -package dev.boxadactle.coordinatesdisplay.forge.init; - -import com.mojang.blaze3d.platform.InputConstants; -import dev.boxadactle.boxlib.math.mathutils.Mappers; -import dev.boxadactle.boxlib.util.ClientUtils; -import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; -import dev.boxadactle.coordinatesdisplay.config.ModConfig; -import dev.boxadactle.coordinatesdisplay.ModUtil; -import dev.boxadactle.coordinatesdisplay.position.Position; -import net.minecraft.client.KeyMapping; -import net.minecraft.client.Minecraft; -import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import org.lwjgl.glfw.GLFW; - -public class Keybinds { - public static KeyMapping visibleKeybind = new KeyMapping("key.coordinatesdisplay.visible", GLFW.GLFW_KEY_O, "category.coordinatesdisplay"); - public static KeyMapping coordinatesGUIKeybind = new KeyMapping("key.coordinatesdisplay.coordinatesgui", GLFW.GLFW_KEY_C, "category.coordinatesdisplay"); - - public static KeyMapping copyLocation = new KeyMapping("key.coordinatesdisplay.copypos", GLFW.GLFW_KEY_B, "category.coordinatesdisplay"); - public static KeyMapping sendLocation = new KeyMapping("key.coordinatesdisplay.sendpos", GLFW.GLFW_KEY_X, "category.coordinatesdisplay"); - public static KeyMapping copyPosTp = new KeyMapping("key.coordinatesdisplay.copypostp", GLFW.GLFW_KEY_N, "category.coordinatesdisplay"); - - public static KeyMapping changeHudPosition = new KeyMapping("key.coordinatesdisplay.changeHudPos", GLFW.GLFW_KEY_F9, "category.coordinatesdisplay"); - public static KeyMapping cycleDisplayMode = new KeyMapping("key.coordinatesdisplay.cycleDisplayMode", GLFW.GLFW_KEY_M, "category.coordinatesdisplay"); - - public static void register(RegisterKeyMappingsEvent e) { - e.register(visibleKeybind); - e.register(coordinatesGUIKeybind); - - e.register(copyLocation); - e.register(sendLocation); - e.register(copyPosTp); - - e.register(changeHudPosition); - e.register(cycleDisplayMode); - } - - public static void checkBindings(Position pos) { - if (visibleKeybind.consumeClick()) CoordinatesDisplay.Bindings.visible(); - - if (coordinatesGUIKeybind.consumeClick()) CoordinatesDisplay.Bindings.coordinatesGui(); - - if (copyLocation.consumeClick()) CoordinatesDisplay.Bindings.copyLocation(pos); - - if (sendLocation.consumeClick()) CoordinatesDisplay.Bindings.sendLocation(pos); - - if (copyPosTp.consumeClick()) CoordinatesDisplay.Bindings.copyTeleportCommand(pos); - - if (changeHudPosition.consumeClick()) CoordinatesDisplay.Bindings.openHudPositionGui(); - - if (cycleDisplayMode.consumeClick()) CoordinatesDisplay.Bindings.cycleDisplayMode(); - } - -} diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 32b1ba0..c9b5ba7 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -1,66 +1,32 @@ -# This is an example mods.toml file. It contains the data relating to the loading mods. -# There are several mandatory fields (#mandatory), and many more that are optional (#optional). -# The overall format is standard TOML format, v0.5.0. -# Note that there are a couple of TOML lists in this file. -# Find more information on toml format here: https://github.com/toml-lang/toml -# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml -modLoader="javafml" #mandatory -# A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[48,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. -# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. -# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. +modLoader="javafml" +loaderVersion="[0,)" license="MIT" -# A URL to refer people to when problems occur with this mod -issueTrackerURL="https://github.com/Boxadactle/coordinates-display/issues" -# A list of mods - how many allowed here is determined by the individual mod loader -[[mods]] #mandatory -# The modid of the mod -modId="coordinatesdisplay" #mandatory -# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -# ${version} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata -# see the associated build.gradle script for how to populate this completely automatically during a build -version="${version}" #mandatory -# A display name for the mod -displayName="CoordinatesDisplay" #mandatory -# A URL to query for updates for this mod. See the JSON update specification -updateJSONURL="https://boxadactle.dev/update/coordinates-display.json" #optional -# A URL for the "homepage" for this mod, displayed in the mod UI -#displayURL="http://example.com/" #optional -# A file name (in the root of the mod JAR) containing a logo for display -logoFile="icon.png" #optional -# A text field displayed in the mod UI -#credits="Thanks for this example mod goes to Java" #optional -# A text field displayed in the mod UI -#authors="Love, Cheese and small house plants" #optional -# Display Test controls the display for your mod in the server connection screen -# MATCH_VERSION means that your mod will cause a red X if the versions on client and server differ. This is the default behaviour and should be what you choose if you have server and client elements to your mod. -# IGNORE_SERVER_VERSION means that your mod will not cause a red X if it's present on the server but not on the client. This is what you should use if you're a server only mod. -# IGNORE_ALL_VERSION means that your mod will not cause a red X if it's present on the client or the server. This is a special case and should only be used if your mod has no server component. -# NONE means that no display test is set on your mod. You need to do this yourself, see IExtensionPoint.DisplayTest for more information. You can define any scheme you wish with this value. -# IMPORTANT NOTE: this is NOT an instruction as to which environments (CLIENT or DEDICATED SERVER) your mod loads on. Your mod should load (and maybe do nothing!) whereever it finds itself. -#displayTest="MATCH_VERSION" # MATCH_VERSION is the default if nothing is specified (#optional) -# The description text for the mod (multi line!) (#mandatory) -description=''' -A mod that displays your coordinates on the in-game HUD. -''' -# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. -[[dependencies.coordinatesdisplay]] #optional - # the modid of the dependency - modId="forge" #mandatory - # Does this dependency have to exist - if not, ordering below must be specified - mandatory=true #mandatory - # The version range of the dependency - versionRange="[46,)" #mandatory - # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory - ordering="NONE" - # Side this dependency is applied on - BOTH, CLIENT or SERVER - side="BOTH" -# Here's another dependency +[[mods]] +modId="coordinatesdisplay" +version="${version}" +displayName="Coordinates Display" +authors="Boxadactle" +description='''A mod that displays your coordinates on the in-game HUD.''' +logoFile='icon.png' + +[[dependencies.coordinatesdisplay]] +modId="forge" +mandatory=true +versionRange="[0,)" +ordering="NONE" +side="BOTH" + +[[dependencies.coordinatesdisplay]] +modId="minecraft" +mandatory=true +versionRange="[1.20,1.20.1)" +ordering="NONE" +side="BOTH" + [[dependencies.coordinatesdisplay]] - modId="minecraft" - mandatory=true - # This version range declares a minimum of the current minecraft version up to but not including the next major version - versionRange="[1.20,1.21)" - ordering="NONE" - side="BOTH" +modId="boxlib" +mandatory=true +versionRange="[10.0.0,11.0.0)" +ordering="NONE" +side="CLIENT" \ No newline at end of file diff --git a/forge/src/main/resources/coordinatesdisplay.mixins.json b/forge/src/main/resources/coordinatesdisplay.mixins.json deleted file mode 100644 index 1ea6081..0000000 --- a/forge/src/main/resources/coordinatesdisplay.mixins.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "dev.boxadactle.coordinatesdisplay.mixin.forge", - "compatibilityLevel": "JAVA_17", - "mixins": [ - ], - "client": [ - ], - "injectors": { - "defaultRequire": 1 - } -} diff --git a/forge/src/main/resources/icon.png b/forge/src/main/resources/icon.png index 662000f..c808599 100644 Binary files a/forge/src/main/resources/icon.png and b/forge/src/main/resources/icon.png differ diff --git a/forge/src/main/resources/pack.mcmeta b/forge/src/main/resources/pack.mcmeta index ab21dac..7a209b7 100644 --- a/forge/src/main/resources/pack.mcmeta +++ b/forge/src/main/resources/pack.mcmeta @@ -4,4 +4,4 @@ "pack_format": 15, "forge:server_data_pack_format": 12 } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 8b969e9..e4f8801 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,17 +1,27 @@ -org.gradle.jvmargs=-Xmx1G +# Done to increase the memory available to Gradle. +org.gradle.jvmargs=-Xmx2G +org.gradle.parallel=true -minecraft_version=1.20.2 +# Mod properties +mod_version = 9.1.0 +maven_group = dev.boxadactle +archives_name = CoordinatesDisplay +enabled_platforms = fabric,forge -archives_base_name=CoordinatesDisplay -mod_version=8.0.0 -maven_group=dev.boxadactle +# Minecraft properties +minecraft_version = 1.20 -architectury_version=${ARCHITECTURY_API_VERSION} +# Dependencies +fabric_loader_version = 0.15.11 +fabric_api_version = 0.83.0+1.20 +forge_version = 46.0.14 -fabric_loader_version=0.14.22 -fabric_api_version=0.89.2+1.20.2 +modmenu_version=7.0.1 +boxlib_version = 10.3.1 -forge_version=1.20.2-48.0.4 - -boxlib_version=10.2.0 -modmenu_version=8.0.0-beta.2 +# publishing +game_versions = 1.20 +project_id_curseforge = 646464 +project_id_modrinth = 3mW8PdUo +release_type = release +changelog_file = CHANGELOG.md \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cb..e644113 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5083229..a441313 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68..aae79b5 100644 --- a/gradlew +++ b/gradlew @@ -83,10 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -127,16 +125,18 @@ if [ -n "$JAVA_HOME" ] ; then fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -144,7 +144,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +152,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,11 +197,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ @@ -241,4 +245,4 @@ eval "set -- $( tr '\n' ' ' )" '"$@"' -exec "$JAVACMD" "$@" +exec "$JAVACMD" "$@" \ No newline at end of file diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..0faad1a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -89,4 +89,4 @@ exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal -:omega +:omega \ No newline at end of file diff --git a/neoforge/build.gradle b/neoforge/build.gradle new file mode 100644 index 0000000..3583dcc --- /dev/null +++ b/neoforge/build.gradle @@ -0,0 +1,95 @@ +plugins { + id 'com.github.johnrengelman.shadow' + id "me.shedaniel.unified-publishing" +} + +architectury { + platformSetupLoomIde() + neoForge() +} + +configurations { + common { + canBeResolved = true + canBeConsumed = false + } + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentNeoForge.extendsFrom common + + // Files in this configuration will be bundled into your mod using the Shadow plugin. + // Don't use the `shadow` configuration from the plugin itself as it's meant for excluding files. + shadowBundle { + canBeResolved = true + canBeConsumed = false + } +} + +repositories { + maven { + name = 'NeoForged' + url = 'https://maven.neoforged.net/releases' + } +} + +dependencies { + neoForge "net.neoforged:neoforge:$rootProject.neoforge_version" + + modImplementation "dev.boxadactle:Boxlib-neoforge:$rootProject.boxlib_version" + + common(project(path: ':common', configuration: 'namedElements')) { transitive false } + shadowBundle project(path: ':common', configuration: 'transformProductionNeoForge') +} + +processResources { + inputs.property 'version', project.version + + filesMatching('META-INF/neoforge.mods.toml') { + expand version: project.version + } +} + +shadowJar { + configurations = [project.configurations.shadowBundle] + archiveClassifier = 'dev-shadow' +} + +remapJar { + input.set shadowJar.archiveFile +} + +unifiedPublishing { + project { + displayName = "[NeoForge ${rootProject.minecraft_version}] v$rootProject.mod_version" + version = "$rootProject.version-neoforge" + changelog = new File(rootProject.rootDir, rootProject.changelog_file).text + releaseType = rootProject.release_type + gameVersions = Arrays.asList(rootProject.game_versions.split(",")) + gameLoaders = [ "neoforge" ] + relations { + it.depends { + it.curseforge = "boxlib" + it.modrinth = "boxlib" + } + } + + mainPublication tasks.remapJar + + var cfToken = System.getenv("CURSEFORGE_TOKEN") + if (cfToken != null) { + curseforge { + token = cfToken + id = rootProject.project_id_curseforge + } + } + + var modrinthToken = System.getenv("MODRINTH_TOKEN") + if (modrinthToken != null) { + modrinth { + token = modrinthToken + id = "3mW8PdUo" + version = "${rootProject.mod_version}-${project.name}" + } + } + } +} \ No newline at end of file diff --git a/neoforge/gradle.properties b/neoforge/gradle.properties new file mode 100644 index 0000000..2e6ed76 --- /dev/null +++ b/neoforge/gradle.properties @@ -0,0 +1 @@ +loom.platform = neoforge diff --git a/neoforge/src/main/java/dev/boxadactle/coordinatesdisplay/neoforge/CoordinatesDisplayNeoforge.java b/neoforge/src/main/java/dev/boxadactle/coordinatesdisplay/neoforge/CoordinatesDisplayNeoforge.java new file mode 100644 index 0000000..9a1b421 --- /dev/null +++ b/neoforge/src/main/java/dev/boxadactle/coordinatesdisplay/neoforge/CoordinatesDisplayNeoforge.java @@ -0,0 +1,95 @@ +package dev.boxadactle.coordinatesdisplay.forge; + +import com.mojang.blaze3d.systems.RenderSystem; +import dev.boxadactle.boxlib.util.GuiUtils; +import dev.boxadactle.boxlib.util.WorldUtils; +import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.config.ModConfig; +import dev.boxadactle.coordinatesdisplay.config.screen.ConfigScreen; +import dev.boxadactle.coordinatesdisplay.hud.UnknownRendererException; +import dev.boxadactle.coordinatesdisplay.hud.UnknownVisibilityFilterException; +import dev.boxadactle.coordinatesdisplay.forge.init.Keybinds; +import dev.boxadactle.coordinatesdisplay.position.Position; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.EventPriority; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.client.event.InputEvent; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.neoforge.client.event.RenderGuiEvent; +import net.neoforged.neoforge.client.gui.IConfigScreenFactory; + +@SuppressWarnings("unused") +@Mod(CoordinatesDisplay.MOD_ID) +public class CoordinatesDisplayNeoforge { + + public static boolean deltaError = false; + + public CoordinatesDisplayNeoforge() { + CoordinatesDisplay.init(); + + ModLoadingContext.get().registerExtensionPoint(IConfigScreenFactory.class, () -> + (minecraft, screen) -> new ConfigScreen(screen) + ); + } + + @EventBusSubscriber(modid = CoordinatesDisplay.MOD_ID, value = Dist.CLIENT) + public static class ClientNeoforgeEvents { + + @SubscribeEvent + public static void keyInput(InputEvent.Key e) { + Player player = WorldUtils.getPlayer(); + if (player != null) { + Keybinds.checkBindings(Position.of(player)); + } + } + + @SubscribeEvent(priority = EventPriority.LOW) + public static void renderHud(RenderGuiEvent.Post event) { + try { + if (CoordinatesDisplay.HUD.shouldRender(CoordinatesDisplay.getConfig().visibilityFilter)) { + RenderSystem.enableBlend(); + + ModConfig config = CoordinatesDisplay.getConfig(); + + CoordinatesDisplay.HUD.render( + event.getGuiGraphics(), + Position.of(WorldUtils.getPlayer()), + config.hudX, + config.hudY, + config.renderMode, + config.startCorner, + false, + config.hudScale + ); + } + } catch (NullPointerException e) { + if (deltaError) { + throw new RuntimeException(e); + } + + CoordinatesDisplay.LOGGER.error("Unknown error from config file"); + CoordinatesDisplay.LOGGER.printStackTrace(e); + + CoordinatesDisplay.LOGGER.player.warn(GuiUtils.getTranslatable("message.coordinatesdisplay.configError")); + CoordinatesDisplay.CONFIG.resetConfig(); + + deltaError = true; + } + } + + } + + @EventBusSubscriber(modid = CoordinatesDisplay.MOD_ID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD) + public static class ClientModEvents { + @SubscribeEvent + public static void registerKeys(RegisterKeyMappingsEvent e) { + Keybinds.register(e); + } + } + +} diff --git a/neoforge/src/main/java/dev/boxadactle/coordinatesdisplay/neoforge/ModUtilImpl.java b/neoforge/src/main/java/dev/boxadactle/coordinatesdisplay/neoforge/ModUtilImpl.java new file mode 100644 index 0000000..b9330d9 --- /dev/null +++ b/neoforge/src/main/java/dev/boxadactle/coordinatesdisplay/neoforge/ModUtilImpl.java @@ -0,0 +1,12 @@ +package dev.boxadactle.coordinatesdisplay.forge; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.level.block.Block; + +public class ModUtilImpl { + + public static String getBlockName(Block block) { + return String.valueOf(BuiltInRegistries.BLOCK.getId(block)); + } + +} diff --git a/neoforge/src/main/java/dev/boxadactle/coordinatesdisplay/neoforge/init/Keybinds.java b/neoforge/src/main/java/dev/boxadactle/coordinatesdisplay/neoforge/init/Keybinds.java new file mode 100644 index 0000000..384ce9b --- /dev/null +++ b/neoforge/src/main/java/dev/boxadactle/coordinatesdisplay/neoforge/init/Keybinds.java @@ -0,0 +1,39 @@ +package dev.boxadactle.coordinatesdisplay.forge.init; + +import dev.boxadactle.coordinatesdisplay.CoordinatesDisplay; +import dev.boxadactle.coordinatesdisplay.position.Position; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; + +import static dev.boxadactle.coordinatesdisplay.CoordinatesDisplay.Bindings.*; + +public class Keybinds { + + public static void register(RegisterKeyMappingsEvent e) { + e.register(hudEnabled); + e.register(coordinatesGUIKeybind); + + e.register(copyLocation); + e.register(sendLocation); + e.register(copyPosTp); + + e.register(changeHudPosition); + e.register(cycleDisplayMode); + } + + public static void checkBindings(Position pos) { + if (hudEnabled.consumeClick()) CoordinatesDisplay.Bindings.toggleHud(); + + if (coordinatesGUIKeybind.consumeClick()) CoordinatesDisplay.Bindings.coordinatesGui(); + + if (copyLocation.consumeClick()) CoordinatesDisplay.Bindings.copyLocation(pos); + + if (sendLocation.consumeClick()) CoordinatesDisplay.Bindings.sendLocation(pos); + + if (copyPosTp.consumeClick()) CoordinatesDisplay.Bindings.copyTeleportCommand(pos); + + if (changeHudPosition.consumeClick()) CoordinatesDisplay.Bindings.openHudPositionGui(); + + if (cycleDisplayMode.consumeClick()) CoordinatesDisplay.Bindings.cycleDisplayMode(); + } + +} diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 0000000..c54affd --- /dev/null +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,38 @@ +modLoader = "javafml" +loaderVersion = "[2,)" +#issueTrackerURL = "" +license = "MIT" + +[[mods]] +modId = "coordinatesdisplay" +version = "${version}" +displayName = "CoordinatesDisplay" +authors = "Boxadactle" +description = ''' +The most basic client-slide mod +''' +logoFile = "icon.png" + +[[dependencies.coordinatesdisplay]] +modId = "neoforge" +type = "required" +versionRange = "[21,)" +ordering = "NONE" +side = "BOTH" + +[[dependencies.coordinatesdisplay]] +modId = "minecraft" +type = "required" +versionRange = "[1.21,)" +ordering = "NONE" +side = "BOTH" + +[[dependencies.coordinatesdisplay]] +modId = "boxlib" +type = "required" +versionRange = "[14.0.0, 15.0.0)" +ordering = "NONE" +side = "BOTH" + +[[mixins]] +config = "coordinatesdisplay-common.mixins.json" \ No newline at end of file diff --git a/neoforge/src/main/resources/icon.png b/neoforge/src/main/resources/icon.png new file mode 100644 index 0000000..c808599 Binary files /dev/null and b/neoforge/src/main/resources/icon.png differ diff --git a/neoforge/src/main/resources/pack.mcmeta b/neoforge/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..ab21dac --- /dev/null +++ b/neoforge/src/main/resources/pack.mcmeta @@ -0,0 +1,7 @@ +{ + "pack": { + "description": "CoordinatesDisplay resources", + "pack_format": 15, + "forge:server_data_pack_format": 12 + } +} diff --git a/settings.gradle b/settings.gradle index 06a89e4..5fc57a8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,11 +2,14 @@ pluginManagement { repositories { maven { url "https://maven.fabricmc.net/" } maven { url "https://maven.architectury.dev/" } - maven { url "https://maven.minecraftforge.net/" } + maven { url "https://files.minecraftforge.net/maven/" } gradlePluginPortal() } } -include("common") -include("fabric") -include("forge") \ No newline at end of file +rootProject.name = 'CoordinatesDisplay' + +include 'common' +include 'fabric' +//include 'neoforge' +include 'forge' \ No newline at end of file