From 15fac95a029ddd52fe10ce61209c61f7c7620c40 Mon Sep 17 00:00:00 2001 From: P3pp3rF1y Date: Sat, 21 Sep 2024 11:28:51 +0200 Subject: [PATCH 1/9] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Fixed=20double=20ches?= =?UTF-8?q?t=20to=20only=20play=20its=20opening=20sound=20once?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../sophisticatedstorage/block/ChestBlockEntity.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 165379c2..9329f19f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version_range=[4,) mod_id=sophisticatedstorage mod_name=Sophisticated Storage mod_license=GNU General Public License v3.0 -mod_version=0.10.32 +mod_version=0.10.33 mod_group_id=sophisticatedstorage mod_authors=P3pp3rF1y, Ridanisaurus mod_description=Fancy and functional storage containers. diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/ChestBlockEntity.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/ChestBlockEntity.java index 631696d5..aaf9450a 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/ChestBlockEntity.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/ChestBlockEntity.java @@ -69,7 +69,7 @@ protected boolean isOwnContainer(Player player) { public void incrementOpeners(Player player, Level level, BlockPos pos, BlockState state) { super.incrementOpeners(player, level, pos, state); if (isMainChest()) { - runOnTheOtherPart(level, pos, state, (blockEntity, neighborPos) -> blockEntity.openersCounter.incrementOpeners(player, level, neighborPos, state)); + runOnTheOtherPart(level, pos, state, (blockEntity, neighborPos) -> blockEntity.openersCounter.incrementOpeners(player, level, neighborPos, level.getBlockState(neighborPos))); } } @@ -77,7 +77,7 @@ public void incrementOpeners(Player player, Level level, BlockPos pos, BlockStat public void decrementOpeners(Player player, Level level, BlockPos pos, BlockState state) { super.decrementOpeners(player, level, pos, state); if (isMainChest()) { - runOnTheOtherPart(level, pos, state, (blockEntity, neighborPos) -> blockEntity.openersCounter.decrementOpeners(player, level, neighborPos, state)); + runOnTheOtherPart(level, pos, state, (blockEntity, neighborPos) -> blockEntity.openersCounter.decrementOpeners(player, level, neighborPos, level.getBlockState(neighborPos))); } } }; From baec9632c549bebc2347a8f821b790c4e9048d39 Mon Sep 17 00:00:00 2001 From: P3pp3rF1y Date: Sat, 21 Sep 2024 22:40:46 +0200 Subject: [PATCH 2/9] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Fixed=20tier=20upgrad?= =?UTF-8?q?es=20to=20not=20incorrectly=20upgrade=20half=20of=20the=20neigh?= =?UTF-8?q?bor=20vanilla=20double=20chest=20when=20upgrading=20a=20vanilla?= =?UTF-8?q?=20single=20chest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../sophisticatedstorage/item/StorageTierUpgradeItem.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9329f19f..052b60c5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version_range=[4,) mod_id=sophisticatedstorage mod_name=Sophisticated Storage mod_license=GNU General Public License v3.0 -mod_version=0.10.33 +mod_version=0.10.34 mod_group_id=sophisticatedstorage mod_authors=P3pp3rF1y, Ridanisaurus mod_description=Fancy and functional storage containers. diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/item/StorageTierUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/item/StorageTierUpgradeItem.java index 2863143a..c177d4d3 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/item/StorageTierUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/item/StorageTierUpgradeItem.java @@ -228,7 +228,7 @@ boolean upgradeStorage(@Nullable Player player, BlockPos pos, Level level, Block return false; } BlockState otherState; - if (state.getBlock() instanceof net.minecraft.world.level.block.ChestBlock) { + if (state.getBlock() instanceof net.minecraft.world.level.block.ChestBlock && state.getValue(net.minecraft.world.level.block.ChestBlock.TYPE) != ChestType.SINGLE) { otherState = level.getBlockState(pos.relative(net.minecraft.world.level.block.ChestBlock.getConnectedDirection(state))); if (otherState.getBlock() != state.getBlock()) { otherState = null; From 2a5ffdb41dcff0201d43d08be416930da62bc6e2 Mon Sep 17 00:00:00 2001 From: P3pp3rF1y Date: Sat, 21 Sep 2024 23:21:44 +0200 Subject: [PATCH 3/9] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Fixed=20storage=20IO?= =?UTF-8?q?=20blocks=20to=20properly=20unlink=20their=20location=20from=20?= =?UTF-8?q?controller=20when=20broken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../block/StorageIOBlockEntity.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 052b60c5..9d695748 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version_range=[4,) mod_id=sophisticatedstorage mod_name=Sophisticated Storage mod_license=GNU General Public License v3.0 -mod_version=0.10.34 +mod_version=0.10.35 mod_group_id=sophisticatedstorage mod_authors=P3pp3rF1y, Ridanisaurus mod_description=Fancy and functional storage containers. diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/StorageIOBlockEntity.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/StorageIOBlockEntity.java index 4f55550e..d075b6bb 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/StorageIOBlockEntity.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/StorageIOBlockEntity.java @@ -28,6 +28,8 @@ public class StorageIOBlockEntity extends BlockEntity implements IControllerBoun @Nullable private BlockPos controllerPos = null; private boolean isLinkedToController = false; + private boolean chunkBeingUnloaded = false; + @Nullable private BlockCapabilityCache controllerItemHandlerCache; @@ -179,4 +181,19 @@ public IItemHandler getExternalItemHandler(@Nullable Direction side) { return WorldHelper.getBlockEntity(getLevel(), getControllerPos().get(), ControllerBlockEntity.class).map(c -> c.getExternalItemHandler(side)).orElse(null); } } + + @Override + public void onChunkUnloaded() { + super.onChunkUnloaded(); + chunkBeingUnloaded = true; + } + + @Override + public void setRemoved() { + if (!chunkBeingUnloaded && level != null) { + unlinkFromController(); + } + + super.setRemoved(); + } } From 4e8e3bfdf191d801e495e87ef4b47fcf866209e9 Mon Sep 17 00:00:00 2001 From: P3pp3rF1y Date: Sun, 22 Sep 2024 20:29:19 +0200 Subject: [PATCH 4/9] =?UTF-8?q?chore:=20=E2=9C=A8=20Add=20automated=20modr?= =?UTF-8?q?inth=20upload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/gradle.yml | 11 +++++++++++ build.gradle | 18 ++++++++++++++++++ gradle.properties | 3 ++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index ceb65632..021c7a2d 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -47,6 +47,17 @@ jobs: echo "Branch name does not match the pattern: $BRANCH_NAME. Skipping CurseForge upload." exit 0 fi + - name: Publish to Modrinth + env: + MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} + run: | + BRANCH_NAME=${GITHUB_REF##*/} + if [[ "$BRANCH_NAME" =~ ^[0-9]+\.[0-9]+\.([0-9]+|x)$ ]]; then + ./gradlew modrinth + else + echo "Branch name does not match the pattern: $BRANCH_NAME. Skipping Modrinth upload." + exit 0 + fi - name: Code Quality env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build.gradle b/build.gradle index a37b2dab..a8f550c2 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,7 @@ plugins { id 'net.neoforged.moddev' version '1.0.14' id "org.sonarqube" version "5.0.0.4638" id "net.darkhax.curseforgegradle" version "1.1.15" + id "com.modrinth.minotaur" version "2.+" } idea { @@ -370,6 +371,23 @@ task curseforge(type: net.darkhax.curseforgegradle.TaskPublishCurseForge) { onlyIf { !project.ext.changelog.isEmpty() } } +tasks.modrinth.dependsOn(tasks.generateChangelog) +tasks.modrinth.onlyIf { !project.ext.changelog.isEmpty() } +modrinth { + token = System.getenv("MODRINTH_TOKEN") + projectId = "${modrinth_project_id}" + versionType = "${release_type}" + uploadFile = jar + gameVersions = "${release_versions}".split(',').collect {e -> e} + loaders = ["neoforge"] + dependencies { + required.project "sophisticated-core" + optional.project "jei" + optional.project "crafting-tweaks" + } + changelog = "${ project.ext.changelog }" +} + task printVersionName { println "version:" + project.version } diff --git a/gradle.properties b/gradle.properties index 9d695748..4fbee227 100644 --- a/gradle.properties +++ b/gradle.properties @@ -39,4 +39,5 @@ sb_version=[1.21,1.22) #publish curseforge_id=619320 release_type=release -release_versions=1.21,1.21.1 \ No newline at end of file +release_versions=1.21,1.21.1 +modrinth_project_id=hMlaZH8f \ No newline at end of file From 47967304e75c7a1ab50b2d674b4a0956f41880ee Mon Sep 17 00:00:00 2001 From: ZHAY10086 Date: Thu, 23 May 2024 14:01:44 +0800 Subject: [PATCH 5/9] =?UTF-8?q?feat:=20=E2=9C=A8=20Updated=20Chinese=20Tra?= =?UTF-8?q?nslation=20(Thanks=20ZHAY10086)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/assets/sophisticatedstorage/lang/zh_cn.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/sophisticatedstorage/lang/zh_cn.json b/src/main/resources/assets/sophisticatedstorage/lang/zh_cn.json index 09be7dd8..06720ea6 100644 --- a/src/main/resources/assets/sophisticatedstorage/lang/zh_cn.json +++ b/src/main/resources/assets/sophisticatedstorage/lang/zh_cn.json @@ -13,6 +13,7 @@ "itemGroup.sophisticatedstorage": "精妙存储", "item.sophisticatedstorage.packing_tape": "包装带", "item.sophisticatedstorage.packing_tape.tooltip": "剩余可用次数:%s", + "item.sophisticatedstorage.packing_tape.tooltip.disabled": "已禁用 - 配置文件设置为以打包状态掉落所有容器", "item.sophisticatedstorage.storage_tool": "存储工具", "item.sophisticatedstorage.storage_tool.tooltip": "链接, 锁定, 隐藏容器上的数量和锁定", "item.sophisticatedstorage.storage_tool.tooltip.controls": "使用<%s>来改变模式", @@ -162,6 +163,8 @@ "item.sophisticatedstorage.stack_upgrade_tier_3.tooltip": "物品堆叠上限×8", "item.sophisticatedstorage.stack_upgrade_tier_4": "堆叠升级T4", "item.sophisticatedstorage.stack_upgrade_tier_4.tooltip": "物品堆叠上限×16", + "item.sophisticatedstorage.stack_upgrade_tier_5": "堆叠升级T5", + "item.sophisticatedstorage.stack_upgrade_tier_5.tooltip": "物品堆叠上限×32", "item.sophisticatedstorage.pump_upgrade": "液泵升级", "item.sophisticatedstorage.pump_upgrade.tooltip": "在储罐升级和相邻方块之间泵送流体", "item.sophisticatedstorage.xp_pump_upgrade": "经验泵升级", @@ -194,6 +197,8 @@ "gui.sophisticatedstorage.upgrades.advanced_hopper.tooltip": "高级漏斗设置", "gui.sophisticatedstorage.error.add.compression_incompatible_items": "这个槽位中的物品无法从前一个槽位中压缩", "gui.sophisticatedstorage.error.add.compression_no_space": "这个压缩升级没有额外的槽位可管理", + "gui.sophisticatedstorage.error.add.compression_exists": "其他升级槽位中已存在压缩升级", + "gui.sophisticatedstorage.error.add.compacting_exists": "其他升级槽位中已存在压制升级", "gui.sophisticatedstorage.settings.tooltip": "设置", "gui.sophisticatedstorage.settings.title": "设置", "gui.sophisticatedstorage.settings.storage": "容器", @@ -230,5 +235,6 @@ "keybind.sophisticatedstorage.category": "精妙存储", "keybind.sophisticatedstorage.sort": "整理容器", "gui.sophisticatedstorage.status.too_many_item_entity_drops": "无法破坏该%s,将会导致过多(%s)掉落物实体从中掉落\n请考虑使用%s或者按住Shift进行破坏来跳过此项检查", - "gui.sophisticatedstorage.status.too_low_tier_upgrade_count": "升级需要%s个%s" + "gui.sophisticatedstorage.status.too_low_tier_upgrade_count": "升级需要%s个%s", + "gui.sophisticatedstorage.status.packing_tape_disabled": "配置文件设置为以打包状态掉落所有容器,无需包装带" } From 902a58cd9cb56497dfb3aef2819e7237b2bc749d Mon Sep 17 00:00:00 2001 From: ZHAY10086 Date: Thu, 23 May 2024 14:16:57 +0800 Subject: [PATCH 6/9] fix --- .../resources/assets/sophisticatedstorage/lang/zh_cn.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/sophisticatedstorage/lang/zh_cn.json b/src/main/resources/assets/sophisticatedstorage/lang/zh_cn.json index 06720ea6..acd928c7 100644 --- a/src/main/resources/assets/sophisticatedstorage/lang/zh_cn.json +++ b/src/main/resources/assets/sophisticatedstorage/lang/zh_cn.json @@ -197,8 +197,8 @@ "gui.sophisticatedstorage.upgrades.advanced_hopper.tooltip": "高级漏斗设置", "gui.sophisticatedstorage.error.add.compression_incompatible_items": "这个槽位中的物品无法从前一个槽位中压缩", "gui.sophisticatedstorage.error.add.compression_no_space": "这个压缩升级没有额外的槽位可管理", - "gui.sophisticatedstorage.error.add.compression_exists": "其他升级槽位中已存在压缩升级", - "gui.sophisticatedstorage.error.add.compacting_exists": "其他升级槽位中已存在压制升级", + "gui.sophisticatedstorage.error.add.compression_exists": "另一插槽中已存在压缩升级", + "gui.sophisticatedstorage.error.add.compacting_exists": "另一插槽中已存在压制升级", "gui.sophisticatedstorage.settings.tooltip": "设置", "gui.sophisticatedstorage.settings.title": "设置", "gui.sophisticatedstorage.settings.storage": "容器", From cec0377c9f3387a89d8242890699233322d46b10 Mon Sep 17 00:00:00 2001 From: CrazyBarkley <102044428+CrazyBarkley@users.noreply.github.com> Date: Sun, 22 Sep 2024 22:00:52 +0200 Subject: [PATCH 7/9] =?UTF-8?q?feat:=20=E2=9C=A8=20Updated=20Polish=20tran?= =?UTF-8?q?slation=20(Thanks=20CrazyBarkley)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create pl_pl.json * Update pl_pl.json * Update pl_pl.json --- .../sophisticatedstorage/lang/pl_pl.json | 240 ++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 src/main/resources/assets/sophisticatedstorage/lang/pl_pl.json diff --git a/src/main/resources/assets/sophisticatedstorage/lang/pl_pl.json b/src/main/resources/assets/sophisticatedstorage/lang/pl_pl.json new file mode 100644 index 00000000..931997a5 --- /dev/null +++ b/src/main/resources/assets/sophisticatedstorage/lang/pl_pl.json @@ -0,0 +1,240 @@ +{ + "wood_name.sophisticatedstorage.oak": "Dębowa", + "wood_name.sophisticatedstorage.spruce": "Świerkowa", + "wood_name.sophisticatedstorage.birch": "Brzozowa", + "wood_name.sophisticatedstorage.acacia": "Akacjowa", + "wood_name.sophisticatedstorage.jungle": "Tropikalna", + "wood_name.sophisticatedstorage.dark_oak": "Ciemnodębowa", + "wood_name.sophisticatedstorage.crimson": "Szkarłatna", + "wood_name.sophisticatedstorage.mangrove": "Namorzynowa", + "wood_name.sophisticatedstorage.warped": "Spaczona", + "wood_name.sophisticatedstorage.cherry": "Wiśniowa", + "wood_name.sophisticatedstorage.bamboo": "Bambusowa", + "itemGroup.sophisticatedstorage": "Sophisticated Storage", + "item.sophisticatedstorage.packing_tape": "Taśma pakowa", + "item.sophisticatedstorage.packing_tape.tooltip": "Pozostałe użycia: %s", + "item.sophisticatedstorage.packing_tape.tooltip.disabled": "Wyłączone - konfiguracja ustawiona na zrzucenie wszystkich magazynów jako spakowane", + "item.sophisticatedstorage.storage_tool": "Narzędzie magazynowe", + "item.sophisticatedstorage.storage_tool.tooltip": "Łączy, blokuje, ukrywa liczniki/poziomy/bloki w powierzchni magazynowej", + "item.sophisticatedstorage.storage_tool.tooltip.controls": "Użyj <%s>, aby zmienić tryb", + "item.sophisticatedstorage.storage_tool.tooltip.controls.combination": "Kucanie + Przewijanie", + "item.sophisticatedstorage.storage_tool.overlay.linking": "Łączenie z kontrolerem na x:%s y:%s z:%s", + "item.sophisticatedstorage.storage_tool.overlay.unlinking": "Odłączanie od kontrolera", + "item.sophisticatedstorage.storage_tool.overlay.toggling_lock": "Blokowanie/Odblokowywanie", + "item.sophisticatedstorage.storage_tool.overlay.toggling_lock_display": "Pokazywanie/Ukrywanie bloków", + "item.sophisticatedstorage.storage_tool.overlay.toggling_count_display": "Pokazywanie/Ukrywanie liczników", + "item.sophisticatedstorage.storage_tool.overlay.toggling_tier_display": "Pokazywanie/Ukrywanie poziomów", + "item.sophisticatedstorage.storage_tool.overlay.toggling_upgrades_display": "Pokazywanie/Ukrywanie ulepszeń", + "item.sophisticatedstorage.storage_tool.overlay.toggling_fill_level_display": "Pokazywanie/Ukrywanie poziomów wypełnienia", + "item.sophisticatedstorage.debug_tool": "Narzędzie debugowania", + "item.sophisticatedstorage.storage_io": "Wejście/Wyjście Magazynu", + "block.sophisticatedstorage.storage_io.tooltip": "Po umieszczeniu w wieloblokowym magazynie, umożliwia przesyłanie przedmiotów do i z niego", + "block.sophisticatedstorage.storage_io": "Wejście/Wyjście Magazynu", + "item.sophisticatedstorage.storage_input": "Wejście magazynu", + "block.sophisticatedstorage.storage_input.tooltip": "Po umieszczeniu w wieloblokowym magazynie, umożliwia przesyłanie przedmiotów do niego\nOptymalizowany pod kątem niskiego wpływu na TPS", + "block.sophisticatedstorage.storage_input": "Wejście magazynu", + "item.sophisticatedstorage.storage_output": "Wyjście magazynu", + "block.sophisticatedstorage.storage_output.tooltip": "Po umieszczeniu w wieloblokowym magazynie, umożliwia wyciąganie przedmiotów z niej", + "block.sophisticatedstorage.storage_output": "Wyjście magazynu", + "item.sophisticatedstorage.storage_link": "Łącze magazynowe", + "block.sophisticatedstorage.storage_link.tooltip": "Łączy oddzielne wieloblokowe magazyny z kontrolerem\nUżyj Narzędzia Magazynowego, aby połączyć z kontrolerem", + "block.sophisticatedstorage.storage_link": "Łącze magazynowe", + "item.sophisticatedstorage.controller": "Kontroler magazynu", + "block.sophisticatedstorage.controller.tooltip": "Pozwala na deponowanie, przesyłanie i wyciąganie przedmiotów z połączonych wieloblokowych magazynów", + "block.sophisticatedstorage.controller": "Kontroler magazynu", + "block.sophisticatedstorage.barrel": "%s%sbeczka", + "block.sophisticatedstorage.copper_barrel": "%s%sMiedziana beczka", + "block.sophisticatedstorage.iron_barrel": "%s%sŻelazna beczka", + "block.sophisticatedstorage.gold_barrel": "%s%sZłota beczka", + "block.sophisticatedstorage.diamond_barrel": "%s%sDiamentowa beczka", + "block.sophisticatedstorage.netherite_barrel": "%s%sNetherytowa beczka", + "block.sophisticatedstorage.limited_barrel_1": "Ograniczona %s%sbeczka I", + "block.sophisticatedstorage.limited_barrel_2": "Ograniczona %s%sbeczka II", + "block.sophisticatedstorage.limited_barrel_3": "Ograniczona %s%sbeczka III", + "block.sophisticatedstorage.limited_barrel_4": "Ograniczona %s%sbeczka IV", + "block.sophisticatedstorage.limited_barrel_singular.tooltip": "%s slot, %sx mnożnik podstawowego rozmiaru stosu", + "block.sophisticatedstorage.limited_barrel_plural.tooltip": "%s slot, %sx mnożnik podstawowego rozmiaru stosu", + "block.sophisticatedstorage.limited_copper_barrel_1": "Ograniczona %s%smiedziana beczka I", + "block.sophisticatedstorage.limited_copper_barrel_2": "Ograniczona %s%smiedziana beczka II", + "block.sophisticatedstorage.limited_copper_barrel_3": "Ograniczona %s%smiedziana beczka III", + "block.sophisticatedstorage.limited_copper_barrel_4": "Ograniczona %s%smiedziana beczka IV", + "block.sophisticatedstorage.limited_iron_barrel_1": "Ograniczona %s%sżelazna beczka I", + "block.sophisticatedstorage.limited_iron_barrel_2": "Ograniczona %s%sżelazna beczka II", + "block.sophisticatedstorage.limited_iron_barrel_3": "Ograniczona %s%sżelazna beczka III", + "block.sophisticatedstorage.limited_iron_barrel_4": "Ograniczona %s%sżelazna beczka IV", + "block.sophisticatedstorage.limited_gold_barrel_1": "Ograniczona %s%szłota beczka I", + "block.sophisticatedstorage.limited_gold_barrel_2": "Ograniczona %s%szłota beczka II", + "block.sophisticatedstorage.limited_gold_barrel_3": "Ograniczona %s%szłota beczka III", + "block.sophisticatedstorage.limited_gold_barrel_4": "Ograniczona %s%szłota beczka IV", + "block.sophisticatedstorage.limited_diamond_barrel_1": "Ograniczona %s%sdiamentowa beczka I", + "block.sophisticatedstorage.limited_diamond_barrel_2": "Ograniczona %s%sdiamentowa beczka II", + "block.sophisticatedstorage.limited_diamond_barrel_3": "Ograniczona %s%sdiamentowa beczka III", + "block.sophisticatedstorage.limited_diamond_barrel_4": "Ograniczona %s%sdiamentowa beczka IV", + "block.sophisticatedstorage.limited_netherite_barrel_1": "Ograniczona %s%snetherytowa beczka I", + "block.sophisticatedstorage.limited_netherite_barrel_2": "Ograniczona %s%snetherytowa beczka II", + "block.sophisticatedstorage.limited_netherite_barrel_3": "Ograniczona %s%snetherytowa beczka III", + "block.sophisticatedstorage.limited_netherite_barrel_4": "Ograniczona %s%snetherytowa beczka IV", + "block.sophisticatedstorage.barrel.tooltip.flat_top": " (Płaski wierzch)", + "block.sophisticatedstorage.chest": "%s%sskrzynia", + "block.sophisticatedstorage.copper_chest": "%s%smiedziana skrzynia", + "block.sophisticatedstorage.iron_chest": "%s%sżelazna skrzynia", + "block.sophisticatedstorage.gold_chest": "%s%szłota skrzynia", + "block.sophisticatedstorage.diamond_chest": "%s%sdiamentowa skrzynia", + "block.sophisticatedstorage.netherite_chest": "%s%snetherytowa skrzynia", + "item.sophisticatedstorage.shulker_box": "Shulkerowa skrzynia", + "block.sophisticatedstorage.shulker_box": "Shulkerowa skrzynia", + "item.sophisticatedstorage.copper_shulker_box": "Miedziana shulkerowa skrzynia", + "block.sophisticatedstorage.copper_shulker_box": "Miedziana shulkerowa skrzynia", + "item.sophisticatedstorage.iron_shulker_box": "Żelazna shulkerowa skrzynia", + "block.sophisticatedstorage.iron_shulker_box": "Żelazna shulkerowa skrzynia", + "item.sophisticatedstorage.gold_shulker_box": "Złota shulkerowa skrzynia", + "block.sophisticatedstorage.gold_shulker_box": "Złota shulkerowa skrzynia", + "item.sophisticatedstorage.diamond_shulker_box": "Diamentowa shulkerowa skrzynia", + "block.sophisticatedstorage.diamond_shulker_box": "Diamentowa shulkerowa skrzynia", + "item.sophisticatedstorage.netherite_shulker_box": "Netherytowa shulkerowa skrzynia", + "block.sophisticatedstorage.netherite_shulker_box": "Netherytowa shulkerowa skrzynia", + "item.sophisticatedstorage.basic_tier_upgrade": "Podstawowe ulepszenie poziomu", + "item.sophisticatedstorage.basic_tier_upgrade.tooltip": "Przekształca standardowe magazyny w ich zaawansowane odpowiedniki", + "item.sophisticatedstorage.basic_to_copper_tier_upgrade": "Ulepszenie z podstawowego do miedzianego poziomu", + "item.sophisticatedstorage.basic_to_iron_tier_upgrade": "Ulepszenie z podstawowego do żelaznego poziomu", + "item.sophisticatedstorage.basic_to_gold_tier_upgrade": "Ulepszenie z podstawowego do złotego poziomu", + "item.sophisticatedstorage.basic_to_diamond_tier_upgrade": "Ulepszenie z podstawowego do diamentowego poziomu", + "item.sophisticatedstorage.basic_to_netherite_tier_upgrade": "Ulepszenie z podstawowego do netherytowego poziomu", + "item.sophisticatedstorage.copper_to_iron_tier_upgrade": "Ulepszenie z miedzianego do żelaznego poziomu", + "item.sophisticatedstorage.copper_to_gold_tier_upgrade": "Ulepszenie z miedzianego do złotego poziomu", + "item.sophisticatedstorage.copper_to_diamond_tier_upgrade": "Ulepszenie z miedzianego do diamentowego poziomu", + "item.sophisticatedstorage.copper_to_netherite_tier_upgrade": "Ulepszenie z miedzianego do netherytowego poziomu", + "item.sophisticatedstorage.iron_to_gold_tier_upgrade": "Ulepszenie z żelaznego do złotego poziomu", + "item.sophisticatedstorage.iron_to_diamond_tier_upgrade": "Ulepszenie z żelaznego do diamentowego poziomu", + "item.sophisticatedstorage.iron_to_netherite_tier_upgrade": "Ulepszenie z żelaznego do netherytowego poziomu", + "item.sophisticatedstorage.gold_to_diamond_tier_upgrade": "Ulepszenie z złotego do diamentowego poziomu", + "item.sophisticatedstorage.gold_to_netherite_tier_upgrade": "Ulepszenie z złotego do netherytowego poziomu", + "item.sophisticatedstorage.diamond_to_netherite_tier_upgrade": "Ulepszenie z diamentowego do netherytowego poziomu", + "item.sophisticatedstorage.upgrade_base": "Moduł ulepszenia", + "item.sophisticatedstorage.pickup_upgrade": "Ulepszenie podnoszenia", + "item.sophisticatedstorage.pickup_upgrade.tooltip": "Sprawia że magazyn podnosi przedmioty", + "item.sophisticatedstorage.advanced_pickup_upgrade": "Zaawansowane ulepszenie podnoszenia", + "item.sophisticatedstorage.advanced_pickup_upgrade.tooltip": "Sprawia że magazyn podnosi przedmioty\nPosiada więcej opcji filtracji", + "item.sophisticatedstorage.filter_upgrade": "Ulepszenie filtra", + "item.sophisticatedstorage.filter_upgrade.tooltip": "Filtruje deponowane i wyciągane przedmioty", + "item.sophisticatedstorage.advanced_filter_upgrade": "Zaawansowane ulepszenie filtra", + "item.sophisticatedstorage.advanced_filter_upgrade.tooltip": "Filtruje deponowane i wyciągane przedmioty\nPosiada więcej opcji filtracji", + "item.sophisticatedstorage.magnet_upgrade": "Ulepszenie magnesu", + "item.sophisticatedstorage.magnet_upgrade.tooltip": "Przyciąga przedmioty w najbliższym zasięgu", + "item.sophisticatedstorage.advanced_magnet_upgrade": "Zaawansowane ulepszenie magnesu", + "item.sophisticatedstorage.advanced_magnet_upgrade.tooltip": "Przyciąga przedmioty w średnim zasięgu\nPosiada więcej opcji filtracji", + "item.sophisticatedstorage.feeding_upgrade": "Ulepszenie karmienia", + "item.sophisticatedstorage.feeding_upgrade.tooltip": "Karmi gracza jedzeniem z magazynu", + "item.sophisticatedstorage.advanced_feeding_upgrade": "Zaawansowane ulepszenie magazynu", + "item.sophisticatedstorage.advanced_feeding_upgrade.tooltip": "Karmi gracza jedzeniem z magazynu\nRozszerzone opcje podawania jedzenia graczowi", + "item.sophisticatedstorage.compacting_upgrade": "Ulepszenie kompaktujące", + "item.sophisticatedstorage.compacting_upgrade.tooltip": "Kompaktuje przedmioty\nTylko crafting 2x2", + "item.sophisticatedstorage.advanced_compacting_upgrade": "Zaawansowane ulepszenie kompaktujące", + "item.sophisticatedstorage.advanced_compacting_upgrade.tooltip": "Kompaktuje przedmioty\nzarówno crafting 2x2 jak i 3x3 z większą ilością opcji filtrujących", + "item.sophisticatedstorage.void_upgrade": "Ulepszenie pustki", + "item.sophisticatedstorage.void_upgrade.tooltip": "Wyrzuca wybrane w filtrze przedmioty do pustki", + "item.sophisticatedstorage.advanced_void_upgrade": "Zaawansowane ulepszenie pustki", + "item.sophisticatedstorage.advanced_void_upgrade.tooltip": "Wyrzuca wybrane w filtrze przedmioty do pustki\nPosiada więcej opcji filtracji", + "item.sophisticatedstorage.smelting_upgrade": "Ulepszenie przetapiania", + "item.sophisticatedstorage.smelting_upgrade.tooltip": "Przetapianie w rubryce ulepszenia", + "item.sophisticatedstorage.auto_smelting_upgrade": "Ulepszenie auto-przetapiania", + "item.sophisticatedstorage.auto_smelting_upgrade.tooltip": "Przetapianie w rubryce ulepszenia\nAutomatycznie, wkłada i wyciąga przedmioty", + "item.sophisticatedstorage.smoking_upgrade": "Ulepszenie wędzenia", + "item.sophisticatedstorage.smoking_upgrade.tooltip": "Wędzi jedzenie w rubryce ulepszenia", + "item.sophisticatedstorage.auto_smoking_upgrade": "Ulepszenie auto-wędzenia", + "item.sophisticatedstorage.auto_smoking_upgrade.tooltip": "Wędzi jedzenie w rubryce ulepszenia\nAutomatycznie, wkłada i wyciąga przedmioty", + "item.sophisticatedstorage.blasting_upgrade": "Ulepszenie hutnicze", + "item.sophisticatedstorage.blasting_upgrade.tooltip": "Przetapianie rud i metali w rubryce ulepszenia", + "item.sophisticatedstorage.auto_blasting_upgrade": "Ulepszenie auto-hutnicze", + "item.sophisticatedstorage.auto_blasting_upgrade.tooltip": "Przetapianie rud i metali w rubryce ulepszenia\nAutomatycznie, wkłada i wyciąga przedmioty", + "item.sophisticatedstorage.crafting_upgrade": "Ulepszenie wytwarzania", + "item.sophisticatedstorage.crafting_upgrade.tooltip": "Stół rzemieślniczy w rubryce ulepszenia", + "item.sophisticatedstorage.stonecutter_upgrade": "Ulepszenie przecinarki", + "item.sophisticatedstorage.stonecutter_upgrade.tooltip": "Przecinarka w rubryce ulepszenia", + "item.sophisticatedstorage.jukebox_upgrade": "Ulepszenie szafy grającej", + "item.sophisticatedstorage.jukebox_upgrade.tooltip": "Przenośna szafa grająca", + "item.sophisticatedstorage.stack_upgrade_tier_1": "Ulepszenie stosów poziom 1", + "item.sophisticatedstorage.stack_upgrade_tier_1.tooltip": "Mnoży liczbę stosów, które mogą zmieścić się w slocie przez 2", + "item.sophisticatedstorage.stack_upgrade_tier_1_plus": "Ulepszenie stosów poziom 1 plus", + "item.sophisticatedstorage.stack_upgrade_tier_1_plus.tooltip": "Mnoży liczbę stosów, które mogą zmieścić się w slocie przez 3", + "item.sophisticatedstorage.stack_upgrade_tier_2": "Ulepszenie stosów poziom 2", + "item.sophisticatedstorage.stack_upgrade_tier_2.tooltip": "Mnoży liczbę stosów, które mogą zmieścić się w slocie przez 4", + "item.sophisticatedstorage.stack_upgrade_tier_3": "Ulepszenie stosów poziom 3", + "item.sophisticatedstorage.stack_upgrade_tier_3.tooltip": "Mnoży liczbę stosów, które mogą zmieścić się w slocie przez 8", + "item.sophisticatedstorage.stack_upgrade_tier_4": "Ulepszenie stosów poziom 4", + "item.sophisticatedstorage.stack_upgrade_tier_4.tooltip": "Mnoży liczbę stosów, które mogą zmieścić się w slocie przez 16", + "item.sophisticatedstorage.stack_upgrade_tier_5": "Ulepszenie stosów poziom 5", + "item.sophisticatedstorage.stack_upgrade_tier_5.tooltip": "Mnoży liczbę stosów, które mogą zmieścić się w slocie przez 32", + "item.sophisticatedstorage.pump_upgrade": "Ulepszenie pompy", + "item.sophisticatedstorage.pump_upgrade.tooltip": "Pompuje płyny między ulepszeniem zbiornika a pobliskimi blokami", + "item.sophisticatedstorage.xp_pump_upgrade": "Ulepszenie pompy doświadczenia", + "item.sophisticatedstorage.xp_pump_upgrade.tooltip": "Pompowanie doświadczenia pomiędzy ulepszeniem zbiornika a graczem", + "item.sophisticatedstorage.advanced_pump_upgrade": "Zaawansowane ulepszenie pompy", + "item.sophisticatedstorage.advanced_pump_upgrade.tooltip": "Pompuje płyny między ulepszeniem zbiornika a pobliskimi blokami\ndziała z pojemnikami na płyn trzymanymi w ręce i blokami płynów w świecie, Pozwala na wybranie które płyny są pompowane", + "item.sophisticatedstorage.compression_upgrade": "Ulepszenie kompresowania", + "item.sophisticatedstorage.compression_upgrade.tooltip": "Automatycznie kompresuje i dekompresuje przedmioty", + "item.sophisticatedstorage.hopper_upgrade": "Ulepszenie leja", + "item.sophisticatedstorage.hopper_upgrade.tooltip": "Wyciąga przedmioty z blocku powyżej i przenosi je do bloku poniżej", + "item.sophisticatedstorage.advanced_hopper_upgrade": "Zaawansowane ulepszenie leja", + "item.sophisticatedstorage.advanced_hopper_upgrade.tooltip": "Wyciąga przedmioty z blocku powyżej i przenosi je do bloku poniżej\nSzybsze, z opcjami wejśćia i wyjścia", + "item.sophisticatedstorage.chipped.botanist_workbench_upgrade": "Chipped: Botanist's Workbench Upgrade", + "item.sophisticatedstorage.chipped.botanist_workbench_upgrade.tooltip": "Chipped Botanist's Workbench in an upgrade tab", + "item.sophisticatedstorage.chipped.glassblower_upgrade": "Chipped: Glassblower Upgrade", + "item.sophisticatedstorage.chipped.glassblower_upgrade.tooltip": "Chipped Glassblower in an upgrade tab", + "item.sophisticatedstorage.chipped.carpenters_table_upgrade": "Chipped: Carpenters Workbench Upgrade", + "item.sophisticatedstorage.chipped.carpenters_table_upgrade.tooltip": "Chipped Carpenters Workbench in an upgrade tab", + "item.sophisticatedstorage.chipped.mason_table_upgrade": "Chipped: Mason Table Upgrade", + "item.sophisticatedstorage.chipped.mason_table_upgrade.tooltip": "Chipped Mason Table in an upgrade tab", + "item.sophisticatedstorage.chipped.loom_table_upgrade": "Chipped: Loom Table Upgrade", + "item.sophisticatedstorage.chipped.loom_table_upgrade.tooltip": "Chipped Loom Table in an upgrade tab", + "item.sophisticatedstorage.chipped.alchemy_bench_upgrade": "Chipped: Alchemy Bench Upgrade", + "item.sophisticatedstorage.chipped.alchemy_bench_upgrade.tooltip": "Chipped Alchemy Bench in an upgrade tab", + "item.sophisticatedstorage.chipped.tinkering_table_upgrade": "Chipped: Tinkering Table Upgrade", + "item.sophisticatedstorage.chipped.tinkering_table_upgrade.tooltip": "Chipped Tinkering Table in an upgrade tab", + "gui.sophisticatedstorage.upgrades.hopper": "Lej", + "gui.sophisticatedstorage.upgrades.hopper.tooltip": "Ustawienia leja", + "gui.sophisticatedstorage.upgrades.advanced_hopper": "Zaawansowany lej", + "gui.sophisticatedstorage.upgrades.advanced_hopper.tooltip": "Ustawienia zaawansowanego leja", + "gui.sophisticatedstorage.error.add.compression_incompatible_items": "Przedmiot(y) w tych slotach nie mogą być kompresowane z poprzedniego slotu.", + "gui.sophisticatedstorage.error.add.compression_no_space": "Brak slotów dla wykorzystania dla tego ulepszenia", + "gui.sophisticatedstorage.error.add.compression_exists": "Już jest Ulepszenie kompresowania w innym slocie na ulepszenie.", + "gui.sophisticatedstorage.error.add.compacting_exists": "Już jest Ulepszenie kompaktowania w innym slocie na ulepszenie.", + "gui.sophisticatedstorage.settings.tooltip": "Ustawienia", + "gui.sophisticatedstorage.settings.title": "Ustawienia", + "gui.sophisticatedstorage.settings.storage": "Magazyn", + "gui.sophisticatedstorage.settings.storage.tooltip": "Ustawienia Magazynu", + "gui.sophisticatedstorage.back_to_storage.tooltip": "Wróć do magazynu", + "gui.sophisticatedstorage.upgrades.buttons.allow": "Pozwól", + "gui.sophisticatedstorage.upgrades.buttons.block": "Blokuj", + "gui.sophisticatedstorage.upgrades.buttons.match_storage_contents": "Dopasuj zawartość", + "gui.sophisticatedstorage.upgrades.buttons.shift_click_into_storage": "Shift Click trafia do\nMagazyn", + "gui.sophisticatedstorage.upgrades.buttons.shift_click_into_inventory": "Shift Click trafia do\nInwentarza gracza", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_push": "Deponuj", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_pull": "Wyciągaj", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_push_pull": "Deponuj i Wyciagaj", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_off": "Off", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_disabled": "Wyłączone", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_side_info": "%s (%s)", + "gui.sophisticatedstorage.direction.up": "Do góry", + "gui.sophisticatedstorage.direction.down": "W dół", + "gui.sophisticatedstorage.direction.north": "Północ", + "gui.sophisticatedstorage.direction.south": "Południe", + "gui.sophisticatedstorage.direction.east": "Wchód", + "gui.sophisticatedstorage.direction.west": "Zachód", + "gui.sophisticatedstorage.block_side.top": "Góra", + "gui.sophisticatedstorage.block_side.bottom": "Dół", + "gui.sophisticatedstorage.block_side.front": "Przód", + "gui.sophisticatedstorage.block_side.back": "Tył", + "gui.sophisticatedstorage.block_side.left": "Lewy", + "gui.sophisticatedstorage.block_side.right": "Prawy", + "gui.sophisticatedstorage.buttons.upgrade_switch_enabled": "ON", + "gui.sophisticatedstorage.buttons.upgrade_switch_disabled": "OFF", + "gui.sophisticatedstorage.settings.buttons.context_storage": "Magazyn", + "gui.sophisticatedstorage.settings.buttons.context_storage.tooltip": "Ustawienia tego magazynu", + "gui.sophisticatedstorage.settings.buttons.context_storage.tooltip_detail": "Odziedziczone od gracza lub nadpisane dla tego magazynu", + "keybind.sophisticatedstorage.category": "Sophisticated Storage", + "keybind.sophisticatedstorage.sort": "Sortuj", + "gui.sophisticatedstorage.status.too_many_item_entity_drops": "Nie można zniszczyć%s, ponieważ spowodowałoby to wypadnięcie zbyt wiele (%s).\nRozważ użycie %s lub zniszczenie tego podczas skradania się, aby to pominąć.", + "gui.sophisticatedstorage.status.too_low_tier_upgrade_count": "Ulepszenie wymaga %s %ss", + "gui.sophisticatedstorage.status.packing_tape_disabled": "Konfiguracja ustawiona na upuszczanie wszystkich magazynów jako zapakowane bez konieczności użycia taśmy pakującej." +} From 213e0eded8842ad9a95aa42ad1ac7af9151e6689 Mon Sep 17 00:00:00 2001 From: smoong <135527138+smoong951@users.noreply.github.com> Date: Mon, 23 Sep 2024 05:03:43 +0900 Subject: [PATCH 8/9] =?UTF-8?q?feat:=20=E2=9C=A8=20Updated=20Korean=20tran?= =?UTF-8?q?slation=20(Thanks=20smoong951)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sophisticatedstorage/lang/ko_kr.json | 429 ++++++++++-------- 1 file changed, 239 insertions(+), 190 deletions(-) diff --git a/src/main/resources/assets/sophisticatedstorage/lang/ko_kr.json b/src/main/resources/assets/sophisticatedstorage/lang/ko_kr.json index 3e7b23d7..e3c417ff 100644 --- a/src/main/resources/assets/sophisticatedstorage/lang/ko_kr.json +++ b/src/main/resources/assets/sophisticatedstorage/lang/ko_kr.json @@ -1,191 +1,240 @@ { - "wood_name.sophisticatedstorage.oak" : "참나무", - "wood_name.sophisticatedstorage.spruce" : "가문비나무", - "wood_name.sophisticatedstorage.birch" : "자작나무", - "wood_name.sophisticatedstorage.acacia" : "아카시아나무", - "wood_name.sophisticatedstorage.jungle" : "정글나무", - "wood_name.sophisticatedstorage.dark_oak" : "짙은 참나무", - "wood_name.sophisticatedstorage.crimson" : "진홍빛", - "wood_name.sophisticatedstorage.mangrove" : "맹그로브나무", - "wood_name.sophisticatedstorage.warped" : "뒤틀린", - "itemGroup.sophisticatedstorage": "정교한 저장소", - "item.sophisticatedstorage.packing_tape": "포장 테이프", - "item.sophisticatedstorage.storage_tool": "저장소 도구", - "item.sophisticatedstorage.storage_tool.tooltip": "저장소를 연결하고, 잠그며, 개수/등급/잠금과 관련하여 숨길 수 있습니다.", - "item.sophisticatedstorage.storage_tool.tooltip.controls": "<%s>으로 모드 변경하기", - "item.sophisticatedstorage.storage_tool.tooltip.controls.combination": "웅크리기 + 스크롤", - "item.sophisticatedstorage.storage_tool.overlay.linking": "x:%s y:%s z:%s 위치에 있는 제어기에 연결", - "item.sophisticatedstorage.storage_tool.overlay.unlinking": "제어기와 연결 해제", - "item.sophisticatedstorage.storage_tool.overlay.toggling_lock": "잠금/잠금 해제", - "item.sophisticatedstorage.storage_tool.overlay.toggling_lock_display": "잠금 장치 표시/숨기기", - "item.sophisticatedstorage.storage_tool.overlay.toggling_count_display": "개수 표시/숨기기", - "item.sophisticatedstorage.storage_tool.overlay.toggling_tier_display": "등급 표시/숨기기", - "item.sophisticatedstorage.storage_tool.overlay.toggling_upgrades_display": "강화 표시/숨기기", - "item.sophisticatedstorage.debug_tool": "디버그 도구", - "item.sophisticatedstorage.storage_link": "저장소 연결기", - "block.sophisticatedstorage.storage_link.tooltip": "별도의 멀티블록 저장소를 저장소 제어기에 연결합니다.\n저장소 도구를 사용하여 제어기에 연결합니다.", - "block.sophisticatedstorage.storage_link": "저장소 연결기", - "item.sophisticatedstorage.controller": "저장소 제어기", - "block.sophisticatedstorage.controller.tooltip": "연결된 멀티블록 저장소에 아이템을 보관하거나 넣고 뺄 수 있습니다.", - "block.sophisticatedstorage.controller": "저장소 제어기", - "block.sophisticatedstorage.barrel": "%s%s통", - "block.sophisticatedstorage.iron_barrel": "%s%s철 통", - "block.sophisticatedstorage.gold_barrel": "%s%s금 통", - "block.sophisticatedstorage.diamond_barrel": "%s%s다이아몬드 통", - "block.sophisticatedstorage.netherite_barrel": "%s%s네더라이트 통", - "block.sophisticatedstorage.limited_barrel_1": "제한된 %s%s통 I", - "block.sophisticatedstorage.limited_barrel_2": "제한된 %s%s통 II", - "block.sophisticatedstorage.limited_barrel_3": "제한된 %s%s통 III", - "block.sophisticatedstorage.limited_barrel_4": "제한된 %s%s통 IV", - "block.sophisticatedstorage.limited_barrel_singular.tooltip": "%s개의 슬롯이 있으며, 한 슬롯에 들어갈 수 있는 아이템의 수가 %s배 증가합니다.", - "block.sophisticatedstorage.limited_barrel_plural.tooltip": "%s개의 슬롯이 있으며, 한 슬롯에 들어갈 수 있는 아이템의 수가 %s배 증가합니다.", - "block.sophisticatedstorage.limited_iron_barrel_1": "제한된 %s%s철 통 I", - "block.sophisticatedstorage.limited_iron_barrel_2": "제한된 %s%s철 통 II", - "block.sophisticatedstorage.limited_iron_barrel_3": "제한된 %s%s철 통 III", - "block.sophisticatedstorage.limited_iron_barrel_4": "제한된 %s%s철 통 IV", - "block.sophisticatedstorage.limited_gold_barrel_1": "제한된 %s%s금 통 I", - "block.sophisticatedstorage.limited_gold_barrel_2": "제한된 %s%s금 통 II", - "block.sophisticatedstorage.limited_gold_barrel_3": "제한된 %s%s금 통 III", - "block.sophisticatedstorage.limited_gold_barrel_4": "제한된 %s%s금 통 IV", - "block.sophisticatedstorage.limited_diamond_barrel_1": "제한된 %s%s다이아몬드 통 I", - "block.sophisticatedstorage.limited_diamond_barrel_2": "제한된 %s%s다이아몬드 통 II", - "block.sophisticatedstorage.limited_diamond_barrel_3": "제한된 %s%s다이아몬드 통 III", - "block.sophisticatedstorage.limited_diamond_barrel_4": "제한된 %s%s다이아몬드 통 IV", - "block.sophisticatedstorage.limited_netherite_barrel_1": "제한된 %s%s네더라이트 통 I", - "block.sophisticatedstorage.limited_netherite_barrel_2": "제한된 %s%s네더라이트 통 II", - "block.sophisticatedstorage.limited_netherite_barrel_3": "제한된 %s%s네더라이트 통 III", - "block.sophisticatedstorage.limited_netherite_barrel_4": "제한된 %s%s네더라이트 통 IV", - "block.sophisticatedstorage.barrel.tooltip.flat_top": " (평평한 상단)", - "block.sophisticatedstorage.chest": "%s%s상자", - "block.sophisticatedstorage.iron_chest": "%s%s철 상자", - "block.sophisticatedstorage.gold_chest": "%s%s금 상자", - "block.sophisticatedstorage.diamond_chest": "%s%s다이아몬드 상자", - "block.sophisticatedstorage.netherite_chest": "%s%s네더라이트 상자", - "item.sophisticatedstorage.shulker_box": "셜커 상자", - "block.sophisticatedstorage.shulker_box": "셜커 상자", - "item.sophisticatedstorage.iron_shulker_box": "철 셜커 상자", - "block.sophisticatedstorage.iron_shulker_box": "철 셜커 상자", - "item.sophisticatedstorage.gold_shulker_box": "금 셜커 상자", - "block.sophisticatedstorage.gold_shulker_box": "금 셜커 상자", - "item.sophisticatedstorage.diamond_shulker_box": "다이아몬드 셜커 상자", - "block.sophisticatedstorage.diamond_shulker_box": "다이아몬드 셜커 상자", - "item.sophisticatedstorage.netherite_shulker_box": "네더라이트 셜커 상자", - "block.sophisticatedstorage.netherite_shulker_box": "네더라이트 셜커 상자", - "item.sophisticatedstorage.basic_tier_upgrade": "기본 등급 강화", - "item.sophisticatedstorage.basic_tier_upgrade.tooltip": "기본 보관함을 정교한 버전으로 강화합니다.", - "item.sophisticatedstorage.basic_to_iron_tier_upgrade": "기본 등급에서 철 등급으로 강화", - "item.sophisticatedstorage.basic_to_gold_tier_upgrade": "기본 등급에서 금 등급으로 강화", - "item.sophisticatedstorage.basic_to_diamond_tier_upgrade": "기본 등급에서 다이아몬드 등급으로 강화", - "item.sophisticatedstorage.basic_to_netherite_tier_upgrade": "기본 등급에서 네더라이트 등급으로 강화", - "item.sophisticatedstorage.iron_to_gold_tier_upgrade": "철 등급에서 금 등급으로 강화", - "item.sophisticatedstorage.iron_to_diamond_tier_upgrade": "철 등급에서 다이아몬드 등급으로 강화", - "item.sophisticatedstorage.iron_to_netherite_tier_upgrade": "철 등급에서 네더라이트 등급으로 강화", - "item.sophisticatedstorage.gold_to_diamond_tier_upgrade": "금 등급에서 다이아몬드 등급으로 강화", - "item.sophisticatedstorage.gold_to_netherite_tier_upgrade": "금 등급에서 네더라이트 등급으로 강화", - "item.sophisticatedstorage.diamond_to_netherite_tier_upgrade": "다이아몬드 등급에서 네더라이트 등급으로 강화", - "item.sophisticatedstorage.upgrade_base": "강화 틀", - "item.sophisticatedstorage.pickup_upgrade": "획득 강화", - "item.sophisticatedstorage.pickup_upgrade.tooltip": "저장소가 아이템을 주울 수 있게 됩니다.", - "item.sophisticatedstorage.advanced_pickup_upgrade": "고급 획득 강화", - "item.sophisticatedstorage.advanced_pickup_upgrade.tooltip": "저장소가 아이템을 주울 수 있게 됩니다.\n필터 옵션이 추가됩니다.", - "item.sophisticatedstorage.filter_upgrade": "필터 강화", - "item.sophisticatedstorage.filter_upgrade.tooltip": "저장소에 들어가거나 나가는 아이템을 필터링할 수 있게 됩니다", - "item.sophisticatedstorage.advanced_filter_upgrade": "고급 필터 강화", - "item.sophisticatedstorage.advanced_filter_upgrade.tooltip": "저장소에 들어가거나 나가는 아이템을 필터링할 수 있게 됩니다\n필터 옵션이 추가됩니다", - "item.sophisticatedstorage.magnet_upgrade": "자석 강화", - "item.sophisticatedstorage.magnet_upgrade.tooltip": "저장소가 범위 내에 있는 아이템을 끌어당길 수 있게 됩니다.", - "item.sophisticatedstorage.advanced_magnet_upgrade": "고급 자석 강화", - "item.sophisticatedstorage.advanced_magnet_upgrade.tooltip": "저장소가 넓은 범위 내에 있는 아이템을 끌어당길 수 있게 됩니다.\n필터 옵션이 추가됩니다.", - "item.sophisticatedstorage.feeding_upgrade": "식사 강화", - "item.sophisticatedstorage.feeding_upgrade.tooltip": "플레이어에게 저장소 속 음식을 먹일 수 있게 됩니다.", - "item.sophisticatedstorage.advanced_feeding_upgrade": "고급 식사 강화", - "item.sophisticatedstorage.advanced_feeding_upgrade.tooltip": "플레이어에게 저장소 속 음식을 먹일 수 있게 됩니다.\n설정 옵션이 추가됩니다.", - "item.sophisticatedstorage.compacting_upgrade": "압축 강화", - "item.sophisticatedstorage.compacting_upgrade.tooltip": "아이템을 압축할 수 있게 됩니다.\n2x2 제작법만 사용할 수 있습니다.", - "item.sophisticatedstorage.advanced_compacting_upgrade": "고급 압축 강화", - "item.sophisticatedstorage.advanced_compacting_upgrade.tooltip": "아이템을 압축할 수 있게 됩니다.\n2x2와 3x3 제작법을 사용할 수 있고, 필터 옵션이 추가됩니다.", - "item.sophisticatedstorage.void_upgrade": "제거 강화", - "item.sophisticatedstorage.void_upgrade.tooltip": "필터로 선택한 아이템을 제거할 수 있게 됩니다.", - "item.sophisticatedstorage.advanced_void_upgrade": "고급 제거 강화", - "item.sophisticatedstorage.advanced_void_upgrade.tooltip": "필터로 선택한 아이템을 제거할 수 있게 됩니다.\n필터 옵션이 추가됩니다.", - "item.sophisticatedstorage.smelting_upgrade": "화로 강화", - "item.sophisticatedstorage.smelting_upgrade.tooltip": "강화 창에서 화로를 사용할 수 있게 됩니다.", - "item.sophisticatedstorage.auto_smelting_upgrade": "자동 화로 강화", - "item.sophisticatedstorage.auto_smelting_upgrade.tooltip": "강화 창에서 화로를 사용할 수 있게 됩니다.\n자동으로 화로에 아이템을 넣고 꺼낼 수 있게 됩니다.", - "item.sophisticatedstorage.smoking_upgrade": "훈연기 강화", - "item.sophisticatedstorage.smoking_upgrade.tooltip": "강화 창에서 훈연기를 사용할 수 있게 됩니다.", - "item.sophisticatedstorage.auto_smoking_upgrade": "자동 훈연기 강화", - "item.sophisticatedstorage.auto_smoking_upgrade.tooltip": "강화 창에서 훈연기를 사용할 수 있게 됩니다.\n자동으로 훈연기에 아이템을 넣고 꺼낼 수 있게 됩니다.", - "item.sophisticatedstorage.blasting_upgrade": "용광로 강화", - "item.sophisticatedstorage.blasting_upgrade.tooltip": "강화 창에서 용광로를 사용할 수 있게 됩니다.", - "item.sophisticatedstorage.auto_blasting_upgrade": "자동 용광로 강화", - "item.sophisticatedstorage.auto_blasting_upgrade.tooltip": "강화 창에서 용광로를 사용할 수 있게 됩니다.\n자동으로 용광로에 아이템을 넣고 꺼낼 수 있게 됩니다.", - "item.sophisticatedstorage.crafting_upgrade": "제작대 강화", - "item.sophisticatedstorage.crafting_upgrade.tooltip": "강화 창에서 제작대를 사용할 수 있게 됩니다.", - "item.sophisticatedstorage.stonecutter_upgrade": "석재 절단기 강화", - "item.sophisticatedstorage.stonecutter_upgrade.tooltip": "강화 창에서 석재 절단기를 사용할 수 있게 됩니다.", - "item.sophisticatedstorage.jukebox_upgrade": "주크박스 강화", - "item.sophisticatedstorage.jukebox_upgrade.tooltip": "휴대용 주크박스", - "item.sophisticatedstorage.stack_upgrade_tier_1": "쌓기 강화 1등급", - "item.sophisticatedstorage.stack_upgrade_tier_1.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 2배 증가합니다.", - "item.sophisticatedstorage.stack_upgrade_tier_2": "쌓기 강화 2등급", - "item.sophisticatedstorage.stack_upgrade_tier_2.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 4배 증가합니다.", - "item.sophisticatedstorage.stack_upgrade_tier_3": "쌓기 강화 3등급", - "item.sophisticatedstorage.stack_upgrade_tier_3.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 8배 증가합니다.", - "item.sophisticatedstorage.stack_upgrade_tier_4": "쌓기 강화 4등급", - "item.sophisticatedstorage.stack_upgrade_tier_4.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 16배 증가합니다.", - "item.sophisticatedstorage.pump_upgrade": "펌프 강화", - "item.sophisticatedstorage.pump_upgrade.tooltip": "탱크 강화가 된 배낭과 인접한 블록 사이에 액체를 넣고 뺄 수 있습니다.", - "item.sophisticatedstorage.xp_pump_upgrade": "경험치 펌프 강화", - "item.sophisticatedstorage.xp_pump_upgrade.tooltip": "탱크 강화가 된 배낭과 플레이어 사이에 경험치를 넣고 뺄 수 있습니다.", - "item.sophisticatedstorage.advanced_pump_upgrade": "고급 펌프 강화", - "item.sophisticatedstorage.advanced_pump_upgrade.tooltip": "탱크 강화가 된 배낭과 인접한 블록 사이에 액체를 넣고 뺄 수 있습니다.\n손에 든 액체 저장소와 액체 소스와 상호작용할 수 있습니다.\n어떤 액체를 받을지 지정할 수 있습니다.", - "item.sophisticatedstorage.compression_upgrade": "자동 압축 강화", - "item.sophisticatedstorage.compression_upgrade.tooltip": "자동으로 아이템을 압축하거나 압축 해제합니다.", - "item.sophisticatedstorage.hopper_upgrade": "호퍼 강화", - "item.sophisticatedstorage.hopper_upgrade.tooltip": "위쪽 블록에서 아이템을 끌어오거나 아래쪽 블록으로 밀어 넣습니다.", - "item.sophisticatedstorage.advanced_hopper_upgrade": "고급 호퍼 강화", - "item.sophisticatedstorage.advanced_hopper_upgrade.tooltip": "위쪽 블록에서 아이템을 끌어오거나 아래쪽 블록으로 밀어 넣습니다.\n더 빠른 속도와 입력/출력 옵션이 추가됩니다.", - "gui.sophisticatedstorage.upgrades.hopper": "호퍼", - "gui.sophisticatedstorage.upgrades.hopper.tooltip": "호퍼 설정", - "gui.sophisticatedstorage.upgrades.advanced_hopper": "고급 호퍼", - "gui.sophisticatedstorage.upgrades.advanced_hopper.tooltip": "고급 호퍼 설정", - "gui.sophisticatedstorage.error.add.compression_incompatible_items": "이 슬롯에 있는 아이템은 이전 슬롯에서 압축할 수 없습니다.", - "gui.sophisticatedstorage.error.add.compression_no_space": "이 자동 압축 강화로 관리할 수 있는 추가 슬롯은 없습니다.", - "gui.sophisticatedstorage.settings.tooltip": "설정", - "gui.sophisticatedstorage.settings.title": "설정", - "gui.sophisticatedstorage.settings.storage": "저장소", - "gui.sophisticatedstorage.settings.storage.tooltip": "저장소 설정", - "gui.sophisticatedstorage.back_to_storage.tooltip": "저장소로 돌아가기", - "gui.sophisticatedstorage.upgrades.buttons.allow": "허용", - "gui.sophisticatedstorage.upgrades.buttons.block": "차단", - "gui.sophisticatedstorage.upgrades.buttons.match_storage_contents": "저장소 아이템과 일치", - "gui.sophisticatedstorage.upgrades.buttons.shift_click_into_storage": "아이템을 Shift+클릭했을 때 아이템이\n저장소로 이동합니다.", - "gui.sophisticatedstorage.upgrades.buttons.shift_click_into_inventory": "아이템을 Shift+클릭했을 때 아이템이\n플레이어의 보관함으로 이동합니다.", - "gui.sophisticatedstorage.upgrades.buttons.io_mode_push": "밀기", - "gui.sophisticatedstorage.upgrades.buttons.io_mode_pull": "당기기", - "gui.sophisticatedstorage.upgrades.buttons.io_mode_push_pull": "밀기 & 당기기", - "gui.sophisticatedstorage.upgrades.buttons.io_mode_off": "끄기", - "gui.sophisticatedstorage.upgrades.buttons.io_mode_disabled": "비활성화됨", - "gui.sophisticatedstorage.upgrades.buttons.io_mode_side_info": "%s (%s)", - "gui.sophisticatedstorage.direction.up": "위쪽", - "gui.sophisticatedstorage.direction.down": "아래쪽", - "gui.sophisticatedstorage.direction.north": "북쪽", - "gui.sophisticatedstorage.direction.south": "남쪽", - "gui.sophisticatedstorage.direction.east": "동쪽", - "gui.sophisticatedstorage.direction.west": "서쪽", - "gui.sophisticatedstorage.block_side.top": "상단", - "gui.sophisticatedstorage.block_side.bottom": "하단", - "gui.sophisticatedstorage.block_side.front": "앞쪽", - "gui.sophisticatedstorage.block_side.back": "뒤쪽", - "gui.sophisticatedstorage.block_side.left": "왼쪽", - "gui.sophisticatedstorage.block_side.right": "오른쪽", - "gui.sophisticatedstorage.buttons.upgrade_switch_enabled": "켜짐", - "gui.sophisticatedstorage.buttons.upgrade_switch_disabled": "꺼짐", - "gui.sophisticatedstorage.settings.buttons.context_storage": "저장소", - "gui.sophisticatedstorage.settings.buttons.context_storage.tooltip": "이 저장소의 설정", - "gui.sophisticatedstorage.settings.buttons.context_storage.tooltip_detail": "이 저장소를 재정의합니다.", - "keybind.sophisticatedstorage.category": "정교한 저장소", - "keybind.sophisticatedstorage.sort": "저장소 정렬", - "gui.sophisticatedstorage.status.too_many_item_entity_drops": "%s을(를) 부술 수 없습니다. 너무 많은 %s개의 아이템 개체가 떨어질 수 있습니다.\n이 절차를 건너뛰기 위해서는 %s를 사용하거나 웅크리고 부수세요." -} + "wood_name.sophisticatedstorage.oak": "참나무", + "wood_name.sophisticatedstorage.spruce": "가문비나무", + "wood_name.sophisticatedstorage.birch": "자작나무", + "wood_name.sophisticatedstorage.acacia": "아카시아나무", + "wood_name.sophisticatedstorage.jungle": "정글나무", + "wood_name.sophisticatedstorage.dark_oak": "짙은 참나무", + "wood_name.sophisticatedstorage.crimson": "진홍빛", + "wood_name.sophisticatedstorage.mangrove": "맹그로브나무", + "wood_name.sophisticatedstorage.warped": "뒤틀린", + "wood_name.sophisticatedstorage.cherry": "벚나무", + "wood_name.sophisticatedstorage.bamboo": "대나무", + "itemGroup.sophisticatedstorage": "정교한 저장소", + "item.sophisticatedstorage.packing_tape": "포장 테이프", + "item.sophisticatedstorage.packing_tape.tooltip": "남은 사용 횟수: %s", + "item.sophisticatedstorage.packing_tape.tooltip.disabled": "비활성화됨 - 설정에 따라 모든 저장소가 포장된 상태로 드롭됩니다.", + "item.sophisticatedstorage.storage_tool": "저장소 도구", + "item.sophisticatedstorage.storage_tool.tooltip": "저장소를 연결하고, 잠그며, 개수/등급/잠금과 관련하여 숨길 수 있습니다.", + "item.sophisticatedstorage.storage_tool.tooltip.controls": "<%s>으로 모드 변경하기", + "item.sophisticatedstorage.storage_tool.tooltip.controls.combination": "웅크리기+스크롤", + "item.sophisticatedstorage.storage_tool.overlay.linking": "제어기에 연결 중: x:%s y:%s z:%s", + "item.sophisticatedstorage.storage_tool.overlay.unlinking": "제어기와 연결 해제", + "item.sophisticatedstorage.storage_tool.overlay.toggling_lock": "잠금/잠금 해제", + "item.sophisticatedstorage.storage_tool.overlay.toggling_lock_display": "잠금 장치 표시/숨기기", + "item.sophisticatedstorage.storage_tool.overlay.toggling_count_display": "개수 표시/숨기기", + "item.sophisticatedstorage.storage_tool.overlay.toggling_tier_display": "등급 표시/숨기기", + "item.sophisticatedstorage.storage_tool.overlay.toggling_upgrades_display": "기능 표시/숨기기", + "item.sophisticatedstorage.storage_tool.overlay.toggling_fill_level_display": "채움 수준 표시/숨기기", + "item.sophisticatedstorage.debug_tool": "디버그 도구", + "item.sophisticatedstorage.storage_io": "저장소 입출력", + "block.sophisticatedstorage.storage_io.tooltip": "멀티블록 저장소에 설치하면 아이템을 멀티블록으로 입출력할 수 있습니다.", + "block.sophisticatedstorage.storage_io": "저장소 입출력", + "item.sophisticatedstorage.storage_input": "저장소 입력", + "block.sophisticatedstorage.storage_input.tooltip": "멀티블록 저장소에 설치하면 아이템을 멀티블록에 입력할 수 있습니다.\n낮은 TPS 영향을 위해 최적화되었습니다.", + "block.sophisticatedstorage.storage_input": "저장소 입력", + "item.sophisticatedstorage.storage_output": "저장소 출력", + "block.sophisticatedstorage.storage_output.tooltip": "멀티블록 저장소에 설치하면 아이템을 멀티블록에 출력할 수 있습니다.", + "block.sophisticatedstorage.storage_output": "저장소 출력", + "item.sophisticatedstorage.storage_link": "저장소 연결기", + "block.sophisticatedstorage.storage_link.tooltip": "별도의 멀티블록 저장소를 저장소 제어기에 연결합니다.\n저장소 도구를 사용하여 제어기에 연결합니다.", + "block.sophisticatedstorage.storage_link": "저장소 연결기", + "item.sophisticatedstorage.controller": "저장소 제어기", + "block.sophisticatedstorage.controller.tooltip": "연결된 멀티블록 저장소에 아이템을 보관하거나 넣고 뺄 수 있습니다.", + "block.sophisticatedstorage.controller": "저장소 제어기", + "block.sophisticatedstorage.barrel": "%s%s통", + "block.sophisticatedstorage.copper_barrel": "%s%s구리 통", + "block.sophisticatedstorage.iron_barrel": "%s%s철 통", + "block.sophisticatedstorage.gold_barrel": "%s%s금 통", + "block.sophisticatedstorage.diamond_barrel": "%s%s다이아몬드 통", + "block.sophisticatedstorage.netherite_barrel": "%s%s네더라이트 통", + "block.sophisticatedstorage.limited_barrel_1": "제한된 %s%s통 I", + "block.sophisticatedstorage.limited_barrel_2": "제한된 %s%s통 II", + "block.sophisticatedstorage.limited_barrel_3": "제한된 %s%s통 III", + "block.sophisticatedstorage.limited_barrel_4": "제한된 %s%s통 IV", + "block.sophisticatedstorage.limited_barrel_singular.tooltip": "%s개의 슬롯이 있으며, 한 슬롯에 들어갈 수 있는 아이템의 수가 %s배 증가합니다.", + "block.sophisticatedstorage.limited_barrel_plural.tooltip": "%s개의 슬롯이 있으며, 한 슬롯에 들어갈 수 있는 아이템의 수가 %s배 증가합니다.", + "block.sophisticatedstorage.limited_copper_barrel_1": "제한된 %s%s구리 통 I", + "block.sophisticatedstorage.limited_copper_barrel_2": "제한된 %s%s구리 통 II", + "block.sophisticatedstorage.limited_copper_barrel_3": "제한된 %s%s구리 통 III", + "block.sophisticatedstorage.limited_copper_barrel_4": "제한된 %s%s구리 통 IV", + "block.sophisticatedstorage.limited_iron_barrel_1": "제한된 %s%s철 통 I", + "block.sophisticatedstorage.limited_iron_barrel_2": "제한된 %s%s철 통 II", + "block.sophisticatedstorage.limited_iron_barrel_3": "제한된 %s%s철 통 III", + "block.sophisticatedstorage.limited_iron_barrel_4": "제한된 %s%s철 통 IV", + "block.sophisticatedstorage.limited_gold_barrel_1": "제한된 %s%s금 통 I", + "block.sophisticatedstorage.limited_gold_barrel_2": "제한된 %s%s금 통 II", + "block.sophisticatedstorage.limited_gold_barrel_3": "제한된 %s%s금 통 III", + "block.sophisticatedstorage.limited_gold_barrel_4": "제한된 %s%s금 통 IV", + "block.sophisticatedstorage.limited_diamond_barrel_1": "제한된 %s%s다이아몬드 통 I", + "block.sophisticatedstorage.limited_diamond_barrel_2": "제한된 %s%s다이아몬드 통 II", + "block.sophisticatedstorage.limited_diamond_barrel_3": "제한된 %s%s다이아몬드 통 III", + "block.sophisticatedstorage.limited_diamond_barrel_4": "제한된 %s%s다이아몬드 통 IV", + "block.sophisticatedstorage.limited_netherite_barrel_1": "제한된 %s%s네더라이트 통 I", + "block.sophisticatedstorage.limited_netherite_barrel_2": "제한된 %s%s네더라이트 통 II", + "block.sophisticatedstorage.limited_netherite_barrel_3": "제한된 %s%s네더라이트 통 III", + "block.sophisticatedstorage.limited_netherite_barrel_4": "제한된 %s%s네더라이트 통 IV", + "block.sophisticatedstorage.barrel.tooltip.flat_top": " (평평한 상단)", + "block.sophisticatedstorage.chest": "%s%s상자", + "block.sophisticatedstorage.copper_chest": "%s%s구리 상자", + "block.sophisticatedstorage.iron_chest": "%s%s철 상자", + "block.sophisticatedstorage.gold_chest": "%s%s금 상자", + "block.sophisticatedstorage.diamond_chest": "%s%s다이아몬드 상자", + "block.sophisticatedstorage.netherite_chest": "%s%s네더라이트 상자", + "item.sophisticatedstorage.shulker_box": "셜커 상자", + "block.sophisticatedstorage.shulker_box": "셜커 상자", + "item.sophisticatedstorage.copper_shulker_box": "구리 셜커 상자", + "block.sophisticatedstorage.copper_shulker_box": "구리 셜커 상자", + "item.sophisticatedstorage.iron_shulker_box": "철 셜커 상자", + "block.sophisticatedstorage.iron_shulker_box": "철 셜커 상자", + "item.sophisticatedstorage.gold_shulker_box": "금 셜커 상자", + "block.sophisticatedstorage.gold_shulker_box": "금 셜커 상자", + "item.sophisticatedstorage.diamond_shulker_box": "다이아몬드 셜커 상자", + "block.sophisticatedstorage.diamond_shulker_box": "다이아몬드 셜커 상자", + "item.sophisticatedstorage.netherite_shulker_box": "네더라이트 셜커 상자", + "block.sophisticatedstorage.netherite_shulker_box": "네더라이트 셜커 상자", + "item.sophisticatedstorage.basic_tier_upgrade": "기본 등급 강화", + "item.sophisticatedstorage.basic_tier_upgrade.tooltip": "바닐라 보관함을 정교한 버전으로 강화합니다.", + "item.sophisticatedstorage.basic_to_copper_tier_upgrade": "기본 등급을 구리 등급으로 강화", + "item.sophisticatedstorage.basic_to_iron_tier_upgrade": "기본 등급을 철 등급으로 강화", + "item.sophisticatedstorage.basic_to_gold_tier_upgrade": "기본 등급을 금 등급으로 강화", + "item.sophisticatedstorage.basic_to_diamond_tier_upgrade": "기본 등급을 다이아몬드 등급으로 강화", + "item.sophisticatedstorage.basic_to_netherite_tier_upgrade": "기본 등급을 네더라이트 등급으로 강화", + "item.sophisticatedstorage.copper_to_iron_tier_upgrade": "구리 등급을 철 등급으로 강화", + "item.sophisticatedstorage.copper_to_gold_tier_upgrade": "구리 등급을 금 등급으로 강화", + "item.sophisticatedstorage.copper_to_diamond_tier_upgrade": "구리 등급을 다이아몬드 등급으로 강화", + "item.sophisticatedstorage.copper_to_netherite_tier_upgrade": "구리 등급을 네더라이트 등급으로 강화", + "item.sophisticatedstorage.iron_to_gold_tier_upgrade": "철 등급을 금 등급으로 강화", + "item.sophisticatedstorage.iron_to_diamond_tier_upgrade": "철 등급을 다이아몬드 등급으로 강화", + "item.sophisticatedstorage.iron_to_netherite_tier_upgrade": "철 등급을 네더라이트 등급으로 강화", + "item.sophisticatedstorage.gold_to_diamond_tier_upgrade": "금 등급을 다이아몬드 등급으로 강화", + "item.sophisticatedstorage.gold_to_netherite_tier_upgrade": "금 등급을 네더라이트 등급으로 강화", + "item.sophisticatedstorage.diamond_to_netherite_tier_upgrade": "다이아몬드 등급을 네더라이트 등급으로 강화", + "item.sophisticatedstorage.upgrade_base": "기능 틀", + "item.sophisticatedstorage.pickup_upgrade": "줍기 기능", + "item.sophisticatedstorage.pickup_upgrade.tooltip": "저장소가 아이템을 주울 수 있게 됩니다.", + "item.sophisticatedstorage.advanced_pickup_upgrade": "고급 줍기 기능", + "item.sophisticatedstorage.advanced_pickup_upgrade.tooltip": "저장소가 아이템을 주울 수 있게 됩니다.\n필터 옵션이 추가됩니다.", + "item.sophisticatedstorage.filter_upgrade": "필터 기능", + "item.sophisticatedstorage.filter_upgrade.tooltip": "저장소에 들어가거나 나가는 아이템을 필터링할 수 있게 됩니다", + "item.sophisticatedstorage.advanced_filter_upgrade": "고급 필터 기능", + "item.sophisticatedstorage.advanced_filter_upgrade.tooltip": "저장소에 들어가거나 나가는 아이템을 필터링할 수 있게 됩니다\n필터 옵션이 추가됩니다", + "item.sophisticatedstorage.magnet_upgrade": "자석 기능", + "item.sophisticatedstorage.magnet_upgrade.tooltip": "저장소가 범위 내에 있는 아이템을 끌어당길 수 있게 됩니다.", + "item.sophisticatedstorage.advanced_magnet_upgrade": "고급 자석 기능", + "item.sophisticatedstorage.advanced_magnet_upgrade.tooltip": "저장소가 넓은 범위 내에 있는 아이템을 끌어당길 수 있게 됩니다.\n필터 옵션이 추가됩니다.", + "item.sophisticatedstorage.feeding_upgrade": "식사 기능", + "item.sophisticatedstorage.feeding_upgrade.tooltip": "플레이어에게 저장소 속 음식을 먹일 수 있게 됩니다.", + "item.sophisticatedstorage.advanced_feeding_upgrade": "고급 식사 기능", + "item.sophisticatedstorage.advanced_feeding_upgrade.tooltip": "플레이어에게 저장소 속 음식을 먹일 수 있게 됩니다.\n설정 옵션이 추가됩니다.", + "item.sophisticatedstorage.compacting_upgrade": "압축 기능", + "item.sophisticatedstorage.compacting_upgrade.tooltip": "아이템을 압축할 수 있게 됩니다.\n2x2 제작법만 사용할 수 있습니다.", + "item.sophisticatedstorage.advanced_compacting_upgrade": "고급 압축 기능", + "item.sophisticatedstorage.advanced_compacting_upgrade.tooltip": "아이템을 압축할 수 있게 됩니다.\n2x2와 3x3 제작법을 사용할 수 있고, 필터 옵션이 추가됩니다.", + "item.sophisticatedstorage.void_upgrade": "제거 기능", + "item.sophisticatedstorage.void_upgrade.tooltip": "필터로 선택한 아이템을 제거할 수 있게 됩니다.", + "item.sophisticatedstorage.advanced_void_upgrade": "고급 제거 기능", + "item.sophisticatedstorage.advanced_void_upgrade.tooltip": "필터로 선택한 아이템을 제거할 수 있게 됩니다.\n필터 옵션이 추가됩니다.", + "item.sophisticatedstorage.smelting_upgrade": "화로 기능", + "item.sophisticatedstorage.smelting_upgrade.tooltip": "기능 창에서 화로를 사용할 수 있게 됩니다.", + "item.sophisticatedstorage.auto_smelting_upgrade": "자동 화로 기능", + "item.sophisticatedstorage.auto_smelting_upgrade.tooltip": "기능 창에서 화로를 사용할 수 있게 됩니다.\n자동으로 화로에 아이템을 넣고 꺼낼 수 있게 됩니다.", + "item.sophisticatedstorage.smoking_upgrade": "훈연기 기능", + "item.sophisticatedstorage.smoking_upgrade.tooltip": "기능 창에서 훈연기를 사용할 수 있게 됩니다.", + "item.sophisticatedstorage.auto_smoking_upgrade": "자동 훈연기 기능", + "item.sophisticatedstorage.auto_smoking_upgrade.tooltip": "기능 창에서 훈연기를 사용할 수 있게 됩니다.\n자동으로 훈연기에 아이템을 넣고 꺼낼 수 있게 됩니다.", + "item.sophisticatedstorage.blasting_upgrade": "용광로 기능", + "item.sophisticatedstorage.blasting_upgrade.tooltip": "기능 창에서 용광로를 사용할 수 있게 됩니다.", + "item.sophisticatedstorage.auto_blasting_upgrade": "자동 용광로 기능", + "item.sophisticatedstorage.auto_blasting_upgrade.tooltip": "기능 창에서 용광로를 사용할 수 있게 됩니다.\n자동으로 용광로에 아이템을 넣고 꺼낼 수 있게 됩니다.", + "item.sophisticatedstorage.crafting_upgrade": "제작대 기능", + "item.sophisticatedstorage.crafting_upgrade.tooltip": "기능 창에서 제작대를 사용할 수 있게 됩니다.", + "item.sophisticatedstorage.stonecutter_upgrade": "석재 절단기 기능", + "item.sophisticatedstorage.stonecutter_upgrade.tooltip": "기능 창에서 석재 절단기를 사용할 수 있게 됩니다.", + "item.sophisticatedstorage.jukebox_upgrade": "주크박스 기능", + "item.sophisticatedstorage.jukebox_upgrade.tooltip": "휴대용 주크박스", + "item.sophisticatedstorage.stack_upgrade_tier_1": "1단계 쌓기 기능", + "item.sophisticatedstorage.stack_upgrade_tier_1.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 2배 증가합니다.", + "item.sophisticatedstorage.stack_upgrade_tier_1_plus": "1.5단계 쌓기 기능", + "item.sophisticatedstorage.stack_upgrade_tier_1_plus.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 3배 증가합니다.", + "item.sophisticatedstorage.stack_upgrade_tier_2": "2단계 쌓기 기능", + "item.sophisticatedstorage.stack_upgrade_tier_2.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 4배 증가합니다.", + "item.sophisticatedstorage.stack_upgrade_tier_3": "3단계 쌓기 기능", + "item.sophisticatedstorage.stack_upgrade_tier_3.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 8배 증가합니다.", + "item.sophisticatedstorage.stack_upgrade_tier_4": "4단계 쌓기 기능", + "item.sophisticatedstorage.stack_upgrade_tier_4.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 16배 증가합니다.", + "item.sophisticatedstorage.stack_upgrade_tier_5": "5단계 쌓기 기능", + "item.sophisticatedstorage.stack_upgrade_tier_5.tooltip": "한 슬롯에 들어갈 수 있는 아이템의 수가 32배 증가합니다.", + "item.sophisticatedstorage.pump_upgrade": "펌프 기능", + "item.sophisticatedstorage.pump_upgrade.tooltip": "탱크 기능가 된 배낭과 인접한 블록 사이에 액체를 넣고 뺄 수 있습니다.", + "item.sophisticatedstorage.xp_pump_upgrade": "경험치 펌프 기능", + "item.sophisticatedstorage.xp_pump_upgrade.tooltip": "탱크 기능가 된 배낭과 플레이어 사이에 경험치를 넣고 뺄 수 있습니다.", + "item.sophisticatedstorage.advanced_pump_upgrade": "고급 펌프 기능", + "item.sophisticatedstorage.advanced_pump_upgrade.tooltip": "탱크 기능가 된 배낭과 인접한 블록 사이에 액체를 넣고 뺄 수 있습니다.\n손에 든 액체 용기와 세계에 있는 액체 블록에서 작동합니다.\n어떤 액체를 받을지 지정할 수 있습니다.", + "item.sophisticatedstorage.compression_upgrade": "자동 압축 기능", + "item.sophisticatedstorage.compression_upgrade.tooltip": "자동으로 아이템을 압축하거나 압축 해제합니다.", + "item.sophisticatedstorage.hopper_upgrade": "호퍼 기능", + "item.sophisticatedstorage.hopper_upgrade.tooltip": "위쪽 블록에서 아이템을 가져오거나 아래 블록으로 내보냅니다.", + "item.sophisticatedstorage.advanced_hopper_upgrade": "고급 호퍼 기능", + "item.sophisticatedstorage.advanced_hopper_upgrade.tooltip": "위쪽 블록에서 아이템을 가져오거나 아래 블록으로 내보냅니다.\n더 빠른 속도와 입력/출력 옵션이 추가됩니다.", + "item.sophisticatedstorage.chipped.botanist_workbench_upgrade": "Chipped: Botanist's Workbench Upgrade", + "item.sophisticatedstorage.chipped.botanist_workbench_upgrade.tooltip": "Chipped Botanist's Workbench in an upgrade tab", + "item.sophisticatedstorage.chipped.glassblower_upgrade": "Chipped: Glassblower Upgrade", + "item.sophisticatedstorage.chipped.glassblower_upgrade.tooltip": "Chipped Glassblower in an upgrade tab", + "item.sophisticatedstorage.chipped.carpenters_table_upgrade": "Chipped: Carpenters Workbench Upgrade", + "item.sophisticatedstorage.chipped.carpenters_table_upgrade.tooltip": "Chipped Carpenters Workbench in an upgrade tab", + "item.sophisticatedstorage.chipped.mason_table_upgrade": "Chipped: Mason Table Upgrade", + "item.sophisticatedstorage.chipped.mason_table_upgrade.tooltip": "Chipped Mason Table in an upgrade tab", + "item.sophisticatedstorage.chipped.loom_table_upgrade": "Chipped: Loom Table Upgrade", + "item.sophisticatedstorage.chipped.loom_table_upgrade.tooltip": "Chipped Loom Table in an upgrade tab", + "item.sophisticatedstorage.chipped.alchemy_bench_upgrade": "Chipped: Alchemy Bench Upgrade", + "item.sophisticatedstorage.chipped.alchemy_bench_upgrade.tooltip": "Chipped Alchemy Bench in an upgrade tab", + "item.sophisticatedstorage.chipped.tinkering_table_upgrade": "Chipped: Tinkering Table Upgrade", + "item.sophisticatedstorage.chipped.tinkering_table_upgrade.tooltip": "Chipped Tinkering Table in an upgrade tab", + "gui.sophisticatedstorage.upgrades.hopper": "호퍼", + "gui.sophisticatedstorage.upgrades.hopper.tooltip": "호퍼 설정", + "gui.sophisticatedstorage.upgrades.advanced_hopper": "고급 호퍼", + "gui.sophisticatedstorage.upgrades.advanced_hopper.tooltip": "고급 호퍼 설정", + "gui.sophisticatedstorage.error.add.compression_incompatible_items": "이 슬롯에 있는 아이템은 이전 슬롯에서 압축할 수 없습니다.", + "gui.sophisticatedstorage.error.add.compression_no_space": "이 자동 압축 기능으로 관리할 수 있는 추가 슬롯은 없습니다.", + "gui.sophisticatedstorage.error.add.compression_exists": "다른 기능 슬롯에 이미 압축 기능가 있습니다.", + "gui.sophisticatedstorage.error.add.compacting_exists": "다른 기능 슬롯에 이미 압축 기능가 있습니다.", + "gui.sophisticatedstorage.settings.tooltip": "설정", + "gui.sophisticatedstorage.settings.title": "설정", + "gui.sophisticatedstorage.settings.storage": "저장소", + "gui.sophisticatedstorage.settings.storage.tooltip": "저장소 설정", + "gui.sophisticatedstorage.back_to_storage.tooltip": "저장소로 돌아가기", + "gui.sophisticatedstorage.upgrades.buttons.allow": "허용", + "gui.sophisticatedstorage.upgrades.buttons.block": "차단", + "gui.sophisticatedstorage.upgrades.buttons.match_storage_contents": "저장소 아이템과 일치", + "gui.sophisticatedstorage.upgrades.buttons.shift_click_into_storage": "아이템을 Shift+좌클릭했을 때 아이템이\n저장소로 이동합니다.", + "gui.sophisticatedstorage.upgrades.buttons.shift_click_into_inventory": "아이템을 Shift+좌클릭했을 때 아이템이\n플레이어의 보관함으로 이동합니다.", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_push": "밀기", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_pull": "당기기", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_push_pull": "밀기/당기기", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_off": "끄기", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_disabled": "비활성화됨", + "gui.sophisticatedstorage.upgrades.buttons.io_mode_side_info": "%s (%s)", + "gui.sophisticatedstorage.direction.up": "위쪽", + "gui.sophisticatedstorage.direction.down": "아래쪽", + "gui.sophisticatedstorage.direction.north": "북쪽", + "gui.sophisticatedstorage.direction.south": "남쪽", + "gui.sophisticatedstorage.direction.east": "동쪽", + "gui.sophisticatedstorage.direction.west": "서쪽", + "gui.sophisticatedstorage.block_side.top": "상단", + "gui.sophisticatedstorage.block_side.bottom": "하단", + "gui.sophisticatedstorage.block_side.front": "앞쪽", + "gui.sophisticatedstorage.block_side.back": "뒤쪽", + "gui.sophisticatedstorage.block_side.left": "왼쪽", + "gui.sophisticatedstorage.block_side.right": "오른쪽", + "gui.sophisticatedstorage.buttons.upgrade_switch_enabled": "켜짐", + "gui.sophisticatedstorage.buttons.upgrade_switch_disabled": "꺼짐", + "gui.sophisticatedstorage.settings.buttons.context_storage": "저장소", + "gui.sophisticatedstorage.settings.buttons.context_storage.tooltip": "이 저장소의 설정", + "gui.sophisticatedstorage.settings.buttons.context_storage.tooltip_detail": "이 저장소를 재정의합니다.", + "keybind.sophisticatedstorage.category": "정교한 저장소", + "keybind.sophisticatedstorage.sort": "저장소 정렬", + "gui.sophisticatedstorage.status.too_many_item_entity_drops": "%s을(를) 부술 수 없습니다. 너무 많은 %s개의 아이템 개체가 떨어질 수 있습니다.\n이 절차를 건너뛰기 위해서는 %s를 사용하거나 웅크리고 부수세요.", + "gui.sophisticatedstorage.status.too_low_tier_upgrade_count": "강화하려면 %s %ss이(가) 필요합니다.", + "gui.sophisticatedstorage.status.packing_tape_disabled": "포장 테이프 없이 모든 저장소를 포장된 상태로 드롭하도록 설정합니다." +} \ No newline at end of file From 3f4e7e2e5525bf9ca5946e72c447610818a57b41 Mon Sep 17 00:00:00 2001 From: James Mitchell Date: Sun, 22 Sep 2024 10:08:23 -1000 Subject: [PATCH 9/9] =?UTF-8?q?feat:=20=E2=9C=A8=20Optimized=20JEI=20subty?= =?UTF-8?q?pe=20calculations=20to=20take=20much=20less=20CPU=20time=20and?= =?UTF-8?q?=20memory=20(Thanks=20mezz)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [DEV] * Optimize JEI subtype calculations * minimize diff * add missing Nullable annotation --------- Co-authored-by: P3pp3rF1y --- build.gradle | 3 +- gradle.properties | 6 +- .../compat/jei/StoragePlugin.java | 123 ++++++++---------- .../subtypes/BarrelSubtypeInterpreter.java | 28 ++++ .../PropertyBasedSubtypeInterpreter.java | 41 ++++++ .../ShulkerBoxSubtypeInterpreter.java | 22 ++++ .../WoodStorageSubtypeInterpreter.java | 25 ++++ .../compat/jei/subtypes/package-info.java | 8 ++ .../templates/META-INF/neoforge.mods.toml | 7 + 9 files changed, 189 insertions(+), 74 deletions(-) create mode 100644 src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/BarrelSubtypeInterpreter.java create mode 100644 src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/PropertyBasedSubtypeInterpreter.java create mode 100644 src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/ShulkerBoxSubtypeInterpreter.java create mode 100644 src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/WoodStorageSubtypeInterpreter.java create mode 100644 src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/package-info.java diff --git a/build.gradle b/build.gradle index a8f550c2..4cdb1cd6 100644 --- a/build.gradle +++ b/build.gradle @@ -125,7 +125,7 @@ configurations { } dependencies { - compileOnly "mezz.jei:jei-${jei_mc_version}:${jei_version}" + compileOnly "mezz.jei:jei-${jei_mc_version}-api:${jei_version}" localRuntime "mezz.jei:jei-${jei_mc_version}:${jei_version}" compileOnly "curse.maven:embeddium-908741:${embeddium_cf_file_id}" compileOnly "curse.maven:jade-324717:${jade_cf_file_id}" @@ -182,6 +182,7 @@ var generateModMetadata = tasks.register("generateModMetadata", ProcessResources mod_issue_tracker_url: mod_issue_tracker_url, mod_logo_file: mod_logo_file, mod_credits: mod_credits, mod_authors : mod_authors, mod_description: mod_description, mod_display_url: mod_display_url, mod_full_version : "${project.mod_version}.${getBuildNumber()}${getStable()}", + jei_version_range : jei_version_range, sc_version :"[" + sc_version.substring(sc_version.indexOf("-") + 1, sc_version.lastIndexOf(',')) + ".+,)" ] inputs.properties replaceProperties diff --git a/gradle.properties b/gradle.properties index 4fbee227..04d4f89c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,8 +24,10 @@ mod_issue_tracker_url=https://github.com/P3pp3rF1y/SophisticatedStorage/issues sonar_project_key=sophisticatedstorage:SophisticatedStorage github_package_url=https://maven.pkg.github.com/P3pp3rF1y/SophisticatedStorage -jei_mc_version=1.21-neoforge -jei_version=19.8.0.97 +jei_mc_version=1.21.1-neoforge +jei_version=19.12.0.131 +# first JEI version with Object UID support +jei_version_range=[19.9.0,) embeddium_cf_file_id=5213210 #quark_cf_file_id=5093415 #zeta_cf_file_id=5078215 diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/StoragePlugin.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/StoragePlugin.java index b1c67798..0eaf155f 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/StoragePlugin.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/StoragePlugin.java @@ -3,10 +3,9 @@ import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.constants.RecipeTypes; -import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.handlers.IGuiContainerHandler; import mezz.jei.api.helpers.IStackHelper; -import mezz.jei.api.ingredients.subtypes.IIngredientSubtypeInterpreter; +import mezz.jei.api.ingredients.subtypes.ISubtypeInterpreter; import mezz.jei.api.recipe.transfer.IRecipeTransferHandlerHelper; import mezz.jei.api.registration.*; import net.minecraft.client.renderer.Rect2i; @@ -20,15 +19,14 @@ import net.p3pp3rf1y.sophisticatedstorage.client.gui.StorageScreen; import net.p3pp3rf1y.sophisticatedstorage.client.gui.StorageSettingsScreen; import net.p3pp3rf1y.sophisticatedstorage.common.gui.StorageContainerMenu; +import net.p3pp3rf1y.sophisticatedstorage.compat.jei.subtypes.BarrelSubtypeInterpreter; +import net.p3pp3rf1y.sophisticatedstorage.compat.jei.subtypes.ShulkerBoxSubtypeInterpreter; +import net.p3pp3rf1y.sophisticatedstorage.compat.jei.subtypes.WoodStorageSubtypeInterpreter; import net.p3pp3rf1y.sophisticatedstorage.init.ModBlocks; import net.p3pp3rf1y.sophisticatedstorage.init.ModItems; -import net.p3pp3rf1y.sophisticatedstorage.item.BarrelBlockItem; -import net.p3pp3rf1y.sophisticatedstorage.item.StorageBlockItem; -import net.p3pp3rf1y.sophisticatedstorage.item.WoodStorageBlockItem; import java.util.ArrayList; import java.util.List; -import java.util.StringJoiner; import java.util.function.Consumer; @SuppressWarnings("unused") @@ -48,71 +46,54 @@ public ResourceLocation getPluginUid() { @Override public void registerItemSubtypes(ISubtypeRegistration registration) { - IIngredientSubtypeInterpreter woodStorageNbtInterpreter = (itemStack, context) -> { - StringJoiner result = new StringJoiner(","); - WoodStorageBlockItem.getWoodType(itemStack).ifPresent(woodName -> result.add("woodName:" + woodName)); - StorageBlockItem.getMainColorFromStack(itemStack).ifPresent(mainColor -> result.add("mainColor:" + mainColor)); - StorageBlockItem.getAccentColorFromStack(itemStack).ifPresent(accentColor -> result.add("accentColor:" + accentColor)); - return "{" + result + "}"; - }; - IIngredientSubtypeInterpreter barrelNbtInterpreter = (itemStack, context) -> { - StringJoiner result = new StringJoiner(","); - WoodStorageBlockItem.getWoodType(itemStack).ifPresent(woodName -> result.add("woodName:" + woodName)); - StorageBlockItem.getMainColorFromStack(itemStack).ifPresent(mainColor -> result.add("mainColor:" + mainColor)); - StorageBlockItem.getAccentColorFromStack(itemStack).ifPresent(accentColor -> result.add("accentColor:" + accentColor)); - result.add("flatTop:" + BarrelBlockItem.isFlatTop(itemStack)); - return "{" + result + "}"; - }; - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.BARREL_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.COPPER_BARREL_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.IRON_BARREL_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.GOLD_BARREL_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.DIAMOND_BARREL_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.NETHERITE_BARREL_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.CHEST_ITEM.get(), woodStorageNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.COPPER_CHEST_ITEM.get(), woodStorageNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.IRON_CHEST_ITEM.get(), woodStorageNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.GOLD_CHEST_ITEM.get(), woodStorageNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.DIAMOND_CHEST_ITEM.get(), woodStorageNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.NETHERITE_CHEST_ITEM.get(), woodStorageNbtInterpreter); - - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_BARREL_1_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_BARREL_2_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_BARREL_3_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_BARREL_4_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_COPPER_BARREL_1_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_COPPER_BARREL_2_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_COPPER_BARREL_3_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_COPPER_BARREL_4_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_IRON_BARREL_1_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_IRON_BARREL_2_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_IRON_BARREL_3_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_IRON_BARREL_4_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_GOLD_BARREL_1_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_GOLD_BARREL_2_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_GOLD_BARREL_3_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_GOLD_BARREL_4_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_DIAMOND_BARREL_1_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_DIAMOND_BARREL_2_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_DIAMOND_BARREL_3_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_DIAMOND_BARREL_4_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_NETHERITE_BARREL_1_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_NETHERITE_BARREL_2_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_NETHERITE_BARREL_3_ITEM.get(), barrelNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.LIMITED_NETHERITE_BARREL_4_ITEM.get(), barrelNbtInterpreter); - - IIngredientSubtypeInterpreter shulkerBoxNbtInterpreter = (itemStack, context) -> { - StringJoiner result = new StringJoiner(","); - StorageBlockItem.getMainColorFromStack(itemStack).ifPresent(mainColor -> result.add("mainColor:" + mainColor)); - StorageBlockItem.getAccentColorFromStack(itemStack).ifPresent(accentColor -> result.add("accentColor:" + accentColor)); - return "{" + result + "}"; - }; - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.COPPER_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.IRON_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.GOLD_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.DIAMOND_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); - registration.registerSubtypeInterpreter(VanillaTypes.ITEM_STACK, ModBlocks.NETHERITE_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); + ISubtypeInterpreter woodStorageNbtInterpreter = new WoodStorageSubtypeInterpreter(); + ISubtypeInterpreter barrelNbtInterpreter = new BarrelSubtypeInterpreter(); + + registration.registerSubtypeInterpreter(ModBlocks.BARREL_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.COPPER_BARREL_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.IRON_BARREL_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.GOLD_BARREL_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.DIAMOND_BARREL_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.NETHERITE_BARREL_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.CHEST_ITEM.get(), woodStorageNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.COPPER_CHEST_ITEM.get(), woodStorageNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.IRON_CHEST_ITEM.get(), woodStorageNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.GOLD_CHEST_ITEM.get(), woodStorageNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.DIAMOND_CHEST_ITEM.get(), woodStorageNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.NETHERITE_CHEST_ITEM.get(), woodStorageNbtInterpreter); + + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_BARREL_1_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_BARREL_2_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_BARREL_3_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_BARREL_4_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_COPPER_BARREL_1_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_COPPER_BARREL_2_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_COPPER_BARREL_3_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_COPPER_BARREL_4_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_IRON_BARREL_1_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_IRON_BARREL_2_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_IRON_BARREL_3_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_IRON_BARREL_4_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_GOLD_BARREL_1_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_GOLD_BARREL_2_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_GOLD_BARREL_3_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_GOLD_BARREL_4_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_DIAMOND_BARREL_1_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_DIAMOND_BARREL_2_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_DIAMOND_BARREL_3_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_DIAMOND_BARREL_4_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_NETHERITE_BARREL_1_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_NETHERITE_BARREL_2_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_NETHERITE_BARREL_3_ITEM.get(), barrelNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.LIMITED_NETHERITE_BARREL_4_ITEM.get(), barrelNbtInterpreter); + + ISubtypeInterpreter shulkerBoxNbtInterpreter = new ShulkerBoxSubtypeInterpreter(); + registration.registerSubtypeInterpreter(ModBlocks.SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.COPPER_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.IRON_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.GOLD_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.DIAMOND_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); + registration.registerSubtypeInterpreter(ModBlocks.NETHERITE_SHULKER_BOX_ITEM.get(), shulkerBoxNbtInterpreter); } @Override diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/BarrelSubtypeInterpreter.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/BarrelSubtypeInterpreter.java new file mode 100644 index 00000000..d7dc2278 --- /dev/null +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/BarrelSubtypeInterpreter.java @@ -0,0 +1,28 @@ +package net.p3pp3rf1y.sophisticatedstorage.compat.jei.subtypes; + +import mezz.jei.api.ingredients.subtypes.UidContext; +import net.minecraft.world.item.ItemStack; +import net.p3pp3rf1y.sophisticatedstorage.item.BarrelBlockItem; +import net.p3pp3rf1y.sophisticatedstorage.item.StorageBlockItem; +import net.p3pp3rf1y.sophisticatedstorage.item.WoodStorageBlockItem; + +import java.util.StringJoiner; + +public class BarrelSubtypeInterpreter extends PropertyBasedSubtypeInterpreter { + public BarrelSubtypeInterpreter() { + addOptionalProperty(WoodStorageBlockItem::getWoodType); + addOptionalProperty(StorageBlockItem::getMainColorFromStack); + addOptionalProperty(StorageBlockItem::getAccentColorFromStack); + addProperty(BarrelBlockItem::isFlatTop); + } + + @Override + public String getLegacyStringSubtypeInfo(ItemStack itemStack, UidContext context) { + StringJoiner result = new StringJoiner(","); + WoodStorageBlockItem.getWoodType(itemStack).ifPresent(woodName -> result.add("woodName:" + woodName)); + StorageBlockItem.getMainColorFromStack(itemStack).ifPresent(mainColor -> result.add("mainColor:" + mainColor)); + StorageBlockItem.getAccentColorFromStack(itemStack).ifPresent(accentColor -> result.add("accentColor:" + accentColor)); + result.add("flatTop:" + BarrelBlockItem.isFlatTop(itemStack)); + return "{" + result + "}"; + } +} diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/PropertyBasedSubtypeInterpreter.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/PropertyBasedSubtypeInterpreter.java new file mode 100644 index 00000000..1a385cd8 --- /dev/null +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/PropertyBasedSubtypeInterpreter.java @@ -0,0 +1,41 @@ +package net.p3pp3rf1y.sophisticatedstorage.compat.jei.subtypes; + +import mezz.jei.api.ingredients.subtypes.ISubtypeInterpreter; +import mezz.jei.api.ingredients.subtypes.UidContext; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.function.Function; + +public abstract class PropertyBasedSubtypeInterpreter implements ISubtypeInterpreter { + private final List> propertyGetters = new ArrayList<>(); + + protected void addOptionalProperty(Function> propertyGetter) { + Function nullableGetter = propertyGetter.andThen(i -> i.orElse(null)); + this.propertyGetters.add(nullableGetter); + } + + protected void addProperty(Function propertyGetter) { + this.propertyGetters.add(propertyGetter); + } + + @Override + public final @Nullable Object getSubtypeData(ItemStack ingredient, UidContext context) { + boolean allNulls = true; + List<@Nullable Object> results = new ArrayList<>(propertyGetters.size()); + for (Function propertyGetter : propertyGetters) { + @Nullable Object value = propertyGetter.apply(ingredient); + if (value != null) { + allNulls = false; + } + results.add(value); + } + if (allNulls) { + return null; + } + return results; + } +} diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/ShulkerBoxSubtypeInterpreter.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/ShulkerBoxSubtypeInterpreter.java new file mode 100644 index 00000000..14d09593 --- /dev/null +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/ShulkerBoxSubtypeInterpreter.java @@ -0,0 +1,22 @@ +package net.p3pp3rf1y.sophisticatedstorage.compat.jei.subtypes; + +import mezz.jei.api.ingredients.subtypes.UidContext; +import net.minecraft.world.item.ItemStack; +import net.p3pp3rf1y.sophisticatedstorage.item.StorageBlockItem; + +import java.util.StringJoiner; + +public class ShulkerBoxSubtypeInterpreter extends PropertyBasedSubtypeInterpreter { + public ShulkerBoxSubtypeInterpreter() { + addOptionalProperty(StorageBlockItem::getMainColorFromStack); + addOptionalProperty(StorageBlockItem::getAccentColorFromStack); + } + + @Override + public String getLegacyStringSubtypeInfo(ItemStack itemStack, UidContext context) { + StringJoiner result = new StringJoiner(","); + StorageBlockItem.getMainColorFromStack(itemStack).ifPresent(mainColor -> result.add("mainColor:" + mainColor)); + StorageBlockItem.getAccentColorFromStack(itemStack).ifPresent(accentColor -> result.add("accentColor:" + accentColor)); + return "{" + result + "}"; + } +} diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/WoodStorageSubtypeInterpreter.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/WoodStorageSubtypeInterpreter.java new file mode 100644 index 00000000..4164293c --- /dev/null +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/WoodStorageSubtypeInterpreter.java @@ -0,0 +1,25 @@ +package net.p3pp3rf1y.sophisticatedstorage.compat.jei.subtypes; + +import mezz.jei.api.ingredients.subtypes.UidContext; +import net.minecraft.world.item.ItemStack; +import net.p3pp3rf1y.sophisticatedstorage.item.StorageBlockItem; +import net.p3pp3rf1y.sophisticatedstorage.item.WoodStorageBlockItem; + +import java.util.StringJoiner; + +public class WoodStorageSubtypeInterpreter extends PropertyBasedSubtypeInterpreter { + public WoodStorageSubtypeInterpreter() { + addOptionalProperty(WoodStorageBlockItem::getWoodType); + addOptionalProperty(StorageBlockItem::getMainColorFromStack); + addOptionalProperty(StorageBlockItem::getAccentColorFromStack); + } + + @Override + public String getLegacyStringSubtypeInfo(ItemStack itemStack, UidContext context) { + StringJoiner result = new StringJoiner(","); + WoodStorageBlockItem.getWoodType(itemStack).ifPresent(woodName -> result.add("woodName:" + woodName)); + StorageBlockItem.getMainColorFromStack(itemStack).ifPresent(mainColor -> result.add("mainColor:" + mainColor)); + StorageBlockItem.getAccentColorFromStack(itemStack).ifPresent(accentColor -> result.add("accentColor:" + accentColor)); + return "{" + result + "}"; + } +} diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/package-info.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/package-info.java new file mode 100644 index 00000000..a513596b --- /dev/null +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/compat/jei/subtypes/package-info.java @@ -0,0 +1,8 @@ +// Auto generated package-info by MCP + +@ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault +package net.p3pp3rf1y.sophisticatedstorage.compat.jei.subtypes; + +import net.minecraft.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml index dcb72abf..70725da6 100644 --- a/src/main/templates/META-INF/neoforge.mods.toml +++ b/src/main/templates/META-INF/neoforge.mods.toml @@ -24,6 +24,13 @@ versionRange="${sc_version}" ordering="NONE" side="BOTH" +[[dependencies.${mod_id}]] +modId="jei" +type="optional" +versionRange="${jei_version_range}" +ordering="NONE" +side="CLIENT" + [[dependencies.${mod_id}]] modId="neoforge" type="required"