From 2dd1566e26d42bbb528c9bed3ceccbc5f9bb0897 Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 01:42:05 -0400 Subject: [PATCH 01/12] test numero uno --- .../impl/rendering/NameRenderer.java | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index 91488845..5c60770a 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -3,6 +3,9 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.Blocks; import net.minecraft.network.chat.Component; import red.jackf.chesttracker.api.memory.Memory; import red.jackf.chesttracker.api.memory.MemoryKey; @@ -36,8 +39,34 @@ private static void renderNamesForKey(WorldRenderContext context, MemoryBankImpl if (entry.getKey().distToCenterSqr(context.camera().getPosition()) < maxRangeSq) { Component name = entry.getValue().renderName(); if (name == null) continue; - RenderUtils.scheduleLabelRender(entry.getValue().getCenterPosition(entry.getKey()).add(0, 1, 0), entry.getValue().renderName()); + + BlockPos blockPos = entry.getKey(); + Vec3 facingOffset = getFacingOffset(blockpos); + Vec3 renderPos = entry.getValue().getCenterPosition(blockPos).add(facingOffset); + // RenderUtils.scheduleLabelRender(entry.getValue().getCenterPosition(entry.getKey()).add(1, 0, 0), entry.getValue().renderName()); } } } + + private static Vec3 getFacingOffset(BlockPos blockPos) { + BlockState blockState = context.world().getBlockState(blockPos); + Direction facing = blockState.getValue(BlockStateProperties.FACING); + + switch (facing) { + case NORTH: + return new Vec3(0, 0, -1); + case SOUTH: + return new Vec3(0, 0, 1); + case WEST: + return new Vec3(-1, 0, 0); + case EAST: + return new Vec3(1, 0, 0); + case UP: + return new Vec3(0, 1, 0); + case DOWN: + return new Vec3(0, -1, 0); + default: + return Vec3.ZERO; + } + } } From 883a32aeab358efe0416d2c2cd3cebbef44fdd96 Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 01:46:04 -0400 Subject: [PATCH 02/12] import Vec3 --- .../java/red/jackf/chesttracker/impl/rendering/NameRenderer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index 5c60770a..e5433734 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.Blocks; import net.minecraft.network.chat.Component; +import net.minecraft.world.phys.Vec3; import red.jackf.chesttracker.api.memory.Memory; import red.jackf.chesttracker.api.memory.MemoryKey; import red.jackf.chesttracker.api.providers.ProviderUtils; From 383c3b5cc784e73644ef92f2dc98938ed4f647da Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 01:49:22 -0400 Subject: [PATCH 03/12] makin things happen :3 --- .../impl/rendering/NameRenderer.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index e5433734..eeddc80f 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.Blocks; import net.minecraft.network.chat.Component; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.Vec3; import red.jackf.chesttracker.api.memory.Memory; import red.jackf.chesttracker.api.memory.MemoryKey; @@ -42,7 +43,7 @@ private static void renderNamesForKey(WorldRenderContext context, MemoryBankImpl if (name == null) continue; BlockPos blockPos = entry.getKey(); - Vec3 facingOffset = getFacingOffset(blockpos); + Vec3 facingOffset = getFacingOffset(blockPos); Vec3 renderPos = entry.getValue().getCenterPosition(blockPos).add(facingOffset); // RenderUtils.scheduleLabelRender(entry.getValue().getCenterPosition(entry.getKey()).add(1, 0, 0), entry.getValue().renderName()); } @@ -50,24 +51,18 @@ private static void renderNamesForKey(WorldRenderContext context, MemoryBankImpl } private static Vec3 getFacingOffset(BlockPos blockPos) { - BlockState blockState = context.world().getBlockState(blockPos); + BlockState blockState; + blockState = blockPos().getBlockState(blockPos); Direction facing = blockState.getValue(BlockStateProperties.FACING); - switch (facing) { - case NORTH: - return new Vec3(0, 0, -1); - case SOUTH: - return new Vec3(0, 0, 1); - case WEST: - return new Vec3(-1, 0, 0); - case EAST: - return new Vec3(1, 0, 0); - case UP: - return new Vec3(0, 1, 0); - case DOWN: - return new Vec3(0, -1, 0); - default: - return Vec3.ZERO; - } + return switch (facing) { + case NORTH -> new Vec3(0, 0, -1); + case SOUTH -> new Vec3(0, 0, 1); + case WEST -> new Vec3(-1, 0, 0); + case EAST -> new Vec3(1, 0, 0); + case UP -> new Vec3(0, 1, 0); + case DOWN -> new Vec3(0, -1, 0); + default -> Vec3.ZERO; + }; } } From ae83d144791710a1d46f2ce81938cae11e83de48 Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 01:51:37 -0400 Subject: [PATCH 04/12] no errors? --- .../red/jackf/chesttracker/impl/rendering/NameRenderer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index eeddc80f..4ab7d99a 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -21,6 +21,8 @@ import java.util.Set; public class NameRenderer { + private static WorldRenderContext context; + public static void setup() { WorldRenderEvents.BEFORE_BLOCK_OUTLINE.register((context, hitResult) -> { MemoryBankAccessImpl.INSTANCE.getLoadedInternal().ifPresent(bank -> { @@ -51,8 +53,7 @@ private static void renderNamesForKey(WorldRenderContext context, MemoryBankImpl } private static Vec3 getFacingOffset(BlockPos blockPos) { - BlockState blockState; - blockState = blockPos().getBlockState(blockPos); + BlockState blockState = context.world().getBlockState(blockPos); Direction facing = blockState.getValue(BlockStateProperties.FACING); return switch (facing) { From 6022de0d2f7d4775fe021557597da1732325e418 Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 01:54:19 -0400 Subject: [PATCH 05/12] i think i got her to work --- .../red/jackf/chesttracker/impl/rendering/NameRenderer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index 4ab7d99a..19abc46e 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -21,7 +21,6 @@ import java.util.Set; public class NameRenderer { - private static WorldRenderContext context; public static void setup() { WorldRenderEvents.BEFORE_BLOCK_OUTLINE.register((context, hitResult) -> { @@ -48,11 +47,13 @@ private static void renderNamesForKey(WorldRenderContext context, MemoryBankImpl Vec3 facingOffset = getFacingOffset(blockPos); Vec3 renderPos = entry.getValue().getCenterPosition(blockPos).add(facingOffset); // RenderUtils.scheduleLabelRender(entry.getValue().getCenterPosition(entry.getKey()).add(1, 0, 0), entry.getValue().renderName()); + + RenderUtils.scheduleLabelRender(renderPos, name); } } } - private static Vec3 getFacingOffset(BlockPos blockPos) { + private static Vec3 getFacingOffset(WorldRenderContext context, BlockPos blockPos) { BlockState blockState = context.world().getBlockState(blockPos); Direction facing = blockState.getValue(BlockStateProperties.FACING); From 9628c77631f4837316547df0c8a16b748da8fd55 Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 01:57:02 -0400 Subject: [PATCH 06/12] i forgot to add this woooooops --- .../red/jackf/chesttracker/impl/rendering/NameRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index 19abc46e..f2715142 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -44,7 +44,7 @@ private static void renderNamesForKey(WorldRenderContext context, MemoryBankImpl if (name == null) continue; BlockPos blockPos = entry.getKey(); - Vec3 facingOffset = getFacingOffset(blockPos); + Vec3 facingOffset = getFacingOffset(context, blockPos); Vec3 renderPos = entry.getValue().getCenterPosition(blockPos).add(facingOffset); // RenderUtils.scheduleLabelRender(entry.getValue().getCenterPosition(entry.getKey()).add(1, 0, 0), entry.getValue().renderName()); From c63d5514e3db6b19e29c7806d905544de72f25a7 Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 01:57:35 -0400 Subject: [PATCH 07/12] removing some warnings --- .../red/jackf/chesttracker/impl/rendering/NameRenderer.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index f2715142..3d469bf5 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -5,7 +5,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.Blocks; import net.minecraft.network.chat.Component; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.Vec3; @@ -64,7 +63,6 @@ private static Vec3 getFacingOffset(WorldRenderContext context, BlockPos blockPo case EAST -> new Vec3(1, 0, 0); case UP -> new Vec3(0, 1, 0); case DOWN -> new Vec3(0, -1, 0); - default -> Vec3.ZERO; }; } } From 8362a01a2e9083770e4860c2a27934272ebda494 Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 02:03:03 -0400 Subject: [PATCH 08/12] need to manually detect chest facing --- .../impl/rendering/NameRenderer.java | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index 3d469bf5..21d766c0 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -4,6 +4,7 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.network.chat.Component; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -54,15 +55,29 @@ private static void renderNamesForKey(WorldRenderContext context, MemoryBankImpl private static Vec3 getFacingOffset(WorldRenderContext context, BlockPos blockPos) { BlockState blockState = context.world().getBlockState(blockPos); - Direction facing = blockState.getValue(BlockStateProperties.FACING); - - return switch (facing) { - case NORTH -> new Vec3(0, 0, -1); - case SOUTH -> new Vec3(0, 0, 1); - case WEST -> new Vec3(-1, 0, 0); - case EAST -> new Vec3(1, 0, 0); - case UP -> new Vec3(0, 1, 0); - case DOWN -> new Vec3(0, -1, 0); - }; + if (blockState.is(Blocks.CHEST)) { + Direction facing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING); + return switch (facing) { + case NORTH -> new Vec3(0, 0, -1); + case SOUTH -> new Vec3(0, 0, 1); + case WEST -> new Vec3(-1, 0, 0); + case EAST -> new Vec3(1, 0, 0); + default -> Vec3.ZERO; + }; + } else if (blockState.hasProperty(BlockStateProperties.FACING)) { + Direction facing = blockState.getValue(BlockStateProperties.FACING); + return switch (facing) { + case NORTH -> new Vec3(0, 0, -1); + case SOUTH -> new Vec3(0, 0, 1); + case WEST -> new Vec3(-1, 0, 0); + case EAST -> new Vec3(1, 0, 0); + case UP -> new Vec3(0, 1, 0); + case DOWN -> new Vec3(0, -1, 0); + default -> Vec3.ZERO; + }; + } else { + // Default offset if no specific handling is defined + return new Vec3(0, 0, 0); + } } } From e44a4dcc7d7e5f750d5584036c4cc09751daac79 Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 02:10:38 -0400 Subject: [PATCH 09/12] IT WORKS!! --- gradlew | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 gradlew diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 From f65e337889c7c88011b0b63294733fe425b650cc Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 02:15:29 -0400 Subject: [PATCH 10/12] add the above block logic --- .../chesttracker/impl/rendering/NameRenderer.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index 21d766c0..104e56d2 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -55,6 +55,11 @@ private static void renderNamesForKey(WorldRenderContext context, MemoryBankImpl private static Vec3 getFacingOffset(WorldRenderContext context, BlockPos blockPos) { BlockState blockState = context.world().getBlockState(blockPos); + BlockPos aboveBlockPos = blockPos.above(); + BlockState aboveBlockState = context.world().getBlockState(aboveBlockPos); + if (aboveBlockState.isAir()) { + return new Vec3(0,1,0); + } else { if (blockState.is(Blocks.CHEST)) { Direction facing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING); return switch (facing) { @@ -75,9 +80,8 @@ private static Vec3 getFacingOffset(WorldRenderContext context, BlockPos blockPo case DOWN -> new Vec3(0, -1, 0); default -> Vec3.ZERO; }; - } else { - // Default offset if no specific handling is defined - return new Vec3(0, 0, 0); } + } + return new Vec3(0,1,0); } } From 2c51806da317142e1315be3d2ac08d0fa628163f Mon Sep 17 00:00:00 2001 From: ash Date: Fri, 16 Aug 2024 02:24:41 -0400 Subject: [PATCH 11/12] some code cleanup :p --- .../impl/rendering/NameRenderer.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index 104e56d2..281bfade 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -46,7 +46,6 @@ private static void renderNamesForKey(WorldRenderContext context, MemoryBankImpl BlockPos blockPos = entry.getKey(); Vec3 facingOffset = getFacingOffset(context, blockPos); Vec3 renderPos = entry.getValue().getCenterPosition(blockPos).add(facingOffset); - // RenderUtils.scheduleLabelRender(entry.getValue().getCenterPosition(entry.getKey()).add(1, 0, 0), entry.getValue().renderName()); RenderUtils.scheduleLabelRender(renderPos, name); } @@ -59,29 +58,25 @@ private static Vec3 getFacingOffset(WorldRenderContext context, BlockPos blockPo BlockState aboveBlockState = context.world().getBlockState(aboveBlockPos); if (aboveBlockState.isAir()) { return new Vec3(0,1,0); - } else { - if (blockState.is(Blocks.CHEST)) { - Direction facing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING); + } else if (blockState.hasProperty(BlockStateProperties.FACING)) { + Direction facing = blockState.getValue(BlockStateProperties.FACING); return switch (facing) { case NORTH -> new Vec3(0, 0, -1); case SOUTH -> new Vec3(0, 0, 1); case WEST -> new Vec3(-1, 0, 0); case EAST -> new Vec3(1, 0, 0); - default -> Vec3.ZERO; + case UP -> new Vec3(0, 1, 0); + case DOWN -> new Vec3(0, -1, 0); }; - } else if (blockState.hasProperty(BlockStateProperties.FACING)) { - Direction facing = blockState.getValue(BlockStateProperties.FACING); + } else { + Direction facing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING); return switch (facing) { case NORTH -> new Vec3(0, 0, -1); case SOUTH -> new Vec3(0, 0, 1); case WEST -> new Vec3(-1, 0, 0); case EAST -> new Vec3(1, 0, 0); - case UP -> new Vec3(0, 1, 0); - case DOWN -> new Vec3(0, -1, 0); default -> Vec3.ZERO; }; } - } - return new Vec3(0,1,0); } } From d8469217cdcad3eb0e84adf5860df3ba66419173 Mon Sep 17 00:00:00 2001 From: ash Date: Wed, 11 Sep 2024 13:07:57 -0400 Subject: [PATCH 12/12] Revert "Merge branch '1.21.1' into 1.21.1-fixlabel" This reverts commit bfd3cacc79a81d77887c278b319bf25c9dc60cf5, reversing changes made to a7288968362635ff159aab6e2b25bd79cb86b6ce. --- build.gradle.kts | 14 +- changelogs/2.5.0.md | 17 - gradle.properties | 14 +- gradle/wrapper/gradle-wrapper.properties | 2 +- images/inline example.png | Bin 155204 -> 0 bytes .../jackf/chesttracker/api/memory/Memory.java | 20 +- .../chesttracker/api/memory/MemoryBank.java | 24 +- .../chesttracker/api/memory/MemoryKey.java | 18 +- .../api/providers/MemoryBuilder.java | 2 +- .../providers/context/ScreenCloseContext.java | 9 - .../providers/defaults/DefaultProvider.java | 11 +- .../defaults/DefaultProviderCommandSent.java | 29 -- .../defaults/DefaultProviderScreenOpen.java | 39 --- .../impl/DefaultChestTrackerPlugin.java | 37 +- .../ClientEnderChestPreviewProvider.java | 15 +- .../impl/config/ChestTrackerConfig.java | 5 +- .../ChestTrackerConfigScreenBuilder.java | 20 +- .../gui/invbutton/ui/RenameInputScreen.java | 3 - .../impl/gui/screen/ChestTrackerScreen.java | 4 +- .../impl/gui/screen/EditMemoryBankScreen.java | 20 +- .../impl/gui/widget/ItemListWidget.java | 2 +- .../impl/memory/MemoryBankImpl.java | 5 +- .../impl/memory/MemoryKeyImpl.java | 34 +- .../metadata/CompatibilitySettings.java | 16 +- .../impl/memory/metadata/SearchSettings.java | 15 +- .../impl/providers/ProviderHandler.java | 9 +- .../providers/ScreenCloseContextImpl.java | 16 - .../impl/rendering/NameRenderMode.java | 20 -- .../impl/rendering/NameRenderer.java | 9 +- .../assets/chesttracker/lang/de_de.json | 11 +- .../assets/chesttracker/lang/en_us.json | 11 +- .../assets/chesttracker/lang/es_es.json | 323 +++++++++--------- .../assets/chesttracker/lang/fr_fr.json | 11 +- .../assets/chesttracker/lang/it_it.json | 93 +++-- .../assets/chesttracker/lang/ja_jp.json | 11 +- .../assets/chesttracker/lang/ko_kr.json | 73 ++-- .../assets/chesttracker/lang/nl_nl.json | 11 +- .../assets/chesttracker/lang/pt_pt.json | 11 +- .../assets/chesttracker/lang/ro_ro.json | 178 ---------- .../assets/chesttracker/lang/ru_ru.json | 13 +- .../assets/chesttracker/lang/tr_tr.json | 11 +- .../assets/chesttracker/lang/uk_ua.json | 11 +- .../assets/chesttracker/lang/zh_cn.json | 11 +- .../assets/chesttracker/lang/zh_tw.json | 11 +- 44 files changed, 339 insertions(+), 880 deletions(-) delete mode 100644 changelogs/2.5.0.md delete mode 100644 images/inline example.png delete mode 100644 src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProviderCommandSent.java delete mode 100644 src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProviderScreenOpen.java delete mode 100644 src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderMode.java delete mode 100644 src/client/resources/assets/chesttracker/lang/ro_ro.json diff --git a/build.gradle.kts b/build.gradle.kts index 6dc22310..691a33db 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ import red.jackf.UpdateDependenciesTask plugins { id("maven-publish") - id("fabric-loom") version "1.7-SNAPSHOT" + id("fabric-loom") version "1.6-SNAPSHOT" id("com.github.breadmoirai.github-release") version "2.4.1" id("org.ajoberstar.grgit") version "5.2.1" id("me.modmuss50.mod-publish-plugin") version "0.3.3" @@ -275,18 +275,14 @@ if (canPublish) { val addonProp: String = properties["changelogHeaderAddon"]!!.toString() if (addonProp.isNotBlank()) { - addonProp + addonProp + "\n\n" } else { - null + "" } } else { - null + "" } - val changelogFileText = rootProject.file("changelogs/${properties["mod_version"]}.md") - .takeIf { it.exists() } - ?.readText() - generateChangelogTask = tasks.register("generateChangelog") { this.lastTag.set(lastTag) this.newTag.set(newTag) @@ -307,7 +303,7 @@ if (canPublish) { } // Add a bundled block for each module version - prologue.set(listOfNotNull(changelogHeader, changelogFileText, bundledText).joinToString(separator = "\n\n")) + prologue.set(changelogHeader + bundledText) } } diff --git a/changelogs/2.5.0.md b/changelogs/2.5.0.md deleted file mode 100644 index 97f764c8..00000000 --- a/changelogs/2.5.0.md +++ /dev/null @@ -1,17 +0,0 @@ -## Chest Tracker v2.5.0 for Minecraft versions 1.21.1, 1.20.4 and 1.20.1. - -Along with new translations, there are several feature improvements: - -## Unpack Nested - -Items within shulker boxes, bundles and similar items will now be unpacked and shown on the item list. - -## Ender Chest & related handling improvements - -- Ender Chests will now be tracked correctly from the common commands `/enderchest`,`/ec`, `/echest` or `/ender`. -- Additionally, command-opened menus will no longer cause ghost memories. -- Shulker Box Tooltip integration will now show the proper layout of your ender chest. - -## Name Rendering adjustments - -Container names now have an option to only render when your cursor is over the container; this may be preferable if you use stacked chests. \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 94511acc..a422ad89 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,13 +9,13 @@ parchment_version=1.20.6:2024.05.01 loader_version=0.15.11 # Mod Properties -mod_version=2.5.3 +mod_version=2.4.14 maven_group=red.jackf archives_base_name=chesttracker # Dependencies -bundle_searchables=true -searchables_version=1.21.1:1.0.1 +bundle_searchables=false +searchables_version=1.21:1.0.5 # Mod Compat clothconfig_version=15.0.127 @@ -26,10 +26,10 @@ jade_version=VQc9njMw yacl_version=3.5.0+1.21-fabric # JF_AUTO_UPDATE_BLOCK -fabric-api_version=0.103.0+1.21.1 -modmenu_version=11.0.2 -where-is-it_version=2.6.2+1.21.1 -emi_version=1.1.12+1.21 +fabric-api_version=0.102.1+1.21.1 +modmenu_version=11.0.0-beta.1 +where-is-it_version=2.5.0+1.21 +emi_version=1.1.6+1.20.6 # JF_END_AUTO_UPDATE_BLOCK # Publishing diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138..b82aa23a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/images/inline example.png b/images/inline example.png deleted file mode 100644 index 46e38c43d84e509eb24837a1dbdb759f20b065ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155204 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

y%rO6) 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%0DylnBzLhct`6m+A_ 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 diff --git a/src/client/java/red/jackf/chesttracker/api/memory/Memory.java b/src/client/java/red/jackf/chesttracker/api/memory/Memory.java index 571e1f59..24a12294 100644 --- a/src/client/java/red/jackf/chesttracker/api/memory/Memory.java +++ b/src/client/java/red/jackf/chesttracker/api/memory/Memory.java @@ -36,8 +36,8 @@ public final class Memory { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - ItemStack.OPTIONAL_CODEC.listOf().fieldOf("items") - .forGetter(Memory::fullItems), + ItemStack.CODEC.listOf().fieldOf("items") + .forGetter(Memory::items), ComponentSerialization.CODEC.optionalFieldOf("name") .forGetter(m -> Optional.ofNullable(m.name)), ModCodecs.BLOCK_POS_STRING.listOf().optionalFieldOf("otherPositions", Collections.emptyList()) @@ -61,7 +61,6 @@ public final class Memory { ))); - private final List fullItems; private final List items; private final @Nullable Component name; private final List otherPositions; @@ -89,10 +88,6 @@ public List items() { return items; } - public List fullItems() { - return fullItems; - } - /** *

The display name for this memory. This is usually obtained from renaming in an anvil, but can also be manually * edited by the user. This method should be used if the user is seeing this name, as it considers the user-supplied @@ -147,12 +142,13 @@ public List otherPositions() { } /** - * Helper method for returning the center position of a memory, factoring in it's other positions. + * Helper method for returning the center position of a memory, including it's other positions. * + * @param origin Central position of this memory. * @return A position in the world regarded as the 'center'. */ - public Vec3 getCenterPosition() { - return Misc.getAverageOffsetFrom(this.position, this.otherPositions()).add(this.position.getCenter()); + public Vec3 getCenterPosition(BlockPos origin) { + return Misc.getAverageOffsetFrom(origin, this.otherPositions()).add(origin.getCenter()); } /** @@ -200,7 +196,6 @@ public Instant realTimestamp() { @ApiStatus.Internal private MemoryKeyImpl memoryKey = null; - @ApiStatus.Internal private BlockPos position = null; @ApiStatus.Internal @@ -212,8 +207,7 @@ public Memory( long loadedTimestamp, long inGameTimestamp, Instant realTimestamp) { - this.fullItems = ImmutableList.copyOf(items); - this.items = this.fullItems.stream().filter(stack -> !stack.isEmpty()).toList(); + this.items = ImmutableList.copyOf(items); this.name = name; this.otherPositions = ImmutableList.copyOf(otherPositions); this.loadedTimestamp = loadedTimestamp; diff --git a/src/client/java/red/jackf/chesttracker/api/memory/MemoryBank.java b/src/client/java/red/jackf/chesttracker/api/memory/MemoryBank.java index fa77e92f..ead1e632 100644 --- a/src/client/java/red/jackf/chesttracker/api/memory/MemoryBank.java +++ b/src/client/java/red/jackf/chesttracker/api/memory/MemoryBank.java @@ -11,10 +11,7 @@ import red.jackf.chesttracker.api.providers.ProviderUtils; import red.jackf.chesttracker.impl.util.CachedClientBlockSource; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; +import java.util.*; /** * Interface for working with a loaded memory bank. @@ -116,9 +113,7 @@ default Optional getKey(Optional keyId) { } /** - *

Helper method for getting a count of items in a given memory key matching a given predicate.

- * - *

This version does not unpack nested items.

+ * Helper method for getting a count of items in a given memory key matching a given predicate. * * @param keyId Memory key to look in; if non-existent an empty list will be returned. * @param predicate Predicate to filter each memory against. @@ -126,20 +121,11 @@ default Optional getKey(Optional keyId) { * @return A list of stacks from all memories in the given key matching the predicate, merged according to stackMergeMode. */ default List getCounts(ResourceLocation keyId, CountingPredicate predicate, StackMergeMode stackMergeMode) { - return getCounts(keyId, predicate, stackMergeMode, false); + Optional key = this.getKey(keyId); + if (key.isEmpty()) return Collections.emptyList(); + return key.get().getCounts(predicate, stackMergeMode); } - /** - * Helper method for getting a count of items in a given memory key matching a given predicate. - * - * @param keyId Memory key to look in; if non-existent an empty list will be returned. - * @param predicate Predicate to filter each memory against. - * @param stackMergeMode How to merge stacks in the returned list - for more details, see {@link StackMergeMode} - * @param unpackNested Whether to unpack nested items from within Shulker Boxes or bundles. - * @return A list of stacks from all memories in the given key matching the predicate, merged according to stackMergeMode. - */ - List getCounts(ResourceLocation keyId, CountingPredicate predicate, StackMergeMode stackMergeMode, boolean unpackNested); - /** * Adds or updates a memory in this memory bank. * diff --git a/src/client/java/red/jackf/chesttracker/api/memory/MemoryKey.java b/src/client/java/red/jackf/chesttracker/api/memory/MemoryKey.java index da1888b3..3d488497 100644 --- a/src/client/java/red/jackf/chesttracker/api/memory/MemoryKey.java +++ b/src/client/java/red/jackf/chesttracker/api/memory/MemoryKey.java @@ -50,21 +50,6 @@ public interface MemoryKey { */ Optional get(BlockPos position); - /** - *

Returns a list of all memories in this key that match the given predicate.

- * - *

This overload defaults to not unpacking nested items.

- * - * @see CountingPredicate - * @see StackMergeMode - * @param predicate Predicate to test each memory against - this tests the in-key block position and memory itself. - * @param stackMergeMode How to merge stacks that pass the predicate - for more details, see {@link StackMergeMode}. - * @return A list of ItemStacks that pass the predicate in this memory key, merged according to stackMergeMode. - */ - default List getCounts(CountingPredicate predicate, StackMergeMode stackMergeMode) { - return getCounts(predicate, stackMergeMode, false); - } - /** * Returns a list of all memories in this key that match the given predicate. * @@ -72,8 +57,7 @@ default List getCounts(CountingPredicate predicate, StackMergeMode st * @see StackMergeMode * @param predicate Predicate to test each memory against - this tests the in-key block position and memory itself. * @param stackMergeMode How to merge stacks that pass the predicate - for more details, see {@link StackMergeMode}. - * @param unpackNested Whether to unpack any nested items, such as within shulker boxes. * @return A list of ItemStacks that pass the predicate in this memory key, merged according to stackMergeMode. */ - List getCounts(CountingPredicate predicate, StackMergeMode stackMergeMode, boolean unpackNested); + List getCounts(CountingPredicate predicate, StackMergeMode stackMergeMode); } diff --git a/src/client/java/red/jackf/chesttracker/api/providers/MemoryBuilder.java b/src/client/java/red/jackf/chesttracker/api/providers/MemoryBuilder.java index f5d5e72d..b3468e50 100644 --- a/src/client/java/red/jackf/chesttracker/api/providers/MemoryBuilder.java +++ b/src/client/java/red/jackf/chesttracker/api/providers/MemoryBuilder.java @@ -23,7 +23,7 @@ public interface MemoryBuilder { * @return A new MemoryBuilder, containing the given items. */ static MemoryBuilder create(List items) { - return new MemoryBuilderImpl(items.stream().toList()); + return new MemoryBuilderImpl(items.stream().filter(stack -> !stack.isEmpty()).toList()); } /** diff --git a/src/client/java/red/jackf/chesttracker/api/providers/context/ScreenCloseContext.java b/src/client/java/red/jackf/chesttracker/api/providers/context/ScreenCloseContext.java index b7998f35..44b10794 100644 --- a/src/client/java/red/jackf/chesttracker/api/providers/context/ScreenCloseContext.java +++ b/src/client/java/red/jackf/chesttracker/api/providers/context/ScreenCloseContext.java @@ -51,15 +51,6 @@ public interface ScreenCloseContext { */ List getItems(); - /** - *

Returns all item stacks, including {@link ItemStack#isEmpty()} stacks. You should generally prefer other methods - * unless a full representation of the empty slots are useful, i.e. with ender chests.

- * - *

The list of items gets trimmed after the last non-empty slot in order to save space.

- * @return All ItemStacks in this screen, including empty ones. - */ - List getItemsWithEmpty(); - /** * Returns all non-{@link ItemStack#isEmpty()}, non-player inventory stacks in the slots of this screen matching the given predicate. * diff --git a/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProvider.java b/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProvider.java index 16e7de58..df75862c 100644 --- a/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProvider.java +++ b/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProvider.java @@ -49,11 +49,7 @@ public boolean appliesTo(Coordinate coordinate) { @Override public void onScreenOpen(ScreenOpenContext context) { - if (DefaultProviderScreenOpen.EVENT.invoker().handleScreenOpen(this, context)) return; - - InteractionTracker.INSTANCE.getLastBlockSource() - .flatMap(this::getMemoryLocation) - .ifPresent(context::setMemoryLocation); + InteractionTracker.INSTANCE.getLastBlockSource().flatMap(this::getMemoryLocation).ifPresent(context::setMemoryLocation); } @Override @@ -67,11 +63,6 @@ public void onScreenClose(ScreenCloseContext context) { }); } - @Override - public void onCommandSent(String command) { - DefaultProviderCommandSent.EVENT.invoker().onDefaultCommandSend(this, command); - } - @Override public void onBlockPlaced(BlockPlacedContext context) { // if the block has an alternate mapping (i.e. ender chest) don't run diff --git a/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProviderCommandSent.java b/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProviderCommandSent.java deleted file mode 100644 index fa5a9fa3..00000000 --- a/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProviderCommandSent.java +++ /dev/null @@ -1,29 +0,0 @@ -package red.jackf.chesttracker.api.providers.defaults; - -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; -import red.jackf.chesttracker.api.providers.ServerProvider; - -/** - * Called by the default provider when the user sends a command. Used internally to set state for ender chest commands. - * - * @see DefaultProvider - */ -public interface DefaultProviderCommandSent { - /** - * Event for handling default user commands. - */ - Event EVENT = EventFactory.createArrayBacked(DefaultProviderCommandSent.class, invokers -> (provider, command) -> { - for (DefaultProviderCommandSent invoker : invokers) { - invoker.onDefaultCommandSend(provider, command); - } - }); - - /** - * Called by the default provider when the user runs a command. - * - * @param provider Provider being used; this is usually a {@link DefaultProvider} instance. - * @param command Command that the user sent, without the slash - */ - void onDefaultCommandSend(ServerProvider provider, String command); -} diff --git a/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProviderScreenOpen.java b/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProviderScreenOpen.java deleted file mode 100644 index 3e816200..00000000 --- a/src/client/java/red/jackf/chesttracker/api/providers/defaults/DefaultProviderScreenOpen.java +++ /dev/null @@ -1,39 +0,0 @@ -package red.jackf.chesttracker.api.providers.defaults; - -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; -import red.jackf.chesttracker.api.providers.ServerProvider; -import red.jackf.chesttracker.api.providers.context.ScreenOpenContext; - -/** - * Called by the default provider when a screen is opened in order to update the context. This is generally intended - * to allow per-location features (such as renaming or ignoring) to work with overrides, such as when the ender chest - * GUI is opened with a command instead of right clicking. - * - * @see red.jackf.chesttracker.impl.DefaultChestTrackerPlugin for implementation example - * @see ScreenOpenContext - * @see DefaultProvider - */ -public interface DefaultProviderScreenOpen { - /** - * Populate the screen context if needed. Currently, this is just setting the GUI's memory location. - * - * @param provider Provider currently being ran. Usually {@link DefaultProvider}. - * @param context Context to populate. - * @return Whether the context is finished being populated. - */ - boolean handleScreenOpen(ServerProvider provider, ScreenOpenContext context); - - /** - * Event for populating a {@link ScreenOpenContext}. Does not use phases. Not intended to be invoked by API users. - */ - Event EVENT = EventFactory.createArrayBacked(DefaultProviderScreenOpen.class, invokers -> (provider, context) -> { - for (DefaultProviderScreenOpen invoker : invokers) { - if (invoker.handleScreenOpen(provider, context)) { - return true; - } - } - - return false; - }); -} diff --git a/src/client/java/red/jackf/chesttracker/impl/DefaultChestTrackerPlugin.java b/src/client/java/red/jackf/chesttracker/impl/DefaultChestTrackerPlugin.java index b5f332c2..7e3d1d94 100644 --- a/src/client/java/red/jackf/chesttracker/impl/DefaultChestTrackerPlugin.java +++ b/src/client/java/red/jackf/chesttracker/impl/DefaultChestTrackerPlugin.java @@ -12,7 +12,9 @@ import red.jackf.chesttracker.api.memory.CommonKeys; import red.jackf.chesttracker.api.providers.*; import red.jackf.chesttracker.api.providers.context.ScreenCloseContext; -import red.jackf.chesttracker.api.providers.defaults.*; +import red.jackf.chesttracker.api.providers.defaults.DefaultProvider; +import red.jackf.chesttracker.api.providers.defaults.DefaultProviderMemoryLocation; +import red.jackf.chesttracker.api.providers.defaults.DefaultProviderScreenClose; import red.jackf.chesttracker.impl.compat.mods.ShareEnderChestIntegration; import red.jackf.chesttracker.impl.compat.servers.hypixel.HypixelProvider; import red.jackf.chesttracker.impl.gui.util.CTTitleOverrideDuck; @@ -20,11 +22,8 @@ import red.jackf.whereisit.api.search.ConnectedBlocksGrabber; import java.util.List; -import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; public class DefaultChestTrackerPlugin implements ChestTrackerPlugin { - private final AtomicBoolean fromEnderChestCommand = new AtomicBoolean(false); @Override public void load() { @@ -55,23 +54,9 @@ public void load() { ProviderUtils.registerProvider(DefaultProvider.INSTANCE); ProviderUtils.registerProvider(new HypixelProvider()); - // todo configurable - Set enderChestCommands = Set.of("ec", "ender", "enderchest", "echest"); - - DefaultProviderCommandSent.EVENT.register((provider, command) -> fromEnderChestCommand.set(enderChestCommands.contains(command))); - - DefaultProviderScreenOpen.EVENT.register((provider, context) -> { - if (fromEnderChestCommand.get()) { - context.setMemoryLocation(MemoryLocation.override(CommonKeys.ENDER_CHEST_KEY, BlockPos.ZERO)); - return true; - } else { - return false; - } - }); - DefaultProviderScreenClose.EVENT.register(EventPhases.FALLBACK_PHASE, DefaultChestTrackerPlugin::defaultMemoryCreator); - DefaultProviderScreenClose.EVENT.register(EventPhases.DEFAULT_PHASE, this::enderChestMemoryCreator); + DefaultProviderScreenClose.EVENT.register(EventPhases.DEFAULT_PHASE, DefaultChestTrackerPlugin::enderChestMemoryCreator); DefaultProviderMemoryLocation.EVENT.register(EventPhases.FALLBACK_PHASE, cbs -> { var current = ProviderUtils.getPlayersCurrentKey(); @@ -86,7 +71,7 @@ public void load() { }); DefaultProviderMemoryLocation.EVENT.register(EventPhases.DEFAULT_PHASE, cbs -> { - if (cbs.blockState().getBlock() == Blocks.ENDER_CHEST || fromEnderChestCommand.get()) { + if (cbs.blockState().getBlock() == Blocks.ENDER_CHEST) { return ResultHolder.value(MemoryLocation.override(CommonKeys.ENDER_CHEST_KEY, BlockPos.ZERO)); } @@ -125,15 +110,13 @@ private static ResultHolder defaultMemoryCrea .toResult(memoryLocation.get().memoryKey(), rootPos)); } - private ResultHolder enderChestMemoryCreator(ServerProvider provider, ScreenCloseContext context) { - if (!this.fromEnderChestCommand.getAndSet(false)) { - var cbs = InteractionTracker.INSTANCE.getLastBlockSource(); - if (cbs.isEmpty()) return ResultHolder.pass(); + private static ResultHolder enderChestMemoryCreator(ServerProvider provider, ScreenCloseContext context) { + var cbs = InteractionTracker.INSTANCE.getLastBlockSource(); + if (cbs.isEmpty()) return ResultHolder.pass(); - if (!cbs.get().blockState().is(Blocks.ENDER_CHEST)) return ResultHolder.pass(); - } + if (!cbs.get().blockState().is(Blocks.ENDER_CHEST)) return ResultHolder.pass(); - return ResultHolder.value(MemoryBuilder.create(context.getItemsWithEmpty()) + return ResultHolder.value(MemoryBuilder.create(context.getItems()) .inContainer(Blocks.ENDER_CHEST) .toResult(CommonKeys.ENDER_CHEST_KEY, BlockPos.ZERO)); } diff --git a/src/client/java/red/jackf/chesttracker/impl/compat/mods/shulkerboxtooltip/ClientEnderChestPreviewProvider.java b/src/client/java/red/jackf/chesttracker/impl/compat/mods/shulkerboxtooltip/ClientEnderChestPreviewProvider.java index 292a991d..b744ab77 100644 --- a/src/client/java/red/jackf/chesttracker/impl/compat/mods/shulkerboxtooltip/ClientEnderChestPreviewProvider.java +++ b/src/client/java/red/jackf/chesttracker/impl/compat/mods/shulkerboxtooltip/ClientEnderChestPreviewProvider.java @@ -6,11 +6,13 @@ import com.misterpemodder.shulkerboxtooltip.api.color.ColorKey; import com.misterpemodder.shulkerboxtooltip.api.provider.PreviewProvider; import net.minecraft.ChatFormatting; -import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; -import red.jackf.chesttracker.api.memory.*; +import red.jackf.chesttracker.api.memory.CommonKeys; +import red.jackf.chesttracker.api.memory.MemoryBank; +import red.jackf.chesttracker.api.memory.MemoryBankAccess; +import red.jackf.chesttracker.api.memory.MemoryKey; import red.jackf.chesttracker.api.memory.counting.CountingPredicate; import red.jackf.chesttracker.api.memory.counting.StackMergeMode; @@ -36,14 +38,7 @@ public boolean shouldDisplay(@NotNull PreviewContext context) { public List getInventory(@NotNull PreviewContext context) { Optional bank = MemoryBankAccess.INSTANCE.getLoaded(); if (bank.isEmpty()) return Collections.emptyList(); - if (ShulkerBoxTooltipApi.getCurrentPreviewType(true) == PreviewType.FULL) { - return bank.get().getKey(CommonKeys.ENDER_CHEST_KEY) - .flatMap(key -> key.get(BlockPos.ZERO)) - .map(Memory::fullItems) - .orElse(List.of()); - } else { - return bank.get().getCounts(CommonKeys.ENDER_CHEST_KEY, CountingPredicate.TRUE, StackMergeMode.NEVER); - } + return bank.get().getCounts(CommonKeys.ENDER_CHEST_KEY, CountingPredicate.TRUE, StackMergeMode.NEVER); } @Override diff --git a/src/client/java/red/jackf/chesttracker/impl/config/ChestTrackerConfig.java b/src/client/java/red/jackf/chesttracker/impl/config/ChestTrackerConfig.java index b67719a0..5d6e805c 100644 --- a/src/client/java/red/jackf/chesttracker/impl/config/ChestTrackerConfig.java +++ b/src/client/java/red/jackf/chesttracker/impl/config/ChestTrackerConfig.java @@ -92,6 +92,9 @@ public static class InventoryButton { } public static class Rendering { + @SerialEntry(comment = "Whether to show names above containers in the world. This can be overridden per memory bank, under Compatibility.") + public boolean displayContainerNames = true; + @SerialEntry(comment = "Name Render Range. Range: [4, 24] blocks") public int nameRange = 12; } @@ -99,8 +102,6 @@ public static class Rendering { public static class Debug { @SerialEntry(comment = "DEBUG: Show Developer Hud") public boolean showDevHud = false; - @SerialEntry(comment = "DEBUG: Disable all container names") - public boolean disableContainerNames = false; } public static class Storage { diff --git a/src/client/java/red/jackf/chesttracker/impl/config/ChestTrackerConfigScreenBuilder.java b/src/client/java/red/jackf/chesttracker/impl/config/ChestTrackerConfigScreenBuilder.java index 2e12ea7c..18a251ea 100644 --- a/src/client/java/red/jackf/chesttracker/impl/config/ChestTrackerConfigScreenBuilder.java +++ b/src/client/java/red/jackf/chesttracker/impl/config/ChestTrackerConfigScreenBuilder.java @@ -304,6 +304,16 @@ private static OptionGroup makeRenderingGroup(ConfigClassHandler instance.instance().rendering.nameRange, i -> instance.instance().rendering.nameRange = i ).build()) + .option(Option.createBuilder() + .name(translatable("chesttracker.config.rendering.displayContainerNames")) + .description(OptionDescription.of(translatable("chesttracker.config.rendering.displayContainerNames.description"))) + .controller(opt -> BooleanControllerBuilder.create(opt) + .yesNoFormatter()) + .binding( + instance.defaults().rendering.displayContainerNames, + () -> instance.instance().rendering.displayContainerNames, + b -> instance.instance().rendering.displayContainerNames = b + ).build()) .option(ButtonOption.createBuilder() .name(translatable("chesttracker.config.whereisit")) .description(OptionDescription.of(translatable("chesttracker.config.whereisit.description"))) @@ -326,16 +336,6 @@ private static OptionGroup makeDevGuiGroup(ConfigClassHandler instance.instance().debug.showDevHud, b -> instance.instance().debug.showDevHud = b ).build()) - .option(Option.createBuilder() - .name(translatable("chesttracker.config.dev.disableContainerNames")) - .controller(opt -> BooleanControllerBuilder.create(opt) - .yesNoFormatter() - .coloured(true)) - .binding( - instance.defaults().debug.disableContainerNames, - () -> instance.instance().debug.disableContainerNames, - b -> instance.instance().debug.disableContainerNames = b - ).build()) .build(); } diff --git a/src/client/java/red/jackf/chesttracker/impl/gui/invbutton/ui/RenameInputScreen.java b/src/client/java/red/jackf/chesttracker/impl/gui/invbutton/ui/RenameInputScreen.java index 0adbd659..79251a9c 100644 --- a/src/client/java/red/jackf/chesttracker/impl/gui/invbutton/ui/RenameInputScreen.java +++ b/src/client/java/red/jackf/chesttracker/impl/gui/invbutton/ui/RenameInputScreen.java @@ -24,8 +24,6 @@ public class RenameInputScreen extends Screen { private static final int PADDING = 15; private static final int GAP = 15; - private static final int MAX_NAME_LENGTH = 256; - private final MemoryLocation location; private final @Nullable String currentName; private final ItemStack preview; @@ -67,7 +65,6 @@ protected void init() { this.nameInput, Component.empty())); - this.nameInput.setMaxLength(MAX_NAME_LENGTH); this.nameInput.setCanLoseFocus(false); this.setFocused(this.nameInput); diff --git a/src/client/java/red/jackf/chesttracker/impl/gui/screen/ChestTrackerScreen.java b/src/client/java/red/jackf/chesttracker/impl/gui/screen/ChestTrackerScreen.java index 40fa3abf..e120a547 100644 --- a/src/client/java/red/jackf/chesttracker/impl/gui/screen/ChestTrackerScreen.java +++ b/src/client/java/red/jackf/chesttracker/impl/gui/screen/ChestTrackerScreen.java @@ -285,7 +285,7 @@ protected void repositionElements() { } /** - * Update the cached item list from the current Memory Bank, then runs a filter operation. + * Update the cached item list from the current Memory Bank, then runs a filter operation.. */ private void updateItems() { MemoryBankAccessImpl.INSTANCE.getLoadedInternal().ifPresent(bank -> { @@ -293,7 +293,7 @@ private void updateItems() { CountingPredicate predicate = getItemListFilter(maxRange); - this.items = bank.getCounts(currentMemoryKey, predicate, bank.getMetadata().getSearchSettings().stackMergeMode, bank.getMetadata().getSearchSettings().unpackNested) + this.items = bank.getCounts(currentMemoryKey, predicate, bank.getMetadata().getSearchSettings().stackMergeMode) .stream() .sorted(itemSort.sort) .toList(); diff --git a/src/client/java/red/jackf/chesttracker/impl/gui/screen/EditMemoryBankScreen.java b/src/client/java/red/jackf/chesttracker/impl/gui/screen/EditMemoryBankScreen.java index 74684962..bb8d3ca8 100644 --- a/src/client/java/red/jackf/chesttracker/impl/gui/screen/EditMemoryBankScreen.java +++ b/src/client/java/red/jackf/chesttracker/impl/gui/screen/EditMemoryBankScreen.java @@ -26,7 +26,6 @@ import red.jackf.chesttracker.impl.memory.metadata.FilteringSettings; import red.jackf.chesttracker.impl.memory.metadata.IntegritySettings; import red.jackf.chesttracker.impl.memory.metadata.SearchSettings; -import red.jackf.chesttracker.impl.rendering.NameRenderMode; import red.jackf.chesttracker.impl.storage.ConnectionSettings; import red.jackf.chesttracker.impl.storage.Storage; import red.jackf.chesttracker.impl.util.GuiUtil; @@ -266,16 +265,13 @@ private void setupCompatibilitySettings() { (cycleButton, newValue) -> this.memoryBank.metadata().getCompatibilitySettings().nameFilterMode = newValue ), SettingsTab.COMPATIBILITY); - addSetting(CycleButton.builder(mode -> mode.label) - .withTooltip(mode -> Tooltip.create(mode.tooltip)) - .withValues(NameRenderMode.values()) - .withInitialValue(this.memoryBank.metadata().getCompatibilitySettings().nameRenderMode) + addSetting(CycleButton.onOffBuilder(this.memoryBank.metadata().getCompatibilitySettings().displayContainerNames) .create(getSettingsX(0), getSettingsY(1), getSettingsWidth(2), BUTTON_HEIGHT, - translatable("chesttracker.gui.editMemoryBank.compatibility.nameRenderMode"), - (cycleButton, newValue) -> this.memoryBank.metadata().getCompatibilitySettings().nameRenderMode = newValue + translatable("chesttracker.gui.editMemoryBank.compatibility.displayContainerNames"), + ((cycleButton, newValue) -> this.memoryBank.metadata().getCompatibilitySettings().displayContainerNames = newValue) ), SettingsTab.COMPATIBILITY); } @@ -575,16 +571,6 @@ protected void applyValue() { ((cycleButton, stackMergeMode) -> this.memoryBank.metadata() .getSearchSettings().stackMergeMode = stackMergeMode) ), SettingsTab.SEARCH); - - addSetting(CycleButton.onOffBuilder(this.memoryBank.metadata().getSearchSettings().unpackNested) - .withTooltip(ignored -> Tooltip.create(translatable("chesttracker.gui.editMemoryBank.search.unpackNested.tooltip"))) - .create(getSettingsX(0), - getSettingsY(3), - getSettingsWidth(2), - BUTTON_HEIGHT, - translatable("chesttracker.gui.editMemoryBank.search.unpackNested"), - ((cycleButton, newValue) -> this.memoryBank.metadata().getSearchSettings().unpackNested = newValue) - ), SettingsTab.SEARCH); } /////////// diff --git a/src/client/java/red/jackf/chesttracker/impl/gui/widget/ItemListWidget.java b/src/client/java/red/jackf/chesttracker/impl/gui/widget/ItemListWidget.java index 872436b3..8fbdd7d4 100644 --- a/src/client/java/red/jackf/chesttracker/impl/gui/widget/ItemListWidget.java +++ b/src/client/java/red/jackf/chesttracker/impl/gui/widget/ItemListWidget.java @@ -74,7 +74,7 @@ public void onClick(double mouseX, double mouseY) { int index = (y * gridWidth) + x; if (index >= items.size()) return; var request = new SearchRequest(); - SearchRequestPopulator.addItemStack(request, items.get(index), Screen.hasShiftDown() ? SearchRequestPopulator.Context.FAVOURITE : SearchRequestPopulator.Context.INVENTORY_PRECISE); + SearchRequestPopulator.addItemStack(request, items.get(index), SearchRequestPopulator.Context.FAVOURITE); SearchInvoker.doSearch(request); } diff --git a/src/client/java/red/jackf/chesttracker/impl/memory/MemoryBankImpl.java b/src/client/java/red/jackf/chesttracker/impl/memory/MemoryBankImpl.java index 3d4652f2..3a617d8f 100644 --- a/src/client/java/red/jackf/chesttracker/impl/memory/MemoryBankImpl.java +++ b/src/client/java/red/jackf/chesttracker/impl/memory/MemoryBankImpl.java @@ -84,11 +84,10 @@ public void removeKey(ResourceLocation key) { * @param key Memory key to pull from * @param filter Filter that memories must pass to be counted * @param stackMergeMode How to merge identical stacks - * @param unpackNested Whether to count items within containers, such as Shulker Boxes */ - public List getCounts(ResourceLocation key, CountingPredicate filter, StackMergeMode stackMergeMode, boolean unpackNested) { + public List getCounts(ResourceLocation key, CountingPredicate filter, StackMergeMode stackMergeMode) { if (this.memoryKeys.containsKey(key)) { - return this.memoryKeys.get(key).getCounts(filter, stackMergeMode, unpackNested); + return this.memoryKeys.get(key).getCounts(filter, stackMergeMode); } else { return Collections.emptyList(); } diff --git a/src/client/java/red/jackf/chesttracker/impl/memory/MemoryKeyImpl.java b/src/client/java/red/jackf/chesttracker/impl/memory/MemoryKeyImpl.java index 0c4eddd2..ed689751 100644 --- a/src/client/java/red/jackf/chesttracker/impl/memory/MemoryKeyImpl.java +++ b/src/client/java/red/jackf/chesttracker/impl/memory/MemoryKeyImpl.java @@ -13,17 +13,14 @@ import red.jackf.chesttracker.impl.memory.key.ManualMode; import red.jackf.chesttracker.impl.memory.key.OverrideInfo; import red.jackf.chesttracker.impl.memory.key.SearchContext; -import red.jackf.chesttracker.impl.rendering.NameRenderMode; import red.jackf.chesttracker.impl.util.ItemStacks; import red.jackf.chesttracker.impl.util.Misc; import red.jackf.chesttracker.impl.util.ModCodecs; import red.jackf.jackfredlib.api.base.codecs.JFLCodecs; import red.jackf.whereisit.api.SearchRequest; import red.jackf.whereisit.api.SearchResult; -import red.jackf.whereisit.api.search.NestedItemsGrabber; import java.util.*; -import java.util.stream.Stream; public class MemoryKeyImpl implements MemoryKey { private final Map memories = new HashMap<>(); @@ -146,23 +143,20 @@ public Optional get(BlockPos pos) { } @Override - public List getCounts(CountingPredicate predicate, StackMergeMode stackMergeMode, boolean unpackNested) { - List> items = this.memories.entrySet().stream() - .filter(predicate) - .map(entry -> { - if (unpackNested) { - return entry.getValue().items().stream() - .flatMap(stack -> Stream.concat(Stream.of(stack), NestedItemsGrabber.get(stack))) - .toList(); - } else { - return entry.getValue().items(); - } - }).toList(); - + public List getCounts(CountingPredicate predicate, StackMergeMode stackMergeMode) { return switch (stackMergeMode) { - case ALL -> ItemStacks.flattenStacks(items.stream().flatMap(Collection::stream).toList(), false); - case WITHIN_CONTAINERS -> items.stream().flatMap(list -> ItemStacks.flattenStacks(list, false).stream()).toList(); - case NEVER -> items.stream().flatMap(Collection::stream).toList(); + case ALL -> ItemStacks.flattenStacks(this.memories.entrySet().stream() + .filter(predicate) + .flatMap(data -> data.getValue().items().stream()) + .toList(), false); + case WITHIN_CONTAINERS -> this.memories.entrySet().stream() + .filter(predicate) + .flatMap(data -> ItemStacks.flattenStacks(data.getValue().items(), false).stream()) + .toList(); + case NEVER -> this.memories.entrySet().stream() + .filter(predicate) + .flatMap(data -> data.getValue().items().stream()) + .toList(); }; } @@ -182,7 +176,7 @@ public List doSearch(SearchContext context) { .item(matchingItem.get()) .otherPositions(entry.getValue().otherPositions()); - if (context.metadata().getCompatibilitySettings().nameRenderMode == NameRenderMode.FULL) + if (context.metadata().getCompatibilitySettings().displayContainerNames) result.name( entry.getValue().renderName(), Misc.getAverageOffsetFrom(entry.getKey(), entry.getValue().otherPositions()).add(0, 1, 0) diff --git a/src/client/java/red/jackf/chesttracker/impl/memory/metadata/CompatibilitySettings.java b/src/client/java/red/jackf/chesttracker/impl/memory/metadata/CompatibilitySettings.java index d45a2dec..ac74c72e 100644 --- a/src/client/java/red/jackf/chesttracker/impl/memory/metadata/CompatibilitySettings.java +++ b/src/client/java/red/jackf/chesttracker/impl/memory/metadata/CompatibilitySettings.java @@ -5,7 +5,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.Style; -import red.jackf.chesttracker.impl.rendering.NameRenderMode; +import red.jackf.chesttracker.impl.config.ChestTrackerConfig; import red.jackf.jackfredlib.api.base.codecs.JFLCodecs; import java.util.Optional; @@ -18,28 +18,28 @@ public class CompatibilitySettings { return instance.group( JFLCodecs.forEnum(NameFilterMode.class).optionalFieldOf("nameFilterMode") .forGetter(settings -> Optional.of(settings.nameFilterMode)), - JFLCodecs.forEnum(NameRenderMode.class).optionalFieldOf("nameRenderMode") - .forGetter(settings -> Optional.of(settings.nameRenderMode)) + Codec.BOOL.optionalFieldOf("displayContainerNames") + .forGetter(settings -> Optional.of(settings.displayContainerNames)) ).apply(instance, (nameFilterMode, displayContainerNames) -> new CompatibilitySettings( nameFilterMode.orElse(def.nameFilterMode), - displayContainerNames.orElse(def.nameRenderMode) + displayContainerNames.orElse(def.displayContainerNames) )); }); public NameFilterMode nameFilterMode = NameFilterMode.NO_FILTER; - public NameRenderMode nameRenderMode = NameRenderMode.FULL; + public boolean displayContainerNames = ChestTrackerConfig.INSTANCE.instance().rendering.displayContainerNames; protected CompatibilitySettings() {} - protected CompatibilitySettings(NameFilterMode nameFilterMode, NameRenderMode nameRenderMode) { + protected CompatibilitySettings(NameFilterMode nameFilterMode, boolean displayContainerNames) { this.nameFilterMode = nameFilterMode; - this.nameRenderMode = nameRenderMode; + this.displayContainerNames = displayContainerNames; } public CompatibilitySettings copy() { return new CompatibilitySettings( this.nameFilterMode, - this.nameRenderMode + this.displayContainerNames ); } diff --git a/src/client/java/red/jackf/chesttracker/impl/memory/metadata/SearchSettings.java b/src/client/java/red/jackf/chesttracker/impl/memory/metadata/SearchSettings.java index 85e7b97c..c379111a 100644 --- a/src/client/java/red/jackf/chesttracker/impl/memory/metadata/SearchSettings.java +++ b/src/client/java/red/jackf/chesttracker/impl/memory/metadata/SearchSettings.java @@ -28,14 +28,11 @@ public class SearchSettings { RANGE_CODEC.optionalFieldOf("searchRange") .forGetter(settings -> Optional.of(settings.searchRange == Integer.MAX_VALUE ? Either.right("infinite") : Either.left(settings.searchRange))), JFLCodecs.forEnum(StackMergeMode.class).optionalFieldOf("stackMergeMode") - .forGetter(settings -> Optional.of(settings.stackMergeMode)), - Codec.BOOL.optionalFieldOf("unpackNested") - .forGetter(settings -> Optional.of(settings.unpackNested)) - ).apply(instance, (itemListRange, searchRange, stackMergeMode, unpackNested) -> new SearchSettings( + .forGetter(settings -> Optional.of(settings.stackMergeMode)) + ).apply(instance, (itemListRange, searchRange, stackMergeMode) -> new SearchSettings( itemListRange.map(either -> collapse(either.mapRight(s -> s.equals("infinite") ? Integer.MAX_VALUE : def.itemListRange))).orElse(def.itemListRange), searchRange.map(either -> collapse(either.mapRight(s -> s.equals("infinite") ? Integer.MAX_VALUE : def.searchRange))).orElse(def.searchRange), - stackMergeMode.orElse(def.stackMergeMode), - unpackNested.orElse(def.unpackNested) + stackMergeMode.orElse(def.stackMergeMode) )); }); @@ -68,19 +65,17 @@ private static Stream range(int from, int to, int step) { public int itemListRange = 256; public int searchRange = 256; public StackMergeMode stackMergeMode = StackMergeMode.ALL; - public boolean unpackNested = true; SearchSettings() { } - public SearchSettings(int itemListRange, int searchRange, StackMergeMode stackMergeMode, boolean unpackNested) { + public SearchSettings(int itemListRange, int searchRange, StackMergeMode stackMergeMode) { this.itemListRange = itemListRange; this.searchRange = searchRange; this.stackMergeMode = stackMergeMode; - this.unpackNested = unpackNested; } public SearchSettings copy() { - return new SearchSettings(itemListRange, searchRange, stackMergeMode, unpackNested); + return new SearchSettings(itemListRange, searchRange, stackMergeMode); } } diff --git a/src/client/java/red/jackf/chesttracker/impl/providers/ProviderHandler.java b/src/client/java/red/jackf/chesttracker/impl/providers/ProviderHandler.java index 52bd8543..e35d2d83 100644 --- a/src/client/java/red/jackf/chesttracker/impl/providers/ProviderHandler.java +++ b/src/client/java/red/jackf/chesttracker/impl/providers/ProviderHandler.java @@ -6,7 +6,6 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import org.jetbrains.annotations.Nullable; import red.jackf.chesttracker.api.ClientBlockSource; -import red.jackf.chesttracker.api.providers.InteractionTracker; import red.jackf.chesttracker.api.providers.context.BlockPlacedContext; import red.jackf.chesttracker.api.providers.ServerProvider; import red.jackf.chesttracker.impl.events.AfterPlayerPlaceBlock; @@ -93,10 +92,8 @@ public void setupEvents() { getCurrentProvider().ifPresent(provider -> provider.onGameMessageReceived(message, overlay))); - ClientSendMessageEvents.COMMAND.register(command -> { - getCurrentProvider().ifPresent(provider -> provider.onCommandSent(command)); - - InteractionTracker.INSTANCE.clear(); - }); + ClientSendMessageEvents.COMMAND.register(command -> + getCurrentProvider().ifPresent(provider -> + provider.onCommandSent(command))); } } diff --git a/src/client/java/red/jackf/chesttracker/impl/providers/ScreenCloseContextImpl.java b/src/client/java/red/jackf/chesttracker/impl/providers/ScreenCloseContextImpl.java index f64b1203..2ec3b33e 100644 --- a/src/client/java/red/jackf/chesttracker/impl/providers/ScreenCloseContextImpl.java +++ b/src/client/java/red/jackf/chesttracker/impl/providers/ScreenCloseContextImpl.java @@ -44,22 +44,6 @@ public List getItems() { .toList(); } - @Override - public List getItemsWithEmpty() { - List items = screen.getMenu().slots.stream() - .filter(slot -> !ProviderUtils.isPlayerSlot(slot)) - .map(Slot::getItem) - .toList(); - - int lastIndex = -1; - - for (int i = 0; i < items.size(); i++) { - if (!items.get(i).isEmpty()) lastIndex = i; - } - - return items.subList(0, lastIndex + 1); - } - @Override public List getItemsMatching(Predicate predicate) { return this.getItems().stream().filter(stack -> !stack.isEmpty() && predicate.test(stack)).toList(); diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderMode.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderMode.java deleted file mode 100644 index 46f97a5d..00000000 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderMode.java +++ /dev/null @@ -1,20 +0,0 @@ -package red.jackf.chesttracker.impl.rendering; - -import net.minecraft.network.chat.Component; - -public enum NameRenderMode { - FULL(Component.translatable("chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full"), - Component.translatable("chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip")), - HOVERED_ONLY(Component.translatable("chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly"), - Component.translatable("chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip")), - DISABLED(Component.translatable("chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled"), - Component.translatable("chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip")); - - public final Component label; - public final Component tooltip; - - NameRenderMode(Component label, Component tooltip) { - this.label = label; - this.tooltip = tooltip; - } -} diff --git a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java index ee25e6af..281bfade 100644 --- a/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java +++ b/src/client/java/red/jackf/chesttracker/impl/rendering/NameRenderer.java @@ -9,9 +9,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import org.jetbrains.annotations.Nullable; import red.jackf.chesttracker.api.memory.Memory; import red.jackf.chesttracker.api.memory.MemoryKey; import red.jackf.chesttracker.api.providers.ProviderUtils; @@ -27,12 +24,10 @@ public class NameRenderer { public static void setup() { WorldRenderEvents.BEFORE_BLOCK_OUTLINE.register((context, hitResult) -> { - if (ChestTrackerConfig.INSTANCE.instance().debug.disableContainerNames) return true; - MemoryBankAccessImpl.INSTANCE.getLoadedInternal().ifPresent(bank -> { - if (bank.getMetadata().getCompatibilitySettings().nameRenderMode == NameRenderMode.DISABLED) + if (!bank.getMetadata().getCompatibilitySettings().displayContainerNames) return; - bank.getKey(ProviderUtils.getPlayersCurrentKey()).ifPresent(key -> NameRenderer.renderNamesForKey(context, bank, key, hitResult)); + bank.getKey(ProviderUtils.getPlayersCurrentKey()).ifPresent(key -> NameRenderer.renderNamesForKey(context, bank, key)); }); return true; }); diff --git a/src/client/resources/assets/chesttracker/lang/de_de.json b/src/client/resources/assets/chesttracker/lang/de_de.json index 61325995..45e2e673 100644 --- a/src/client/resources/assets/chesttracker/lang/de_de.json +++ b/src/client/resources/assets/chesttracker/lang/de_de.json @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Only allow ASCII characters in container names.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Basic Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Only allow Unicode characters up to \\u33FF. This includes most European, African and American scripts and symbols, but excludes Chinese, Korean, Japanese and others.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Display Container Names", "chesttracker.gui.editMemoryBank.filtering": "Filtering", "chesttracker.gui.editMemoryBank.filtering.manualMode": "Manual Mode", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Whether containers need to be manually added to Chest Tracker.", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", "chesttracker.gui.editMemoryKeys.hint": "Memory Key", "chesttracker.gui.editMemoryKeys.return": "Return", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Developer Utils", "chesttracker.config.dev.showDevHud": "Show Developer Hud", "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It config", "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", "chesttracker.config.memoryAndStorage": "Memory & Storage", diff --git a/src/client/resources/assets/chesttracker/lang/en_us.json b/src/client/resources/assets/chesttracker/lang/en_us.json index 73a718fc..87bf6dc6 100644 --- a/src/client/resources/assets/chesttracker/lang/en_us.json +++ b/src/client/resources/assets/chesttracker/lang/en_us.json @@ -70,13 +70,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Only allow ASCII characters in container names.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Basic Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Only allow Unicode characters up to \\u33FF. This includes most European, African and American scripts and symbols, but excludes Chinese, Korean, Japanese and others.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Display Container Names", "chesttracker.gui.editMemoryBank.filtering": "Filtering", "chesttracker.gui.editMemoryBank.filtering.manualMode": "Manual Mode", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Whether containers need to be manually added to Chest Tracker.", @@ -120,8 +114,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", "chesttracker.gui.editMemoryKeys.hint": "Memory Key", @@ -164,7 +156,6 @@ "chesttracker.config.dev": "Developer Utils", "chesttracker.config.dev.showDevHud": "Show Developer Hud", "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It config", "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", diff --git a/src/client/resources/assets/chesttracker/lang/es_es.json b/src/client/resources/assets/chesttracker/lang/es_es.json index 85217c19..7d791b34 100644 --- a/src/client/resources/assets/chesttracker/lang/es_es.json +++ b/src/client/resources/assets/chesttracker/lang/es_es.json @@ -1,178 +1,169 @@ { - "key.chesttracker.open_gui": "Abrir la interfaz de Chest Tracker", - "chesttracker.title": "Chest Tracker", - "chesttracker.compatibility.brand": "Vista previa del cliente vía %s", + "key.chesttracker.open_gui": "Abrir GUI rastreador de cofres", + "chesttracker.title": "Rastreador de Cofres", + "chesttracker.compatibility.brand": "Client-side preview via %s", "chesttracker.inventoryButton.rename": "Renombrar cofre", - "chesttracker.inventoryButton.rename.remove": "Eliminar", - "chesttracker.inventoryButton.rename.clientOnlyWarning": "Esto solo cambiará el nombre del contenedor de tu cliente, no en el servidor.", + "chesttracker.inventoryButton.rename.remove": "Remove", + "chesttracker.inventoryButton.rename.clientOnlyWarning": "This will only rename the container on your client, not the server.", "chesttracker.inventoryButton.forget": "Olvidar", - "chesttracker.inventoryButton.rememberContainer.remember": "Recordar contenedor", - "chesttracker.inventoryButton.rememberContainer.block": "No recordar contenedor", + "chesttracker.inventoryButton.rememberContainer.remember": "Remember Container", + "chesttracker.inventoryButton.rememberContainer.block": "Don't Remember Container", "chesttracker.inventoryButton.export": "Exportar posición", "chesttracker.inventoryButton.export.toast": "Exportado a %s", "chesttracker.inventoryButton.export.errorToast": "Error al exportar la posición. Revise la consola.", "config.jade.plugin_chesttracker.memory_preview": "Usar memorias", "config.waila.plugin_chesttracker": "Rastreador de Cofres", - "config.waila.plugin_chesttracker.show_icon": "Muestra el icono de Chest Tracker", - "config.waila.plugin_chesttracker.show_key_and_location": "DEBUG: Mostrar la posición del resaltado y la clave de memoria", - "chesttracker.generic.seconds": "%d segundos", - "chesttracker.generic.minutes": "%d minutos", - "chesttracker.generic.hour": "1 hora", - "chesttracker.generic.hours": "%d horas", - "chesttracker.generic.day": "1 día", - "chesttracker.generic.days": "%d días", - "chesttracker.generic.blocks": "%d bloques", + "config.waila.plugin_chesttracker.show_icon": "Show Chest Tracker's icon", + "config.waila.plugin_chesttracker.show_key_and_location": "DEBUG: Show a highlight's position and memory key", + "chesttracker.generic.seconds": "%d seconds", + "chesttracker.generic.minutes": "%d minutes", + "chesttracker.generic.hour": "1 hour", + "chesttracker.generic.hours": "%d hours", + "chesttracker.generic.day": "1 day", + "chesttracker.generic.days": "%d days", + "chesttracker.generic.blocks": "%d blocks", "chesttracker.gui.id": "ID", - "chesttracker.gui.open": "Abrir", - "chesttracker.gui.resize": "Cambiar tamaño de la interfaz", - "chesttracker.gui.containerFilter": "Contenedor: %s", - "chesttracker.gui.containerFilter.all": "Todos", - "chesttracker.gui.containerFilter.chests": "Cofres", - "chesttracker.gui.containerFilter.barrels": "Barriles", - "chesttracker.gui.containerFilter.shulkerBoxes": "Cajas de shulker", - "chesttracker.gui.containerFilter.hoppers": "Tolvas", - "chesttracker.gui.containerFilter.furnaces": "Hornos", - "chesttracker.gui.itemSort": "Ordenando: %s", - "chesttracker.gui.itemSort.countDescending": "Número de objetos (mayor a menor)", - "chesttracker.gui.itemSort.countAscending": "Cuenta de objetos (menor a mayor)", - "chesttracker.gui.itemSort.alphabeticalDescending": "Nombre del objeto (A a Z)", - "chesttracker.gui.itemSort.alphabeticalAscending": "Nombre del objeto (Z a A)", - "chesttracker.gui.modSettings": "Cambiar ajustes de Mod", - "chesttracker.gui.openMemoryManager": "Abrir el gestor de memoria", - "chesttracker.gui.memoryBankSettings": "Cambiar configuración del banco de memoria", - "chesttracker.gui.narration.drag": "Presione y arrastre", - "chesttracker.gui.memoryManager": "Administrar bancos de memoria", - "chesttracker.gui.memoryManager.search": "Buscar bancos de memoria", - "chesttracker.gui.memoryManager.selectedBackend": "Modo: %s", - "chesttracker.gui.memoryManager.newMemoryBank": "Crear nuevo banco de memoria", - "chesttracker.gui.createMemoryBank": "Creando nuevo banco de memoria", - "chesttracker.gui.createMemoryBank.fillDefault": "Rellenar mundo por defecto", - "chesttracker.gui.createMemoryBank.createAndLoad": "Crear y cargar", - "chesttracker.gui.createMemoryBank.alreadyExists": "Banco de memoria ya existe con este ID", - "chesttracker.gui.createMemoryBank.emptyId": "El ID no puede estar vacío", - "chesttracker.gui.editMemoryBank": "Editando banco de memoria", - "chesttracker.gui.editMemoryBank.markDefault": "Hacer predeterminado", - "chesttracker.gui.editMemoryBank.alreadyDefault": "Ya es el predeterminado", - "chesttracker.gui.editMemoryBank.markDefault.tooltip": "Marcar este Banco de Memorias como el predeterminado para la conexión/mundo actual.", - "chesttracker.gui.editMemoryBank.compatibility": "Compatibilidad", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode": "Modo de filtrado de nombres", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.tooltip": "Filtrado aplicado a los nombres de contenedores. Esto puede ser útil si un servidor suministra un paquete de recursos que hace uso de caracteres de alto código para la interfaz de usuario.", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.none": "Ninguno", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.none.tooltip": "No se aplica ningún filtrado a los nombres de contenedores.", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii": "Solo ASCII", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Solo permitir caracteres ASCII en los nombres de contenedores.", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Unicode básico", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Solo permite caracteres Unicode hasta \\u33FF. Esto incluye la mayoría de los scripts y símbolos europeos, africanos y americanos, pero excluye chino, coreano, japonés y otros.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", - "chesttracker.gui.editMemoryBank.filtering": "Filtrado", - "chesttracker.gui.editMemoryBank.filtering.manualMode": "Modo manual", - "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Si los contenedores necesitan ser añadidos manualmente a Chest Tracker.", - "chesttracker.gui.editMemoryBank.filtering.onlyRemembedNamed": "Solo con nombre", - "chesttracker.gui.editMemoryBank.filtering.onlyRemembedNamed.tooltip": "Si solo recordar contenedores con nombre.", - "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.all": "Todos los contenedores", - "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.all.tooltip": "Guarda objetos de todos los contenedores, incluyendo tolvas, hornos y similares", - "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.common": "Contenedores comunes", - "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.common.tooltip": "Recuerda solo cofres, barriles y cajas de shulker.", - "chesttracker.gui.editMemoryBank.filtering.rememberEnderChests": "Cofre de ender", - "chesttracker.gui.editMemoryBank.filtering.rememberEnderChests.tooltip": "Recordar los cofres de ender en su propia pestaña o ignorarlos.", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks": "Añadir automáticamente bloques colocados", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.yes": "Sí", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.shulkerBoxesOnly": "Cajas de shulker", + "chesttracker.gui.open": "Open", + "chesttracker.gui.resize": "Resize GUI", + "chesttracker.gui.containerFilter": "Container: %s", + "chesttracker.gui.containerFilter.all": "All", + "chesttracker.gui.containerFilter.chests": "Chests", + "chesttracker.gui.containerFilter.barrels": "Barrels", + "chesttracker.gui.containerFilter.shulkerBoxes": "Shulker Boxes", + "chesttracker.gui.containerFilter.hoppers": "Hoppers", + "chesttracker.gui.containerFilter.furnaces": "Furnaces", + "chesttracker.gui.itemSort": "Sorting: %s", + "chesttracker.gui.itemSort.countDescending": "Item Count (High to Low)", + "chesttracker.gui.itemSort.countAscending": "Item Count (Low to High)", + "chesttracker.gui.itemSort.alphabeticalDescending": "Item Name (A to Z)", + "chesttracker.gui.itemSort.alphabeticalAscending": "Item Name (Z to A)", + "chesttracker.gui.modSettings": "Change Mod Settings", + "chesttracker.gui.openMemoryManager": "Open Memory Manager", + "chesttracker.gui.memoryBankSettings": "Change Memory Bank Settings", + "chesttracker.gui.narration.drag": "Click and drag", + "chesttracker.gui.memoryManager": "Manage Memory Banks", + "chesttracker.gui.memoryManager.search": "Search Memory Banks", + "chesttracker.gui.memoryManager.selectedBackend": "Backend: %s", + "chesttracker.gui.memoryManager.newMemoryBank": "Create new Memory Bank", + "chesttracker.gui.createMemoryBank": "Creating new Memory Bank", + "chesttracker.gui.createMemoryBank.fillDefault": "Fill World Default", + "chesttracker.gui.createMemoryBank.createAndLoad": "Create and Load", + "chesttracker.gui.createMemoryBank.alreadyExists": "Memory Bank already exists with this ID", + "chesttracker.gui.createMemoryBank.emptyId": "Can't have empty ID", + "chesttracker.gui.editMemoryBank": "Editing Memory Bank", + "chesttracker.gui.editMemoryBank.markDefault": "Make Default", + "chesttracker.gui.editMemoryBank.alreadyDefault": "Already Default", + "chesttracker.gui.editMemoryBank.markDefault.tooltip": "Mark this Memory Bank as the default for the current connection/world.", + "chesttracker.gui.editMemoryBank.compatibility": "Compatibility", + "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode": "Name Filtering Mode", + "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.tooltip": "Filtering applied to container label names. This can be useful if a server supplies a resource pack which makes use of high-codepoint characters for UI.", + "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.none": "None", + "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.none.tooltip": "No filtering applied to container names.", + "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii": "ASCII only", + "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Only allow ASCII characters in container names.", + "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Basic Unicode", + "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Only allow Unicode characters up to \\u33FF. This includes most European, African and American scripts and symbols, but excludes Chinese, Korean, Japanese and others.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Display Container Names", + "chesttracker.gui.editMemoryBank.filtering": "Filtering", + "chesttracker.gui.editMemoryBank.filtering.manualMode": "Manual Mode", + "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Whether containers need to be manually added to Chest Tracker.", + "chesttracker.gui.editMemoryBank.filtering.onlyRemembedNamed": "Only Named", + "chesttracker.gui.editMemoryBank.filtering.onlyRemembedNamed.tooltip": "Whether to only remember named containers.", + "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.all": "All Containers", + "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.all.tooltip": "Save items from all containers, including hoppers, furnaces and similar", + "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.common": "Common Containers", + "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.common.tooltip": "Only remember chests, barrels and shulker boxes.", + "chesttracker.gui.editMemoryBank.filtering.rememberEnderChests": "Ender Chests", + "chesttracker.gui.editMemoryBank.filtering.rememberEnderChests.tooltip": "Whether to remember ender chests in their own tab, or to ignore them.", + "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks": "Auto-add Placed Blocks", + "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.yes": "Yes", + "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.shulkerBoxesOnly": "Shulker Boxes", "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.no": "No", - "chesttracker.gui.editMemoryBank.integrity": "Integridad", - "chesttracker.gui.editMemoryBank.integrity.blockBreak": "Romper bloques", - "chesttracker.gui.editMemoryBank.integrity.blockBreak.tooltip": "Quitar los recuerdos cuando el bloque en esa posición se rompa.", - "chesttracker.gui.editMemoryBank.integrity.preserveNamed": "Conservar con nombre", - "chesttracker.gui.editMemoryBank.integrity.preserveNamed.tooltip": "Eximir los recuerdos nombrados de la duración de los recuerdos.", - "chesttracker.gui.editMemoryBank.integrity.periodicCheck": "Comprobación periódica", - "chesttracker.gui.editMemoryBank.integrity.periodicCheck.tooltip": "Comprobar periódicamente los recuerdos cercanos para ver si sus contenedores ya no están ahí, en caso de que algo ajeno al jugador los rompa.", - "chesttracker.gui.editMemoryBank.integrity.memoryLifetime": "Duración de la memoria", - "chesttracker.gui.editMemoryBank.integrity.memoryLifetime.never": "Nunca expira", - "chesttracker.gui.editMemoryBank.integrity.memoryLifetime.tooltip": "Cuánto tiempo debe transcurrir desde el último acceso de una memoria antes de que se considere obsoleta y eliminada.", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode": "Modo de conteo del tiempo de vida", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.realTime": "Usar tiempo real", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.worldTime": "Usar hora del mundo", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.loadedTime": "Usar tiempo de carga del banco", - "chesttracker.gui.editMemoryBank.manage": "Administrar", - "chesttracker.gui.editMemoryBank.manage.workingRange": "Rango: %s", - "chesttracker.gui.editMemoryBank.manage.deleteWithinRange": "Borrar todos los recuerdos dentro de bloques %s (%s)", - "chesttracker.gui.editMemoryBank.manage.deleteOutsideRange": "Borrar todos los recuerdos fuera de bloques %s (%s)", - "chesttracker.gui.editMemoryBank.manage.highlightAll": "Resaltar todo", - "chesttracker.gui.editMemoryBank.search": "Buscar", - "chesttracker.gui.editMemoryBank.search.itemListRange": "Rango de listado de objetos: %s", - "chesttracker.gui.editMemoryBank.search.itemListRange.tooltip": "La distancia máxima en bloques para que la lista de objetos muestre los recuerdos.", - "chesttracker.gui.editMemoryBank.search.searchRange": "Rango de búsqueda: %s", - "chesttracker.gui.editMemoryBank.search.stackMergeMode": "Modo de fusión de pila", - "chesttracker.gui.editMemoryBank.search.stackMergeMode.tooltip": "Cómo diferentes pilas de artículos en contenedores son fusionados y mostrados en la lista de artículos.", - "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Combinarlo todo", - "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Dentro de contenedores", - "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Nunca combinar", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", - "chesttracker.gui.editMemoryKeys": "Editar claves de memoria", - "chesttracker.gui.editMemoryKeys.hint": "Clave de memoria", - "chesttracker.gui.editMemoryKeys.return": "Volver", - "chesttracker.gui.editMemoryKeys.reorder": "Botón de ordenar", - "chesttracker.gui.editMemoryKeys.setIcon": "Establecer icono", - "chesttracker.gui.editMemoryKeys.useDefaultIconOrdering": "Usar orden de iconos por defecto", - "chesttracker.storage.json.fileSize": "Tamaño del archivo: %s", - "chesttracker.config.open": "Abrir", - "chesttracker.config.requiresRestart": "¡Requiere reiniciar el juego!", - "chesttracker.config.gui": "Interfaz", - "chesttracker.config.gui.autofocusSearchBar": "Autoenfocar barra de búsqueda", - "chesttracker.config.gui.autofocusSearchBar.description": "Si enfocar automáticamente la barra de búsqueda cuando se abre la interfaz.", - "chesttracker.config.gui.showAutocomplete": "Mostrar autocompletado para la barra de búsqueda", - "chesttracker.config.gui.autocompleteShowsRegularNames": "Mostrar objetos sin nombre en autocompletar", - "chesttracker.config.gui.showResizeWidget": "Mostrar botón para redimensionar", - "chesttracker.config.gui.gridWidth": "Ancho de la cuadrícula", - "chesttracker.config.gui.gridHeight": "Altura de cuadrícula", - "chesttracker.config.gui.gridSizeSlider": "%d ranuras", - "chesttracker.config.gui.hideMemoryBankIds": "Ocultar los IDs de bancos de memorias", - "chesttracker.config.gui.hideMemoryBankIds.description": "Oculte el ID del banco de memoria de las interfaces de edición, por ejemplo, en caso de que desee ocultar una IP.", - "chesttracker.config.gui.itemListTextScale": "Escala relativa del texto de la interfaz", - "chesttracker.config.gui.itemListTextScale.description": "A qué escala de la interfaz renderizar el texto en la lista de elementos. Útil si el número de objetos se estira en otras ranuras.", - "chesttracker.config.gui.useCustomNamesInGUIs": "Usar nombres personalizados en interfaces", - "chesttracker.config.gui.useCustomNamesInGUIs.description": "Si desea reemplazar el texto del título en interfaces con nombres personalizados, si uno está presente. Tenga en cuenta que esto puede causar problemas de compatibilidad con servidores que usan fuentes para texturas de interfaz, como Origin Realms.", - "chesttracker.config.inventoryButton": "Botón del inventario", - "chesttracker.config.inventoryButton.enabled": "Mostrar botón en el inventario", - "chesttracker.config.inventoryButton.showExtra": "Mostrar botones extra", + "chesttracker.gui.editMemoryBank.integrity": "Integrity", + "chesttracker.gui.editMemoryBank.integrity.blockBreak": "Block Break", + "chesttracker.gui.editMemoryBank.integrity.blockBreak.tooltip": "Whether to remove memories when the block at that position is broken.", + "chesttracker.gui.editMemoryBank.integrity.preserveNamed": "Preserve Named", + "chesttracker.gui.editMemoryBank.integrity.preserveNamed.tooltip": "Whether to exempt named memories from the memory lifetime check.", + "chesttracker.gui.editMemoryBank.integrity.periodicCheck": "Periodic Check", + "chesttracker.gui.editMemoryBank.integrity.periodicCheck.tooltip": "Periodically check memories nearby to see if their containers are no longer there, in case something else broke them.", + "chesttracker.gui.editMemoryBank.integrity.memoryLifetime": "Memory Lifetime", + "chesttracker.gui.editMemoryBank.integrity.memoryLifetime.never": "Never Expires", + "chesttracker.gui.editMemoryBank.integrity.memoryLifetime.tooltip": "How long since a memory's last access before it's considered stale and removed.", + "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode": "Lifetime Count Mode", + "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.realTime": "Use Real Time", + "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.worldTime": "Use World Time", + "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.loadedTime": "Use Bank Loaded Time", + "chesttracker.gui.editMemoryBank.manage": "Manage", + "chesttracker.gui.editMemoryBank.manage.workingRange": "Range: %s", + "chesttracker.gui.editMemoryBank.manage.deleteWithinRange": "Delete all memories within %s blocks (%s)", + "chesttracker.gui.editMemoryBank.manage.deleteOutsideRange": "Delete all memories outside %s blocks (%s)", + "chesttracker.gui.editMemoryBank.manage.highlightAll": "Highlight All", + "chesttracker.gui.editMemoryBank.search": "Search", + "chesttracker.gui.editMemoryBank.search.itemListRange": "Item List Range: %s", + "chesttracker.gui.editMemoryBank.search.itemListRange.tooltip": "The maximum distance in blocks that the item list will display memories for.", + "chesttracker.gui.editMemoryBank.search.searchRange": "Search Range: %s", + "chesttracker.gui.editMemoryBank.search.stackMergeMode": "Stack Merge Mode", + "chesttracker.gui.editMemoryBank.search.stackMergeMode.tooltip": "How different item stacks in containers are merged and displayed in the item list.", + "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", + "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", + "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", + "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", + "chesttracker.gui.editMemoryKeys.hint": "Memory Key", + "chesttracker.gui.editMemoryKeys.return": "Return", + "chesttracker.gui.editMemoryKeys.reorder": "Reorder Key", + "chesttracker.gui.editMemoryKeys.setIcon": "Set Icon", + "chesttracker.gui.editMemoryKeys.useDefaultIconOrdering": "Use Default Icon Ordering", + "chesttracker.storage.json.fileSize": "File Size: %s", + "chesttracker.config.open": "Open", + "chesttracker.config.requiresRestart": "Requires the game to restart!", + "chesttracker.config.gui": "Gui", + "chesttracker.config.gui.autofocusSearchBar": "Auto-focus Search Bar", + "chesttracker.config.gui.autofocusSearchBar.description": "Whether to automatically focus the search bar when the GUI is opened.", + "chesttracker.config.gui.showAutocomplete": "Show Autocomplete for Search Bar", + "chesttracker.config.gui.autocompleteShowsRegularNames": "Show Unnamed Items in Autocomplete", + "chesttracker.config.gui.showResizeWidget": "Show Resize Widget", + "chesttracker.config.gui.gridWidth": "Grid Width", + "chesttracker.config.gui.gridHeight": "Grid Height", + "chesttracker.config.gui.gridSizeSlider": "%d slots", + "chesttracker.config.gui.hideMemoryBankIds": "Hide Memory Bank IDs", + "chesttracker.config.gui.hideMemoryBankIds.description": "Hide the Memory Bank ID from the edit GUIs, for example in case you want to hide an IP.", + "chesttracker.config.gui.itemListTextScale": "GUI Text Relative Scale", + "chesttracker.config.gui.itemListTextScale.description": "What GUI scale to render text in the item list at. Useful if your item counts stretch into other slots.", + "chesttracker.config.gui.useCustomNamesInGUIs": "Use Custom Names in GUIs", + "chesttracker.config.gui.useCustomNamesInGUIs.description": "Whether to replace title text in GUIs with custom names, if one is present. Note that this may cause compatibility issues with servers that use fonts for GUI textures, such as Origin Realms.", + "chesttracker.config.inventoryButton": "Inventory Button", + "chesttracker.config.inventoryButton.enabled": "Show Inventory Button", + "chesttracker.config.inventoryButton.showExtra": "Show Extra Buttons", "chesttracker.config.inventoryButton.showExtra.description": "If relevant, show additional buttons after hovering over the main button, such as deletion and filtering.", - "chesttracker.config.inventoryButton.manageCustom": "Administrar las posiciones de los botones personalizados", - "chesttracker.config.inventoryButton.export": "Mostrar botón de exportar", - "chesttracker.config.inventoryButton.export.description": "Si se debe mostrar un botón de exportación para posiciones de botones personalizadas. Los archivos se colocan en %s.", - "chesttracker.config.rendering": "Renderizado", - "chesttracker.config.rendering.nameRenderRange": "Rango de renderizado de los nombres", - "chesttracker.config.rendering.displayContainerNames": "Mostrar nombres de contenedor", - "chesttracker.config.rendering.displayContainerNames.description": "Si mostrar nombres por encima de los contenedores en el mundo. Esto puede ser reemplazado por un banco de memoria, en compatibilidad.", - "chesttracker.config.dev": "Herramientas de desarrollador", - "chesttracker.config.dev.showDevHud": "Mostrar interfaz de desarrollador", - "chesttracker.config.dev.showDevHud.description": "Muestra la interfaz de desarrollador", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", - "chesttracker.config.whereisit": "Opciones de Where Is It", - "chesttracker.config.whereisit.description": "Abra la configuración de Where Is It Aquí encontrarás las opciones para la renderización.", - "chesttracker.config.memoryAndStorage": "Memoria y almacenamiento", - "chesttracker.config.memory": "Opciones de memoria", - "chesttracker.config.memory.noMemoryBankLoaded": "No hay un banco de memoria actualmente cargado.", - "chesttracker.config.storage": "Opciones de almacenamiento", - "chesttracker.config.storage.openFolder": "Abrir la carpeta de la memoria", - "chesttracker.config.storage.storageBackend": "Modo de almacenamiento", - "chesttracker.config.storage.storageBackend.description": "Define el formato en que los bancos de memoria se almacenan entre mundos/sesiones.", - "chesttracker.config.storage.storageBackend.description.json": "Almacena todos los bancos de memoria como archivos JSON en el directorio 'chesttracker' del juego. Legible, pero ocupa más espacio en disco.", - "chesttracker.config.storage.storageBackend.description.nbt": "Almacena todos los bancos de memoria como archivos NBT en el directorio 'chesttracker' del juego. Más compacto, pero no se puede leer sin un visor externo. Opción recomendada.", - "chesttracker.config.storage.storageBackend.description.memory": "Almacena bancos de memoria en la memoria del juego.", - "chesttracker.config.storage.storageBackend.description.memoryLossOnReboot": "Aviso: todos los bancos de memoria almacenados de esta manera se pierden cuando el juego se cierra.", - "chesttracker.config.storage.json.readableJsonMemories": "Archivos JSON legibles", - "chesttracker.config.storage.json.readableJsonMemories.description": "Si los archivos JSON en el directorio de memoria deben ser legibles, o compactos.", - "chesttracker.config.compatibility.shulkerboxtooltip": "Integración con Shulker Box Tooltip", - "chesttracker.config.compatibility.shulkerboxtooltip.description": "Chest Tracker sobrescribe la vista previa Shulker Box Tooltip mod para cofres de ender con su propio lado del cliente, leyendo el banco de memoria actual. Esto funciona en Realms y servidores sin el mod Shulker Box Tooltip instalado.", - "chesttracker.config.compatibility.wthit": "Integración con WTHIT", - "chesttracker.config.compatibility.wthit.description": "Le permite utilizar el banco de memoria actual para mostrar resaltados en WTHIT. Hay configuraciones adicionales bajo el gestor de plugins de WTHIT.", - "chesttracker.config.searchables.required": "Se requiere Searchables.", - "chesttracker.config.searchables.notInstalled": "Searchables no cargado." + "chesttracker.config.inventoryButton.manageCustom": "Manage Custom Button Positions", + "chesttracker.config.inventoryButton.export": "Show Export Button", + "chesttracker.config.inventoryButton.export.description": "Whether to show an export button for custom button positions. Files get placed in %s.", + "chesttracker.config.rendering": "Rendering", + "chesttracker.config.rendering.nameRenderRange": "Name Render Range", + "chesttracker.config.rendering.displayContainerNames": "Show Container Names", + "chesttracker.config.rendering.displayContainerNames.description": "Whether to show names above containers in the world. This can be overridden per memory bank, under Compatibility.", + "chesttracker.config.dev": "Developer Utils", + "chesttracker.config.dev.showDevHud": "Show Developer Hud", + "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", + "chesttracker.config.whereisit": "Where Is It config", + "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", + "chesttracker.config.memoryAndStorage": "Memory & Storage", + "chesttracker.config.memory": "Memory Settings", + "chesttracker.config.memory.noMemoryBankLoaded": "No Memory Bank currently loaded.", + "chesttracker.config.storage": "Storage Settings", + "chesttracker.config.storage.openFolder": "Open Memory Folder", + "chesttracker.config.storage.storageBackend": "Storage Backend", + "chesttracker.config.storage.storageBackend.description": "Defines the format that Memory Banks are stored between worlds/sessions.", + "chesttracker.config.storage.storageBackend.description.json": "Stores all Memory Banks as JSON files in your game's 'chesttracker' directory. Readable, but takes up more disk space.", + "chesttracker.config.storage.storageBackend.description.nbt": "Stores all Memory Banks as NBT files in your game's 'chesttracker' directory. More compact, but not readable without an external viewer. Recommended option.", + "chesttracker.config.storage.storageBackend.description.memory": "Stores Memory Banks in game memory.", + "chesttracker.config.storage.storageBackend.description.memoryLossOnReboot": "Warning: all Memory Banks stored this way are lost when the game closes.", + "chesttracker.config.storage.json.readableJsonMemories": "Readable JSON Files", + "chesttracker.config.storage.json.readableJsonMemories.description": "Whether the JSON files in the memory directory should be readable, or compacted.", + "chesttracker.config.compatibility.shulkerboxtooltip": "Shulker Box Tooltip Integration", + "chesttracker.config.compatibility.shulkerboxtooltip.description": "Chest Tracker overwrites Shulker Box Tooltip's server-side preview for ender chests with it's own client-side one, reading from the current Memory Bank. This functions on Realms and servers without Shulker Box Tooltip installed.", + "chesttracker.config.compatibility.wthit": "WTHIT Integration", + "chesttracker.config.compatibility.wthit.description": "Allows you to use the current Memory Bank to show highlights in WTHIT. There are additional settings under the WTHIT's plugin manager.", + "chesttracker.config.searchables.required": "Requires Searchables.", + "chesttracker.config.searchables.notInstalled": "Searchables not loaded." } \ No newline at end of file diff --git a/src/client/resources/assets/chesttracker/lang/fr_fr.json b/src/client/resources/assets/chesttracker/lang/fr_fr.json index 1c639b70..8e090af3 100644 --- a/src/client/resources/assets/chesttracker/lang/fr_fr.json +++ b/src/client/resources/assets/chesttracker/lang/fr_fr.json @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Only allow ASCII characters in container names.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Basic Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Only allow Unicode characters up to \\u33FF. This includes most European, African and American scripts and symbols, but excludes Chinese, Korean, Japanese and others.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Display Container Names", "chesttracker.gui.editMemoryBank.filtering": "Filtering", "chesttracker.gui.editMemoryBank.filtering.manualMode": "Mode manuel", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Indique si les conteneurs doivent être ajoutés manuellement à Chest Tracker.", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", "chesttracker.gui.editMemoryKeys.hint": "Memory Key", "chesttracker.gui.editMemoryKeys.return": "Return", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Developer Utils", "chesttracker.config.dev.showDevHud": "Show Developer Hud", "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It config", "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", "chesttracker.config.memoryAndStorage": "Memory & Storage", diff --git a/src/client/resources/assets/chesttracker/lang/it_it.json b/src/client/resources/assets/chesttracker/lang/it_it.json index 99e3b339..45e2e673 100644 --- a/src/client/resources/assets/chesttracker/lang/it_it.json +++ b/src/client/resources/assets/chesttracker/lang/it_it.json @@ -1,46 +1,46 @@ { - "key.chesttracker.open_gui": "Apri la GUI di Chest Tracker", + "key.chesttracker.open_gui": "Open Chest Tracker GUI", "chesttracker.title": "Chest Tracker", - "chesttracker.compatibility.brand": "Anteprima lato client tramite %s", - "chesttracker.inventoryButton.rename": "Rinomina il contenitore", - "chesttracker.inventoryButton.rename.remove": "Rimuovi", - "chesttracker.inventoryButton.rename.clientOnlyWarning": "Questo rinominerà il contenitore solo sul tuo client, non sul server.", - "chesttracker.inventoryButton.forget": "Dimentica", - "chesttracker.inventoryButton.rememberContainer.remember": "Ricorda il contenitore", - "chesttracker.inventoryButton.rememberContainer.block": "Non ricordare il contenitore", - "chesttracker.inventoryButton.export": "Esporta posizione", - "chesttracker.inventoryButton.export.toast": "Esportato in %s", - "chesttracker.inventoryButton.export.errorToast": "Errore durante l'esportazione della posizione, controlla la console.", - "config.jade.plugin_chesttracker.memory_preview": "Usa Memorie", + "chesttracker.compatibility.brand": "Client-side preview via %s", + "chesttracker.inventoryButton.rename": "Rename Container", + "chesttracker.inventoryButton.rename.remove": "Remove", + "chesttracker.inventoryButton.rename.clientOnlyWarning": "This will only rename the container on your client, not the server.", + "chesttracker.inventoryButton.forget": "Forget", + "chesttracker.inventoryButton.rememberContainer.remember": "Remember Container", + "chesttracker.inventoryButton.rememberContainer.block": "Don't Remember Container", + "chesttracker.inventoryButton.export": "Export Position", + "chesttracker.inventoryButton.export.toast": "Exported to %s", + "chesttracker.inventoryButton.export.errorToast": "Error exporting position; check the console.", + "config.jade.plugin_chesttracker.memory_preview": "Use Memories", "config.waila.plugin_chesttracker": "Chest Tracker", - "config.waila.plugin_chesttracker.show_icon": "Mostra l'icona di Chest Tracker", + "config.waila.plugin_chesttracker.show_icon": "Show Chest Tracker's icon", "config.waila.plugin_chesttracker.show_key_and_location": "DEBUG: Show a highlight's position and memory key", - "chesttracker.generic.seconds": "%d secondi", - "chesttracker.generic.minutes": "%d minuti", - "chesttracker.generic.hour": "1 ora", - "chesttracker.generic.hours": "%d ore", - "chesttracker.generic.day": "1 giorno", - "chesttracker.generic.days": "%d giorni", - "chesttracker.generic.blocks": "%d blocchi", + "chesttracker.generic.seconds": "%d seconds", + "chesttracker.generic.minutes": "%d minutes", + "chesttracker.generic.hour": "1 hour", + "chesttracker.generic.hours": "%d hours", + "chesttracker.generic.day": "1 day", + "chesttracker.generic.days": "%d days", + "chesttracker.generic.blocks": "%d blocks", "chesttracker.gui.id": "ID", - "chesttracker.gui.open": "Apri", - "chesttracker.gui.resize": "Ridimensiona la GUI", - "chesttracker.gui.containerFilter": "Contenitore: %s", - "chesttracker.gui.containerFilter.all": "Tutti", - "chesttracker.gui.containerFilter.chests": "Bauli", - "chesttracker.gui.containerFilter.barrels": "Barili", - "chesttracker.gui.containerFilter.shulkerBoxes": "Scatole di shulker", - "chesttracker.gui.containerFilter.hoppers": "Tramogge", - "chesttracker.gui.containerFilter.furnaces": "Fornaci", - "chesttracker.gui.itemSort": "Ordina: %s", - "chesttracker.gui.itemSort.countDescending": "Numero di oggetti (Decrescente)", - "chesttracker.gui.itemSort.countAscending": "Numero di oggetti (Crescente)", - "chesttracker.gui.itemSort.alphabeticalDescending": "Nome oggetti (Da A a Z)", - "chesttracker.gui.itemSort.alphabeticalAscending": "Nome oggetti (Da Z a A)", - "chesttracker.gui.modSettings": "Cambia Impostazioni Mod", - "chesttracker.gui.openMemoryManager": "Apri Gestione Memoria", + "chesttracker.gui.open": "Open", + "chesttracker.gui.resize": "Resize GUI", + "chesttracker.gui.containerFilter": "Container: %s", + "chesttracker.gui.containerFilter.all": "All", + "chesttracker.gui.containerFilter.chests": "Chests", + "chesttracker.gui.containerFilter.barrels": "Barrels", + "chesttracker.gui.containerFilter.shulkerBoxes": "Shulker Boxes", + "chesttracker.gui.containerFilter.hoppers": "Hoppers", + "chesttracker.gui.containerFilter.furnaces": "Furnaces", + "chesttracker.gui.itemSort": "Sorting: %s", + "chesttracker.gui.itemSort.countDescending": "Item Count (High to Low)", + "chesttracker.gui.itemSort.countAscending": "Item Count (Low to High)", + "chesttracker.gui.itemSort.alphabeticalDescending": "Item Name (A to Z)", + "chesttracker.gui.itemSort.alphabeticalAscending": "Item Name (Z to A)", + "chesttracker.gui.modSettings": "Change Mod Settings", + "chesttracker.gui.openMemoryManager": "Open Memory Manager", "chesttracker.gui.memoryBankSettings": "Change Memory Bank Settings", - "chesttracker.gui.narration.drag": "Clicca e trascina", + "chesttracker.gui.narration.drag": "Click and drag", "chesttracker.gui.memoryManager": "Manage Memory Banks", "chesttracker.gui.memoryManager.search": "Search Memory Banks", "chesttracker.gui.memoryManager.selectedBackend": "Backend: %s", @@ -63,16 +63,10 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Only allow ASCII characters in container names.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Basic Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Only allow Unicode characters up to \\u33FF. This includes most European, African and American scripts and symbols, but excludes Chinese, Korean, Japanese and others.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Display Container Names", "chesttracker.gui.editMemoryBank.filtering": "Filtering", - "chesttracker.gui.editMemoryBank.filtering.manualMode": "Modalità manuale", - "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Indica se i contenitori devono essere aggiunti manualmente a Chest Tracker.", + "chesttracker.gui.editMemoryBank.filtering.manualMode": "Manual Mode", + "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Whether containers need to be manually added to Chest Tracker.", "chesttracker.gui.editMemoryBank.filtering.onlyRemembedNamed": "Only Named", "chesttracker.gui.editMemoryBank.filtering.onlyRemembedNamed.tooltip": "Whether to only remember named containers.", "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.all": "All Containers", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", "chesttracker.gui.editMemoryKeys.hint": "Memory Key", "chesttracker.gui.editMemoryKeys.return": "Return", @@ -137,8 +129,8 @@ "chesttracker.config.gui.hideMemoryBankIds.description": "Hide the Memory Bank ID from the edit GUIs, for example in case you want to hide an IP.", "chesttracker.config.gui.itemListTextScale": "GUI Text Relative Scale", "chesttracker.config.gui.itemListTextScale.description": "What GUI scale to render text in the item list at. Useful if your item counts stretch into other slots.", - "chesttracker.config.gui.useCustomNamesInGUIs": "Usa i nomi personalizzati nelle GUI", - "chesttracker.config.gui.useCustomNamesInGUIs.description": "Indica se rimpiazzare il testo nelle GUI con nomi personalizzati, se uno è presente. Si noti che questo potrebbe causare problemi di compatibilità con i server che usano i font per le texture GUI, come Origin Realms.", + "chesttracker.config.gui.useCustomNamesInGUIs": "Use Custom Names in GUIs", + "chesttracker.config.gui.useCustomNamesInGUIs.description": "Whether to replace title text in GUIs with custom names, if one is present. Note that this may cause compatibility issues with servers that use fonts for GUI textures, such as Origin Realms.", "chesttracker.config.inventoryButton": "Inventory Button", "chesttracker.config.inventoryButton.enabled": "Show Inventory Button", "chesttracker.config.inventoryButton.showExtra": "Show Extra Buttons", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Developer Utils", "chesttracker.config.dev.showDevHud": "Show Developer Hud", "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It config", "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", "chesttracker.config.memoryAndStorage": "Memory & Storage", diff --git a/src/client/resources/assets/chesttracker/lang/ja_jp.json b/src/client/resources/assets/chesttracker/lang/ja_jp.json index 61325995..45e2e673 100644 --- a/src/client/resources/assets/chesttracker/lang/ja_jp.json +++ b/src/client/resources/assets/chesttracker/lang/ja_jp.json @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Only allow ASCII characters in container names.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Basic Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Only allow Unicode characters up to \\u33FF. This includes most European, African and American scripts and symbols, but excludes Chinese, Korean, Japanese and others.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Display Container Names", "chesttracker.gui.editMemoryBank.filtering": "Filtering", "chesttracker.gui.editMemoryBank.filtering.manualMode": "Manual Mode", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Whether containers need to be manually added to Chest Tracker.", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", "chesttracker.gui.editMemoryKeys.hint": "Memory Key", "chesttracker.gui.editMemoryKeys.return": "Return", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Developer Utils", "chesttracker.config.dev.showDevHud": "Show Developer Hud", "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It config", "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", "chesttracker.config.memoryAndStorage": "Memory & Storage", diff --git a/src/client/resources/assets/chesttracker/lang/ko_kr.json b/src/client/resources/assets/chesttracker/lang/ko_kr.json index d5e7dcb3..67cbf814 100644 --- a/src/client/resources/assets/chesttracker/lang/ko_kr.json +++ b/src/client/resources/assets/chesttracker/lang/ko_kr.json @@ -7,7 +7,7 @@ "chesttracker.inventoryButton.rename.clientOnlyWarning": "이 변경은 서버가 아닌 클라이언트에 저장 됩니다", "chesttracker.inventoryButton.forget": "Forget", "chesttracker.inventoryButton.rememberContainer.remember": "상자 기억하기", - "chesttracker.inventoryButton.rememberContainer.block": "상자 기억하지 않기", + "chesttracker.inventoryButton.rememberContainer.block": "상자 기억하지않기", "chesttracker.inventoryButton.export": "Export Position", "chesttracker.inventoryButton.export.toast": "Exported to %s", "chesttracker.inventoryButton.export.errorToast": "Error exporting position; check the console.", @@ -15,28 +15,28 @@ "config.waila.plugin_chesttracker": "Chest Tracker", "config.waila.plugin_chesttracker.show_icon": "Show Chest Tracker's icon", "config.waila.plugin_chesttracker.show_key_and_location": "DEBUG: Show a highlight's position and memory key", - "chesttracker.generic.seconds": "%d초", - "chesttracker.generic.minutes": "%d분", - "chesttracker.generic.hour": "1시간", - "chesttracker.generic.hours": "%d시간", - "chesttracker.generic.day": "1일", - "chesttracker.generic.days": "%d일", - "chesttracker.generic.blocks": "%d 블록", - "chesttracker.gui.id": "아이디", - "chesttracker.gui.open": "열기", + "chesttracker.generic.seconds": "%d seconds", + "chesttracker.generic.minutes": "%d minutes", + "chesttracker.generic.hour": "1 hour", + "chesttracker.generic.hours": "%d hours", + "chesttracker.generic.day": "1 day", + "chesttracker.generic.days": "%d days", + "chesttracker.generic.blocks": "%d blocks", + "chesttracker.gui.id": "ID", + "chesttracker.gui.open": "Open", "chesttracker.gui.resize": "Resize GUI", "chesttracker.gui.containerFilter": "Container: %s", - "chesttracker.gui.containerFilter.all": "전체", - "chesttracker.gui.containerFilter.chests": "상자", - "chesttracker.gui.containerFilter.barrels": "통", - "chesttracker.gui.containerFilter.shulkerBoxes": "셜커 상자", - "chesttracker.gui.containerFilter.hoppers": "호퍼", - "chesttracker.gui.containerFilter.furnaces": "화로", - "chesttracker.gui.itemSort": "분류: %s", - "chesttracker.gui.itemSort.countDescending": "아이템 개수 (내림차순)", - "chesttracker.gui.itemSort.countAscending": "아이템 개수 (오름차순)", - "chesttracker.gui.itemSort.alphabeticalDescending": "아이템 이름 (오름차순)", - "chesttracker.gui.itemSort.alphabeticalAscending": "아이템 이름 (내림차순)", + "chesttracker.gui.containerFilter.all": "All", + "chesttracker.gui.containerFilter.chests": "Chests", + "chesttracker.gui.containerFilter.barrels": "Barrels", + "chesttracker.gui.containerFilter.shulkerBoxes": "Shulker Boxes", + "chesttracker.gui.containerFilter.hoppers": "Hoppers", + "chesttracker.gui.containerFilter.furnaces": "Furnaces", + "chesttracker.gui.itemSort": "Sorting: %s", + "chesttracker.gui.itemSort.countDescending": "Item Count (High to Low)", + "chesttracker.gui.itemSort.countAscending": "Item Count (Low to High)", + "chesttracker.gui.itemSort.alphabeticalDescending": "Item Name (A to Z)", + "chesttracker.gui.itemSort.alphabeticalAscending": "Item Name (Z to A)", "chesttracker.gui.modSettings": "Change Mod Settings", "chesttracker.gui.openMemoryManager": "Open Memory Manager", "chesttracker.gui.memoryBankSettings": "Change Memory Bank Settings", @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Only allow ASCII characters in container names.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Basic Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Only allow Unicode characters up to \\u33FF. This includes most European, African and American scripts and symbols, but excludes Chinese, Korean, Japanese and others.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Display Container Names", "chesttracker.gui.editMemoryBank.filtering": "Filtering", "chesttracker.gui.editMemoryBank.filtering.manualMode": "수동 모드", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Chest Tracker에서 상자를 수동으로 추가", @@ -79,12 +73,12 @@ "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.all.tooltip": "Save items from all containers, including hoppers, furnaces and similar", "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.common": "Common Containers", "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.common.tooltip": "Only remember chests, barrels and shulker boxes.", - "chesttracker.gui.editMemoryBank.filtering.rememberEnderChests": "엔더 상자", + "chesttracker.gui.editMemoryBank.filtering.rememberEnderChests": "Ender Chests", "chesttracker.gui.editMemoryBank.filtering.rememberEnderChests.tooltip": "Whether to remember ender chests in their own tab, or to ignore them.", "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks": "Auto-add Placed Blocks", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.yes": "켜짐", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.shulkerBoxesOnly": "셜커 상자", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.no": "꺼짐", + "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.yes": "Yes", + "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.shulkerBoxesOnly": "Shulker Boxes", + "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.no": "No", "chesttracker.gui.editMemoryBank.integrity": "Integrity", "chesttracker.gui.editMemoryBank.integrity.blockBreak": "Block Break", "chesttracker.gui.editMemoryBank.integrity.blockBreak.tooltip": "Whether to remove memories when the block at that position is broken.", @@ -96,15 +90,15 @@ "chesttracker.gui.editMemoryBank.integrity.memoryLifetime.never": "Never Expires", "chesttracker.gui.editMemoryBank.integrity.memoryLifetime.tooltip": "How long since a memory's last access before it's considered stale and removed.", "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode": "Lifetime Count Mode", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.realTime": "실제 시간 사용", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.worldTime": "월드 시간 사용", + "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.realTime": "Use Real Time", + "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.worldTime": "Use World Time", "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.loadedTime": "Use Bank Loaded Time", "chesttracker.gui.editMemoryBank.manage": "Manage", "chesttracker.gui.editMemoryBank.manage.workingRange": "Range: %s", "chesttracker.gui.editMemoryBank.manage.deleteWithinRange": "Delete all memories within %s blocks (%s)", "chesttracker.gui.editMemoryBank.manage.deleteOutsideRange": "Delete all memories outside %s blocks (%s)", "chesttracker.gui.editMemoryBank.manage.highlightAll": "Highlight All", - "chesttracker.gui.editMemoryBank.search": "검색", + "chesttracker.gui.editMemoryBank.search": "Search", "chesttracker.gui.editMemoryBank.search.itemListRange": "Item List Range: %s", "chesttracker.gui.editMemoryBank.search.itemListRange.tooltip": "The maximum distance in blocks that the item list will display memories for.", "chesttracker.gui.editMemoryBank.search.searchRange": "Search Range: %s", @@ -113,16 +107,14 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", "chesttracker.gui.editMemoryKeys.hint": "Memory Key", - "chesttracker.gui.editMemoryKeys.return": "돌아가기", + "chesttracker.gui.editMemoryKeys.return": "Return", "chesttracker.gui.editMemoryKeys.reorder": "Reorder Key", "chesttracker.gui.editMemoryKeys.setIcon": "Set Icon", "chesttracker.gui.editMemoryKeys.useDefaultIconOrdering": "Use Default Icon Ordering", - "chesttracker.storage.json.fileSize": "파일 크기: %s", - "chesttracker.config.open": "열기", + "chesttracker.storage.json.fileSize": "File Size: %s", + "chesttracker.config.open": "Open", "chesttracker.config.requiresRestart": "Requires the game to restart!", "chesttracker.config.gui": "Gui", "chesttracker.config.gui.autofocusSearchBar": "Auto-focus Search Bar", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Developer Utils", "chesttracker.config.dev.showDevHud": "Show Developer Hud", "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It config", "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", "chesttracker.config.memoryAndStorage": "Memory & Storage", diff --git a/src/client/resources/assets/chesttracker/lang/nl_nl.json b/src/client/resources/assets/chesttracker/lang/nl_nl.json index 7be4c2fb..bf3d8c8c 100644 --- a/src/client/resources/assets/chesttracker/lang/nl_nl.json +++ b/src/client/resources/assets/chesttracker/lang/nl_nl.json @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Only allow ASCII characters in container names.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Basic Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Only allow Unicode characters up to \\u33FF. This includes most European, African and American scripts and symbols, but excludes Chinese, Korean, Japanese and others.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Display Container Names", "chesttracker.gui.editMemoryBank.filtering": "Filtering", "chesttracker.gui.editMemoryBank.filtering.manualMode": "Manual Mode", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Whether containers need to be manually added to Chest Tracker.", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", "chesttracker.gui.editMemoryKeys.hint": "Memory Key", "chesttracker.gui.editMemoryKeys.return": "Terug", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Developer Utils", "chesttracker.config.dev.showDevHud": "Show Developer Hud", "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It config", "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", "chesttracker.config.memoryAndStorage": "Memory & Storage", diff --git a/src/client/resources/assets/chesttracker/lang/pt_pt.json b/src/client/resources/assets/chesttracker/lang/pt_pt.json index 61325995..45e2e673 100644 --- a/src/client/resources/assets/chesttracker/lang/pt_pt.json +++ b/src/client/resources/assets/chesttracker/lang/pt_pt.json @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Only allow ASCII characters in container names.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Basic Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Only allow Unicode characters up to \\u33FF. This includes most European, African and American scripts and symbols, but excludes Chinese, Korean, Japanese and others.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Display Container Names", "chesttracker.gui.editMemoryBank.filtering": "Filtering", "chesttracker.gui.editMemoryBank.filtering.manualMode": "Manual Mode", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Whether containers need to be manually added to Chest Tracker.", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", "chesttracker.gui.editMemoryKeys.hint": "Memory Key", "chesttracker.gui.editMemoryKeys.return": "Return", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Developer Utils", "chesttracker.config.dev.showDevHud": "Show Developer Hud", "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It config", "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", "chesttracker.config.memoryAndStorage": "Memory & Storage", diff --git a/src/client/resources/assets/chesttracker/lang/ro_ro.json b/src/client/resources/assets/chesttracker/lang/ro_ro.json deleted file mode 100644 index ebf0ac43..00000000 --- a/src/client/resources/assets/chesttracker/lang/ro_ro.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "key.chesttracker.open_gui": "Deschide Interfața Chest Tracker", - "chesttracker.title": "Chest Tracker", - "chesttracker.compatibility.brand": "Previzualizare client prin %s", - "chesttracker.inventoryButton.rename": "Redenumește Containerul", - "chesttracker.inventoryButton.rename.remove": "Elimină", - "chesttracker.inventoryButton.rename.clientOnlyWarning": "Aceasta va schimba numele containerului doar pe clientul tău, nu pe server.", - "chesttracker.inventoryButton.forget": "Uită", - "chesttracker.inventoryButton.rememberContainer.remember": "Memorează Container", - "chesttracker.inventoryButton.rememberContainer.block": "Nu Memora Containerul", - "chesttracker.inventoryButton.export": "Exportă Poziția", - "chesttracker.inventoryButton.export.toast": "Exportat la %s", - "chesttracker.inventoryButton.export.errorToast": "Eroare la exportarea poziției; verifică consola.", - "config.jade.plugin_chesttracker.memory_preview": "Folosește Memorii", - "config.waila.plugin_chesttracker": "Chest Tracker", - "config.waila.plugin_chesttracker.show_icon": "Arată pictograma Chest Tracker", - "config.waila.plugin_chesttracker.show_key_and_location": "DEBUG: Arată poziția și cheia de memorie a evidențierii", - "chesttracker.generic.seconds": "%d secunde", - "chesttracker.generic.minutes": "%d minute", - "chesttracker.generic.hour": "1 oră", - "chesttracker.generic.hours": "%d ore", - "chesttracker.generic.day": "1 zi", - "chesttracker.generic.days": "%d zile", - "chesttracker.generic.blocks": "%d blocuri", - "chesttracker.gui.id": "ID", - "chesttracker.gui.open": "Deschide", - "chesttracker.gui.resize": "Redimensionează Interfața", - "chesttracker.gui.containerFilter": "Container: %s", - "chesttracker.gui.containerFilter.all": "Toate", - "chesttracker.gui.containerFilter.chests": "Cufere", - "chesttracker.gui.containerFilter.barrels": "Butoaie", - "chesttracker.gui.containerFilter.shulkerBoxes": "Cutii Shulker", - "chesttracker.gui.containerFilter.hoppers": "Pâlnii", - "chesttracker.gui.containerFilter.furnaces": "Cuptoare", - "chesttracker.gui.itemSort": "Sortare: %s", - "chesttracker.gui.itemSort.countDescending": "Număr de Obiecte (de la Mare la Mic)", - "chesttracker.gui.itemSort.countAscending": "Număr de Obiecte (de la Mic la Mare)", - "chesttracker.gui.itemSort.alphabeticalDescending": "Nume Obiect (de la A la Z)", - "chesttracker.gui.itemSort.alphabeticalAscending": "Nume Obiect (de la Z la A)", - "chesttracker.gui.modSettings": "Modifică Setările Modului", - "chesttracker.gui.openMemoryManager": "Deschide Gestionarul de Memorii", - "chesttracker.gui.memoryBankSettings": "Modifică Setările Băncii de Memorii", - "chesttracker.gui.narration.drag": "Clic și trage", - "chesttracker.gui.memoryManager": "Gestionează Băncile de Memorii", - "chesttracker.gui.memoryManager.search": "Caută Băncile de Memorii", - "chesttracker.gui.memoryManager.selectedBackend": "Backend: %s", - "chesttracker.gui.memoryManager.newMemoryBank": "Creează o nouă Bancă de Memorii", - "chesttracker.gui.createMemoryBank": "Creare Bancă de Memorii nouă", - "chesttracker.gui.createMemoryBank.fillDefault": "Completează cu Valorile Implicite ale Lumii", - "chesttracker.gui.createMemoryBank.createAndLoad": "Creează și Încarcă", - "chesttracker.gui.createMemoryBank.alreadyExists": "O Bancă de Memorii cu acest ID deja există", - "chesttracker.gui.createMemoryBank.emptyId": "ID-ul nu poate fi gol", - "chesttracker.gui.editMemoryBank": "Editare Bancă de Memorii", - "chesttracker.gui.editMemoryBank.markDefault": "Setează ca Implicit", - "chesttracker.gui.editMemoryBank.alreadyDefault": "Deja Implicit", - "chesttracker.gui.editMemoryBank.markDefault.tooltip": "Marchează această Bancă de Memorie ca fiind implicită pentru conexiunea/lumea curentă.", - "chesttracker.gui.editMemoryBank.compatibility": "Compatibilitate", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode": "Modul de Filtrare a Numelui", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.tooltip": "Filtrare aplicată numelui etichetelor containerelor. Acest lucru poate fi util dacă un server furnizează un pachet de resurse care folosește caractere cu coduri mari pentru UI.", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.none": "Niciunul", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.none.tooltip": "Nicio filtrare aplicată numelui containerelor.", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii": "Doar ASCII", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Permite doar caractere ASCII în numele containerelor.", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Unicode de bază", - "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Permite doar caractere Unicode până la \\u33FF. Acest lucru include majoritatea scripturilor și simbolurilor europene, africane și americane, dar exclude caracterele chinezești, coreene, japoneze și altele.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Redare Nume Container", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Plin", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Redați toate numele în interval.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Doar când este trecut cu mouse-ul", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Redați numele doar atunci când crosshair-ul este deasupra lor.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Dezactivat", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Nu reda numele containerelor.", - "chesttracker.gui.editMemoryBank.filtering": "Filtrare", - "chesttracker.gui.editMemoryBank.filtering.manualMode": "Modul Manual", - "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Dacă containerele trebuie adăugate manual în Chest Tracker.", - "chesttracker.gui.editMemoryBank.filtering.onlyRemembedNamed": "Numai Denumite", - "chesttracker.gui.editMemoryBank.filtering.onlyRemembedNamed.tooltip": "Dacă să rețină doar containerele denumite.", - "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.all": "Toate Containerele", - "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.all.tooltip": "Salvează obiectele din toate containerele, inclusiv din pâlnii, cuptoare și similare", - "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.common": "Containere Comune", - "chesttracker.gui.editMemoryBank.filtering.rememberedContainers.common.tooltip": "Ține minte doar cufere, butoaie și cutii Shulker.", - "chesttracker.gui.editMemoryBank.filtering.rememberEnderChests": "Cufere de Ender", - "chesttracker.gui.editMemoryBank.filtering.rememberEnderChests.tooltip": "Dacă să ții minte cuferele ender în propriul tab, sau să le ignori.", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks": "Adăugare Automată a Blocurilor Plasate", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.yes": "Da", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.shulkerBoxesOnly": "Cutii Shulker", - "chesttracker.gui.editMemoryBank.filtering.autoAddPlacedBlocks.no": "Nu", - "chesttracker.gui.editMemoryBank.integrity": "Integritate", - "chesttracker.gui.editMemoryBank.integrity.blockBreak": "Distruge Bloc", - "chesttracker.gui.editMemoryBank.integrity.blockBreak.tooltip": "Dacă să elimine memoriile atunci când blocul de la acea poziție este distrus.", - "chesttracker.gui.editMemoryBank.integrity.preserveNamed": "Păstrează Numele", - "chesttracker.gui.editMemoryBank.integrity.preserveNamed.tooltip": "Dacă să scutească memoriile numite de la verificarea duratei de viață a memoriei.", - "chesttracker.gui.editMemoryBank.integrity.periodicCheck": "Verificare Periodică", - "chesttracker.gui.editMemoryBank.integrity.periodicCheck.tooltip": "Verifică periodic memoriile din apropiere pentru a vedea dacă containerele lor nu mai sunt acolo, în cazul în care altceva le-a distrus.", - "chesttracker.gui.editMemoryBank.integrity.memoryLifetime": "Durata de Viață a Memoriei", - "chesttracker.gui.editMemoryBank.integrity.memoryLifetime.never": "Nu Expiră Niciodată", - "chesttracker.gui.editMemoryBank.integrity.memoryLifetime.tooltip": "Cât timp a trecut de la ultima accesare a unei memorii înainte să fie considerată depășită și eliminată.", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode": "Modul de Calcul al Duratei de Viață", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.realTime": "Folosește Timpul Real", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.worldTime": "Folosește Timpul Lumii", - "chesttracker.gui.editMemoryBank.integrity.lifetimeCountMode.loadedTime": "Folosește Timpul Încărcat al Băncii", - "chesttracker.gui.editMemoryBank.manage": "Gestionare", - "chesttracker.gui.editMemoryBank.manage.workingRange": "Distanță: %s", - "chesttracker.gui.editMemoryBank.manage.deleteWithinRange": "Șterge toate memoriile din interiorul a %s blocuri (%s)", - "chesttracker.gui.editMemoryBank.manage.deleteOutsideRange": "Șterge toate memoriile din afara a %s blocuri (%s)", - "chesttracker.gui.editMemoryBank.manage.highlightAll": "Subliniază Tot", - "chesttracker.gui.editMemoryBank.search": "Căutare", - "chesttracker.gui.editMemoryBank.search.itemListRange": "Distanța listei de obiecte: %s", - "chesttracker.gui.editMemoryBank.search.itemListRange.tooltip": "Distanța maximă în blocuri pentru care lista de obiecte va afișa memoriile.", - "chesttracker.gui.editMemoryBank.search.searchRange": "Distanța de Căutare: %s", - "chesttracker.gui.editMemoryBank.search.stackMergeMode": "Modul de Combinare a Stivei", - "chesttracker.gui.editMemoryBank.search.stackMergeMode.tooltip": "Cum sunt combinate și afișate diferitele stive de obiecte în containere în lista de obiecte.", - "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Combină Tot", - "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "În Containere", - "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Nu Combina Niciodată", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Desfășoară Obiectele Împachetate", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Dacă articolele din containere (cum ar fi Cutiile Shulker sau Săculețele) ar trebui să fie afișate.", - "chesttracker.gui.editMemoryKeys": "Editează Cheile de Memorie", - "chesttracker.gui.editMemoryKeys.hint": "Cheie de Memorie", - "chesttracker.gui.editMemoryKeys.return": "Înapoi", - "chesttracker.gui.editMemoryKeys.reorder": "Cheie de Reordonare", - "chesttracker.gui.editMemoryKeys.setIcon": "Setează Iconiță", - "chesttracker.gui.editMemoryKeys.useDefaultIconOrdering": "Utilizează Ordonare Iconiță Implicită", - "chesttracker.storage.json.fileSize": "Mărime Fișier: %s", - "chesttracker.config.open": "Deschide", - "chesttracker.config.requiresRestart": "Necesită repornirea jocului!", - "chesttracker.config.gui": "Interfață", - "chesttracker.config.gui.autofocusSearchBar": "Focalizare Automată pe Bara de Căutare", - "chesttracker.config.gui.autofocusSearchBar.description": "Dacă bara de căutare trebuie să fie focalizată automat atunci când interfața este deschisă.", - "chesttracker.config.gui.showAutocomplete": "Arată Autocompletarea pentru Bara de Căutare", - "chesttracker.config.gui.autocompleteShowsRegularNames": "Arată Obiectele Fără Nume în Autocompletare", - "chesttracker.config.gui.showResizeWidget": "Arată Redimensionare Widget", - "chesttracker.config.gui.gridWidth": "Lățimea Grilei", - "chesttracker.config.gui.gridHeight": "Înălțimea Grilei", - "chesttracker.config.gui.gridSizeSlider": "%d sloturi", - "chesttracker.config.gui.hideMemoryBankIds": "Ascunde ID-urile Băncilor de Memorie", - "chesttracker.config.gui.hideMemoryBankIds.description": "Ascunde ID-ul Băncii de Memorie din interfețele de editare, de exemplu, în cazul în care dorești să ascunzi un IP.", - "chesttracker.config.gui.itemListTextScale": "Scală relativă a textului în interfață", - "chesttracker.config.gui.itemListTextScale.description": "Scara interfeței pentru a afișa textul din lista de obiecte. Util dacă numărul de obiecte se extinde în alte sloturi.", - "chesttracker.config.gui.useCustomNamesInGUIs": "Folosește Nume Personalizate în GUI-uri", - "chesttracker.config.gui.useCustomNamesInGUIs.description": "Dacă să înlocuiești textul titlului în interfață cu nume personalizate, dacă există unul. Reține că acest lucru poate cauza probleme de compatibilitate cu serverele care folosesc fonturi pentru texturile GUI, cum ar fi Origin Realms.", - "chesttracker.config.inventoryButton": "Buton de Inventar", - "chesttracker.config.inventoryButton.enabled": "Afișează Butonul de Inventar", - "chesttracker.config.inventoryButton.showExtra": "Afișează Butoane Suplimentare", - "chesttracker.config.inventoryButton.showExtra.description": "Dacă este cazul, afișează butoane suplimentare după trecerea cu mouse-ul peste butonul principal, cum ar fi comutarea modului manual și numele client-side.", - "chesttracker.config.inventoryButton.manageCustom": "Gestionează Pozițiile Butonului Personalizat", - "chesttracker.config.inventoryButton.export": "Arată Butonul de Exportare", - "chesttracker.config.inventoryButton.export.description": "Dacă se afișează un buton de export pentru pozițiile personalizate ale butoanelor. Fișierele sunt plasate în %s.", - "chesttracker.config.rendering": "Redare", - "chesttracker.config.rendering.nameRenderRange": "Distanța de Afișare a Numelor", - "chesttracker.config.rendering.displayContainerNames": "Arată Numele Containerelor", - "chesttracker.config.rendering.displayContainerNames.description": "Dacă să afișezi numele deasupra containerelor în lume. Aceasta poate fi suprascrisă pentru fiecare bancă de memorie, în secțiunea Compatibilitate.", - "chesttracker.config.dev": "Instrumente Pentru Dezvoltatori", - "chesttracker.config.dev.showDevHud": "Afișează HUD-ul pentru Dezvoltatori", - "chesttracker.config.dev.showDevHud.description": "Afișează HUD-ul pentru Dezvoltatori", - "chesttracker.config.dev.disableContainerNames": "Dezactivează Numele Containerelor", - "chesttracker.config.whereisit": "Configurația Where Is It", - "chesttracker.config.whereisit.description": "Deschide configurația pentru Where Is It; aici vei găsi setările pentru randare.", - "chesttracker.config.memoryAndStorage": "Memorie și Stocare", - "chesttracker.config.memory": "Setări Memorie", - "chesttracker.config.memory.noMemoryBankLoaded": "Nici o Bancă de Memorie nu este încărcată în prezent.", - "chesttracker.config.storage": "Setări de Stocare", - "chesttracker.config.storage.openFolder": "Deschide Dosarul de Memorii", - "chesttracker.config.storage.storageBackend": "Backend de Stocare", - "chesttracker.config.storage.storageBackend.description": "Definește formatul în care Băncile de Memorie sunt stocate între lumi/sesiuni.", - "chesttracker.config.storage.storageBackend.description.json": "Stochează toate Băncile de Memorie ca fișiere JSON în directorul 'chesttracker' al jocului tău. Fișierele sunt lizibile, dar ocupă mai mult spațiu pe disc.", - "chesttracker.config.storage.storageBackend.description.nbt": "Stochează toate Băncile de Memorie ca fișiere NBT în directorul 'chesttracker' al jocului tău. Mai compacte, dar nu lizibile fără un vizualizator extern. Opțiune recomandată.", - "chesttracker.config.storage.storageBackend.description.memory": "Stochează Băncile de Memorie în memoria jocului.", - "chesttracker.config.storage.storageBackend.description.memoryLossOnReboot": "Atenție: toate Băncile de Memorie stocate în acest mod sunt pierdute când jocul se închide.", - "chesttracker.config.storage.json.readableJsonMemories": "Fișiere JSON Lizibile", - "chesttracker.config.storage.json.readableJsonMemories.description": "Dacă fișierele JSON din directorul de memorie ar trebui să fie lizibile sau compactate.", - "chesttracker.config.compatibility.shulkerboxtooltip": "Integrarea Shulker Box Tooltip", - "chesttracker.config.compatibility.shulkerboxtooltip.description": "Chest Tracker suprascrie previzualizarea server-side a Tooltip Shulker Box pentru cuferele Ender cu propria previzualizare client-side, citind din Bancă de Memorie curentă. Aceasta funcționează pe Realms și pe servere fără Shulker Box Tooltip instalat.", - "chesttracker.config.compatibility.wthit": "Integrarea WTHIT", - "chesttracker.config.compatibility.wthit.description": "Îți permite să folosești Bancă de Memorie curentă pentru a arăta evidențierile în WTHIT. Există setări suplimentare în gestionarul de plugin-uri WTHIT.", - "chesttracker.config.searchables.required": "Necesită Searchables.", - "chesttracker.config.searchables.notInstalled": "Searchables nu este încărcat." -} \ No newline at end of file diff --git a/src/client/resources/assets/chesttracker/lang/ru_ru.json b/src/client/resources/assets/chesttracker/lang/ru_ru.json index 0be79af9..ae625878 100644 --- a/src/client/resources/assets/chesttracker/lang/ru_ru.json +++ b/src/client/resources/assets/chesttracker/lang/ru_ru.json @@ -7,7 +7,7 @@ "chesttracker.inventoryButton.rename.clientOnlyWarning": "Это будет переименовывать только контейнер на вашем клиенте, а не на сервере.", "chesttracker.inventoryButton.forget": "Забыть", "chesttracker.inventoryButton.rememberContainer.remember": "Запомнить контейнер", - "chesttracker.inventoryButton.rememberContainer.block": "Забыть контейнер", + "chesttracker.inventoryButton.rememberContainer.block": "Не помнить контейнер", "chesttracker.inventoryButton.export": "Экспорт позиции", "chesttracker.inventoryButton.export.toast": "Экспортировано в %s", "chesttracker.inventoryButton.export.errorToast": "Ошибка экспорта позиции, проверьте консоль.", @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "В именах контейнеров разрешается использовать только символы ASCII.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Базовый Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Разрешаются символы Unicode только до \\u33FF. Сюда входит большинство европейских, африканских и американских шрифтов и символов, но исключаются китайский, корейский, японский и другие.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Показывать имена контейнеров", "chesttracker.gui.editMemoryBank.filtering": "Фильтрация", "chesttracker.gui.editMemoryBank.filtering.manualMode": "Ручной режим", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Должны ли контейнеры быть добавлены вручную в сундук Трекер.", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Merge All", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Within Containers", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Never Merge", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Edit Memory Keys", "chesttracker.gui.editMemoryKeys.hint": "Memory Key", "chesttracker.gui.editMemoryKeys.return": "Return", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Developer Utils", "chesttracker.config.dev.showDevHud": "Show Developer Hud", "chesttracker.config.dev.showDevHud.description": "Show Developer Hud", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It config", "chesttracker.config.whereisit.description": "Open the config for Where Is It; here you'll find settings for rendering.", "chesttracker.config.memoryAndStorage": "Memory & Storage", diff --git a/src/client/resources/assets/chesttracker/lang/tr_tr.json b/src/client/resources/assets/chesttracker/lang/tr_tr.json index 03233fa9..3eadd388 100644 --- a/src/client/resources/assets/chesttracker/lang/tr_tr.json +++ b/src/client/resources/assets/chesttracker/lang/tr_tr.json @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Konteyner isimlerinde yalnızca ASCII karakterlerine izin verilir.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Temel Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "\\u33FF'e kadar Unicode karakterlerine izin verilir. Bu, çoğu Avrupa, Afrika ve Amerikan yazı tiplerini ve sembollerini içerir, ancak Çince, Korece, Japonca ve diğerlerini dışarıda bırakır.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Konteyner İsimlerini Göster", "chesttracker.gui.editMemoryBank.filtering": "Filtreleme", "chesttracker.gui.editMemoryBank.filtering.manualMode": "Elle Düzenleme Modu", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Konteynerlerin Chest Tracker'a manuel olarak eklenmesi gerekip gerekmediği.", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Hepsini Birleştir", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "Kutular İçinde", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Asla Birleştirme", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Hafıza Anahtarlarını Düzenle", "chesttracker.gui.editMemoryKeys.hint": "Hafıza Anahtarı", "chesttracker.gui.editMemoryKeys.return": "Geri Dön", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Geliştirici Araçları", "chesttracker.config.dev.showDevHud": "Geliştirici HUD'u Göster", "chesttracker.config.dev.showDevHud.description": "Geliştirici HUD'u Göster", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It Ayarı", "chesttracker.config.whereisit.description": "Where Is It için yapılandırmayı açın; burada renderleme için ayarları bulacaksınız.", "chesttracker.config.memoryAndStorage": "Hafıza ve Depolama", diff --git a/src/client/resources/assets/chesttracker/lang/uk_ua.json b/src/client/resources/assets/chesttracker/lang/uk_ua.json index d827c99d..2028d2e2 100644 --- a/src/client/resources/assets/chesttracker/lang/uk_ua.json +++ b/src/client/resources/assets/chesttracker/lang/uk_ua.json @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "Дозволено лише символи ASCII в назвах контейнерів.", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "Базовий Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "Дозволяти лише символи Unicode до \\u33FF. Це включає більшість європейських, африканських та американських шрифтів і символів, але не включає китайську, корейську, японську та інші мови.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "Показувати імена контейнера", "chesttracker.gui.editMemoryBank.filtering": "Фільтрація", "chesttracker.gui.editMemoryBank.filtering.manualMode": "Ручний режим", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "Чи потрібно додавати контейнери до Chest Tracker вручну.", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "Об’єднати все", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "В контейнерах", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "Ніколи не об'єднувати", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "Редагувати ключі пам'яті", "chesttracker.gui.editMemoryKeys.hint": "Ключ пам'яті", "chesttracker.gui.editMemoryKeys.return": "Повернутись", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "Утиліти розробників", "chesttracker.config.dev.showDevHud": "Показати Hud розробника", "chesttracker.config.dev.showDevHud.description": "Показати Hud розробника", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Де знаходиться конфігурація", "chesttracker.config.whereisit.description": "Відкрийте конфігурацію для Де це; тут ви знайдете налаштування для візуалізації.", "chesttracker.config.memoryAndStorage": "Пам'ять і сховище", diff --git a/src/client/resources/assets/chesttracker/lang/zh_cn.json b/src/client/resources/assets/chesttracker/lang/zh_cn.json index 009ec060..816f201d 100644 --- a/src/client/resources/assets/chesttracker/lang/zh_cn.json +++ b/src/client/resources/assets/chesttracker/lang/zh_cn.json @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "容器名称中只允许使用ASCII字符", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "基本Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "只允许 Unicode 字符最多为 \\u33FF。这包括大多数欧洲、非洲和美国的语言符号,但不包括中文、朝鲜文、日文和其他语言的符号。", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "显示容器名称", "chesttracker.gui.editMemoryBank.filtering": "正在筛选", "chesttracker.gui.editMemoryBank.filtering.manualMode": "手动模式", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "是否手动添加容器到Chest Tracker。", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "合并所有", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "容器内合并", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "永不合并", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "编辑记忆键", "chesttracker.gui.editMemoryKeys.hint": "记忆键", "chesttracker.gui.editMemoryKeys.return": "返回", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "开发工具", "chesttracker.config.dev.showDevHud": "显示开发者HUD", "chesttracker.config.dev.showDevHud.description": "显示开发者HUD", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "位置配置", "chesttracker.config.whereisit.description": "打开Where Is It的配置,在这里你可以找到渲染的设置", "chesttracker.config.memoryAndStorage": "库存和存储", diff --git a/src/client/resources/assets/chesttracker/lang/zh_tw.json b/src/client/resources/assets/chesttracker/lang/zh_tw.json index d2c2bcd9..834466c2 100644 --- a/src/client/resources/assets/chesttracker/lang/zh_tw.json +++ b/src/client/resources/assets/chesttracker/lang/zh_tw.json @@ -63,13 +63,7 @@ "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.ascii.tooltip": "只允許容器名稱中出現 ASCII 字元。", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode": "基本 Unicode", "chesttracker.gui.editMemoryBank.compatibility.nameFilterMode.basicUnicode.tooltip": "只允許使用到 \\u33FF 的 Unicode 字元。這包含了大多數的歐洲、非洲和美洲的文字和符號,但不包括中文、韓文、日文和其他文字。", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode": "Container Name Rendering", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full": "Full", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.full.tooltip": "Render all names within range.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly": "Hovered Only", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.hoveredOnly.tooltip": "Only render names when the crosshair is over them.", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled": "Disabled", - "chesttracker.gui.editMemoryBank.compatibility.nameRenderMode.disabled.tooltip": "Don't render container names.", + "chesttracker.gui.editMemoryBank.compatibility.displayContainerNames": "顯示容器名稱", "chesttracker.gui.editMemoryBank.filtering": "過濾", "chesttracker.gui.editMemoryBank.filtering.manualMode": "手動模式", "chesttracker.gui.editMemoryBank.filtering.manualMode.tooltip": "容器是否需要手動新增到儲物箱追蹤器。", @@ -113,8 +107,6 @@ "chesttracker.gui.editMemoryBank.search.stackMergeMode.all": "全部合併", "chesttracker.gui.editMemoryBank.search.stackMergeMode.withinContainers": "在容器內", "chesttracker.gui.editMemoryBank.search.stackMergeMode.never": "永不合併", - "chesttracker.gui.editMemoryBank.search.unpackNested": "Unpack Nested Items", - "chesttracker.gui.editMemoryBank.search.unpackNested.tooltip": "Whether items within containers (such as Shulker Boxes or Bundles) should be shown.", "chesttracker.gui.editMemoryKeys": "編輯記憶金鑰", "chesttracker.gui.editMemoryKeys.hint": "記憶金鑰", "chesttracker.gui.editMemoryKeys.return": "返回", @@ -153,7 +145,6 @@ "chesttracker.config.dev": "開發者工具", "chesttracker.config.dev.showDevHud": "顯示開發者 HUD", "chesttracker.config.dev.showDevHud.description": "顯示開發者 HUD", - "chesttracker.config.dev.disableContainerNames": "Disable Container Names", "chesttracker.config.whereisit": "Where Is It 設定", "chesttracker.config.whereisit.description": "開啟 Where Is It 的設定;你可以在這裡找到繪製的設定。", "chesttracker.config.memoryAndStorage": "記憶體和儲存空間",