diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f8c8c5b5c..875b35587 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -42,6 +42,10 @@ Valid examples are: - `fix/GH-123/add-branch-linting` - `docs/GH-123/cleanup` +## Translations + +If you want to contribute to the translations of this project, please use [Crowdin](https://crowdin.com/project/refined-storage-2). + ## Versioning This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 0d3811bd6..247bb242b 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -2,60 +2,59 @@ name: Bug report description: Found a bug or encountered a crash? Please report it here. labels: [ bug ] body: - - type: markdown - attributes: - value: | - Provide a summary of the issue in the title above. - - type: textarea - id: description - attributes: - label: Describe the bug - description: | - Be as detailed as possible. - If applicable, also tell us what you expected to happen instead. - validations: - required: true - - type: textarea - id: reproduce - attributes: - label: How can we reproduce this bug or crash? - description: | - Provide us with steps on how to reproduce this issue. - Try to reproduce the issue with only Refined Storage 2 installed, if possible. - placeholder: | - 1. - 2. - 3. - validations: - required: true - - type: dropdown - id: minecraft - attributes: - label: What Minecraft version is this happening on? - description: | - If your Minecraft version isn't listed here, it means that it isn't supported. In that case, don't create an issue. - options: - - Minecraft 1.19.4 - - Minecraft 1.20.1 - validations: - required: true - - type: input - id: modloader-version - attributes: - label: What Forge or Fabric version is this happening on? - validations: - required: true - - type: input - id: version - attributes: - label: What Refined Storage version is this happening on? - description: | - Ensure that you are using the latest version. - validations: - required: true - - type: textarea - id: logs - attributes: - label: Relevant log output - description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. - render: shell + - type: markdown + attributes: + value: | + Provide a summary of the issue in the title above. + - type: textarea + id: description + attributes: + label: Describe the bug + description: | + Be as detailed as possible. + If applicable, also tell us what you expected to happen instead. + validations: + required: true + - type: textarea + id: reproduce + attributes: + label: How can we reproduce this bug or crash? + description: | + Provide us with steps on how to reproduce this issue. + Try to reproduce the issue with only Refined Storage 2 installed, if possible. + placeholder: | + 1. + 2. + 3. + validations: + required: true + - type: dropdown + id: minecraft + attributes: + label: What Minecraft version is this happening on? + description: | + If your Minecraft version isn't listed here, it means that it isn't supported. In that case, don't create an issue. + options: + - Minecraft 1.20.4 + validations: + required: true + - type: input + id: modloader-version + attributes: + label: What NeoForge or Fabric version is this happening on? + validations: + required: true + - type: input + id: version + attributes: + label: What Refined Storage version is this happening on? + description: | + Ensure that you are using the latest version. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Relevant log output + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: shell diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 268ae06af..bfd3a654c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,5 +8,5 @@ on: types: [ opened, synchronize, reopened ] jobs: build: - uses: refinedmods/refinedarchitect/.github/workflows/build.yml@v0.11.3 + uses: refinedmods/refinedarchitect/.github/workflows/build.yml@v0.11.5 secrets: inherit diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index 196cb28c4..b34ffa667 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -17,7 +17,7 @@ on: type: string jobs: draft: - uses: refinedmods/refinedarchitect/.github/workflows/draft-release.yml@v0.11.3 + uses: refinedmods/refinedarchitect/.github/workflows/draft-release.yml@v0.11.5 with: release-type: ${{ inputs.release-type }} version-number-override: ${{ inputs.version-number-override }} diff --git a/.github/workflows/issue-for-unsupported-version.yml b/.github/workflows/issue-for-unsupported-version.yml index 1fc712916..7aa68ecb9 100644 --- a/.github/workflows/issue-for-unsupported-version.yml +++ b/.github/workflows/issue-for-unsupported-version.yml @@ -4,4 +4,4 @@ on: types: [ labeled, unlabeled, reopened ] jobs: unsupported-labeler: - uses: refinedmods/refinedarchitect/.github/workflows/issue-for-unsupported-version.yml@v0.11.3 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/issue-for-unsupported-version.yml@v0.11.5 \ No newline at end of file diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 48fbf42e4..bd9b29525 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -7,7 +7,7 @@ on: - closed jobs: publish-release: - uses: refinedmods/refinedarchitect/.github/workflows/publish-release.yml@v0.11.3 + uses: refinedmods/refinedarchitect/.github/workflows/publish-release.yml@v0.11.5 secrets: inherit with: project-name: 'Refined Storage' diff --git a/.github/workflows/resolved-issue-locking.yml b/.github/workflows/resolved-issue-locking.yml index 8d3457d78..cbfb9219d 100644 --- a/.github/workflows/resolved-issue-locking.yml +++ b/.github/workflows/resolved-issue-locking.yml @@ -4,4 +4,4 @@ on: - cron: '0 0 * * *' jobs: lock: - uses: refinedmods/refinedarchitect/.github/workflows/resolved-issue-locking.yml@v0.11.3 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/resolved-issue-locking.yml@v0.11.5 \ No newline at end of file diff --git a/.github/workflows/validate-branch-name.yml b/.github/workflows/validate-branch-name.yml index b3852e5b9..7f4ce5e06 100644 --- a/.github/workflows/validate-branch-name.yml +++ b/.github/workflows/validate-branch-name.yml @@ -2,4 +2,4 @@ name: Validate branch name on: [ pull_request ] jobs: validate-branch-name: - uses: refinedmods/refinedarchitect/.github/workflows/validate-branch-name.yml@v0.11.3 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/validate-branch-name.yml@v0.11.5 \ No newline at end of file diff --git a/.github/workflows/validate-changelog.yml b/.github/workflows/validate-changelog.yml index c3f9f04d0..8b90c5051 100644 --- a/.github/workflows/validate-changelog.yml +++ b/.github/workflows/validate-changelog.yml @@ -4,4 +4,4 @@ on: types: [ opened, synchronize, reopened, ready_for_review, labeled, unlabeled ] jobs: validate-changelog: - uses: refinedmods/refinedarchitect/.github/workflows/validate-changelog.yml@v0.11.3 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/validate-changelog.yml@v0.11.5 \ No newline at end of file diff --git a/.github/workflows/validate-commit-messages.yml b/.github/workflows/validate-commit-messages.yml index f08e60096..d8d12de6b 100644 --- a/.github/workflows/validate-commit-messages.yml +++ b/.github/workflows/validate-commit-messages.yml @@ -2,4 +2,4 @@ name: Validate commit messages on: [ pull_request ] jobs: validate-commit-messages: - uses: refinedmods/refinedarchitect/.github/workflows/validate-commit-messages.yml@v0.11.3 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/validate-commit-messages.yml@v0.11.5 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 924b02b7b..ae1892911 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ eclipse/ *.ipr *.iws .idea/ +!.idea/dictionaries/refinedstorage2.xml +!.idea/icon.png out/ /bin/ logs/ diff --git a/.idea/dictionaries/refinedstorage2.xml b/.idea/dictionaries/refinedstorage2.xml new file mode 100644 index 000000000..358caf40a --- /dev/null +++ b/.idea/dictionaries/refinedstorage2.xml @@ -0,0 +1,8 @@ + + + + autocrafting + redstone + + + \ No newline at end of file diff --git a/.idea/icon.png b/.idea/icon.png new file mode 100644 index 000000000..242164c12 Binary files /dev/null and b/.idea/icon.png differ diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e1bfd107..b3603d3cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,28 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [2.0.0-milestone.3.5] - 2024-04-04 + +### Added + +- Security Card +- Fallback Security Card +- Security Manager + +### Changed + +- The permissions for a Security Card must be configured through the card itself, instead of via the Security Manager. +- The Security Card can be bound to other (currently online) players via its GUI. +- The binding of a Security Card can now be cleared. +- The Security Card tooltip and GUI now show whether the permission has been touched/changed in any way. +- As soon as a Security Manager is placed, the storage network will be locked down by default. Start adding Security Cards to allow or deny specific access to players. +- To not lock the entire network by default for players who do not have a matching Security Card, a Fallback Security Card can be used to configure this behavior. +- Smooth scrolling, screen size and max row stretch are no longer Grid-specific settings, but are now global settings. + +### Fixed + +- Wireless Grid name not being correct in the GUI. + ## [2.0.0-milestone.3.4] - 2024-03-16 ### Added @@ -532,7 +554,9 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - The Grid can now use smooth scrolling. - The Grid now has syntax highlighting for the search query. -[Unreleased]: https://github.com/refinedmods/refinedstorage2/compare/v2.0.0-milestone.3.4...HEAD +[Unreleased]: https://github.com/refinedmods/refinedstorage2/compare/v2.0.0-milestone.3.5...HEAD + +[2.0.0-milestone.3.5]: https://github.com/refinedmods/refinedstorage2/compare/v2.0.0-milestone.3.4...v2.0.0-milestone.3.5 [2.0.0-milestone.3.4]: https://github.com/refinedmods/refinedstorage2/compare/v2.0.0-milestone.3.3...v2.0.0-milestone.3.4 diff --git a/README.md b/README.md index 84405d714..c7f8db9c9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

Refined Storage is a mass storage mod for Minecraft that offers the player a network-based storage system, allowing them to store items and fluids on a massively expandable device network.

- [![Build Status](https://github.com/refinedmods/refinedstorage2/actions/workflows/build.yml/badge.svg?branch=develop)](https://github.com/refinedmods/refinedstorage2/actions/workflows/build.yml) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage2&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage2) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage2&metric=coverage)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage2) [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage2&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage2) [![Downloads on CurseForge](http://cf.way2muchnoise.eu/full_243076_downloads.svg)](http://minecraft.curseforge.com/projects/refined-storage) [![Downloads on Modrinth](https://img.shields.io/modrinth/dt/refined-storage?logo=modrinth)](https://modrinth.com/mod/refined-storage) [![Discord](https://img.shields.io/discord/342942776494653441)](https://discordapp.com/invite/VYzsydb) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE.md) + [![Build Status](https://github.com/refinedmods/refinedstorage2/actions/workflows/build.yml/badge.svg?branch=develop)](https://github.com/refinedmods/refinedstorage2/actions/workflows/build.yml) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage2&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage2) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage2&metric=coverage)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage2) [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage2&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage2) [![Crowdin](https://badges.crowdin.net/refined-storage-2/localized.svg)](https://crowdin.com/project/refined-storage-2) [![Downloads on CurseForge](http://cf.way2muchnoise.eu/full_243076_downloads.svg)](http://minecraft.curseforge.com/projects/refined-storage) [![Downloads on Modrinth](https://img.shields.io/modrinth/dt/refined-storage?logo=modrinth)](https://modrinth.com/mod/refined-storage) [![Discord](https://img.shields.io/discord/342942776494653441)](https://discordapp.com/invite/VYzsydb) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE.md) ## About @@ -26,6 +26,7 @@ this mod that allow the player to setup auto-crafting, allowing the crafting of - [Roadmap](https://github.com/refinedmods/refinedstorage2/projects) - [Wiki](https://github.com/refinedmods/refinedstorage2/wiki) - [Refined Mods on GitHub](https://github.com/refinedmods) +- [Crowdin](https://crowdin.com/project/refined-storage-2) - [Javadoc](https://refinedmods.com/javadoc/refinedstorage2) - [Discord](https://discordapp.com/invite/VYzsydb) - [Twitter](https://twitter.com/refinedmods) diff --git a/build.gradle b/build.gradle index 54f67457f..e48c4a030 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,6 @@ enableSonarQube("refinedmods_refinedstorage2") sonarqube { properties { property "sonar.coverage.exclusions", "refinedstorage2-platform-forge/**/*,refinedstorage2-platform-fabric/**/*,refinedstorage2-platform-common/**/*,refinedstorage2-platform-api/**/*" - property "sonar.cpd.exclusions", "refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/integration/recipemod/rei/*,refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/integration/recipemod/rei/*" + property "sonar.cpd.exclusions", "refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/recipemod/rei/*,refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/recipemod/rei/*" } } diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 000000000..638d88a8d --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,128 @@ +project_identifier: refined-storage-2 +commit_message: "chore: update translation %language% from crowdin" +append_commit_message: false +api_key_env: CROWDIN_API_KEY +base_path: . +pull_request_labels: + - skip-changelog +files: + - source: /refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/en_us.json + translation: /refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/%locale_with_underscore%.json + languages_mapping: + locale_with_underscore: + af: af_za + ar: ar_sa + ast: ast_es + az: az_az + ba: ba_ru + be: be_by + bg: bg_bg + br-FR: br_fr + bs: bs_ba + ca: ca_es + cs: cs_cz + cy: cy_gb + da: da_dk + de-AT: de_at + de-CH: de_ch + de: de_de + el: el_gr + en-AU: en_au + en-CA: en_ca + en-GB: en_gb + en-NZ: en_nz + en-PT: en_pt + en-US: en_us + en-ZA: en_za + eo: eo_uy + es-AR: es_ar + es-CL: es_cl + es-ES: es_es + es-MX: es_mx + es-UY: es_uy + es-VE: es_ve + et: et_ee + eu: eu_es + fa: fa_ir + fi: fi_fi + fil: fil_ph + fo: fo_fo + fr-CA: fr_ca + fr: fr_fr + fra-DE: fra_de + fy-NL: fy_nl + ga-IE: ga_ie + gd: gd_gb + gl: gl_es + got: got_de + gv: gv_im + haw: haw_us + he: he_il + hi: hi_in + hr: hr_hr + hu: hu_hu + hy-AM: hy_am + id: id_id + ig: ig_ng + ido: io_en + is: is_is + it: it_it + ja: ja_jp + jbo: jbo_en + ka: ka_ge + kab: kab_kab + kk: kk_kz + kn: kn_in + ko: ko_kr + kw: kw_gb + la-LA: la_va + lb: lb_lu + li: li_li + lol: lol_us + lt: lt_lt + lv: lv_lv + mi: mi_nz + mk: mk_mk + mn: mn_mn + moh: moh_ca + ms: ms_my + mt: mt_mt + nb: nb_no + nds: nds_de + nl-BE: nl_be + nl: nl_nl + nn-NO: nn_no + #no: nn_no + oc: oc_fr + oj: oj_ca + pl: pl_pl + pt-BR: pt_br + pt-PT: pt_pt + qya-AA: qya_aa + ro: ro_ro + ru: ru_ru + sk: sk_sk + sl: sl_si + so: so_so + sq: sq_al + sr: sr_sp + sr-CS: sr_cs + sv-SE: sv_se + ta: ta_in + th: th_th + tl: tl_ph + tlh-AA: tlh_aa + tr: tr_tr + tt-RU: tt_ru + tzl: tzl_tzl + uk: uk_ua + val-ES: val_es + vec: vec_it + vi: vi_vn + yi: yi_de + yo: yo_ng + zh-CN: zh_cn + zh-TW: zh_tw + zh-HK: zh_hk + fur-IT: fur_it + ry: ry_ua \ No newline at end of file diff --git a/refinedstorage2-grid-api/src/main/java/com/refinedmods/refinedstorage2/api/grid/watcher/GridWatcherManagerImpl.java b/refinedstorage2-grid-api/src/main/java/com/refinedmods/refinedstorage2/api/grid/watcher/GridWatcherManagerImpl.java index c86437cab..a5b85402f 100644 --- a/refinedstorage2-grid-api/src/main/java/com/refinedmods/refinedstorage2/api/grid/watcher/GridWatcherManagerImpl.java +++ b/refinedstorage2-grid-api/src/main/java/com/refinedmods/refinedstorage2/api/grid/watcher/GridWatcherManagerImpl.java @@ -31,7 +31,7 @@ public void addWatcher( attach(registration, storageChannel, false); } watchers.put(watcher, registration); - LOGGER.info("Added watcher {}, new count is {}", watcher, watchers.size()); + LOGGER.debug("Added watcher {}, new count is {}", watcher, watchers.size()); } @Override @@ -57,7 +57,7 @@ private void attach( final StorageChannel storageChannel, final boolean replay ) { - LOGGER.info("Attaching {} to {}", registration, storageChannel); + LOGGER.debug("Attaching {} to {}", registration, storageChannel); registration.attach(storageChannel, replay); } @@ -71,17 +71,17 @@ public void removeWatcher(final GridWatcher watcher, @Nullable final StorageChan detach(registration, storageChannel); } watchers.remove(watcher); - LOGGER.info("Removed watcher {}, remaining {}", watcher, watchers.size()); + LOGGER.debug("Removed watcher {}, remaining {}", watcher, watchers.size()); } @Override public void detachAll(final StorageChannel storageChannel) { - LOGGER.info("Detaching {} watchers", watchers.size()); + LOGGER.debug("Detaching {} watchers", watchers.size()); watchers.values().forEach(watcher -> detach(watcher, storageChannel)); } private void detach(final GridWatcherRegistration registration, final StorageChannel storageChannel) { - LOGGER.info("Detaching {} from {}", registration, storageChannel); + LOGGER.debug("Detaching {} from {}", registration, storageChannel); registration.detach(storageChannel); } diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/Network.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/Network.java index a0dba68c0..1eaec0ac4 100644 --- a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/Network.java +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/Network.java @@ -1,7 +1,6 @@ package com.refinedmods.refinedstorage2.api.network; import com.refinedmods.refinedstorage2.api.core.component.ComponentAccessor; -import com.refinedmods.refinedstorage2.api.network.component.NetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import java.util.Set; diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/NetworkComponent.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/NetworkComponent.java similarity index 81% rename from refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/NetworkComponent.java rename to refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/NetworkComponent.java index 1d669a715..6795743a1 100644 --- a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/NetworkComponent.java +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/NetworkComponent.java @@ -1,6 +1,5 @@ -package com.refinedmods.refinedstorage2.api.network.component; +package com.refinedmods.refinedstorage2.api.network; -import com.refinedmods.refinedstorage2.api.network.Network; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import java.util.Set; @@ -10,22 +9,17 @@ @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.1") public interface NetworkComponent { default void onContainerAdded(NetworkNodeContainer container) { - } default void onContainerRemoved(NetworkNodeContainer container) { - } default void onNetworkRemoved() { - } default void onNetworkSplit(Set networks) { - } default void onNetworkMergedWith(Network newMainNetwork) { - } } diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/EnergyNetworkComponent.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/energy/EnergyNetworkComponent.java similarity index 65% rename from refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/EnergyNetworkComponent.java rename to refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/energy/EnergyNetworkComponent.java index c8f6067b3..59f01fd78 100644 --- a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/EnergyNetworkComponent.java +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/energy/EnergyNetworkComponent.java @@ -1,4 +1,6 @@ -package com.refinedmods.refinedstorage2.api.network.component; +package com.refinedmods.refinedstorage2.api.network.energy; + +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import org.apiguardian.api.API; diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/GraphNetworkComponent.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/node/GraphNetworkComponent.java similarity index 89% rename from refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/GraphNetworkComponent.java rename to refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/node/GraphNetworkComponent.java index 3fd9c1071..4da9fa7f0 100644 --- a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/GraphNetworkComponent.java +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/node/GraphNetworkComponent.java @@ -1,5 +1,6 @@ -package com.refinedmods.refinedstorage2.api.network.component; +package com.refinedmods.refinedstorage2.api.network.node; +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import java.util.Set; diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/node/container/NetworkNodeContainer.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/node/container/NetworkNodeContainer.java index 3f7aaf65d..1bbc43a2b 100644 --- a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/node/container/NetworkNodeContainer.java +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/node/container/NetworkNodeContainer.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage2.api.network.node.container; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; import javax.annotation.Nullable; @@ -17,8 +18,7 @@ public interface NetworkNodeContainer { * The key must be kept stable, and must stay the same for the lifetime of the container. * If it changes after adding it into the graph, the container would not be removed from the key index when the * container is removed! - * The container can be queried by - * {@link com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent#getContainer(Object)}. + * The container can be queried by {@link GraphNetworkComponent#getContainer(Object)}. * * @return the key, or null if indexing is not required */ diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/Permission.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/Permission.java new file mode 100644 index 000000000..83d8d54d9 --- /dev/null +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/Permission.java @@ -0,0 +1,7 @@ +package com.refinedmods.refinedstorage2.api.network.security; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +public interface Permission { +} diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityActor.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityActor.java new file mode 100644 index 000000000..07514890c --- /dev/null +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityActor.java @@ -0,0 +1,7 @@ +package com.refinedmods.refinedstorage2.api.network.security; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +public interface SecurityActor { +} diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityDecision.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityDecision.java new file mode 100644 index 000000000..74f0ab94f --- /dev/null +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityDecision.java @@ -0,0 +1,19 @@ +package com.refinedmods.refinedstorage2.api.network.security; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +public enum SecurityDecision { + /** + * Allow the operation. + */ + ALLOW, + /** + * Deny the operation. + */ + DENY, + /** + * Pass the decision to the next {@link SecurityDecisionProvider}. + */ + PASS +} diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityDecisionProvider.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityDecisionProvider.java new file mode 100644 index 000000000..65648e5fc --- /dev/null +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityDecisionProvider.java @@ -0,0 +1,17 @@ +package com.refinedmods.refinedstorage2.api.network.security; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +@FunctionalInterface +public interface SecurityDecisionProvider { + SecurityDecision isAllowed(Permission permission, SecurityActor actor); + + default SecurityDecision isAllowed(Permission permission) { + return SecurityDecision.PASS; + } + + default boolean isActive() { + return true; + } +} diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityNetworkComponent.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityNetworkComponent.java new file mode 100644 index 000000000..fcda6ad8c --- /dev/null +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityNetworkComponent.java @@ -0,0 +1,11 @@ +package com.refinedmods.refinedstorage2.api.network.security; + +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +@FunctionalInterface +public interface SecurityNetworkComponent extends NetworkComponent { + boolean isAllowed(Permission permission, SecurityActor actor); +} diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityPolicy.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityPolicy.java new file mode 100644 index 000000000..fce560a79 --- /dev/null +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityPolicy.java @@ -0,0 +1,15 @@ +package com.refinedmods.refinedstorage2.api.network.security; + +import java.util.Collections; +import java.util.Set; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +public record SecurityPolicy(Set allowedPermissions) { + public static final SecurityPolicy EMPTY = new SecurityPolicy(Collections.emptySet()); + + public boolean isAllowed(final Permission permission) { + return allowedPermissions.contains(permission); + } +} diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/package-info.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/package-info.java similarity index 76% rename from refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/package-info.java rename to refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/package-info.java index 6eb332e32..225161f99 100644 --- a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/package-info.java +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/package-info.java @@ -1,6 +1,6 @@ @ParametersAreNonnullByDefault @FieldsAndMethodsAreNonnullByDefault -package com.refinedmods.refinedstorage2.api.network.component; +package com.refinedmods.refinedstorage2.api.network.security; import com.refinedmods.refinedstorage2.api.core.FieldsAndMethodsAreNonnullByDefault; diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/StorageNetworkComponent.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/storage/StorageNetworkComponent.java similarity index 79% rename from refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/StorageNetworkComponent.java rename to refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/storage/StorageNetworkComponent.java index 80abdd04e..7b6a9ad0d 100644 --- a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/StorageNetworkComponent.java +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/storage/StorageNetworkComponent.java @@ -1,5 +1,6 @@ -package com.refinedmods.refinedstorage2.api.network.component; +package com.refinedmods.refinedstorage2.api.network.storage; +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.TrackedResourceAmount; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; diff --git a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/StorageProvider.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/storage/StorageProvider.java similarity index 94% rename from refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/StorageProvider.java rename to refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/storage/StorageProvider.java index efb73f178..ee7e1cad5 100644 --- a/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/component/StorageProvider.java +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/storage/StorageProvider.java @@ -1,4 +1,4 @@ -package com.refinedmods.refinedstorage2.api.network.component; +package com.refinedmods.refinedstorage2.api.network.storage; import com.refinedmods.refinedstorage2.api.storage.Storage; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/package-info.java b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/storage/package-info.java similarity index 75% rename from refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/package-info.java rename to refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/storage/package-info.java index af8789144..8ed1419ba 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/package-info.java +++ b/refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/storage/package-info.java @@ -1,6 +1,6 @@ @ParametersAreNonnullByDefault @FieldsAndMethodsAreNonnullByDefault -package com.refinedmods.refinedstorage2.api.network.impl.component; +package com.refinedmods.refinedstorage2.api.network.storage; import com.refinedmods.refinedstorage2.api.core.FieldsAndMethodsAreNonnullByDefault; diff --git a/refinedstorage2-network-test/src/main/java/com/refinedmods/refinedstorage2/network/test/NetworkTestExtension.java b/refinedstorage2-network-test/src/main/java/com/refinedmods/refinedstorage2/network/test/NetworkTestExtension.java index 7eabe5bba..96c5afaa1 100644 --- a/refinedstorage2-network-test/src/main/java/com/refinedmods/refinedstorage2/network/test/NetworkTestExtension.java +++ b/refinedstorage2-network-test/src/main/java/com/refinedmods/refinedstorage2/network/test/NetworkTestExtension.java @@ -2,13 +2,13 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.api.network.energy.EnergyStorage; import com.refinedmods.refinedstorage2.api.network.impl.NetworkImpl; import com.refinedmods.refinedstorage2.api.network.impl.energy.EnergyStorageImpl; import com.refinedmods.refinedstorage2.api.network.impl.node.controller.ControllerNetworkNode; import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; import com.refinedmods.refinedstorage2.network.test.nodefactory.NetworkNodeFactory; diff --git a/refinedstorage2-network-test/src/main/java/com/refinedmods/refinedstorage2/network/test/NetworkTestFixtures.java b/refinedstorage2-network-test/src/main/java/com/refinedmods/refinedstorage2/network/test/NetworkTestFixtures.java index c32013a72..71914cc5f 100644 --- a/refinedstorage2-network-test/src/main/java/com/refinedmods/refinedstorage2/network/test/NetworkTestFixtures.java +++ b/refinedstorage2-network-test/src/main/java/com/refinedmods/refinedstorage2/network/test/NetworkTestFixtures.java @@ -2,13 +2,13 @@ import com.refinedmods.refinedstorage2.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.NetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.impl.component.EnergyNetworkComponentImpl; -import com.refinedmods.refinedstorage2.api.network.impl.component.GraphNetworkComponentImpl; -import com.refinedmods.refinedstorage2.api.network.impl.component.StorageNetworkComponentImpl; +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.impl.energy.EnergyNetworkComponentImpl; +import com.refinedmods.refinedstorage2.api.network.impl.node.GraphNetworkComponentImpl; +import com.refinedmods.refinedstorage2.api.network.impl.storage.StorageNetworkComponentImpl; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.list.ResourceListImpl; public final class NetworkTestFixtures { diff --git a/refinedstorage2-network-test/src/test/java/com/refinedmods/refinedstorage2/network/test/NetworkTestExtensionTest.java b/refinedstorage2-network-test/src/test/java/com/refinedmods/refinedstorage2/network/test/NetworkTestExtensionTest.java index 45af0666f..fa703a9b1 100644 --- a/refinedstorage2-network-test/src/test/java/com/refinedmods/refinedstorage2/network/test/NetworkTestExtensionTest.java +++ b/refinedstorage2-network-test/src/test/java/com/refinedmods/refinedstorage2/network/test/NetworkTestExtensionTest.java @@ -1,13 +1,13 @@ package com.refinedmods.refinedstorage2.network.test; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage2.api.network.impl.node.multistorage.MultiStorageNetworkNode; import com.refinedmods.refinedstorage2.api.network.impl.node.storage.StorageNetworkNode; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; import com.refinedmods.refinedstorage2.network.test.nodefactory.AbstractNetworkNodeFactory; import com.refinedmods.refinedstorage2.network.test.nodefactory.MultiStorageNetworkNodeFactory; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkBuilderImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkBuilderImpl.java index 5023859cc..52404150c 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkBuilderImpl.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkBuilderImpl.java @@ -5,7 +5,7 @@ import com.refinedmods.refinedstorage2.api.network.Connections; import com.refinedmods.refinedstorage2.api.network.Network; import com.refinedmods.refinedstorage2.api.network.NetworkBuilder; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkFactory.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkFactory.java index 9cf601583..e03c4d389 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkFactory.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkFactory.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.NetworkComponent; +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; public class NetworkFactory { private final ComponentMapFactory componentMapFactory; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkImpl.java index b9e1378d0..fd14afd8c 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkImpl.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/NetworkImpl.java @@ -3,7 +3,7 @@ import com.refinedmods.refinedstorage2.api.core.component.ComponentMap; import com.refinedmods.refinedstorage2.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.NetworkComponent; +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import java.util.Set; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/EnergyNetworkComponentImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/energy/EnergyNetworkComponentImpl.java similarity index 82% rename from refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/EnergyNetworkComponentImpl.java rename to refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/energy/EnergyNetworkComponentImpl.java index 142afe2c2..e9bfe0a3b 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/EnergyNetworkComponentImpl.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/energy/EnergyNetworkComponentImpl.java @@ -1,9 +1,8 @@ -package com.refinedmods.refinedstorage2.api.network.impl.component; +package com.refinedmods.refinedstorage2.api.network.impl.energy; import com.refinedmods.refinedstorage2.api.core.Action; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.api.network.energy.EnergyStorage; -import com.refinedmods.refinedstorage2.api.network.impl.energy.CompositeEnergyStorage; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; public class EnergyNetworkComponentImpl implements EnergyNetworkComponent { diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/GraphNetworkComponentImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/GraphNetworkComponentImpl.java similarity index 96% rename from refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/GraphNetworkComponentImpl.java rename to refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/GraphNetworkComponentImpl.java index 9ce369dc1..8abdde984 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/GraphNetworkComponentImpl.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/GraphNetworkComponentImpl.java @@ -1,7 +1,7 @@ -package com.refinedmods.refinedstorage2.api.network.impl.component; +package com.refinedmods.refinedstorage2.api.network.impl.node; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import java.util.Collections; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/detector/AbstractDetectorAmountStrategy.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/detector/AbstractDetectorAmountStrategy.java index 0266f5c37..84000d748 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/detector/AbstractDetectorAmountStrategy.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/detector/AbstractDetectorAmountStrategy.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.detector; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; public abstract class AbstractDetectorAmountStrategy implements DetectorAmountStrategy { diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/exporter/ExporterTransferStrategyImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/exporter/ExporterTransferStrategyImpl.java index 587f0201f..086e9250c 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/exporter/ExporterTransferStrategyImpl.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/exporter/ExporterTransferStrategyImpl.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.exporter; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.exporter.ExporterTransferStrategy; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.InsertableStorage; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/externalstorage/ExternalStorageNetworkNode.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/externalstorage/ExternalStorageNetworkNode.java index 6d4d66bb2..7ea8a845b 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/externalstorage/ExternalStorageNetworkNode.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/externalstorage/ExternalStorageNetworkNode.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.externalstorage; -import com.refinedmods.refinedstorage2.api.network.component.StorageProvider; import com.refinedmods.refinedstorage2.api.network.impl.storage.AbstractStorageNetworkNode; import com.refinedmods.refinedstorage2.api.network.node.externalstorage.ExternalStorageProviderFactory; +import com.refinedmods.refinedstorage2.api.network.storage.StorageProvider; import com.refinedmods.refinedstorage2.api.storage.Storage; import com.refinedmods.refinedstorage2.api.storage.external.ExternalStorage; import com.refinedmods.refinedstorage2.api.storage.tracked.TrackedStorageRepository; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/grid/GridNetworkNode.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/grid/GridNetworkNode.java index 255721c6c..1df665710 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/grid/GridNetworkNode.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/grid/GridNetworkNode.java @@ -4,8 +4,8 @@ import com.refinedmods.refinedstorage2.api.grid.watcher.GridWatcherManager; import com.refinedmods.refinedstorage2.api.grid.watcher.GridWatcherManagerImpl; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.storage.AbstractNetworkNode; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.storage.Actor; import javax.annotation.Nullable; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/iface/InterfaceNetworkNode.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/iface/InterfaceNetworkNode.java index 5ebb5580e..95a969da1 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/iface/InterfaceNetworkNode.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/iface/InterfaceNetworkNode.java @@ -1,11 +1,11 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.iface; import com.refinedmods.refinedstorage2.api.core.Action; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.node.externalstorage.ExposedExternalStorage; import com.refinedmods.refinedstorage2.api.network.impl.node.iface.externalstorage.InterfaceExternalStorageProvider; import com.refinedmods.refinedstorage2.api.network.impl.storage.AbstractNetworkNode; import com.refinedmods.refinedstorage2.api.network.node.NetworkNodeActor; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.Storage; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/importer/ImporterTransferStrategyImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/importer/ImporterTransferStrategyImpl.java index eaf157014..bd343045f 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/importer/ImporterTransferStrategyImpl.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/importer/ImporterTransferStrategyImpl.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.importer; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.importer.ImporterTransferStrategy; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.resource.filter.Filter; import com.refinedmods.refinedstorage2.api.storage.Actor; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/multistorage/MultiStorageNetworkNode.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/multistorage/MultiStorageNetworkNode.java index 667f40117..463778f84 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/multistorage/MultiStorageNetworkNode.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/multistorage/MultiStorageNetworkNode.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.multistorage; -import com.refinedmods.refinedstorage2.api.network.component.StorageProvider; import com.refinedmods.refinedstorage2.api.network.impl.storage.AbstractStorageNetworkNode; +import com.refinedmods.refinedstorage2.api.network.storage.StorageProvider; import com.refinedmods.refinedstorage2.api.storage.StateTrackedStorage; import com.refinedmods.refinedstorage2.api.storage.Storage; import com.refinedmods.refinedstorage2.api.storage.StorageState; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/security/SecurityDecisionProviderProxyNetworkNode.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/security/SecurityDecisionProviderProxyNetworkNode.java new file mode 100644 index 000000000..1ab5c878d --- /dev/null +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/security/SecurityDecisionProviderProxyNetworkNode.java @@ -0,0 +1,53 @@ +package com.refinedmods.refinedstorage2.api.network.impl.node.security; + +import com.refinedmods.refinedstorage2.api.network.impl.storage.AbstractNetworkNode; +import com.refinedmods.refinedstorage2.api.network.security.Permission; +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; +import com.refinedmods.refinedstorage2.api.network.security.SecurityDecision; +import com.refinedmods.refinedstorage2.api.network.security.SecurityDecisionProvider; + +import javax.annotation.Nullable; + +public class SecurityDecisionProviderProxyNetworkNode extends AbstractNetworkNode implements SecurityDecisionProvider { + private long energyUsage; + @Nullable + private SecurityDecisionProvider delegate; + + public SecurityDecisionProviderProxyNetworkNode(final long energyUsage) { + this.energyUsage = energyUsage; + } + + public SecurityDecisionProviderProxyNetworkNode(final long energyUsage, final SecurityDecisionProvider delegate) { + this(energyUsage); + this.delegate = delegate; + } + + public void setDelegate(@Nullable final SecurityDecisionProvider delegate) { + this.delegate = delegate; + } + + public void setEnergyUsage(final long energyUsage) { + this.energyUsage = energyUsage; + } + + @Override + public long getEnergyUsage() { + return energyUsage; + } + + @Override + public SecurityDecision isAllowed(final Permission permission, final SecurityActor actor) { + if (delegate == null) { + return SecurityDecision.PASS; + } + return delegate.isAllowed(permission, actor); + } + + @Override + public SecurityDecision isAllowed(final Permission permission) { + if (delegate == null) { + return SecurityDecision.PASS; + } + return delegate.isAllowed(permission); + } +} diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/security/package-info.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/security/package-info.java new file mode 100644 index 000000000..777320ebd --- /dev/null +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/security/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage2.api.network.impl.node.security; + +import com.refinedmods.refinedstorage2.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/storage/StorageNetworkNode.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/storage/StorageNetworkNode.java index 6b0b57a45..ca7e2773f 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/storage/StorageNetworkNode.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/storage/StorageNetworkNode.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.storage; -import com.refinedmods.refinedstorage2.api.network.component.StorageProvider; import com.refinedmods.refinedstorage2.api.network.impl.storage.AbstractStorageNetworkNode; +import com.refinedmods.refinedstorage2.api.network.storage.StorageProvider; import com.refinedmods.refinedstorage2.api.storage.Storage; import javax.annotation.Nullable; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityDecisionProviderImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityDecisionProviderImpl.java new file mode 100644 index 000000000..006dc6e91 --- /dev/null +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityDecisionProviderImpl.java @@ -0,0 +1,52 @@ +package com.refinedmods.refinedstorage2.api.network.impl.security; + +import com.refinedmods.refinedstorage2.api.network.security.Permission; +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; +import com.refinedmods.refinedstorage2.api.network.security.SecurityDecision; +import com.refinedmods.refinedstorage2.api.network.security.SecurityDecisionProvider; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; + +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nullable; + +public class SecurityDecisionProviderImpl implements SecurityDecisionProvider { + private final Map policyByActor = new HashMap<>(); + @Nullable + private SecurityPolicy defaultPolicy; + + public SecurityDecisionProviderImpl setPolicy(final SecurityActor actor, final SecurityPolicy policy) { + policyByActor.put(actor, policy); + return this; + } + + public SecurityDecisionProviderImpl setDefaultPolicy(@Nullable final SecurityPolicy policy) { + this.defaultPolicy = policy; + return this; + } + + public void clearPolicies() { + policyByActor.clear(); + } + + @Override + public SecurityDecision isAllowed(final Permission permission, final SecurityActor actor) { + final SecurityPolicy policy = policyByActor.get(actor); + if (policy == null) { + return SecurityDecision.PASS; + } + return allowOrDeny(policy.isAllowed(permission)); + } + + @Override + public SecurityDecision isAllowed(final Permission permission) { + if (defaultPolicy == null) { + return SecurityDecision.PASS; + } + return allowOrDeny(defaultPolicy.isAllowed(permission)); + } + + private static SecurityDecision allowOrDeny(final boolean allowed) { + return allowed ? SecurityDecision.ALLOW : SecurityDecision.DENY; + } +} diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityNetworkComponentImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityNetworkComponentImpl.java new file mode 100644 index 000000000..1b3eceeb0 --- /dev/null +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityNetworkComponentImpl.java @@ -0,0 +1,70 @@ +package com.refinedmods.refinedstorage2.api.network.impl.security; + +import com.refinedmods.refinedstorage2.api.core.CoreValidations; +import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; +import com.refinedmods.refinedstorage2.api.network.security.Permission; +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; +import com.refinedmods.refinedstorage2.api.network.security.SecurityDecision; +import com.refinedmods.refinedstorage2.api.network.security.SecurityDecisionProvider; +import com.refinedmods.refinedstorage2.api.network.security.SecurityNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; + +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.stream.Collectors; + +public class SecurityNetworkComponentImpl implements SecurityNetworkComponent { + private final Set providers = new LinkedHashSet<>(); + private final SecurityPolicy defaultPolicy; + + public SecurityNetworkComponentImpl(final SecurityPolicy defaultPolicy) { + this.defaultPolicy = defaultPolicy; + } + + @Override + public void onContainerAdded(final NetworkNodeContainer container) { + if (container.getNode() instanceof SecurityDecisionProvider provider) { + providers.add(provider); + } + } + + @Override + public void onContainerRemoved(final NetworkNodeContainer container) { + if (container.getNode() instanceof SecurityDecisionProvider provider) { + providers.remove(provider); + } + } + + @Override + public boolean isAllowed(final Permission permission, final SecurityActor actor) { + final Set activeProviders = providers.stream() + .filter(SecurityDecisionProvider::isActive) + .collect(Collectors.toSet()); + if (activeProviders.isEmpty()) { + return defaultPolicy.isAllowed(permission); + } + final Set decisions = activeProviders.stream().map(provider -> + CoreValidations.validateNotNull(provider.isAllowed(permission, actor), "Decision cannot be null") + ).collect(Collectors.toSet()); + final boolean anyDenied = decisions.stream().anyMatch(decision -> decision == SecurityDecision.DENY); + if (anyDenied) { + return false; + } + final boolean anyAllowed = decisions.stream().anyMatch(decision -> decision == SecurityDecision.ALLOW); + if (anyAllowed) { + return true; + } + return tryFallback(permission, activeProviders); + } + + private boolean tryFallback(final Permission permission, final Set activeProviders) { + final Set decisions = activeProviders.stream().map(provider -> + CoreValidations.validateNotNull(provider.isAllowed(permission), "Decision cannot be null") + ).collect(Collectors.toSet()); + final boolean anyDenied = decisions.stream().anyMatch(decision -> decision == SecurityDecision.DENY); + if (anyDenied) { + return false; + } + return decisions.stream().anyMatch(decision -> decision == SecurityDecision.ALLOW); + } +} diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/package-info.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/package-info.java new file mode 100644 index 000000000..ea536fa20 --- /dev/null +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage2.api.network.impl.security; + +import com.refinedmods.refinedstorage2.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/AbstractNetworkNode.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/AbstractNetworkNode.java index 8a6955d77..62668a51e 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/AbstractNetworkNode.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/AbstractNetworkNode.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl.storage; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; import javax.annotation.Nullable; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/AbstractStorageNetworkNode.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/AbstractStorageNetworkNode.java index 3712bbe59..695e0a26f 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/AbstractStorageNetworkNode.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/AbstractStorageNetworkNode.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage2.api.network.impl.storage; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.resource.filter.Filter; import com.refinedmods.refinedstorage2.api.resource.filter.FilterMode; diff --git a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/StorageNetworkComponentImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/StorageNetworkComponentImpl.java similarity index 88% rename from refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/StorageNetworkComponentImpl.java rename to refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/StorageNetworkComponentImpl.java index 27f9c57a3..6e25cc557 100644 --- a/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/component/StorageNetworkComponentImpl.java +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/storage/StorageNetworkComponentImpl.java @@ -1,8 +1,8 @@ -package com.refinedmods.refinedstorage2.api.network.impl.component; +package com.refinedmods.refinedstorage2.api.network.impl.storage; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.StorageProvider; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageProvider; import com.refinedmods.refinedstorage2.api.resource.list.ResourceList; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.Storage; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/AbstractNetworkBuilderImplTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/AbstractNetworkBuilderImplTest.java index 756321467..7baf1d54b 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/AbstractNetworkBuilderImplTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/AbstractNetworkBuilderImplTest.java @@ -3,7 +3,7 @@ import com.refinedmods.refinedstorage2.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage2.api.network.Network; import com.refinedmods.refinedstorage2.api.network.NetworkBuilder; -import com.refinedmods.refinedstorage2.api.network.component.NetworkComponent; +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import com.refinedmods.refinedstorage2.network.test.NetworkTestFixtures; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/InitializeNetworkBuilderImplTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/InitializeNetworkBuilderImplTest.java index 76f4d1e9a..4fdfe747f 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/InitializeNetworkBuilderImplTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/InitializeNetworkBuilderImplTest.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import org.junit.jupiter.api.Test; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/RemoveNetworkBuilderImplTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/RemoveNetworkBuilderImplTest.java index 16aeb3b0d..d83d71a2a 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/RemoveNetworkBuilderImplTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/RemoveNetworkBuilderImplTest.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import java.util.List; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/UpdateNetworkBuilderImplTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/UpdateNetworkBuilderImplTest.java index deba09825..bfa4da26f 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/UpdateNetworkBuilderImplTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/UpdateNetworkBuilderImplTest.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import java.util.Set; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/component/EnergyNetworkComponentImplTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/energy/EnergyNetworkComponentImplTest.java similarity index 92% rename from refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/component/EnergyNetworkComponentImplTest.java rename to refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/energy/EnergyNetworkComponentImplTest.java index 784282354..e7ca16904 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/component/EnergyNetworkComponentImplTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/energy/EnergyNetworkComponentImplTest.java @@ -1,8 +1,7 @@ -package com.refinedmods.refinedstorage2.api.network.impl.component; +package com.refinedmods.refinedstorage2.api.network.impl.energy; import com.refinedmods.refinedstorage2.api.core.Action; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.impl.energy.EnergyStorageImpl; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.node.controller.ControllerNetworkNode; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/component/GraphNetworkComponentImplTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/GraphNetworkComponentImplTest.java similarity index 97% rename from refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/component/GraphNetworkComponentImplTest.java rename to refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/GraphNetworkComponentImplTest.java index 901e04bb8..b577f37c2 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/component/GraphNetworkComponentImplTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/GraphNetworkComponentImplTest.java @@ -1,8 +1,7 @@ -package com.refinedmods.refinedstorage2.api.network.impl.component; +package com.refinedmods.refinedstorage2.api.network.impl.node; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.NetworkImpl; -import com.refinedmods.refinedstorage2.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; import com.refinedmods.refinedstorage2.network.test.NetworkTestFixtures; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/SimpleNetworkNodeTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/SimpleNetworkNodeTest.java index 2adab7ad3..cb3d53eb9 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/SimpleNetworkNodeTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/SimpleNetworkNodeTest.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage2.api.network.impl.node; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.network.test.AddNetworkNode; import com.refinedmods.refinedstorage2.network.test.InjectNetworkEnergyComponent; import com.refinedmods.refinedstorage2.network.test.NetworkTest; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java index e8f24c153..e36a0c7f9 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.exporter; import com.refinedmods.refinedstorage2.api.core.Action; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.exporter.ExporterTransferStrategy; import com.refinedmods.refinedstorage2.api.network.node.task.TaskExecutor; import com.refinedmods.refinedstorage2.api.resource.ResourceAmount; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/iface/InterfaceNetworkNodeTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/iface/InterfaceNetworkNodeTest.java index 3e995a5ca..7365d7687 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/iface/InterfaceNetworkNodeTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/iface/InterfaceNetworkNodeTest.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.iface; import com.refinedmods.refinedstorage2.api.core.Action; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceAmount; import com.refinedmods.refinedstorage2.api.storage.EmptyActor; import com.refinedmods.refinedstorage2.api.storage.InMemoryStorageImpl; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/importer/ImporterNetworkNodeTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/importer/ImporterNetworkNodeTest.java index 870b03c00..03e491b57 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/importer/ImporterNetworkNodeTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/node/importer/ImporterNetworkNodeTest.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.api.network.impl.node.importer; import com.refinedmods.refinedstorage2.api.core.Action; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.importer.ImporterTransferStrategy; import com.refinedmods.refinedstorage2.api.resource.ResourceAmount; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityNetworkComponentImplTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityNetworkComponentImplTest.java new file mode 100644 index 000000000..596534a0c --- /dev/null +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityNetworkComponentImplTest.java @@ -0,0 +1,204 @@ +package com.refinedmods.refinedstorage2.api.network.impl.security; + +import com.refinedmods.refinedstorage2.api.network.impl.node.security.SecurityDecisionProviderProxyNetworkNode; +import com.refinedmods.refinedstorage2.api.network.security.Permission; +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; +import com.refinedmods.refinedstorage2.api.network.security.SecurityDecisionProvider; +import com.refinedmods.refinedstorage2.api.network.security.SecurityNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; + +import java.util.Set; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class SecurityNetworkComponentImplTest { + SecurityNetworkComponent sut; + SecurityDecisionProviderImpl securityDecisionProvider; + SecurityDecisionProviderProxyNetworkNode node; + + @BeforeEach + void setUp() { + sut = new SecurityNetworkComponentImpl(policy(TestPermissions.ALLOW_BY_DEFAULT)); + securityDecisionProvider = new SecurityDecisionProviderImpl(); + node = createNode(securityDecisionProvider); + } + + @Test + void shouldUseDefaultPolicyIfNoSecurityDecisionProvidersArePresent() { + // Act & assert + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.A)).isFalse(); + + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.B)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.B)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.B)).isFalse(); + } + + @Test + void shouldDenyAllIfAtLeastOneSecurityDecisionProviderIsPresent() { + // Arrange + sut.onContainerAdded(() -> node); + + // Act & assert + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.A)).isFalse(); + + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.B)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.B)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.B)).isFalse(); + } + + @Test + void shouldUseDefaultPolicyIfAllSecurityDecisionProvidersAreInactive() { + // Arrange + sut.onContainerAdded(() -> createNode(new SecurityDecisionProviderImpl() + .setDefaultPolicy(policy(TestPermissions.OTHER)), false)); + + // Act & assert + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.A)).isFalse(); + + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.B)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.B)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.B)).isFalse(); + } + + @Test + void shouldAllowOrDeny() { + // Arrange + securityDecisionProvider.setPolicy(TestActors.A, policy(TestPermissions.OTHER)); + sut.onContainerAdded(() -> node); + + // Act & assert + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.A)).isFalse(); + + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.B)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.B)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.B)).isFalse(); + } + + @Test + void shouldOnlyAllowIfAllSecurityDecisionProvidersAllow() { + // Arrange + sut.onContainerAdded(() -> createNode(new SecurityDecisionProviderImpl() + .setPolicy(TestActors.A, policy(TestPermissions.OTHER)) + )); + + sut.onContainerAdded(() -> createNode(new SecurityDecisionProviderImpl() + .setPolicy(TestActors.A, policy(TestPermissions.OTHER2)) + )); + + sut.onContainerAdded(() -> createNode(new SecurityDecisionProviderImpl() + .setPolicy(TestActors.B, policy(TestPermissions.OTHER)) + )); + + sut.onContainerAdded(() -> createNode(new SecurityDecisionProviderImpl() + .setPolicy(TestActors.A, policy(TestPermissions.ALLOW_BY_DEFAULT)) + .setDefaultPolicy(policy(TestPermissions.OTHER, TestPermissions.OTHER2)), false)); + + // Act & assert + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.A)).isFalse(); + + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.B)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.B)).isFalse(); + + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.C)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.C)).isFalse(); + } + + @Test + void shouldUseDefaultPolicyOfSecurityDecisionProviderIfAllProvidersPassDecision() { + // Arrange + sut.onContainerAdded(() -> createNode(new SecurityDecisionProviderImpl() + .setPolicy(TestActors.A, policy(TestPermissions.OTHER)) + .setDefaultPolicy(policy(TestPermissions.ALLOW_BY_DEFAULT)) + )); + + sut.onContainerAdded(() -> createNode(new SecurityDecisionProviderImpl() + .setPolicy(TestActors.A, policy(TestPermissions.OTHER)) + .setDefaultPolicy(policy(TestPermissions.ALLOW_BY_DEFAULT, TestPermissions.OTHER2)) + )); + + sut.onContainerAdded(() -> createNode(new SecurityDecisionProviderImpl() + .setPolicy(TestActors.C, policy(TestPermissions.OTHER)) + )); + + // Act & assert + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.A)).isFalse(); + + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.B)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.B)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.B)).isFalse(); + + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.C)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.C)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.C)).isFalse(); + } + + @Test + void shouldRemoveContainer() { + // Arrange + sut.onContainerAdded(() -> createNode(new SecurityDecisionProviderImpl() + .setDefaultPolicy(policy(TestPermissions.ALLOW_BY_DEFAULT)) + )); + + final var removedNode = createNode(new SecurityDecisionProviderImpl() + .setDefaultPolicy(policy(TestPermissions.OTHER))); + sut.onContainerAdded(() -> removedNode); + + // Act + sut.onContainerRemoved(() -> removedNode); + + // Assert + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isTrue(); + } + + @Test + void shouldClearPolicies() { + // Arrange + sut.onContainerAdded(() -> node); + securityDecisionProvider.setPolicy(TestActors.A, policy(TestPermissions.OTHER)); + securityDecisionProvider.setDefaultPolicy(policy(TestPermissions.OTHER2)); + + // Act + securityDecisionProvider.clearPolicies(); + + // Assert + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.A)).isTrue(); + } + + private static SecurityDecisionProviderProxyNetworkNode createNode(final SecurityDecisionProvider provider) { + return createNode(provider, true); + } + + private static SecurityDecisionProviderProxyNetworkNode createNode(final SecurityDecisionProvider provider, + final boolean active) { + final var node = new SecurityDecisionProviderProxyNetworkNode(0, provider); + node.setActive(active); + return node; + } + + enum TestPermissions implements Permission { + ALLOW_BY_DEFAULT, OTHER, OTHER2 + } + + enum TestActors implements SecurityActor { + A, B, C + } + + private SecurityPolicy policy(final Permission... permissions) { + return new SecurityPolicy(Set.of(permissions)); + } +} diff --git a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/component/StorageNetworkComponentImplTest.java b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/storage/StorageNetworkComponentImplTest.java similarity index 96% rename from refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/component/StorageNetworkComponentImplTest.java rename to refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/storage/StorageNetworkComponentImplTest.java index c4720c52e..0e8246008 100644 --- a/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/component/StorageNetworkComponentImplTest.java +++ b/refinedstorage2-network/src/test/java/com/refinedmods/refinedstorage2/api/network/impl/storage/StorageNetworkComponentImplTest.java @@ -1,10 +1,10 @@ -package com.refinedmods.refinedstorage2.api.network.impl.component; +package com.refinedmods.refinedstorage2.api.network.impl.storage; import com.refinedmods.refinedstorage2.api.core.Action; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.NetworkImpl; import com.refinedmods.refinedstorage2.api.network.impl.node.storage.StorageNetworkNode; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceAmount; import com.refinedmods.refinedstorage2.api.resource.list.ResourceListImpl; import com.refinedmods.refinedstorage2.api.storage.EmptyActor; diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/PlatformApi.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/PlatformApi.java index 74ce585f4..a0414004d 100644 --- a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/PlatformApi.java +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/PlatformApi.java @@ -2,8 +2,9 @@ import com.refinedmods.refinedstorage2.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.NetworkComponent; +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import com.refinedmods.refinedstorage2.api.network.energy.EnergyStorage; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.platform.api.constructordestructor.ConstructorStrategyFactory; import com.refinedmods.refinedstorage2.platform.api.constructordestructor.DestructorStrategyFactory; @@ -20,6 +21,8 @@ import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridScrollingStrategyFactory; import com.refinedmods.refinedstorage2.platform.api.importer.ImporterTransferStrategyFactory; import com.refinedmods.refinedstorage2.platform.api.recipemod.IngredientConverter; +import com.refinedmods.refinedstorage2.platform.api.security.BuiltinPermissions; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; import com.refinedmods.refinedstorage2.platform.api.storage.StorageContainerItemHelper; import com.refinedmods.refinedstorage2.platform.api.storage.StorageRepository; import com.refinedmods.refinedstorage2.platform.api.storage.StorageType; @@ -44,8 +47,10 @@ import java.util.Optional; import java.util.Set; +import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -53,6 +58,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; import org.apiguardian.api.API; @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.0") @@ -91,8 +97,6 @@ public interface PlatformApi { StorageMonitorInsertionStrategy getStorageMonitorInsertionStrategy(); - MutableComponent createTranslation(String category, String value, Object... args); - ComponentMapFactory getNetworkComponentMapFactory(); PlatformRegistry getGridSynchronizerRegistry(); @@ -110,7 +114,7 @@ public interface PlatformApi { void requestNetworkNodeUpdate(PlatformNetworkNodeContainer container, Level level); GridInsertionStrategy createGridInsertionStrategy(AbstractContainerMenu containerMenu, - Player player, + ServerPlayer player, Grid grid); void addGridInsertionStrategyFactory(GridInsertionStrategyFactory insertionStrategyFactory); @@ -120,13 +124,13 @@ GridInsertionStrategy createGridInsertionStrategy(AbstractContainerMenu containe GridInsertionHints getGridInsertionHints(); GridExtractionStrategy createGridExtractionStrategy(AbstractContainerMenu containerMenu, - Player player, + ServerPlayer player, Grid grid); void addGridExtractionStrategyFactory(GridExtractionStrategyFactory extractionStrategyFactory); GridScrollingStrategy createGridScrollingStrategy(AbstractContainerMenu containerMenu, - Player player, + ServerPlayer player, Grid grid); void addGridScrollingStrategyFactory(GridScrollingStrategyFactory scrollingStrategyFactory); @@ -180,4 +184,16 @@ EnergyStorage asBlockItemEnergyStorage( SlotReference createInventorySlotReference(Player player, InteractionHand hand); void useNetworkBoundItem(Player player, Item... items); + + BuiltinPermissions getBuiltinPermissions(); + + PlatformRegistry getPermissionRegistry(); + + SecurityPolicy createDefaultSecurityPolicy(); + + void sendNoPermissionToOpenMessage(ServerPlayer player, Component target); + + void sendNoPermissionMessage(ServerPlayer player, Component message); + + boolean canPlaceNetworkNode(ServerPlayer player, Level level, BlockPos pos, BlockState state); } diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/PlatformApiProxy.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/PlatformApiProxy.java index 840eebc04..d67c643f9 100644 --- a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/PlatformApiProxy.java +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/PlatformApiProxy.java @@ -2,8 +2,9 @@ import com.refinedmods.refinedstorage2.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.NetworkComponent; +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import com.refinedmods.refinedstorage2.api.network.energy.EnergyStorage; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.platform.api.constructordestructor.ConstructorStrategyFactory; import com.refinedmods.refinedstorage2.platform.api.constructordestructor.DestructorStrategyFactory; @@ -20,6 +21,8 @@ import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridScrollingStrategyFactory; import com.refinedmods.refinedstorage2.platform.api.importer.ImporterTransferStrategyFactory; import com.refinedmods.refinedstorage2.platform.api.recipemod.IngredientConverter; +import com.refinedmods.refinedstorage2.platform.api.security.BuiltinPermissions; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; import com.refinedmods.refinedstorage2.platform.api.storage.StorageContainerItemHelper; import com.refinedmods.refinedstorage2.platform.api.storage.StorageRepository; import com.refinedmods.refinedstorage2.platform.api.storage.StorageType; @@ -45,8 +48,10 @@ import java.util.Set; import javax.annotation.Nullable; +import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -54,6 +59,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; public class PlatformApiProxy implements PlatformApi { @Nullable @@ -146,11 +152,6 @@ public StorageMonitorInsertionStrategy getStorageMonitorInsertionStrategy() { return ensureLoaded().getStorageMonitorInsertionStrategy(); } - @Override - public MutableComponent createTranslation(final String category, final String value, final Object... args) { - return ensureLoaded().createTranslation(category, value, args); - } - @Override public ComponentMapFactory getNetworkComponentMapFactory() { return ensureLoaded().getNetworkComponentMapFactory(); @@ -195,7 +196,7 @@ public void requestNetworkNodeUpdate(final PlatformNetworkNodeContainer containe @Override public GridInsertionStrategy createGridInsertionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { return ensureLoaded().createGridInsertionStrategy(containerMenu, player, grid); } @@ -217,7 +218,7 @@ public GridInsertionHints getGridInsertionHints() { @Override public GridExtractionStrategy createGridExtractionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { return ensureLoaded().createGridExtractionStrategy(containerMenu, player, grid); } @@ -229,7 +230,7 @@ public void addGridExtractionStrategyFactory(final GridExtractionStrategyFactory @Override public GridScrollingStrategy createGridScrollingStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { return ensureLoaded().createGridScrollingStrategy(containerMenu, player, grid); } @@ -357,6 +358,39 @@ public void useNetworkBoundItem(final Player player, final Item... items) { ensureLoaded().useNetworkBoundItem(player, items); } + @Override + public BuiltinPermissions getBuiltinPermissions() { + return ensureLoaded().getBuiltinPermissions(); + } + + @Override + public PlatformRegistry getPermissionRegistry() { + return ensureLoaded().getPermissionRegistry(); + } + + @Override + public SecurityPolicy createDefaultSecurityPolicy() { + return ensureLoaded().createDefaultSecurityPolicy(); + } + + @Override + public void sendNoPermissionToOpenMessage(final ServerPlayer player, final Component target) { + ensureLoaded().sendNoPermissionToOpenMessage(player, target); + } + + @Override + public void sendNoPermissionMessage(final ServerPlayer player, final Component message) { + ensureLoaded().sendNoPermissionMessage(player, message); + } + + @Override + public boolean canPlaceNetworkNode(final ServerPlayer player, + final Level level, + final BlockPos pos, + final BlockState state) { + return ensureLoaded().canPlaceNetworkNode(player, level, pos, state); + } + private PlatformApi ensureLoaded() { if (delegate == null) { throw new IllegalStateException("Platform API not loaded yet"); diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/Grid.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/Grid.java index c07944903..79a2b36b3 100644 --- a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/Grid.java +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/Grid.java @@ -9,6 +9,7 @@ import java.util.List; +import net.minecraft.server.level.ServerPlayer; import org.apiguardian.api.API; @API(status = API.Status.STABLE, since = "2.0.0-milestone.3.0") @@ -23,5 +24,5 @@ public interface Grid { List getResources(Class actorType); - GridOperations createOperations(ResourceType resourceType, Actor actor); + GridOperations createOperations(ResourceType resourceType, ServerPlayer player); } diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridExtractionStrategyFactory.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridExtractionStrategyFactory.java index 5ed2926fd..5b5a5340a 100644 --- a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridExtractionStrategyFactory.java +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridExtractionStrategyFactory.java @@ -2,12 +2,12 @@ import com.refinedmods.refinedstorage2.platform.api.grid.Grid; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import org.apiguardian.api.API; @API(status = API.Status.STABLE, since = "2.0.0-milestone.2.6") @FunctionalInterface public interface GridExtractionStrategyFactory { - GridExtractionStrategy create(AbstractContainerMenu containerMenu, Player player, Grid grid); + GridExtractionStrategy create(AbstractContainerMenu containerMenu, ServerPlayer player, Grid grid); } diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridInsertionStrategyFactory.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridInsertionStrategyFactory.java index 05594da03..fe11f125a 100644 --- a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridInsertionStrategyFactory.java +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridInsertionStrategyFactory.java @@ -2,12 +2,12 @@ import com.refinedmods.refinedstorage2.platform.api.grid.Grid; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import org.apiguardian.api.API; @API(status = API.Status.STABLE, since = "2.0.0-milestone.2.6") @FunctionalInterface public interface GridInsertionStrategyFactory { - GridInsertionStrategy create(AbstractContainerMenu containerMenu, Player player, Grid grid); + GridInsertionStrategy create(AbstractContainerMenu containerMenu, ServerPlayer player, Grid grid); } diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridScrollingStrategyFactory.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridScrollingStrategyFactory.java index e3638940c..f67268b0d 100644 --- a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridScrollingStrategyFactory.java +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/grid/strategy/GridScrollingStrategyFactory.java @@ -2,12 +2,12 @@ import com.refinedmods.refinedstorage2.platform.api.grid.Grid; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import org.apiguardian.api.API; @API(status = API.Status.STABLE, since = "2.0.0-milestone.2.6") @FunctionalInterface public interface GridScrollingStrategyFactory { - GridScrollingStrategy create(AbstractContainerMenu containerMenu, Player player, Grid grid); + GridScrollingStrategy create(AbstractContainerMenu containerMenu, ServerPlayer player, Grid grid); } diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/BuiltinPermissions.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/BuiltinPermissions.java new file mode 100644 index 000000000..5ff12f708 --- /dev/null +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/BuiltinPermissions.java @@ -0,0 +1,14 @@ +package com.refinedmods.refinedstorage2.platform.api.security; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +public record BuiltinPermissions( + PlatformPermission insert, + PlatformPermission extract, + PlatformPermission autocrafting, + PlatformPermission modify, + PlatformPermission build, + PlatformPermission security +) { +} diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/PlatformPermission.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/PlatformPermission.java new file mode 100644 index 000000000..1f505b106 --- /dev/null +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/PlatformPermission.java @@ -0,0 +1,32 @@ +package com.refinedmods.refinedstorage2.platform.api.security; + +import com.refinedmods.refinedstorage2.api.network.security.Permission; + +import net.minecraft.network.chat.Component; +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +public interface PlatformPermission extends Permission { + /** + * @return the permission name + */ + Component getName(); + + /** + * @return a short description of the permission + */ + Component getDescription(); + + /** + * @return the name of the mod that adds this permission + */ + Component getOwnerName(); + + /** + * Determines whether this permission is allowed by default, when it is not configured (yet) + * in a Security Card. + * + * @return true if this permission is allowed by default, false otherwise + */ + boolean isAllowedByDefault(); +} diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/PlatformSecurityNetworkComponent.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/PlatformSecurityNetworkComponent.java new file mode 100644 index 000000000..3850fd466 --- /dev/null +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/PlatformSecurityNetworkComponent.java @@ -0,0 +1,13 @@ +package com.refinedmods.refinedstorage2.platform.api.security; + +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; +import com.refinedmods.refinedstorage2.api.network.security.Permission; + +import net.minecraft.server.level.ServerPlayer; +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +@FunctionalInterface +public interface PlatformSecurityNetworkComponent extends NetworkComponent { + boolean isAllowed(Permission permission, ServerPlayer player); +} diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/SecurityHelper.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/SecurityHelper.java new file mode 100644 index 000000000..0c4ef5038 --- /dev/null +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/SecurityHelper.java @@ -0,0 +1,24 @@ +package com.refinedmods.refinedstorage2.platform.api.security; + +import com.refinedmods.refinedstorage2.api.network.Network; +import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; +import com.refinedmods.refinedstorage2.api.network.security.Permission; + +import net.minecraft.server.level.ServerPlayer; + +public final class SecurityHelper { + private SecurityHelper() { + } + + public static boolean isAllowed(final ServerPlayer player, final Permission permission, final NetworkNode node) { + final Network network = node.getNetwork(); + if (network == null) { + return false; + } + return isAllowed(player, permission, network); + } + + public static boolean isAllowed(final ServerPlayer player, final Permission permission, final Network network) { + return network.getComponent(PlatformSecurityNetworkComponent.class).isAllowed(permission, player); + } +} diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/SecurityPolicyContainerItem.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/SecurityPolicyContainerItem.java new file mode 100644 index 000000000..d7d417076 --- /dev/null +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/SecurityPolicyContainerItem.java @@ -0,0 +1,33 @@ +package com.refinedmods.refinedstorage2.platform.api.security; + +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; + +import java.util.Optional; + +import net.minecraft.world.item.ItemStack; +import org.apiguardian.api.API; + +/** + * Represents an item that can contain a {@link SecurityPolicy}. Typically, a Security Card. + */ +@API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") +public interface SecurityPolicyContainerItem { + boolean isValid(ItemStack stack); + + Optional getActor(ItemStack stack); + + /** + * Returns a {@link SecurityPolicy} containing all the permissions that this {@link SecurityPolicyContainerItem} + * permits. + * It is important to have all the relevant permissions in the {@link SecurityPolicy}, + * even the ones that are "allowed by default" via {@link PlatformPermission#isAllowedByDefault()}. + * If not, even a permission that is allowed by default will not be allowed. + * + * @param stack the stack + * @return the policy, if present + */ + Optional getPolicy(ItemStack stack); + + long getEnergyUsage(); +} diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/package-info.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/package-info.java new file mode 100644 index 000000000..256520c96 --- /dev/null +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage2.platform.api.security; + +import com.refinedmods.refinedstorage2.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/support/network/PlatformNetworkNodeContainer.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/support/network/PlatformNetworkNodeContainer.java index ec7d815c7..e1151c134 100644 --- a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/support/network/PlatformNetworkNodeContainer.java +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/support/network/PlatformNetworkNodeContainer.java @@ -1,9 +1,12 @@ package com.refinedmods.refinedstorage2.platform.api.support.network; import com.refinedmods.refinedstorage2.api.network.node.container.NetworkNodeContainer; +import com.refinedmods.refinedstorage2.platform.api.PlatformApi; +import com.refinedmods.refinedstorage2.platform.api.security.SecurityHelper; import net.minecraft.core.Direction; import net.minecraft.core.GlobalPos; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import org.apiguardian.api.API; @@ -39,4 +42,8 @@ public interface PlatformNetworkNodeContainer extends NetworkNodeContainer { GlobalPos getContainerPosition(); boolean isContainerRemoved(); + + default boolean canBreakOrRotate(final ServerPlayer player) { + return SecurityHelper.isAllowed(player, PlatformApi.INSTANCE.getBuiltinPermissions().build(), getNode()); + } } diff --git a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/support/registry/PlatformRegistry.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/support/registry/PlatformRegistry.java index 1e179ce6e..29a490e35 100644 --- a/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/support/registry/PlatformRegistry.java +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/support/registry/PlatformRegistry.java @@ -21,11 +21,6 @@ public interface PlatformRegistry { */ void register(ResourceLocation id, T value); - /** - * @return whether if there is any other value, ignoring any default value - */ - boolean isEmpty(); - /** * @param value the value * @return the id of the value, if present @@ -38,11 +33,6 @@ public interface PlatformRegistry { */ Optional get(ResourceLocation id); - /** - * @return the default value - */ - T getDefault(); - /** * @return an unmodifiable list of all values */ @@ -50,16 +40,7 @@ public interface PlatformRegistry { /** * Returns the next value in the ordered list. - * If the value is not found, it will return the default value. - * - * @param value the given value - * @return the next value after the given value - */ - T next(T value); - - /** - * Returns the next value in the ordered list. - * If the value is not found, it will the default value. + * If the value is not found, it will return the first value. * If the value is the last value in the ordered list, it will return null. * * @param value the given value diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/black_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/black_security_manager.json new file mode 100644 index 000000000..8b1b082d0 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/black_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/black", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/black" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/black", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/black", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/blue_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/blue_security_manager.json new file mode 100644 index 000000000..e3e6cf425 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/blue_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/blue", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/blue" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/blue", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/blue", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/brown_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/brown_security_manager.json new file mode 100644 index 000000000..94c2baa51 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/brown_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/brown", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/brown" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/brown", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/brown", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/cyan_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/cyan_security_manager.json new file mode 100644 index 000000000..39a4f2936 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/cyan_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/cyan", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/cyan" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/cyan", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/cyan", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/gray_security_manager.json new file mode 100644 index 000000000..b81f036ca --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/gray_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/gray", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/gray" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/gray", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/gray", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/green_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/green_security_manager.json new file mode 100644 index 000000000..a441897fd --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/green_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/green", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/green" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/green", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/green", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/light_gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/light_gray_security_manager.json new file mode 100644 index 000000000..0d4e1f070 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/light_gray_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/light_gray", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/light_gray" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/light_gray", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/light_gray", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/lime_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/lime_security_manager.json new file mode 100644 index 000000000..1e4b8ecf6 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/lime_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/lime", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/lime" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/lime", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/lime", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/magenta_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/magenta_security_manager.json new file mode 100644 index 000000000..94aa92374 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/magenta_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/magenta", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/magenta" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/magenta", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/magenta", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/orange_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/orange_security_manager.json new file mode 100644 index 000000000..9b0f12848 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/orange_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/orange", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/orange" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/orange", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/orange", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/pink_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/pink_security_manager.json new file mode 100644 index 000000000..07715e635 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/pink_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/pink", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/pink" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/pink", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/pink", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/purple_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/purple_security_manager.json new file mode 100644 index 000000000..1862553e8 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/purple_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/purple", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/purple" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/purple", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/purple", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/red_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/red_security_manager.json new file mode 100644 index 000000000..b9341743d --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/red_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/red", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/red" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/red", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/red", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/security_manager.json new file mode 100644 index 000000000..9bc1d02f9 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/light_blue", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/light_blue" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/light_blue", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/light_blue", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/white_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/white_security_manager.json new file mode 100644 index 000000000..348271d18 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/white_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/white", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/white" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/white", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/white", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/yellow_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/yellow_security_manager.json new file mode 100644 index 000000000..cce362476 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/yellow_security_manager.json @@ -0,0 +1,34 @@ +{ + "variants": { + "active=false,direction=east": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage2:block/security_manager/inactive" + }, + "active=false,direction=south": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 180 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=east": { + "model": "refinedstorage2:block/security_manager/yellow", + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage2:block/security_manager/yellow" + }, + "active=true,direction=south": { + "model": "refinedstorage2:block/security_manager/yellow", + "y": 180 + }, + "active=true,direction=west": { + "model": "refinedstorage2:block/security_manager/yellow", + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/black.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/black.json new file mode 100644 index 000000000..f0e16728a --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/black.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/black", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/black", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/black", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/black", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/black", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/blue.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/blue.json new file mode 100644 index 000000000..84c0ea549 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/blue.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/blue", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/blue", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/blue", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/blue", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/blue", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/brown.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/brown.json new file mode 100644 index 000000000..77150c297 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/brown.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/brown", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/brown", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/brown", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/brown", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/brown", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/cyan.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/cyan.json new file mode 100644 index 000000000..476b8ebc1 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/cyan.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/cyan", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/cyan", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/cyan", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/cyan", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/cyan", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/gray.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/gray.json new file mode 100644 index 000000000..6d098c4e4 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/gray.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/gray", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/gray", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/gray", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/gray", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/gray", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/green.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/green.json new file mode 100644 index 000000000..408f308b8 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/green.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/green", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/green", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/green", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/green", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/green", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/inactive.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/inactive.json new file mode 100644 index 000000000..6ae233e27 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/inactive.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/inactive", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/inactive", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/inactive", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/inactive", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/inactive", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/light_blue.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/light_blue.json new file mode 100644 index 000000000..f8a18ecf9 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/light_blue.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/light_blue", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/light_blue", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/light_blue", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/light_blue", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/light_blue", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/light_gray.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/light_gray.json new file mode 100644 index 000000000..03840489f --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/light_gray.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/light_gray", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/light_gray", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/light_gray", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/light_gray", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/light_gray", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/lime.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/lime.json new file mode 100644 index 000000000..dedd0d204 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/lime.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/lime", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/lime", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/lime", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/lime", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/lime", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/magenta.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/magenta.json new file mode 100644 index 000000000..ed56a5d31 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/magenta.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/magenta", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/magenta", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/magenta", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/magenta", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/magenta", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/orange.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/orange.json new file mode 100644 index 000000000..42d6d1cb4 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/orange.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/orange", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/orange", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/orange", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/orange", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/orange", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/pink.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/pink.json new file mode 100644 index 000000000..5b26e7557 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/pink.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/pink", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/pink", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/pink", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/pink", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/pink", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/purple.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/purple.json new file mode 100644 index 000000000..d079f109b --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/purple.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/purple", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/purple", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/purple", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/purple", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/purple", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/red.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/red.json new file mode 100644 index 000000000..3eb01cbbc --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/red.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/red", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/red", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/red", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/red", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/red", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/white.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/white.json new file mode 100644 index 000000000..9db7a41bb --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/white.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/white", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/white", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/white", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/white", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/white", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/yellow.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/yellow.json new file mode 100644 index 000000000..d82bec405 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/yellow.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage2:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage2:block/bottom", + "cutout_east": "refinedstorage2:block/security_manager/cutouts/right/yellow", + "cutout_north": "refinedstorage2:block/security_manager/cutouts/front/yellow", + "cutout_south": "refinedstorage2:block/security_manager/cutouts/back/yellow", + "cutout_up": "refinedstorage2:block/security_manager/cutouts/top/yellow", + "cutout_west": "refinedstorage2:block/security_manager/cutouts/left/yellow", + "down": "refinedstorage2:block/bottom", + "east": "refinedstorage2:block/security_manager/right", + "north": "refinedstorage2:block/security_manager/front", + "particle": "refinedstorage2:block/security_manager/back", + "south": "refinedstorage2:block/security_manager/back", + "up": "refinedstorage2:block/security_manager/top", + "west": "refinedstorage2:block/security_manager/left" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/black_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/black_security_manager.json new file mode 100644 index 000000000..ee13ead75 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/black_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/black" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/blue_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/blue_security_manager.json new file mode 100644 index 000000000..5b2b172fd --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/blue_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/blue" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/brown_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/brown_security_manager.json new file mode 100644 index 000000000..e4d259faf --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/brown_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/brown" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/cyan_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/cyan_security_manager.json new file mode 100644 index 000000000..d4ac29b94 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/cyan_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/cyan" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/gray_security_manager.json new file mode 100644 index 000000000..f82d44b8a --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/gray_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/gray" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/green_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/green_security_manager.json new file mode 100644 index 000000000..922448244 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/green_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/green" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/light_gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/light_gray_security_manager.json new file mode 100644 index 000000000..3ca73b68d --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/light_gray_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/light_gray" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/lime_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/lime_security_manager.json new file mode 100644 index 000000000..d9a5821ab --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/lime_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/lime" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/magenta_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/magenta_security_manager.json new file mode 100644 index 000000000..b3b6dbfc0 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/magenta_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/magenta" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/orange_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/orange_security_manager.json new file mode 100644 index 000000000..40e80c498 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/orange_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/orange" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/pink_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/pink_security_manager.json new file mode 100644 index 000000000..94f2729d4 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/pink_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/pink" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/purple_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/purple_security_manager.json new file mode 100644 index 000000000..d36ab505b --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/purple_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/purple" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/red_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/red_security_manager.json new file mode 100644 index 000000000..256ec88fc --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/red_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/red" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/security_manager.json new file mode 100644 index 000000000..6d3285847 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/light_blue" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/white_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/white_security_manager.json new file mode 100644 index 000000000..6edd61a27 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/white_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/white" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/yellow_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/yellow_security_manager.json new file mode 100644 index 000000000..e1e4c506f --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/yellow_security_manager.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage2:block/security_manager/yellow" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_cable.json index c2ce00c55..d3db991f0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_constructor.json index 5448c581a..1dd5e8d4b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_controller.json index 40cc99ade..9c61d03da 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_crafting_grid.json index c249a8d00..f63aa8ac7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_destructor.json index 7aa16bd69..084f62c1f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_detector.json index fcd3f2add..647cf0300 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_exporter.json index 8cfac38f6..19461a32b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_external_storage.json index 7a03921a0..b63faf1bc 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_grid.json index 626db107e..dc32ec5e7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_importer.json index 1e5a0ac56..e1e5f246c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_network_receiver.json index c7b33755b..a25c7205b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_network_transmitter.json index d62881c05..b31d9bcc2 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_security_manager.json new file mode 100644 index 000000000..1c8eadbfb --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/black_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/black_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_wireless_transmitter.json index 2f85c7a7c..75467defa 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/black_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_cable.json index da93a6f48..d6ab78505 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_constructor.json index a6e0a1e87..7f14346e2 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_controller.json index aed107af8..eed4ee1ef 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_crafting_grid.json index a87c376f0..7d5bc773a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_destructor.json index 099e7ab5e..10284b92a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_detector.json index 47fd21589..c46103976 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_exporter.json index 5dbb32bca..3293b363d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_external_storage.json index 16629ca31..021e6300b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_grid.json index fcda6e7c9..c43c0b299 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_importer.json index 6abba04c2..6ed2abe77 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_network_receiver.json index 22f8c8709..79acce956 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_network_transmitter.json index 5fb93f8d0..d692e772c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_security_manager.json new file mode 100644 index 000000000..160bfa32b --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/blue_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/blue_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_wireless_transmitter.json index c26a239fa..0297bb91c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/blue_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_cable.json index 4bcfb0045..36eb6d6ff 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_constructor.json index 6de0eeaba..1826b2c6d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_controller.json index 76c1980e9..153a130df 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_crafting_grid.json index a6af02fd1..85633ff2d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_destructor.json index 0d6e4eb47..23445c672 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_detector.json index 55c0146d0..a3badbb5e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_exporter.json index d976e742c..a376591e8 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_external_storage.json index dafedb20b..f32dd9ca8 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_grid.json index 5efdf67ae..b0030066e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_importer.json index acc0ad356..4314c14e9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_network_receiver.json index 2dcce70a1..194e86e3a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_network_transmitter.json index f8472f93e..88736f539 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_security_manager.json new file mode 100644 index 000000000..1b680cccb --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/brown_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/brown_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_wireless_transmitter.json index 9147d3182..163ff2101 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/brown_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_cable.json index 4b87be60f..0302bfb36 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_constructor.json index b0f8d2840..d1ae5f9ea 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_controller.json index b516088e3..db27f5170 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_crafting_grid.json index f418314d8..26cfd294c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_destructor.json index cd9a0d923..6067674d3 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_detector.json index c01a89630..1e09263e9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_exporter.json index fceb13585..60ab95120 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_external_storage.json index 917a4a793..92c1398d8 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_grid.json index c3e274f6f..b091dacfa 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_importer.json index 9b7ce2f8c..8878b3d27 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_network_receiver.json index 5579db0c2..5816a373b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_network_transmitter.json index 212262dfe..1d4f20b4c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_security_manager.json new file mode 100644 index 000000000..dc3fa7712 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/cyan_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/cyan_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_wireless_transmitter.json index 5b6e8dcee..fef581b84 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/cyan_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_cable.json index d3eb34203..70d872141 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_constructor.json index 2b48ccf56..1ec85077d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_controller.json index 09fed3c44..4239623f9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_crafting_grid.json index 42d9c32c7..58e0adb2c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_destructor.json index a1395f1fb..74d9347fb 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_detector.json index 4250150d0..7040db113 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_exporter.json index 97b52adcb..de6223b7d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_external_storage.json index c6e82bd27..1050b7fe6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_grid.json index 56ad56deb..1c5ccba36 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_importer.json index 8650088ef..2c8c3581f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_network_receiver.json index f91f93326..0de56015d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_network_transmitter.json index 003794319..5de9bb735 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_security_manager.json new file mode 100644 index 000000000..8dfa953ea --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/gray_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/gray_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_wireless_transmitter.json index 81b0f4c6f..2a6d0da6b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/gray_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_cable.json index e956c509c..24be1c12e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_constructor.json index e5eec7a04..d3f92385d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_controller.json index 2a728a3e5..9439a48be 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_crafting_grid.json index 0ab2309dc..691ede3dd 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_destructor.json index 3e1f21c65..82e6917cf 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_detector.json index e4d1d6ec0..c19a599cb 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_exporter.json index d0d052e40..3625522a6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_external_storage.json index e8b90603e..d1f361f81 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_grid.json index 11d739cd4..b8f0def56 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_importer.json index e1c605460..6c45f05f1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_network_receiver.json index 4213a221a..0aac86085 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_network_transmitter.json index 5944c16a4..e1c1680dc 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_security_manager.json new file mode 100644 index 000000000..da323c613 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/green_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/green_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_wireless_transmitter.json index b4e0ca28e..49164ba8b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/green_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_cable.json index 8f5bcbcf2..ed91eb4d0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_constructor.json index 540f5e7c3..3396ea2b1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_controller.json index 57138ee09..afc6b1b15 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_crafting_grid.json index a7fe68329..4d8a692d6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_destructor.json index ee5d6913a..071729d51 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_detector.json index bda7c908f..3a7b78639 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_exporter.json index e458a4fb7..4a255bab4 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_external_storage.json index abc3c0138..49a924928 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_grid.json index a545faeb4..610baf8c0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_importer.json index 860b58deb..13a4bc3da 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_network_receiver.json index d1053d126..00638c4ac 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_network_transmitter.json index f194d254d..0ba8c5ccb 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_security_manager.json new file mode 100644 index 000000000..509373708 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/light_blue_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/light_blue_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_wireless_transmitter.json index c7b4ed99b..0750362c6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_blue_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_cable.json index 666af33e4..f2a2ddc6a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_constructor.json index 782ab7ae5..b40e6a001 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_controller.json index 6060e0ed1..2a0344eb4 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_crafting_grid.json index db2fc8eba..1fc9ad612 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_destructor.json index 5d33992c5..f2a798a2d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_detector.json index be4f81bb3..4d554feca 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_exporter.json index e4f023aa1..baa2b23aa 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_external_storage.json index 974296c55..7b9b00cb3 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_grid.json index 2dfa51383..8a5d3f4d4 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_importer.json index 91cf433aa..1229fb09e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_network_receiver.json index 3ddba8f5d..edc0cafe1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_network_transmitter.json index 691df5431..81ee89e5f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_security_manager.json new file mode 100644 index 000000000..be6a18ddb --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/light_gray_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/light_gray_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_wireless_transmitter.json index 5909bc045..bf5c05053 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/light_gray_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_cable.json index c7e42d10f..f036152b7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_constructor.json index ea634b284..af59234ad 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_controller.json index 91d54260d..98a0b48c6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_crafting_grid.json index 0a081c894..e8d644c80 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_destructor.json index 0ef8da2b0..7000778a6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_detector.json index 588d61bf7..059a9cec8 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_exporter.json index 491635053..3a080ef54 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_external_storage.json index d6f916e86..5251287c0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_grid.json index 1af9a55ef..3b644ae8e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_importer.json index 24b9b3c10..c18d8d042 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_network_receiver.json index 4304825b5..13226fa91 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_network_transmitter.json index 27e675c29..8186b4d10 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_security_manager.json new file mode 100644 index 000000000..727c71661 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/lime_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/lime_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_wireless_transmitter.json index 73ca47661..6268dc123 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/lime_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_cable.json index b94c91b41..fabef1c76 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_constructor.json index b88bbea84..1303f9eba 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_controller.json index 1b91de63e..45b19c436 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_crafting_grid.json index 4a3cafa31..e553a097e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_destructor.json index 0b7c84f10..1285cc6ce 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_detector.json index b5c9feb2c..62d44798d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_exporter.json index ee06fd332..400335a10 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_external_storage.json index 87f47602b..19ffa164c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_grid.json index 66d028bea..a9e38b2d0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_importer.json index 730c32126..bf6e0a693 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_network_receiver.json index 6eac125ee..186fdc0e1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_network_transmitter.json index 6cdba8303..99be2e932 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_security_manager.json new file mode 100644 index 000000000..4a1a0ae89 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/magenta_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/magenta_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_wireless_transmitter.json index c75ed2bcc..fea49c827 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/magenta_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_cable.json index 72945e042..0285255cb 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_constructor.json index 61f00552c..32c8ad26c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_controller.json index 1263fd5d9..49c981231 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_crafting_grid.json index fe6ca6b0f..e3539cf72 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_destructor.json index 6cd444479..f5f2a7aa2 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_detector.json index 748706779..0e74d3dc6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_exporter.json index 1a90e567a..b75722db9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_external_storage.json index c7d77e64b..231a43c1a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_grid.json index c0e03af1f..851c33b29 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_importer.json index ae1217e7f..7a61d79f6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_network_receiver.json index a68106768..b431a22cb 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_network_transmitter.json index bcf7a5a24..b5c9fee67 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_security_manager.json new file mode 100644 index 000000000..f53c67264 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/orange_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/orange_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_wireless_transmitter.json index 490111439..cf0d51e26 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/orange_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_cable.json index d30654bfd..075f77bf9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_constructor.json index 38a138e1a..77a35f5e0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_controller.json index 2f9317058..ddcf2b74b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_crafting_grid.json index 0ffcfbb5f..55eafcb5a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_destructor.json index 9ff581aab..c0d6b97e1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_detector.json index 77f463847..bb09f83da 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_exporter.json index 789ab4f22..9b15831dc 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_external_storage.json index 99aae73ee..b8992ae5d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_grid.json index 267a3e7a1..ba5e6b45c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_importer.json index 88bd9162f..7d6ae0423 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_network_receiver.json index 3d4551d03..7f409edd2 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_network_transmitter.json index cbb5dbab7..2a182295a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_security_manager.json new file mode 100644 index 000000000..dc4adf64e --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/pink_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/pink_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_wireless_transmitter.json index 9b36d5e85..74e50c3f3 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/pink_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_cable.json index 02a4a193a..c3f5c4b7c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_constructor.json index b67f655dc..6491e37b5 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_controller.json index a6117bf26..3b99479f9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_crafting_grid.json index 41d2a0d9f..6131d8467 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_destructor.json index de5af634c..1adb6c96a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_detector.json index 64af6ac2e..9bef13044 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_exporter.json index 8f7c72887..97ed5f52b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_external_storage.json index 9289c8dfa..5129f4a43 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_grid.json index 4e5ea53f3..0daf73dc0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_importer.json index 60b172977..32b71ef30 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_network_receiver.json index cf37cb575..53cb7df95 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_network_transmitter.json index aba85fa45..9babbd664 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_security_manager.json new file mode 100644 index 000000000..8fb8d9831 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/purple_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/purple_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_wireless_transmitter.json index 7fbd3a1fa..e82d0ed5d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/purple_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_cable.json index 5f287b2cc..ebdc8bc40 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_constructor.json index ee73bce20..06d07941c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_controller.json index 5f680cce5..dac1b12d5 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_crafting_grid.json index 0adc4a01e..2de8f3d60 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_destructor.json index 711816674..47d2b537c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_detector.json index 98253ce6f..88044470f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_exporter.json index 7ae723b27..b1bda95f9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_external_storage.json index 02809c018..ca6b06064 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_grid.json index 86e8e50cb..20c87df16 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_importer.json index e32ce9456..34b68501b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_network_receiver.json index 7a0d917dd..e19c1aca1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_network_transmitter.json index 178e31944..04ca13c8a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_security_manager.json new file mode 100644 index 000000000..91eb31661 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/red_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/red_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_wireless_transmitter.json index fcd5ba77d..01070f18d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/red_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_cable.json index 0ba766635..a7b1b118a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_constructor.json index bc6e21f0d..ed20df42f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_controller.json index 118fd3bf5..4801f1d09 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_crafting_grid.json index 9ecb9b6dd..86d8d6d4f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_destructor.json index 51ad4bbcf..1b16d153f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_detector.json index 33a26237b..cbcba7a1d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_exporter.json index 27ed7a5b8..44ced3052 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_external_storage.json index d7243cd7b..ef91d74df 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_grid.json index c034d5c54..946abadf9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_importer.json index 33ab1737e..4c4b35fac 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_network_receiver.json index c0d7cf997..d1630ef19 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_network_transmitter.json index e173f3582..36b49b2ae 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_security_manager.json new file mode 100644 index 000000000..cb8ea3ca4 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/white_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/white_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_wireless_transmitter.json index dac38efab..0ae9fd1ec 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/white_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_cable.json index dc8637946..f725523f7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_cable.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_cables", - "has_the_recipe" + "has_the_recipe", + "has_cables" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_cable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_constructor.json index 49fad2a85..93ddb72fa 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_constructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_constructors", - "has_the_recipe" + "has_the_recipe", + "has_constructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_constructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_controller.json index fea864e44..dc7fc6e3f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_controller.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_controllers", - "has_the_recipe" + "has_the_recipe", + "has_controllers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_controller" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_crafting_grid.json index 7ad62c552..793f0105a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_crafting_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_crafting_grids", - "has_the_recipe" + "has_the_recipe", + "has_crafting_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_crafting_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_destructor.json index e700d3ff1..0a1688f8e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_destructor.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_destructors", - "has_the_recipe" + "has_the_recipe", + "has_destructors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_destructor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_detector.json index 4bce6d300..ea594146f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_detector.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_detectors", - "has_the_recipe" + "has_the_recipe", + "has_detectors" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_detector" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_exporter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_exporter.json index aef2ee98d..50b5808ed 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_exporter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_exporter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_exporters", - "has_the_recipe" + "has_the_recipe", + "has_exporters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_exporter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_external_storage.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_external_storage.json index 57927b01a..fa82da1df 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_external_storage.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_external_storage.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_external_storages", - "has_the_recipe" + "has_the_recipe", + "has_external_storages" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_external_storage" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_grid.json index 6fae68308..e1ffee07d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_grid.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_grids", - "has_the_recipe" + "has_the_recipe", + "has_grids" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_grid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_importer.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_importer.json index b24d50eeb..38e632731 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_importer.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_importer.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_importers", - "has_the_recipe" + "has_the_recipe", + "has_importers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_importer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_network_receiver.json index 28300c863..9ef41ddc1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_network_receiver.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_receivers", - "has_the_recipe" + "has_the_recipe", + "has_network_receivers" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_network_receiver" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_network_transmitter.json index 68a1b2078..503197c8b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_network_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_network_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_network_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_network_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_security_manager.json new file mode 100644 index 000000000..3a3b93a86 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_security_manager.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_security_managers": { + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage2:coloring/yellow_security_manager" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_security_managers" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage2:coloring/yellow_security_manager" + ] + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_wireless_transmitter.json index 7441aac81..ced350d20 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_wireless_transmitter.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_wireless_transmitters", - "has_the_recipe" + "has_the_recipe", + "has_wireless_transmitters" ] ], "rewards": { "recipes": [ "refinedstorage2:coloring/yellow_wireless_transmitter" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_cable.json index e2cfdf303..eff94e73f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_constructor.json index 52234d1e6..753922d66 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_controller.json index c3b8bf3b0..01bc58310 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_crafting_grid.json index 15dce14b8..4a80bf7d7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_creative_controller.json index 796ee92a0..d43a40079 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_destructor.json index 2e74ccb8f..3ac5fd96a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_detector.json index ec453b08b..55dca85cf 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_grid.json index 7b3915599..b74138620 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_network_receiver.json index 0ffff7793..2a5a00d4e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_network_transmitter.json index f925deda4..2ce2581b7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_security_manager.json new file mode 100644 index 000000000..4fd9781dd --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:black_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/black_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_wireless_transmitter.json index aac4414b8..71b4c8adb 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_cable.json index 8e60be672..563325194 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_constructor.json index 7337fb0ac..388e5bdc0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_controller.json index 0bbd4161a..390df51b6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_crafting_grid.json index 52b199ebb..1750a90b1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_creative_controller.json index f95ab87ed..64cf2a64e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_destructor.json index 79f923813..e1005c998 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_detector.json index ad0a77e16..acef0289b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_grid.json index ec94cd31f..be447f5c9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_network_receiver.json index dd9a16080..7f7f55aaf 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_network_transmitter.json index 44656ecfa..4b6d5871a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_security_manager.json new file mode 100644 index 000000000..c6b69b0e3 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:blue_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/blue_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_wireless_transmitter.json index 700a5b4d5..376e0aa4b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_cable.json index c0de48a91..0100a7b2c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_constructor.json index cb5beced7..9c07417e5 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_controller.json index 6f7131de0..b01b69478 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_crafting_grid.json index 544eef0d5..ce03dd013 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_creative_controller.json index 7390d4919..06c1cd897 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_destructor.json index d3f32fd39..28591c9e7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_detector.json index 4dcf4fb8f..ceb90498a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_grid.json index 18ad70cc3..a5573be2e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_network_receiver.json index 126e8020a..4968b9168 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_network_transmitter.json index 4e548e328..3196e10e6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_security_manager.json new file mode 100644 index 000000000..316fbf1f7 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:brown_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/brown_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_wireless_transmitter.json index 999709155..e8deea0e8 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cable.json index bc75140b7..b1be9e0da 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/constructor.json index c828c3788..7c2b6d059 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/controller.json index af54b8c3a..c90360d3b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/crafting_grid.json index 64f93b407..c96954927 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/creative_controller.json index dd6f3550e..e4657e54b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_cable.json index 478b80a7d..339b1c487 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_constructor.json index cb8fdf17f..8d0b3bd0a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_controller.json index d892078dc..d67a53588 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_crafting_grid.json index e16bfd020..ed3650356 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_creative_controller.json index 538f397d0..c67540990 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_destructor.json index 372aae582..a78b7a597 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_detector.json index 321be8bf1..aae8bcf1e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_grid.json index 4a05ed59f..f4ef95783 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_network_receiver.json index 09b99f3ff..336cfb96a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_network_transmitter.json index f92f09225..b0ad4ad1f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_security_manager.json new file mode 100644 index 000000000..6e3cd9ddf --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:cyan_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/cyan_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_wireless_transmitter.json index bc519e8f2..ffa5b37d4 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/destructor.json index 66aea6788..daed8dffa 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/detector.json index 505644a67..e49d218e0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_controller.json index 56b7bec33..023383749 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_crafting_grid.json index af754251c..ef824f9e8 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_creative_controller.json index c905f2260..0efaad58a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_detector.json index 066c3ee66..e42e98f0d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_grid.json index 7667ffc26..093482b2c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_network_receiver.json index 0b6fa43d1..391a6546c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_network_transmitter.json index b4ad2b8f3..496d28ea7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_security_manager.json new file mode 100644 index 000000000..d90110b34 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:gray_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/gray_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_wireless_transmitter.json index 57a970c1b..663c4db65 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_cable.json index cddce171f..1b14dae94 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_constructor.json index 73b3c1a9f..1d25fc4b6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_controller.json index c09b4bceb..083a51bc7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_crafting_grid.json index 7386f9e02..a806a35b6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_creative_controller.json index 57082d5a1..a76bf9664 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_destructor.json index b8761d8ec..cd2d9f2f3 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_detector.json index ae5a4b356..bc173e80a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_grid.json index c64bc912b..23f41e9cc 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_network_receiver.json index db633f063..439eb4a2d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_network_transmitter.json index 954149bde..8a9a96cdc 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_security_manager.json new file mode 100644 index 000000000..b63db65e0 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:green_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/green_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_wireless_transmitter.json index fcdf20e4f..4c1dfaff6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/grid.json index ed2c54f9c..20c0277bb 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_cable.json index e938f9347..7491212a7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_constructor.json index 65c0f40a0..32bbf6e2f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_destructor.json index a0d3a4f89..49af40ee0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_blue_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_cable.json index 12085e27a..91b44a8db 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_constructor.json index 239a790f8..156bcec4c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_controller.json index 516f38265..28742125c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_crafting_grid.json index 5807a3694..4aad99ac8 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_creative_controller.json index 3758999fb..e8b44c91a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_destructor.json index a7db33903..72bbe173d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_detector.json index 4fe040506..99971e977 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_grid.json index 08b41c906..cba39f571 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_network_receiver.json index 3e81cc321..fffe0d175 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_network_transmitter.json index 48e4801ea..7c7b2060e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_security_manager.json new file mode 100644 index 000000000..ebf2714e3 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:light_gray_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/light_gray_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_wireless_transmitter.json index 63a18bdc3..05dcfb99a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_cable.json index b801d3d03..e5ba63283 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_constructor.json index 6a2ba44be..5cbc5a8bb 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_controller.json index 5a14808ad..def85bb51 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_crafting_grid.json index 5d9304d3f..3119b1de4 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_creative_controller.json index 54c894202..abda659ee 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_destructor.json index ad178ca74..35204ed7f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_detector.json index 808d8d8b0..4ced33fd0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_grid.json index 78b70f199..f617cf60a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_network_receiver.json index 7e2244265..a77be133b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_network_transmitter.json index eed497cfa..3003ee5ca 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_security_manager.json new file mode 100644 index 000000000..99a7b4554 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:lime_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/lime_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_wireless_transmitter.json index 49c297dc6..e661ef3b1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_cable.json index c17cc4dae..a9925716d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_constructor.json index cf1d4b808..e03d2e406 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_controller.json index 1e6f015e8..d2d6e9785 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_crafting_grid.json index 5919d0f2a..8ec7cedb1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_creative_controller.json index 29fd85f5b..fb9cfcd94 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_destructor.json index 6a1aacd9a..8e461396e 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_detector.json index f1be4a1ab..0dc9901a6 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_grid.json index 7a60d4239..2e8e1464d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_network_receiver.json index eda8e2384..176a955c1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_network_transmitter.json index 15777c802..782b74e49 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_security_manager.json new file mode 100644 index 000000000..3c90dc9c2 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:magenta_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/magenta_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_wireless_transmitter.json index 5694135d2..a63f5a601 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/network_receiver.json index 34a5d8900..47358ed7a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/network_transmitter.json index 80d86c15b..df0825083 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_cable.json index f8a86ba33..5910707d0 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_constructor.json index 054d147b3..22d46c36f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_controller.json index af69c7994..48cc35100 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_crafting_grid.json index 185bb57e6..c9321c88d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_creative_controller.json index c3f2ef813..d027af4b9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_destructor.json index b11ad2b40..19a0e2596 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_detector.json index 53503f347..db1e1ed96 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_grid.json index 44634b606..b011aaecd 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_network_receiver.json index f61f350bd..98722f49f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_network_transmitter.json index 5bab22f68..4c3beee56 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_security_manager.json new file mode 100644 index 000000000..326088094 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:orange_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/orange_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_wireless_transmitter.json index 86becf6e7..e3ef20fc5 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_cable.json index ef42b7fbd..31d0a4961 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_constructor.json index 133ee2c9d..690f0268f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_controller.json index 4b750c25b..af41cdaa9 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_crafting_grid.json index 6a5a11f7a..703b20845 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_creative_controller.json index e8957e2d3..7ab6dbfc7 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_destructor.json index d0123f4cf..40e00870c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_detector.json index ddaffe7b7..895fca408 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_grid.json index 7aca478b3..f39fc6644 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_network_receiver.json index 962eea8de..30297ee72 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_network_transmitter.json index 70c0580c8..46de8d798 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_security_manager.json new file mode 100644 index 000000000..e2ff9bf92 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:pink_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/pink_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_wireless_transmitter.json index 162626eaa..da03da537 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_cable.json index 8eb0d07c2..f96f27896 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_constructor.json index 3e3d8d945..322f8ee65 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_controller.json index cca450e42..8686b8aae 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_crafting_grid.json index a229fb325..e2d0b1a01 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_creative_controller.json index d3859283a..dc8360927 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_destructor.json index 8c39f9ffb..5112e726d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_detector.json index 9b1540893..bbaa5a9cc 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_grid.json index 3531b1eeb..7107b2627 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_network_receiver.json index 59612d49b..ac5c1f0e2 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_network_transmitter.json index 71e632a40..7fb4dd113 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_security_manager.json new file mode 100644 index 000000000..6975ab4da --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:purple_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/purple_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_wireless_transmitter.json index a39f427aa..f3674203f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_cable.json index c47ac0e54..4c23ac676 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_constructor.json index 0a103c014..90122e7c5 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_controller.json index bdd81d2d7..0b9348890 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_crafting_grid.json index 23c3ede51..7246dc446 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_creative_controller.json index 1c47f0137..fc039287a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_destructor.json index 61642d00e..e4a8e5050 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_detector.json index 73081eb78..d394bd026 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_grid.json index 0457f182a..c894a3ca4 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_network_receiver.json index 9019cb58b..fc732590f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_network_transmitter.json index d891359c3..2d253ea54 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_security_manager.json new file mode 100644 index 000000000..989b85699 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:red_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/red_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_wireless_transmitter.json index aaaee6423..a2ebfb507 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/security_manager.json new file mode 100644 index 000000000..b98b0b671 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_cable.json index a7668c676..a748edeac 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_constructor.json index bf11acf4f..5b6a1c86d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_controller.json index 682dd8150..04ae38487 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_crafting_grid.json index 7e0b47cec..6ae9c631a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_creative_controller.json index 0950b095b..927a4cd6c 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_destructor.json index 5f53b01d4..ad803f531 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_detector.json index 04695cf34..d149876b4 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_grid.json index e9e0b79fb..edfd2aba3 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_network_receiver.json index cccc597dc..beab19808 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_network_transmitter.json index 4c1bdc48a..b3407b6b8 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_security_manager.json new file mode 100644 index 000000000..1bb6ac5e7 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:white_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/white_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_wireless_transmitter.json index 0ef3b6fb2..d3cc6214a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/wireless_transmitter.json index 193747431..f86b96a1a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_cable.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_cable.json index 6dd9e5b74..ccebb6c10 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_cable.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_cable.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_constructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_constructor.json index 0003bab4f..72570910d 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_constructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_constructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_controller.json index 3497684bf..351b5d8e1 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "functions": [ { "function": "refinedstorage2:energy" diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_crafting_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_crafting_grid.json index 2336129d9..450c5b703 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_crafting_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_crafting_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_creative_controller.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_creative_controller.json index cbd6769a0..2ee3240be 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_creative_controller.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_creative_controller.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_destructor.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_destructor.json index a6fd2e5a3..cc5abe315 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_destructor.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_destructor.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_detector.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_detector.json index c93c8db28..a0cea357f 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_detector.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_detector.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_grid.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_grid.json index 5e966b46e..4a2960442 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_grid.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_grid.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_network_receiver.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_network_receiver.json index 9aa605850..5dd21ad2a 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_network_receiver.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_network_receiver.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_network_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_network_transmitter.json index 14549c329..b92dc2c60 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_network_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_network_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_security_manager.json new file mode 100644 index 000000000..47f43dbc6 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_security_manager.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage2:yellow_security_manager" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage2:blocks/yellow_security_manager" +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_wireless_transmitter.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_wireless_transmitter.json index a977b9fbb..74fe8195b 100644 --- a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_wireless_transmitter.json +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_wireless_transmitter.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/black_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/black_security_manager.json new file mode 100644 index 000000000..82f2b3780 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/black_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:black_dye" + } + ], + "result": { + "item": "refinedstorage2:black_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/blue_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/blue_security_manager.json new file mode 100644 index 000000000..c5416e72f --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/blue_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:blue_dye" + } + ], + "result": { + "item": "refinedstorage2:blue_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/brown_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/brown_security_manager.json new file mode 100644 index 000000000..287036f5a --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/brown_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:brown_dye" + } + ], + "result": { + "item": "refinedstorage2:brown_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/cyan_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/cyan_security_manager.json new file mode 100644 index 000000000..8f3dd7cc5 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/cyan_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:cyan_dye" + } + ], + "result": { + "item": "refinedstorage2:cyan_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/gray_security_manager.json new file mode 100644 index 000000000..f5926ad95 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/gray_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:gray_dye" + } + ], + "result": { + "item": "refinedstorage2:gray_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/green_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/green_security_manager.json new file mode 100644 index 000000000..5e9f5db34 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/green_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:green_dye" + } + ], + "result": { + "item": "refinedstorage2:green_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/light_blue_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/light_blue_security_manager.json new file mode 100644 index 000000000..d9026e427 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/light_blue_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:light_blue_dye" + } + ], + "result": { + "item": "refinedstorage2:security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/light_gray_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/light_gray_security_manager.json new file mode 100644 index 000000000..8d044e90f --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/light_gray_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:light_gray_dye" + } + ], + "result": { + "item": "refinedstorage2:light_gray_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/lime_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/lime_security_manager.json new file mode 100644 index 000000000..b66210948 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/lime_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:lime_dye" + } + ], + "result": { + "item": "refinedstorage2:lime_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/magenta_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/magenta_security_manager.json new file mode 100644 index 000000000..29a1ef8de --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/magenta_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:magenta_dye" + } + ], + "result": { + "item": "refinedstorage2:magenta_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/orange_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/orange_security_manager.json new file mode 100644 index 000000000..1d1d32708 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/orange_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:orange_dye" + } + ], + "result": { + "item": "refinedstorage2:orange_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/pink_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/pink_security_manager.json new file mode 100644 index 000000000..0730360e5 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/pink_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:pink_dye" + } + ], + "result": { + "item": "refinedstorage2:pink_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/purple_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/purple_security_manager.json new file mode 100644 index 000000000..014bf959a --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/purple_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:purple_dye" + } + ], + "result": { + "item": "refinedstorage2:purple_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/red_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/red_security_manager.json new file mode 100644 index 000000000..5183299ab --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/red_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:red_dye" + } + ], + "result": { + "item": "refinedstorage2:red_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/white_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/white_security_manager.json new file mode 100644 index 000000000..c84fd7abc --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/white_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:white_dye" + } + ], + "result": { + "item": "refinedstorage2:white_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/yellow_security_manager.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/yellow_security_manager.json new file mode 100644 index 000000000..c6a01a55f --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/yellow_security_manager.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "item": "minecraft:yellow_dye" + } + ], + "result": { + "item": "refinedstorage2:yellow_security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/tags/items/security_managers.json b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/tags/items/security_managers.json new file mode 100644 index 000000000..1ad2bddc6 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/tags/items/security_managers.json @@ -0,0 +1,20 @@ +{ + "values": [ + "refinedstorage2:white_security_manager", + "refinedstorage2:orange_security_manager", + "refinedstorage2:magenta_security_manager", + "refinedstorage2:security_manager", + "refinedstorage2:yellow_security_manager", + "refinedstorage2:lime_security_manager", + "refinedstorage2:pink_security_manager", + "refinedstorage2:gray_security_manager", + "refinedstorage2:light_gray_security_manager", + "refinedstorage2:cyan_security_manager", + "refinedstorage2:purple_security_manager", + "refinedstorage2:blue_security_manager", + "refinedstorage2:brown_security_manager", + "refinedstorage2:green_security_manager", + "refinedstorage2:red_security_manager", + "refinedstorage2:black_security_manager" + ] +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/AbstractClientModInitializer.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/AbstractClientModInitializer.java index 87096e77e..8530d48e2 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/AbstractClientModInitializer.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/AbstractClientModInitializer.java @@ -10,6 +10,7 @@ import com.refinedmods.refinedstorage2.platform.common.detector.DetectorScreen; import com.refinedmods.refinedstorage2.platform.common.exporter.ExporterScreen; import com.refinedmods.refinedstorage2.platform.common.grid.GridContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.grid.NoopGridSynchronizer; import com.refinedmods.refinedstorage2.platform.common.grid.WirelessGridContainerMenu; import com.refinedmods.refinedstorage2.platform.common.grid.screen.CraftingGridScreen; import com.refinedmods.refinedstorage2.platform.common.grid.screen.GridScreen; @@ -17,6 +18,9 @@ import com.refinedmods.refinedstorage2.platform.common.iface.InterfaceScreen; import com.refinedmods.refinedstorage2.platform.common.importer.ImporterScreen; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkTransmitterScreen; +import com.refinedmods.refinedstorage2.platform.common.security.FallbackSecurityCardScreen; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardScreen; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityManagerScreen; import com.refinedmods.refinedstorage2.platform.common.storage.FluidStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.ItemStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.diskdrive.DiskDriveScreen; @@ -46,6 +50,13 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createIdentifier; public abstract class AbstractClientModInitializer { + protected static void registerBaseGridSynchronizer() { + PlatformApi.INSTANCE.getGridSynchronizerRegistry().register( + createIdentifier("off"), + NoopGridSynchronizer.INSTANCE + ); + } + protected static void registerScreens(final ScreenRegistration registration) { registration.register(Menus.INSTANCE.getDiskDrive(), DiskDriveScreen::new); registration.register(Menus.INSTANCE.getGrid(), GridScreen::new); @@ -67,6 +78,9 @@ protected static void registerScreens(final ScreenRegistration registration) { registration.register(Menus.INSTANCE.getNetworkTransmitter(), NetworkTransmitterScreen::new); registration.register(Menus.INSTANCE.getPortableGridBlock(), PortableGridScreen::new); registration.register(Menus.INSTANCE.getPortableGridItem(), PortableGridScreen::new); + registration.register(Menus.INSTANCE.getSecurityCard(), SecurityCardScreen::new); + registration.register(Menus.INSTANCE.getFallbackSecurityCard(), FallbackSecurityCardScreen::new); + registration.register(Menus.INSTANCE.getSecurityManager(), SecurityManagerScreen::new); } protected static void registerAlternativeGridHints() { diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/AbstractModInitializer.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/AbstractModInitializer.java index e692aaa46..a346ee107 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/AbstractModInitializer.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/AbstractModInitializer.java @@ -1,13 +1,14 @@ package com.refinedmods.refinedstorage2.platform.common; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.impl.component.EnergyNetworkComponentImpl; -import com.refinedmods.refinedstorage2.api.network.impl.component.GraphNetworkComponentImpl; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.impl.energy.EnergyNetworkComponentImpl; +import com.refinedmods.refinedstorage2.api.network.impl.node.GraphNetworkComponentImpl; import com.refinedmods.refinedstorage2.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; import com.refinedmods.refinedstorage2.platform.api.PlatformApiProxy; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformSecurityNetworkComponent; import com.refinedmods.refinedstorage2.platform.api.upgrade.AbstractUpgradeItem; import com.refinedmods.refinedstorage2.platform.common.configurationcard.ConfigurationCardItem; import com.refinedmods.refinedstorage2.platform.common.constructordestructor.BlockBreakDestructorStrategyFactory; @@ -43,7 +44,6 @@ import com.refinedmods.refinedstorage2.platform.common.grid.GridBlockEntity; import com.refinedmods.refinedstorage2.platform.common.grid.GridContainerMenu; import com.refinedmods.refinedstorage2.platform.common.grid.WirelessGridContainerMenu; -import com.refinedmods.refinedstorage2.platform.common.grid.WirelessGridItem; import com.refinedmods.refinedstorage2.platform.common.iface.InterfaceBlock; import com.refinedmods.refinedstorage2.platform.common.iface.InterfaceBlockEntity; import com.refinedmods.refinedstorage2.platform.common.iface.InterfaceContainerMenu; @@ -55,6 +55,12 @@ import com.refinedmods.refinedstorage2.platform.common.networking.NetworkReceiverBlockEntity; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkTransmitterBlockEntity; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkTransmitterContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.security.BuiltinPermission; +import com.refinedmods.refinedstorage2.platform.common.security.FallbackSecurityCardContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.security.PlatformSecurityNetworkComponentImpl; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityManagerBlockEntity; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityManagerContainerMenu; import com.refinedmods.refinedstorage2.platform.common.storage.FluidStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.ItemStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.StorageTypes; @@ -66,7 +72,6 @@ import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.AbstractPortableGridBlockEntity; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridBlock; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridBlockContainerMenu; -import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridBlockItem; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridItemContainerMenu; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridLootItemFunction; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridType; @@ -88,11 +93,13 @@ import com.refinedmods.refinedstorage2.platform.common.storagemonitor.StorageMonitorBlock; import com.refinedmods.refinedstorage2.platform.common.storagemonitor.StorageMonitorBlockEntity; import com.refinedmods.refinedstorage2.platform.common.storagemonitor.StorageMonitorContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.SimpleBlock; -import com.refinedmods.refinedstorage2.platform.common.support.SimpleBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.SimpleItem; import com.refinedmods.refinedstorage2.platform.common.support.energy.EnergyLootItemFunction; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeContainerBlockEntityImpl; +import com.refinedmods.refinedstorage2.platform.common.support.network.bounditem.InventorySlotReferenceFactory; import com.refinedmods.refinedstorage2.platform.common.support.network.component.PlatformStorageNetworkComponent; import com.refinedmods.refinedstorage2.platform.common.support.resource.FluidResourceFactory; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; @@ -131,13 +138,13 @@ import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.CRAFTING_GRID; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.CREATIVE_CONTROLLER; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.CREATIVE_PORTABLE_GRID; -import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.CREATIVE_WIRELESS_GRID; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.DESTRUCTION_CORE; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.DESTRUCTOR; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.DETECTOR; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.DISK_DRIVE; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.EXPORTER; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.EXTERNAL_STORAGE; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.FALLBACK_SECURITY_CARD; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.FLUID_STORAGE_BLOCK; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.GRID; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.IMPORTER; @@ -151,6 +158,8 @@ import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.QUARTZ_ENRICHED_IRON; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.QUARTZ_ENRICHED_IRON_BLOCK; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.REGULATOR_UPGRADE; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.SECURITY_CARD; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.SECURITY_MANAGER; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.SILICON; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.STORAGE_BLOCK; import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.STORAGE_HOUSING; @@ -168,12 +177,13 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createIdentifier; public abstract class AbstractModInitializer { + private static final String ITEM_REGISTRY_KEY = "item"; private static final String FLUID_REGISTRY_KEY = "fluid"; protected final void initializePlatformApi() { ((PlatformApiProxy) PlatformApi.INSTANCE).setDelegate(new PlatformApiImpl()); - registerAdditionalStorageTypes(); - registerAdditionalResourceTypes(); + registerStorageTypes(); + registerResourceTypes(); registerAdditionalResourceFactories(); registerDestructorStrategyFactories(); registerConstructorStrategyFactories(); @@ -181,16 +191,26 @@ protected final void initializePlatformApi() { registerStorageMonitorExtractionStrategies(); registerNetworkComponents(); registerWirelessTransmitterRangeModifiers(); + registerPermissions(); + registerSlotReferenceProviders(); } - private void registerAdditionalStorageTypes() { + private void registerStorageTypes() { + PlatformApi.INSTANCE.getStorageTypeRegistry().register( + createIdentifier(ITEM_REGISTRY_KEY), + StorageTypes.ITEM + ); PlatformApi.INSTANCE.getStorageTypeRegistry().register( createIdentifier(FLUID_REGISTRY_KEY), StorageTypes.FLUID ); } - private void registerAdditionalResourceTypes() { + private void registerResourceTypes() { + PlatformApi.INSTANCE.getResourceTypeRegistry().register( + createIdentifier(ITEM_REGISTRY_KEY), + ResourceTypes.ITEM + ); PlatformApi.INSTANCE.getResourceTypeRegistry().register( createIdentifier(FLUID_REGISTRY_KEY), ResourceTypes.FLUID @@ -240,6 +260,10 @@ private void registerNetworkComponents() { StorageNetworkComponent.class, network -> new PlatformStorageNetworkComponent() ); + PlatformApi.INSTANCE.getNetworkComponentMapFactory().addFactory( + PlatformSecurityNetworkComponent.class, + network -> new PlatformSecurityNetworkComponentImpl(PlatformApi.INSTANCE.createDefaultSecurityPolicy()) + ); } private void registerWirelessTransmitterRangeModifiers() { @@ -250,6 +274,12 @@ private void registerWirelessTransmitterRangeModifiers() { ); } + private void registerPermissions() { + for (final BuiltinPermission permission : BuiltinPermission.values()) { + PlatformApi.INSTANCE.getPermissionRegistry().register(permission.getId(), permission); + } + } + protected final void registerBlocks( final RegistryCallback callback, final BiFunction diskDriveBlockEntityFactory, @@ -297,16 +327,10 @@ protected final void registerBlocks( PortableGridType.CREATIVE, creativePortableGridBlockEntityFactory ))); + Blocks.INSTANCE.getSecurityManager().registerBlocks(callback); } - protected final void registerItems( - final RegistryCallback callback, - final Supplier regulatorUpgradeItemSupplier, - final Supplier wirelessGridItemSupplier, - final Supplier creativeWirelessGridItemSupplier, - final Supplier portableGridBlockItemSupplier, - final Supplier creativePortableGridBlockItemSupplier - ) { + protected final void registerItems(final RegistryCallback callback) { registerSimpleItems(callback); Blocks.INSTANCE.getGrid().registerItems(callback); Blocks.INSTANCE.getCraftingGrid().registerItems(callback); @@ -322,33 +346,24 @@ protected final void registerItems( Blocks.INSTANCE.getWirelessTransmitter().registerItems(callback, Items.INSTANCE::addWirelessTransmitter); Blocks.INSTANCE.getNetworkReceiver().registerItems(callback, Items.INSTANCE::addNetworkReceiver); Blocks.INSTANCE.getNetworkTransmitter().registerItems(callback, Items.INSTANCE::addNetworkTransmitter); + Blocks.INSTANCE.getSecurityManager().registerItems(callback, Items.INSTANCE::addSecurityManager); registerStorageItems(callback); - registerUpgrades(callback, regulatorUpgradeItemSupplier); - Items.INSTANCE.setWirelessGrid(callback.register(WIRELESS_GRID, wirelessGridItemSupplier)); - Items.INSTANCE.setCreativeWirelessGrid(callback.register( - CREATIVE_WIRELESS_GRID, - creativeWirelessGridItemSupplier - )); - callback.register(STORAGE_MONITOR, () -> new SimpleBlockItem(Blocks.INSTANCE.getStorageMonitor())); - Items.INSTANCE.setPortableGrid(callback.register(PORTABLE_GRID, portableGridBlockItemSupplier)); - Items.INSTANCE.setCreativePortableGrid(callback.register( - CREATIVE_PORTABLE_GRID, - creativePortableGridBlockItemSupplier - )); + registerUpgrades(callback); } private void registerSimpleItems(final RegistryCallback callback) { Items.INSTANCE.setQuartzEnrichedIron(callback.register(QUARTZ_ENRICHED_IRON, SimpleItem::new)); callback.register( QUARTZ_ENRICHED_IRON_BLOCK, - () -> new SimpleBlockItem(Blocks.INSTANCE.getQuartzEnrichedIronBlock()) + () -> new BaseBlockItem(Blocks.INSTANCE.getQuartzEnrichedIronBlock()) ); Items.INSTANCE.setSilicon(callback.register(SILICON, SimpleItem::new)); Items.INSTANCE.setProcessorBinding(callback.register(PROCESSOR_BINDING, SimpleItem::new)); callback.register(DISK_DRIVE, () -> Blocks.INSTANCE.getDiskDrive().createBlockItem()); Items.INSTANCE.setWrench(callback.register(WRENCH, WrenchItem::new)); Items.INSTANCE.setStorageHousing(callback.register(STORAGE_HOUSING, SimpleItem::new)); - callback.register(MACHINE_CASING, () -> new SimpleBlockItem(Blocks.INSTANCE.getMachineCasing())); + callback.register(MACHINE_CASING, () -> new BaseBlockItem(Blocks.INSTANCE.getMachineCasing())); + callback.register(STORAGE_MONITOR, () -> new NetworkNodeBlockItem(Blocks.INSTANCE.getStorageMonitor())); callback.register(INTERFACE, () -> Blocks.INSTANCE.getInterface().createBlockItem()); Items.INSTANCE.setConstructionCore(callback.register(CONSTRUCTION_CORE, SimpleItem::new)); Items.INSTANCE.setDestructionCore(callback.register(DESTRUCTION_CORE, SimpleItem::new)); @@ -411,10 +426,7 @@ private void registerFluidStorageItems(final RegistryCallback callback, ); } - private void registerUpgrades( - final RegistryCallback callback, - final Supplier regulatorUpgradeItemSupplier - ) { + private void registerUpgrades(final RegistryCallback callback) { Items.INSTANCE.setUpgrade(callback.register( ContentIds.UPGRADE, SimpleItem::new @@ -461,10 +473,6 @@ private void registerUpgrades( ) ); Items.INSTANCE.setSilkTouchUpgrade(silkTouchUpgrade); - Items.INSTANCE.setRegulatorUpgrade(callback.register( - ContentIds.REGULATOR_UPGRADE, - regulatorUpgradeItemSupplier - )); Items.INSTANCE.setRangeUpgrade(callback.register( ContentIds.RANGE_UPGRADE, () -> new RangeUpgradeItem(PlatformApi.INSTANCE.getUpgradeRegistry(), false) @@ -627,6 +635,13 @@ protected final void registerBlockEntities( Blocks.INSTANCE.getCreativePortableGrid() ) )); + BlockEntities.INSTANCE.setSecurityManager(callback.register( + SECURITY_MANAGER, + () -> typeFactory.create( + SecurityManagerBlockEntity::new, + Blocks.INSTANCE.getSecurityManager().toArray() + ) + )); } protected final void registerMenus(final RegistryCallback> callback, @@ -711,6 +726,17 @@ protected final void registerMenus(final RegistryCallback> callback, createIdentifier("portable_grid_item"), () -> menuTypeFactory.create(PortableGridItemContainerMenu::new) )); + Menus.INSTANCE.setSecurityCard(callback.register( + SECURITY_CARD, + () -> menuTypeFactory.create(SecurityCardContainerMenu::new) + )); + Menus.INSTANCE.setFallbackSecurityCard(callback.register( + FALLBACK_SECURITY_CARD, + () -> menuTypeFactory.create(FallbackSecurityCardContainerMenu::new) + )); + Menus.INSTANCE.setSecurityManager(callback.register(SECURITY_MANAGER, () -> menuTypeFactory.create( + (syncId, playerInventory, buf) -> new SecurityManagerContainerMenu(syncId, playerInventory) + ))); } protected final void registerLootFunctions(final RegistryCallback callback) { @@ -742,6 +768,13 @@ protected final void registerRecipeSerializers(final RegistryCallback getResourceTypeId(); void setResourceTypeId(ResourceLocation resourceTypeId); diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/PlatformApiImpl.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/PlatformApiImpl.java index 07d5805d0..803d80feb 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/PlatformApiImpl.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/PlatformApiImpl.java @@ -3,10 +3,11 @@ import com.refinedmods.refinedstorage2.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage2.api.network.Network; import com.refinedmods.refinedstorage2.api.network.NetworkBuilder; -import com.refinedmods.refinedstorage2.api.network.component.NetworkComponent; +import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import com.refinedmods.refinedstorage2.api.network.energy.EnergyStorage; import com.refinedmods.refinedstorage2.api.network.impl.NetworkBuilderImpl; import com.refinedmods.refinedstorage2.api.network.impl.NetworkFactory; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; import com.refinedmods.refinedstorage2.platform.api.constructordestructor.ConstructorStrategyFactory; @@ -24,6 +25,9 @@ import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridScrollingStrategyFactory; import com.refinedmods.refinedstorage2.platform.api.importer.ImporterTransferStrategyFactory; import com.refinedmods.refinedstorage2.platform.api.recipemod.IngredientConverter; +import com.refinedmods.refinedstorage2.platform.api.security.BuiltinPermissions; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformSecurityNetworkComponent; import com.refinedmods.refinedstorage2.platform.api.storage.StorageContainerItemHelper; import com.refinedmods.refinedstorage2.platform.api.storage.StorageRepository; import com.refinedmods.refinedstorage2.platform.api.storage.StorageType; @@ -44,7 +48,6 @@ import com.refinedmods.refinedstorage2.platform.api.upgrade.UpgradeRegistry; import com.refinedmods.refinedstorage2.platform.api.wirelesstransmitter.WirelessTransmitterRangeModifier; import com.refinedmods.refinedstorage2.platform.common.grid.AbstractGridContainerMenu; -import com.refinedmods.refinedstorage2.platform.common.grid.NoopGridSynchronizer; import com.refinedmods.refinedstorage2.platform.common.grid.screen.hint.GridInsertionHintsImpl; import com.refinedmods.refinedstorage2.platform.common.grid.screen.hint.ItemGridInsertionHint; import com.refinedmods.refinedstorage2.platform.common.grid.screen.hint.SingleItemGridInsertionHint; @@ -52,6 +55,7 @@ import com.refinedmods.refinedstorage2.platform.common.grid.strategy.CompositeGridInsertionStrategy; import com.refinedmods.refinedstorage2.platform.common.grid.strategy.CompositeGridScrollingStrategy; import com.refinedmods.refinedstorage2.platform.common.recipemod.CompositeIngredientConverter; +import com.refinedmods.refinedstorage2.platform.common.security.BuiltinPermission; import com.refinedmods.refinedstorage2.platform.common.storage.ClientStorageRepository; import com.refinedmods.refinedstorage2.platform.common.storage.StorageContainerItemHelperImpl; import com.refinedmods.refinedstorage2.platform.common.storage.StorageRepositoryImpl; @@ -64,15 +68,12 @@ import com.refinedmods.refinedstorage2.platform.common.support.network.ConnectionProviderImpl; import com.refinedmods.refinedstorage2.platform.common.support.network.bounditem.CompositeSlotReferenceProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.bounditem.InventorySlotReference; -import com.refinedmods.refinedstorage2.platform.common.support.network.bounditem.InventorySlotReferenceFactory; import com.refinedmods.refinedstorage2.platform.common.support.network.bounditem.NetworkBoundItemHelperImpl; import com.refinedmods.refinedstorage2.platform.common.support.registry.PlatformRegistryImpl; import com.refinedmods.refinedstorage2.platform.common.support.resource.FluidResourceFactory; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResourceFactory; -import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; import com.refinedmods.refinedstorage2.platform.common.upgrade.BuiltinUpgradeDestinationsImpl; import com.refinedmods.refinedstorage2.platform.common.upgrade.UpgradeRegistryImpl; -import com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil; import com.refinedmods.refinedstorage2.platform.common.util.ServerEventQueue; import com.refinedmods.refinedstorage2.platform.common.wirelesstransmitter.CompositeWirelessTransmitterRangeModifier; @@ -89,44 +90,43 @@ import java.util.PriorityQueue; import java.util.Queue; import java.util.Set; +import java.util.stream.Collectors; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.saveddata.SavedData; -import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class PlatformApiImpl implements PlatformApi { - private static final String ITEM_REGISTRY_KEY = "item"; - private final StorageRepository clientStorageRepository = new ClientStorageRepository(Platform.INSTANCE.getClientToServerCommunications()::sendStorageInfoRequest); private final ComponentMapFactory networkComponentMapFactory = new ComponentMapFactory<>(); private final NetworkBuilder networkBuilder = new NetworkBuilderImpl(new NetworkFactory(networkComponentMapFactory)); - private final PlatformRegistry storageTypeRegistry = - new PlatformRegistryImpl<>(createIdentifier(ITEM_REGISTRY_KEY), StorageTypes.ITEM); - private final PlatformRegistry resourceTypeRegistry = - new PlatformRegistryImpl<>(createIdentifier(ITEM_REGISTRY_KEY), ResourceTypes.ITEM); - private final PlatformRegistry gridSynchronizerRegistry = - new PlatformRegistryImpl<>(createIdentifier("off"), new NoopGridSynchronizer()); + private final PlatformRegistry storageTypeRegistry = new PlatformRegistryImpl<>(); + private final PlatformRegistry resourceTypeRegistry = new PlatformRegistryImpl<>(); + private final PlatformRegistry gridSynchronizerRegistry = new PlatformRegistryImpl<>(); private final PlatformRegistry importerTransferStrategyRegistry = - new PlatformRegistryImpl<>(createIdentifier("noop"), - (level, pos, direction, upgradeState, amountOverride) -> (filter, actor, network) -> false); + new PlatformRegistryImpl<>(); private final PlatformRegistry exporterTransferStrategyRegistry = - new PlatformRegistryImpl<>(createIdentifier("noop"), - (level, pos, direction, upgradeState, amountOverride, fuzzyMode) -> (resource, actor, network) -> false); + new PlatformRegistryImpl<>(); private final UpgradeRegistry upgradeRegistry = new UpgradeRegistryImpl(); private final BuiltinUpgradeDestinations builtinUpgradeDestinations = new BuiltinUpgradeDestinationsImpl(); private final Queue externalStorageProviderFactories = new PriorityQueue<>( @@ -159,11 +159,9 @@ public class PlatformApiImpl implements PlatformApi { new CompositeWirelessTransmitterRangeModifier(); private final EnergyItemHelper energyItemHelper = new EnergyItemHelperImpl(); private final NetworkBoundItemHelper networkBoundItemHelper = new NetworkBoundItemHelperImpl(); - private final PlatformRegistry slotReferenceFactoryRegistry = new PlatformRegistryImpl<>( - createIdentifier("inventory"), - InventorySlotReferenceFactory.INSTANCE - ); + private final PlatformRegistry slotReferenceFactoryRegistry = new PlatformRegistryImpl<>(); private final CompositeSlotReferenceProvider slotReferenceProvider = new CompositeSlotReferenceProvider(); + private final PlatformRegistry permissionRegistry = new PlatformRegistryImpl<>(); @Override public PlatformRegistry getStorageTypeRegistry() { @@ -264,11 +262,6 @@ public StorageMonitorInsertionStrategy getStorageMonitorInsertionStrategy() { return storageMonitorInsertionStrategy; } - @Override - public MutableComponent createTranslation(final String category, final String value, final Object... args) { - return IdentifierUtil.createTranslation(category, value, args); - } - @Override public ComponentMapFactory getNetworkComponentMapFactory() { return networkComponentMapFactory; @@ -335,7 +328,7 @@ public void requestNetworkNodeUpdate(final PlatformNetworkNodeContainer containe @Override public GridInsertionStrategy createGridInsertionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { return new CompositeGridInsertionStrategy( Platform.INSTANCE.getDefaultGridInsertionStrategyFactory().create( @@ -368,7 +361,7 @@ public GridInsertionHints getGridInsertionHints() { @Override public GridExtractionStrategy createGridExtractionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { final List strategies = gridExtractionStrategyFactories .stream() @@ -384,7 +377,7 @@ public void addGridExtractionStrategyFactory(final GridExtractionStrategyFactory @Override public GridScrollingStrategy createGridScrollingStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { final List strategies = gridScrollingStrategyFactories .stream() @@ -527,4 +520,60 @@ public void useNetworkBoundItem(final Player player, final Item... items) { slotReference -> Platform.INSTANCE.getClientToServerCommunications().sendUseNetworkBoundItem(slotReference) ); } + + @Override + public BuiltinPermissions getBuiltinPermissions() { + return BuiltinPermission.VIEW; + } + + @Override + public PlatformRegistry getPermissionRegistry() { + return permissionRegistry; + } + + @Override + public SecurityPolicy createDefaultSecurityPolicy() { + return new SecurityPolicy(permissionRegistry.getAll() + .stream() + .filter(PlatformPermission::isAllowedByDefault) + .collect(Collectors.toSet())); + } + + @Override + public void sendNoPermissionToOpenMessage(final ServerPlayer player, final Component target) { + sendNoPermissionMessage(player, createTranslation("misc", "no_permission.open", target)); + } + + @Override + public void sendNoPermissionMessage(final ServerPlayer player, final Component message) { + Platform.INSTANCE.getServerToClientCommunications().sendNoPermission(player, message); + } + + @Override + public boolean canPlaceNetworkNode(final ServerPlayer player, + final Level level, + final BlockPos pos, + final BlockState state) { + for (final Direction direction : Direction.values()) { + final BlockPos adjacentPos = pos.relative(direction); + final BlockEntity adjacentBlockEntity = level.getBlockEntity(adjacentPos); + if (!(adjacentBlockEntity instanceof PlatformNetworkNodeContainer platformNetworkNodeContainer) + || !platformNetworkNodeContainer.canAcceptIncomingConnection(direction.getOpposite(), state) + || platformNetworkNodeContainer.getNode().getNetwork() == null) { + continue; + } + final PlatformSecurityNetworkComponent security = platformNetworkNodeContainer + .getNode() + .getNetwork() + .getComponent(PlatformSecurityNetworkComponent.class); + if (!security.isAllowed(BuiltinPermission.BUILD, player)) { + PlatformApi.INSTANCE.sendNoPermissionMessage( + player, + createTranslation("misc", "no_permission.build.place", state.getBlock().getName()) + ); + return false; + } + } + return true; + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/AbstractItemConstructorStrategy.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/AbstractItemConstructorStrategy.java index deaff8a3c..fd1086858 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/AbstractItemConstructorStrategy.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/AbstractItemConstructorStrategy.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/BlockBreakDestructorStrategy.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/BlockBreakDestructorStrategy.java index 0b15939a8..923363145 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/BlockBreakDestructorStrategy.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/BlockBreakDestructorStrategy.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.filter.Filter; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/ConstructorBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/ConstructorBlock.java index e8c9ea21f..751fa6880 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/ConstructorBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/ConstructorBlock.java @@ -3,8 +3,9 @@ import com.refinedmods.refinedstorage2.platform.common.content.BlockColorMap; import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.Blocks; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import javax.annotation.Nullable; @@ -13,15 +14,14 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class ConstructorBlock extends AbstractConstructorDestructorBlock< - ConstructorBlock, ConstructorBlockEntity, NamedBlockItem - > implements BlockItemProvider { + ConstructorBlock, ConstructorBlockEntity, BaseBlockItem + > implements BlockItemProvider { private static final Component HELP = createTranslation("item", "constructor.help"); public ConstructorBlock(final DyeColor color, final MutableComponent name) { @@ -32,7 +32,7 @@ public ConstructorBlock(final DyeColor color, final MutableComponent name) { } @Override - public BlockColorMap getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getConstructor(); } @@ -43,7 +43,7 @@ public BlockEntity newBlockEntity(final BlockPos blockPos, final BlockState bloc } @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), getName(), HELP); + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/DestructorBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/DestructorBlock.java index eb95d5e00..c9988df10 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/DestructorBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/DestructorBlock.java @@ -3,8 +3,9 @@ import com.refinedmods.refinedstorage2.platform.common.content.BlockColorMap; import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.Blocks; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import javax.annotation.Nullable; @@ -13,15 +14,14 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class DestructorBlock extends AbstractConstructorDestructorBlock< - DestructorBlock, DestructorBlockEntity, NamedBlockItem - > implements BlockItemProvider { + DestructorBlock, DestructorBlockEntity, BaseBlockItem + > implements BlockItemProvider { private static final Component HELP = createTranslation("item", "destructor.help"); public DestructorBlock(final DyeColor color, final MutableComponent name) { @@ -32,7 +32,7 @@ public DestructorBlock(final DyeColor color, final MutableComponent name) { } @Override - public BlockColorMap getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getDestructor(); } @@ -43,7 +43,7 @@ public BlockEntity newBlockEntity(final BlockPos blockPos, final BlockState bloc } @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), getName(), HELP); + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/DestructorBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/DestructorBlockEntity.java index 87441fbdc..5f90c77bd 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/DestructorBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/DestructorBlockEntity.java @@ -13,7 +13,7 @@ import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage2.platform.common.support.FilterModeSettings; import com.refinedmods.refinedstorage2.platform.common.support.FilterWithFuzzyMode; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractUpgradeableNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage2.platform.common.upgrade.UpgradeDestinations; @@ -34,7 +34,7 @@ import net.minecraft.world.level.block.state.BlockState; public class DestructorBlockEntity extends AbstractUpgradeableNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider { + implements NetworkNodeMenuProvider { private static final String TAG_FILTER_MODE = "fim"; private static final String TAG_PICKUP_ITEMS = "pi"; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/FluidBreakDestructorStrategy.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/FluidBreakDestructorStrategy.java index 74bdc3a7b..f258547be 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/FluidBreakDestructorStrategy.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/FluidBreakDestructorStrategy.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.filter.Filter; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/ItemPickupDestructorStrategy.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/ItemPickupDestructorStrategy.java index b010c19fc..43c6a13e8 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/ItemPickupDestructorStrategy.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/ItemPickupDestructorStrategy.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.filter.Filter; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/PlaceFluidConstructorStrategy.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/PlaceFluidConstructorStrategy.java index b44515091..16cd1b25c 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/PlaceFluidConstructorStrategy.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/constructordestructor/PlaceFluidConstructorStrategy.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/BlockEntities.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/BlockEntities.java index 4fdfd24b0..3868df5bb 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/BlockEntities.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/BlockEntities.java @@ -12,6 +12,7 @@ import com.refinedmods.refinedstorage2.platform.common.importer.ImporterBlockEntity; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkReceiverBlockEntity; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkTransmitterBlockEntity; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityManagerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.storage.FluidStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.ItemStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.diskdrive.AbstractDiskDriveBlockEntity; @@ -77,6 +78,8 @@ public final class BlockEntities { private Supplier> portableGrid; @Nullable private Supplier> creativePortableGrid; + @Nullable + private Supplier> securityManager; private BlockEntities() { } @@ -252,4 +255,12 @@ public BlockEntityType getCreativePortableGrid( public void setCreativePortableGrid(final Supplier> supplier) { this.creativePortableGrid = supplier; } + + public BlockEntityType getSecurityManager() { + return requireNonNull(securityManager).get(); + } + + public void setSecurityManager(final Supplier> supplier) { + this.securityManager = supplier; + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Blocks.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Blocks.java index b13f8e159..f393da0a5 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Blocks.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Blocks.java @@ -17,6 +17,7 @@ import com.refinedmods.refinedstorage2.platform.common.networking.CableBlock; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkReceiverBlock; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkTransmitterBlock; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityManagerBlock; import com.refinedmods.refinedstorage2.platform.common.storage.FluidStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.ItemStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.diskdrive.DiskDriveBlock; @@ -25,7 +26,7 @@ import com.refinedmods.refinedstorage2.platform.common.storage.storageblock.FluidStorageBlock; import com.refinedmods.refinedstorage2.platform.common.storage.storageblock.ItemStorageBlock; import com.refinedmods.refinedstorage2.platform.common.storagemonitor.StorageMonitorBlock; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.SimpleBlock; import com.refinedmods.refinedstorage2.platform.common.wirelesstransmitter.WirelessTransmitterBlock; @@ -43,25 +44,25 @@ public final class Blocks { public static final DyeColor CABLE_LIKE_COLOR = DyeColor.GRAY; public static final Blocks INSTANCE = new Blocks(); - private final BlockColorMap cable = new BlockColorMap<>( + private final BlockColorMap cable = new BlockColorMap<>( CableBlock::new, ContentIds.CABLE, ContentNames.CABLE, CABLE_LIKE_COLOR ); - private final BlockColorMap grid = new BlockColorMap<>( + private final BlockColorMap grid = new BlockColorMap<>( GridBlock::new, ContentIds.GRID, ContentNames.GRID, COLOR ); - private final BlockColorMap craftingGrid = new BlockColorMap<>( + private final BlockColorMap craftingGrid = new BlockColorMap<>( CraftingGridBlock::new, ContentIds.CRAFTING_GRID, ContentNames.CRAFTING_GRID, COLOR ); - private final BlockColorMap detector = new BlockColorMap<>( + private final BlockColorMap detector = new BlockColorMap<>( DetectorBlock::new, ContentIds.DETECTOR, ContentNames.DETECTOR, @@ -89,54 +90,60 @@ public final class Blocks { ContentNames.CREATIVE_CONTROLLER, COLOR ); - private final BlockColorMap exporter = new BlockColorMap<>( + private final BlockColorMap exporter = new BlockColorMap<>( ExporterBlock::new, ContentIds.EXPORTER, ContentNames.EXPORTER, CABLE_LIKE_COLOR ); - private final BlockColorMap importer = new BlockColorMap<>( + private final BlockColorMap importer = new BlockColorMap<>( ImporterBlock::new, ContentIds.IMPORTER, ContentNames.IMPORTER, CABLE_LIKE_COLOR ); - private final BlockColorMap externalStorage = new BlockColorMap<>( + private final BlockColorMap externalStorage = new BlockColorMap<>( ExternalStorageBlock::new, ContentIds.EXTERNAL_STORAGE, ContentNames.EXTERNAL_STORAGE, CABLE_LIKE_COLOR ); - private final BlockColorMap destructor = new BlockColorMap<>( + private final BlockColorMap destructor = new BlockColorMap<>( DestructorBlock::new, ContentIds.DESTRUCTOR, ContentNames.DESTRUCTOR, CABLE_LIKE_COLOR ); - private final BlockColorMap constructor = new BlockColorMap<>( + private final BlockColorMap constructor = new BlockColorMap<>( ConstructorBlock::new, ContentIds.CONSTRUCTOR, ContentNames.CONSTRUCTOR, CABLE_LIKE_COLOR ); - private final BlockColorMap wirelessTransmitter = new BlockColorMap<>( + private final BlockColorMap wirelessTransmitter = new BlockColorMap<>( WirelessTransmitterBlock::new, ContentIds.WIRELESS_TRANSMITTER, ContentNames.WIRELESS_TRANSMITTER, COLOR ); - private final BlockColorMap networkReceiver = new BlockColorMap<>( + private final BlockColorMap networkReceiver = new BlockColorMap<>( NetworkReceiverBlock::new, ContentIds.NETWORK_RECEIVER, ContentNames.NETWORK_RECEIVER, COLOR ); - private final BlockColorMap networkTransmitter = new BlockColorMap<>( + private final BlockColorMap networkTransmitter = new BlockColorMap<>( NetworkTransmitterBlock::new, ContentIds.NETWORK_TRANSMITTER, ContentNames.NETWORK_TRANSMITTER, COLOR ); + private final BlockColorMap securityManager = new BlockColorMap<>( + SecurityManagerBlock::new, + ContentIds.SECURITY_MANAGER, + ContentNames.SECURITY_MANAGER, + COLOR + ); @Nullable private Supplier quartzEnrichedIronBlock; @@ -160,7 +167,7 @@ public final class Blocks { private Blocks() { } - public BlockColorMap getCable() { + public BlockColorMap getCable() { return cable; } @@ -176,11 +183,11 @@ public SimpleBlock getMachineCasing() { return requireNonNull(machineCasing).get(); } - public BlockColorMap getGrid() { + public BlockColorMap getGrid() { return grid; } - public BlockColorMap getCraftingGrid() { + public BlockColorMap getCraftingGrid() { return craftingGrid; } @@ -223,11 +230,11 @@ public FluidStorageBlock getFluidStorageBlock(final FluidStorageType.Variant var return fluidStorageBlocks.get(variant).get(); } - public BlockColorMap getImporter() { + public BlockColorMap getImporter() { return importer; } - public BlockColorMap getExporter() { + public BlockColorMap getExporter() { return exporter; } @@ -239,23 +246,23 @@ public InterfaceBlock getInterface() { return requireNonNull(iface).get(); } - public BlockColorMap getExternalStorage() { + public BlockColorMap getExternalStorage() { return externalStorage; } - public BlockColorMap getDetector() { + public BlockColorMap getDetector() { return detector; } - public BlockColorMap getDestructor() { + public BlockColorMap getDestructor() { return destructor; } - public BlockColorMap getConstructor() { + public BlockColorMap getConstructor() { return constructor; } - public BlockColorMap getWirelessTransmitter() { + public BlockColorMap getWirelessTransmitter() { return wirelessTransmitter; } @@ -267,11 +274,11 @@ public StorageMonitorBlock getStorageMonitor() { return requireNonNull(storageMonitor).get(); } - public BlockColorMap getNetworkReceiver() { + public BlockColorMap getNetworkReceiver() { return networkReceiver; } - public BlockColorMap getNetworkTransmitter() { + public BlockColorMap getNetworkTransmitter() { return networkTransmitter; } @@ -290,4 +297,8 @@ public PortableGridBlock getCreativePortableGrid() { public void setCreativePortableGrid(final Supplier supplier) { this.creativePortableGrid = supplier; } + + public BlockColorMap getSecurityManager() { + return securityManager; + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/ContentIds.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/ContentIds.java index 0eb7ca2bb..c1898295d 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/ContentIds.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/ContentIds.java @@ -54,6 +54,9 @@ public final class ContentIds { public static final ResourceLocation NETWORK_TRANSMITTER = createIdentifier("network_transmitter"); public static final ResourceLocation PORTABLE_GRID = createIdentifier("portable_grid"); public static final ResourceLocation CREATIVE_PORTABLE_GRID = createIdentifier("creative_portable_grid"); + public static final ResourceLocation SECURITY_CARD = createIdentifier("security_card"); + public static final ResourceLocation FALLBACK_SECURITY_CARD = createIdentifier("fallback_security_card"); + public static final ResourceLocation SECURITY_MANAGER = createIdentifier("security_manager"); private ContentIds() { } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/ContentNames.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/ContentNames.java index d938b5a6a..9a6ea25f5 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/ContentNames.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/ContentNames.java @@ -1,10 +1,14 @@ package com.refinedmods.refinedstorage2.platform.common.content; +import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.MOD_ID; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public final class ContentNames { + public static final String MOD_TRANSLATION_KEY = "mod." + MOD_ID; + public static final MutableComponent MOD = Component.translatable(MOD_TRANSLATION_KEY); public static final MutableComponent CABLE = name("cable"); public static final MutableComponent GRID = name("grid"); public static final MutableComponent CRAFTING_GRID = name("crafting_grid"); @@ -16,7 +20,7 @@ public final class ContentNames { public static final MutableComponent DESTRUCTOR = name("destructor"); public static final MutableComponent CONTROLLER = name("controller"); public static final MutableComponent CREATIVE_CONTROLLER = name("creative_controller"); - public static final MutableComponent WIRELESS_GRID = name("wireless_grid"); + public static final MutableComponent WIRELESS_GRID = createTranslation("item", "wireless_grid"); public static final MutableComponent WIRELESS_TRANSMITTER = name("wireless_transmitter"); public static final MutableComponent REGULATOR_UPGRADE = name("regulator_upgrade"); public static final MutableComponent STORAGE_MONITOR = name("storage_monitor"); @@ -25,6 +29,9 @@ public final class ContentNames { public static final MutableComponent NETWORK_RECEIVER = name("network_receiver"); public static final MutableComponent NETWORK_TRANSMITTER = name("network_transmitter"); public static final MutableComponent PORTABLE_GRID = name("portable_grid"); + public static final MutableComponent SECURITY_CARD = createTranslation("item", "security_card"); + public static final MutableComponent FALLBACK_SECURITY_CARD = createTranslation("item", "fallback_security_card"); + public static final MutableComponent SECURITY_MANAGER = name("security_manager"); private ContentNames() { } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/CreativeModeTabItems.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/CreativeModeTabItems.java index 239dd8ea5..fd43e703b 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/CreativeModeTabItems.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/CreativeModeTabItems.java @@ -53,6 +53,7 @@ private static void appendBlocks(final Consumer consumer) { itemConsumer.accept(Blocks.INSTANCE.getStorageMonitor()); Items.INSTANCE.getNetworkTransmitters().stream().map(Supplier::get).forEach(itemConsumer); Items.INSTANCE.getNetworkReceivers().stream().map(Supplier::get).forEach(itemConsumer); + Items.INSTANCE.getSecurityManagers().stream().map(Supplier::get).forEach(itemConsumer); } private static void appendBlockColors(final Consumer consumer, final BlockColorMap map) { @@ -103,5 +104,7 @@ private static void appendItems(final Consumer consumer) { itemConsumer.accept(Items.INSTANCE.getCreativeWirelessGrid()); itemConsumer.accept(Items.INSTANCE.getConfigurationCard()); itemConsumer.accept(Items.INSTANCE.getNetworkCard()); + itemConsumer.accept(Items.INSTANCE.getSecurityCard()); + itemConsumer.accept(Items.INSTANCE.getFallbackSecurityCard()); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/DefaultEnergyUsage.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/DefaultEnergyUsage.java index bdbd5caf9..d01592d55 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/DefaultEnergyUsage.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/DefaultEnergyUsage.java @@ -16,6 +16,7 @@ public final class DefaultEnergyUsage { public static final long STORAGE_MONITOR = 4; public static final long NETWORK_RECEIVER = 8; public static final long NETWORK_TRANSMITTER = 32; + public static final long SECURITY_MANAGER = 16; public static final long CONTROLLER_CAPACITY = 1000; @@ -41,6 +42,8 @@ public final class DefaultEnergyUsage { public static final long RANGE_UPGRADE = 8; public static final long CREATIVE_RANGE_UPGRADE = 0; public static final int RANGE_UPGRADE_RANGE = 8; + public static final long SECURITY_CARD = 2; + public static final long FALLBACK_SECURITY_CARD = 4; public static final long WIRELESS_GRID_CAPACITY = 1000; public static final long WIRELESS_GRID_OPEN = 5; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Items.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Items.java index 75b7eea13..4d8dea711 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Items.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Items.java @@ -5,10 +5,12 @@ import com.refinedmods.refinedstorage2.platform.common.controller.CreativeControllerBlockItem; import com.refinedmods.refinedstorage2.platform.common.grid.WirelessGridItem; import com.refinedmods.refinedstorage2.platform.common.misc.ProcessorItem; +import com.refinedmods.refinedstorage2.platform.common.security.FallbackSecurityCardItem; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardItem; import com.refinedmods.refinedstorage2.platform.common.storage.FluidStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.ItemStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridBlockItem; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import java.util.ArrayList; import java.util.Collections; @@ -35,16 +37,17 @@ public final class Items { = new EnumMap<>(FluidStorageType.Variant.class); private final List> allControllers = new ArrayList<>(); private final List> allCreativeControllers = new ArrayList<>(); - private final List> allCables = new ArrayList<>(); - private final List> allExporters = new ArrayList<>(); - private final List> allImporters = new ArrayList<>(); - private final List> allExternalStorages = new ArrayList<>(); - private final List> allDetectors = new ArrayList<>(); - private final List> allDestructors = new ArrayList<>(); - private final List> allConstructors = new ArrayList<>(); - private final List> allWirelessTransmitters = new ArrayList<>(); - private final List> allNetworkReceivers = new ArrayList<>(); - private final List> allNetworkTransmitters = new ArrayList<>(); + private final List> allCables = new ArrayList<>(); + private final List> allExporters = new ArrayList<>(); + private final List> allImporters = new ArrayList<>(); + private final List> allExternalStorages = new ArrayList<>(); + private final List> allDetectors = new ArrayList<>(); + private final List> allDestructors = new ArrayList<>(); + private final List> allConstructors = new ArrayList<>(); + private final List> allWirelessTransmitters = new ArrayList<>(); + private final List> allNetworkReceivers = new ArrayList<>(); + private final List> allNetworkTransmitters = new ArrayList<>(); + private final List> allSecurityManagers = new ArrayList<>(); @Nullable private Supplier quartzEnrichedIron; @Nullable @@ -92,6 +95,10 @@ public final class Items { private Supplier portableGrid; @Nullable private Supplier creativePortableGrid; + @Nullable + private Supplier securityCard; + @Nullable + private Supplier fallbackSecurityCard; private Items() { } @@ -200,67 +207,67 @@ public List> getControllers() { return Collections.unmodifiableList(allControllers); } - public void addCable(final Supplier supplier) { + public void addCable(final Supplier supplier) { allCables.add(supplier); } - public List> getCables() { + public List> getCables() { return Collections.unmodifiableList(allCables); } - public void addExporter(final Supplier supplier) { + public void addExporter(final Supplier supplier) { allExporters.add(supplier); } - public List> getExporters() { + public List> getExporters() { return Collections.unmodifiableList(allExporters); } - public void addImporter(final Supplier supplier) { + public void addImporter(final Supplier supplier) { allImporters.add(supplier); } - public List> getImporters() { + public List> getImporters() { return Collections.unmodifiableList(allImporters); } - public void addExternalStorage(final Supplier supplier) { + public void addExternalStorage(final Supplier supplier) { allExternalStorages.add(supplier); } - public List> getExternalStorages() { + public List> getExternalStorages() { return Collections.unmodifiableList(allExternalStorages); } - public void addDetector(final Supplier supplier) { + public void addDetector(final Supplier supplier) { allDetectors.add(supplier); } - public List> getDetectors() { + public List> getDetectors() { return Collections.unmodifiableList(allDetectors); } - public void addDestructor(final Supplier supplier) { + public void addDestructor(final Supplier supplier) { allDestructors.add(supplier); } - public List> getDestructors() { + public List> getDestructors() { return Collections.unmodifiableList(allDestructors); } - public void addConstructor(final Supplier supplier) { + public void addConstructor(final Supplier supplier) { allConstructors.add(supplier); } - public List> getConstructors() { + public List> getConstructors() { return Collections.unmodifiableList(allConstructors); } - public void addWirelessTransmitter(final Supplier supplier) { + public void addWirelessTransmitter(final Supplier supplier) { allWirelessTransmitters.add(supplier); } - public List> getWirelessTransmitters() { + public List> getWirelessTransmitters() { return Collections.unmodifiableList(allWirelessTransmitters); } @@ -376,22 +383,30 @@ public void setConfigurationCard(final Supplier supplier) { this.configurationCard = supplier; } - public void addNetworkReceiver(final Supplier supplier) { + public void addNetworkReceiver(final Supplier supplier) { allNetworkReceivers.add(supplier); } - public List> getNetworkReceivers() { + public List> getNetworkReceivers() { return Collections.unmodifiableList(allNetworkReceivers); } - public void addNetworkTransmitter(final Supplier supplier) { + public void addNetworkTransmitter(final Supplier supplier) { allNetworkTransmitters.add(supplier); } - public List> getNetworkTransmitters() { + public List> getNetworkTransmitters() { return Collections.unmodifiableList(allNetworkTransmitters); } + public void addSecurityManager(final Supplier supplier) { + allSecurityManagers.add(supplier); + } + + public List> getSecurityManagers() { + return Collections.unmodifiableList(allSecurityManagers); + } + public Item getNetworkCard() { return requireNonNull(networkCard).get(); } @@ -415,4 +430,20 @@ public PortableGridBlockItem getCreativePortableGrid() { public void setCreativePortableGrid(final Supplier supplier) { this.creativePortableGrid = supplier; } + + public SecurityCardItem getSecurityCard() { + return requireNonNull(securityCard).get(); + } + + public void setSecurityCard(final Supplier securityCard) { + this.securityCard = securityCard; + } + + public FallbackSecurityCardItem getFallbackSecurityCard() { + return requireNonNull(fallbackSecurityCard).get(); + } + + public void setFallbackSecurityCard(final Supplier fallbackSecurityCard) { + this.fallbackSecurityCard = fallbackSecurityCard; + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Menus.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Menus.java index 98e8a9e96..197b59973 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Menus.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Menus.java @@ -11,6 +11,9 @@ import com.refinedmods.refinedstorage2.platform.common.iface.InterfaceContainerMenu; import com.refinedmods.refinedstorage2.platform.common.importer.ImporterContainerMenu; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkTransmitterContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.security.FallbackSecurityCardContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityManagerContainerMenu; import com.refinedmods.refinedstorage2.platform.common.storage.diskdrive.DiskDriveContainerMenu; import com.refinedmods.refinedstorage2.platform.common.storage.externalstorage.ExternalStorageContainerMenu; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridBlockContainerMenu; @@ -71,6 +74,12 @@ public final class Menus { private Supplier> portableGridBlock; @Nullable private Supplier> portableGridItem; + @Nullable + private Supplier> securityCard; + @Nullable + private Supplier> fallbackSecurityCard; + @Nullable + private Supplier> securityManager; private Menus() { } @@ -234,4 +243,30 @@ public MenuType getPortableGridItem() { public void setPortableGridItem(final Supplier> portableGridItem) { this.portableGridItem = portableGridItem; } + + public MenuType getSecurityCard() { + return requireNonNull(securityCard).get(); + } + + public void setSecurityCard(final Supplier> securityCard) { + this.securityCard = securityCard; + } + + public MenuType getFallbackSecurityCard() { + return requireNonNull(fallbackSecurityCard).get(); + } + + public void setFallbackSecurityCard( + final Supplier> fallbackSecurityCard + ) { + this.fallbackSecurityCard = fallbackSecurityCard; + } + + public MenuType getSecurityManager() { + return requireNonNull(securityManager).get(); + } + + public void setSecurityManager(final Supplier> securityManager) { + this.securityManager = securityManager; + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Tags.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Tags.java index be33cae1e..c46aeeb72 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Tags.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/content/Tags.java @@ -23,6 +23,7 @@ public final class Tags { public static final TagKey WIRELESS_TRANSMITTERS = createTag("wireless_transmitters"); public static final TagKey NETWORK_RECEIVERS = createTag("network_receivers"); public static final TagKey NETWORK_TRANSMITTERS = createTag("network_transmitters"); + public static final TagKey SECURITY_MANAGERS = createTag("security_managers"); private Tags() { } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/AbstractControllerBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/AbstractControllerBlock.java index 7acfa9e89..0619f81fe 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/AbstractControllerBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/AbstractControllerBlock.java @@ -27,7 +27,7 @@ public abstract class AbstractControllerBlock ControllerEnergyType.class ); - protected final MutableComponent name; + private final MutableComponent name; private final ControllerType type; private final ControllerBlockEntityTicker ticker; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlock.java index 68f216341..1359ff2dc 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlock.java @@ -20,6 +20,6 @@ public BlockColorMap, ControllerBlo @Override public ControllerBlockItem createBlockItem() { - return new ControllerBlockItem(this, name); + return new ControllerBlockItem(this); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlockEntity.java index ca239b878..e7d99bc8c 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlockEntity.java @@ -7,7 +7,7 @@ import com.refinedmods.refinedstorage2.platform.common.Platform; import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.energy.BlockEntityEnergyStorage; import com.refinedmods.refinedstorage2.platform.common.support.energy.CreativeEnergyStorage; import com.refinedmods.refinedstorage2.platform.common.support.energy.ItemBlockEnergyStorage; @@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory; public class ControllerBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider, TransferableBlockEntityEnergy { + implements NetworkNodeMenuProvider, TransferableBlockEntityEnergy { private static final Logger LOGGER = LoggerFactory.getLogger(ControllerBlockEntity.class); private static final String TAG_CAPACITY = "capacity"; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlockItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlockItem.java index d78218c88..984707d77 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlockItem.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/ControllerBlockItem.java @@ -11,29 +11,32 @@ import java.util.Optional; import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class ControllerBlockItem extends AbstractEnergyBlockItem { - private final Component name; + private final Block block; - ControllerBlockItem(final Block block, final Component displayName) { + ControllerBlockItem(final Block block) { super(block, new Item.Properties().stacksTo(1), PlatformApi.INSTANCE.getEnergyItemHelper()); - this.name = displayName; + this.block = block; } @Override public Component getDescription() { - return name; + return block.getName(); } @Override public Component getName(final ItemStack stack) { - return name; + return block.getName(); } @Override @@ -51,4 +54,13 @@ public EnergyStorage createEnergyStorage(final ItemStack stack) { BlockEntities.INSTANCE.getController() ); } + + @Override + protected boolean placeBlock(final BlockPlaceContext ctx, final BlockState state) { + if (ctx.getPlayer() instanceof ServerPlayer serverPlayer + && !(PlatformApi.INSTANCE.canPlaceNetworkNode(serverPlayer, ctx.getLevel(), ctx.getClickedPos(), state))) { + return false; + } + return super.placeBlock(ctx, state); + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/CreativeControllerBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/CreativeControllerBlock.java index a2b071dca..24df80bb6 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/CreativeControllerBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/CreativeControllerBlock.java @@ -22,6 +22,6 @@ CreativeControllerBlockItem> getBlockColorMap() { @Override public CreativeControllerBlockItem createBlockItem() { - return new CreativeControllerBlockItem(this, name); + return new CreativeControllerBlockItem(this); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/CreativeControllerBlockItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/CreativeControllerBlockItem.java index 026576d86..c5f8fad45 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/CreativeControllerBlockItem.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/CreativeControllerBlockItem.java @@ -1,15 +1,17 @@ package com.refinedmods.refinedstorage2.platform.common.controller; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; -import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; -public class CreativeControllerBlockItem extends NamedBlockItem { - CreativeControllerBlockItem(final Block block, final Component name) { - super(block, new Item.Properties().stacksTo(1), name, createTranslation("item", "creative_controller.help")); +public class CreativeControllerBlockItem extends NetworkNodeBlockItem { + private static final MutableComponent HELP = createTranslation("item", "creative_controller.help"); + + CreativeControllerBlockItem(final Block block) { + super(block, new Item.Properties().stacksTo(1), HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/detector/DetectorBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/detector/DetectorBlock.java index 195db2cc0..892333d3e 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/detector/DetectorBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/detector/DetectorBlock.java @@ -6,9 +6,10 @@ import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; import com.refinedmods.refinedstorage2.platform.common.support.ColorableBlock; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.direction.DirectionType; import com.refinedmods.refinedstorage2.platform.common.support.direction.DirectionTypeImpl; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; @@ -18,7 +19,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -36,8 +36,8 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class DetectorBlock extends AbstractDirectionalBlock - implements ColorableBlock, SimpleWaterloggedBlock, EntityBlock, - BlockItemProvider { + implements ColorableBlock, SimpleWaterloggedBlock, EntityBlock, + BlockItemProvider { public static final BooleanProperty POWERED = BooleanProperty.create("powered"); private static final Component HELP = createTranslation("item", "detector.help"); @@ -75,7 +75,7 @@ protected void createBlockStateDefinition(final StateDefinition.Builder getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getDetector(); } @@ -137,7 +137,7 @@ public int getSignal(final BlockState state, } @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), name, HELP); + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/detector/DetectorBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/detector/DetectorBlockEntity.java index 680e685a0..87bf4875c 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/detector/DetectorBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/detector/DetectorBlockEntity.java @@ -13,7 +13,7 @@ import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage2.platform.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage2.platform.common.support.containermenu.AbstractSingleAmountContainerMenu; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceContainerImpl; @@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory; public class DetectorBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider { + implements NetworkNodeMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(DetectorBlockEntity.class); private static final String TAG_AMOUNT = "amount"; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/exporter/ExporterBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/exporter/ExporterBlock.java index b7d004666..501b1c5cb 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/exporter/ExporterBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/exporter/ExporterBlock.java @@ -5,10 +5,11 @@ import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalCableBlock; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; import com.refinedmods.refinedstorage2.platform.common.support.ColorableBlock; import com.refinedmods.refinedstorage2.platform.common.support.DirectionalCableBlockShapes; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import java.util.HashMap; @@ -20,7 +21,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; @@ -32,7 +32,7 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class ExporterBlock extends AbstractDirectionalCableBlock - implements ColorableBlock, EntityBlock, BlockItemProvider { + implements ColorableBlock, EntityBlock, BlockItemProvider { private static final Component HELP = createTranslation("item", "exporter.help"); private static final Map SHAPE_CACHE = new HashMap<>(); private static final AbstractBlockEntityTicker TICKER = @@ -65,7 +65,7 @@ public BlockEntityTicker getTicker(final Level level, } @Override - public BlockColorMap getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getExporter(); } @@ -87,7 +87,7 @@ public MutableComponent getName() { } @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), name, HELP); + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/AbstractGridBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/AbstractGridBlockEntity.java index 51277a021..ba9054fae 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/AbstractGridBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/AbstractGridBlockEntity.java @@ -2,18 +2,21 @@ import com.refinedmods.refinedstorage2.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage2.api.grid.watcher.GridWatcher; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.Network; import com.refinedmods.refinedstorage2.api.network.impl.node.container.NetworkNodeContainerPriorities; import com.refinedmods.refinedstorage2.api.network.impl.node.grid.GridNetworkNode; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.Storage; import com.refinedmods.refinedstorage2.api.storage.TrackedResourceAmount; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformSecurityNetworkComponent; +import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.api.support.resource.ResourceType; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import java.util.List; @@ -28,7 +31,7 @@ public abstract class AbstractGridBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements Grid, ExtendedMenuProvider { + implements Grid, NetworkNodeMenuProvider { protected AbstractGridBlockEntity(final BlockEntityType type, final BlockPos pos, final BlockState state, @@ -49,11 +52,12 @@ public List getResources(final Class act } @Override - public GridOperations createOperations(final ResourceType resourceType, - final Actor actor) { - final StorageChannel storageChannel = requireNonNull(getNode().getNetwork()) - .getComponent(StorageNetworkComponent.class); - return resourceType.createGridOperations(storageChannel, actor); + public GridOperations createOperations(final ResourceType resourceType, final ServerPlayer player) { + final Network network = requireNonNull(getNode().getNetwork()); + final StorageChannel storageChannel = network.getComponent(StorageNetworkComponent.class); + final PlatformSecurityNetworkComponent security = network.getComponent(PlatformSecurityNetworkComponent.class); + final GridOperations operations = resourceType.createGridOperations(storageChannel, new PlayerActor(player)); + return new SecuredGridOperations(player, security, operations); } @Override diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/AbstractGridContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/AbstractGridContainerMenu.java index bf2de122c..e3c5d027b 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/AbstractGridContainerMenu.java @@ -33,6 +33,8 @@ import com.refinedmods.refinedstorage2.platform.common.grid.strategy.ClientGridScrollingStrategy; import com.refinedmods.refinedstorage2.platform.common.grid.view.CompositeGridResourceFactory; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBaseContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; +import com.refinedmods.refinedstorage2.platform.common.support.stretching.ScreenSizeListener; import com.refinedmods.refinedstorage2.platform.common.util.PacketUtil; import com.refinedmods.refinedstorage2.query.lexer.LexerTokenMappings; import com.refinedmods.refinedstorage2.query.parser.ParserOperatorMappings; @@ -57,7 +59,7 @@ import static java.util.Objects.requireNonNull; public abstract class AbstractGridContainerMenu extends AbstractBaseContainerMenu - implements GridWatcher, GridInsertionStrategy, GridExtractionStrategy, GridScrollingStrategy { + implements GridWatcher, GridInsertionStrategy, GridExtractionStrategy, GridScrollingStrategy, ScreenSizeListener { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractGridContainerMenu.class); private static final GridQueryParserImpl QUERY_PARSER = new GridQueryParserImpl( LexerTokenMappings.DEFAULT_MAPPINGS, @@ -82,8 +84,6 @@ public abstract class AbstractGridContainerMenu extends AbstractBaseContainerMen private GridExtractionStrategy extractionStrategy; @Nullable private GridScrollingStrategy scrollingStrategy; - @Nullable - private Runnable sizeChangedListener; private GridSynchronizer synchronizer; @Nullable private ResourceType resourceTypeFilter; @@ -141,8 +141,8 @@ protected AbstractGridContainerMenu( this.grid = grid; this.grid.addWatcher(this, PlayerActor.class); - this.synchronizer = PlatformApi.INSTANCE.getGridSynchronizerRegistry().getDefault(); - initStrategies(); + this.synchronizer = NoopGridSynchronizer.INSTANCE; + initStrategies((ServerPlayer) playerInventory.player); } private Predicate filterStorageChannel() { @@ -172,10 +172,6 @@ public void onResourceUpdate(final ResourceKey resource, view.onChange(resource, amount, trackedResource); } - public void setSizeChangedListener(@Nullable final Runnable sizeChangedListener) { - this.sizeChangedListener = sizeChangedListener; - } - public GridSortingDirection getSortingDirection() { return Platform.INSTANCE.getConfig().getGrid().getSortingDirection(); } @@ -196,17 +192,6 @@ public void setSortingType(final GridSortingTypes sortingType) { view.sort(); } - public GridSize getSize() { - return Platform.INSTANCE.getConfig().getGrid().getSize(); - } - - public void setSize(final GridSize size) { - Platform.INSTANCE.getConfig().getGrid().setSize(size); - if (sizeChangedListener != null) { - sizeChangedListener.run(); - } - } - public void setSearchBox(final GridSearchBox searchBox) { this.searchBox = searchBox; registerViewUpdatingListener(searchBox); @@ -250,7 +235,8 @@ public void removed(final Player playerEntity) { } } - public void addSlots(final int playerInventoryY) { + @Override + public void onScreenReady(final int playerInventoryY) { resetSlots(); addPlayerInventory(playerInventory, 8, playerInventoryY); } @@ -276,7 +262,7 @@ public void onChanged( if (!(resource instanceof PlatformResourceKey platformResource)) { return; } - LOGGER.info("{} received a change of {} for {}", this, change, resource); + LOGGER.debug("{} received a change of {} for {}", this, change, resource); Platform.INSTANCE.getServerToClientCommunications().sendGridUpdate( (ServerPlayer) playerInventory.player, platformResource, @@ -288,25 +274,25 @@ public void onChanged( @Override public void invalidate() { if (playerInventory.player instanceof ServerPlayer serverPlayer) { - initStrategies(); + initStrategies(serverPlayer); Platform.INSTANCE.getServerToClientCommunications().sendGridClear(serverPlayer); } } - private void initStrategies() { + private void initStrategies(final ServerPlayer player) { this.insertionStrategy = PlatformApi.INSTANCE.createGridInsertionStrategy( this, - playerInventory.player, + player, requireNonNull(grid) ); this.extractionStrategy = PlatformApi.INSTANCE.createGridExtractionStrategy( this, - playerInventory.player, + player, requireNonNull(grid) ); this.scrollingStrategy = PlatformApi.INSTANCE.createGridScrollingStrategy( this, - playerInventory.player, + player, requireNonNull(grid) ); } @@ -337,7 +323,7 @@ private GridSynchronizer loadSynchronizer() { .getGrid() .getSynchronizer() .flatMap(id -> PlatformApi.INSTANCE.getGridSynchronizerRegistry().get(id)) - .orElse(PlatformApi.INSTANCE.getGridSynchronizerRegistry().getDefault()); + .orElse(NoopGridSynchronizer.INSTANCE); } @Nullable @@ -362,20 +348,20 @@ public ResourceType getResourceType() { public void toggleSynchronizer() { final PlatformRegistry registry = PlatformApi.INSTANCE.getGridSynchronizerRegistry(); final Config.GridEntry config = Platform.INSTANCE.getConfig().getGrid(); - final GridSynchronizer newSynchronizer = registry.next(getSynchronizer()); - if (newSynchronizer == registry.getDefault()) { + final GridSynchronizer newSynchronizer = registry.nextOrNullIfLast(getSynchronizer()); + if (newSynchronizer == null) { config.clearSynchronizer(); } else { registry.getId(newSynchronizer).ifPresent(config::setSynchronizer); } - this.synchronizer = newSynchronizer; + this.synchronizer = newSynchronizer == null ? NoopGridSynchronizer.INSTANCE : newSynchronizer; } public void toggleResourceType() { final PlatformRegistry registry = PlatformApi.INSTANCE.getResourceTypeRegistry(); final Config.GridEntry config = Platform.INSTANCE.getConfig().getGrid(); final ResourceType newResourceType = resourceTypeFilter == null - ? registry.getDefault() + ? ResourceTypes.ITEM : registry.nextOrNullIfLast(resourceTypeFilter); if (newResourceType == null) { config.clearResourceType(); diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridBlock.java index ea5be5efe..5221ffcb8 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridBlock.java @@ -4,8 +4,9 @@ import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import javax.annotation.Nullable; @@ -14,7 +15,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; @@ -23,8 +23,8 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; -public class CraftingGridBlock extends AbstractGridBlock - implements BlockItemProvider { +public class CraftingGridBlock extends AbstractGridBlock + implements BlockItemProvider { private static final Component HELP = createTranslation("item", "crafting_grid.help"); private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>( BlockEntities.INSTANCE::getCraftingGrid, @@ -36,7 +36,7 @@ public CraftingGridBlock(final DyeColor color, final MutableComponent name) { } @Override - public BlockColorMap getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getCraftingGrid(); } @@ -55,7 +55,7 @@ public BlockEntityTicker getTicker(final Level level, } @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), getName(), HELP); + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridBlockEntity.java index bd48406f7..e331a52e4 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridBlockEntity.java @@ -2,8 +2,8 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.node.grid.GridNetworkNode; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.common.Platform; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridContainerMenu.java index 43ea346da..4ce75a353 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridContainerMenu.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridContainerMenu.java @@ -41,7 +41,7 @@ public CraftingGridContainerMenu(final int syncId, final Inventory playerInvento super(Menus.INSTANCE.getCraftingGrid(), syncId, playerInventory, buf); this.source = new ClientCraftingGridSource(); this.player = playerInventory.player; - addSlots(0); + onScreenReady(0); registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); } @@ -51,7 +51,7 @@ public CraftingGridContainerMenu(final int syncId, final Inventory playerInvento super(Menus.INSTANCE.getCraftingGrid(), syncId, playerInventory, grid); this.source = new CraftingGridSourceImpl(grid); this.player = playerInventory.player; - addSlots(0); + onScreenReady(0); registerProperty(new ServerProperty<>( PropertyTypes.REDSTONE_MODE, grid::getRedstoneMode, @@ -88,8 +88,8 @@ public ItemStack quickMoveStack(final Player actor, final int slotIndex) { } @Override - public void addSlots(final int playerInventoryY) { - super.addSlots(playerInventoryY); + public void onScreenReady(final int playerInventoryY) { + super.onScreenReady(playerInventoryY); craftingMatrixSlots.clear(); for (int y = 0; y < 3; ++y) { for (int x = 0; x < 3; ++x) { diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridSourceImpl.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridSourceImpl.java index b6a27e6dc..7fad1dd98 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridSourceImpl.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/CraftingGridSourceImpl.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage2.platform.common.grid; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceAmount; import com.refinedmods.refinedstorage2.api.resource.list.ResourceList; import com.refinedmods.refinedstorage2.api.resource.list.ResourceListImpl; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridBlock.java index d33ef786e..2547b5d94 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridBlock.java @@ -4,8 +4,9 @@ import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import javax.annotation.Nullable; @@ -14,7 +15,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; @@ -23,8 +23,8 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; -public class GridBlock extends AbstractGridBlock - implements BlockItemProvider { +public class GridBlock extends AbstractGridBlock + implements BlockItemProvider { private static final Component HELP = createTranslation("item", "grid.help"); private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>( BlockEntities.INSTANCE::getGrid, @@ -35,9 +35,8 @@ public GridBlock(final DyeColor color, final MutableComponent name) { super(name, color); } - @Override - public BlockColorMap getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getGrid(); } @@ -56,7 +55,7 @@ public BlockEntityTicker getTicker(final Level level, } @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), getName(), HELP); + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridContainerMenu.java index e2d5eb918..58270e006 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridContainerMenu.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridContainerMenu.java @@ -12,13 +12,13 @@ public class GridContainerMenu extends AbstractGridContainerMenu { public GridContainerMenu(final int syncId, final Inventory playerInventory, final FriendlyByteBuf buf) { super(Menus.INSTANCE.getGrid(), syncId, playerInventory, buf); - addSlots(0); + onScreenReady(0); registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); } GridContainerMenu(final int syncId, final Inventory playerInventory, final GridBlockEntity grid) { super(Menus.INSTANCE.getGrid(), syncId, playerInventory, grid); - addSlots(0); + onScreenReady(0); registerProperty(new ServerProperty<>( PropertyTypes.REDSTONE_MODE, grid::getRedstoneMode, diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/NoopGridSynchronizer.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/NoopGridSynchronizer.java index 825f31698..e69cd08ff 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/NoopGridSynchronizer.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/NoopGridSynchronizer.java @@ -8,9 +8,14 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class NoopGridSynchronizer extends AbstractGridSynchronizer { + public static final NoopGridSynchronizer INSTANCE = new NoopGridSynchronizer(); + private static final MutableComponent TITLE = createTranslation("gui", "grid.synchronizer.off"); private static final Component HELP = createTranslation("gui", "grid.synchronizer.off.help"); + private NoopGridSynchronizer() { + } + @Override public MutableComponent getTitle() { return TITLE; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/SecuredGridOperations.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/SecuredGridOperations.java new file mode 100644 index 000000000..b46dc4735 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/SecuredGridOperations.java @@ -0,0 +1,54 @@ +package com.refinedmods.refinedstorage2.platform.common.grid; + +import com.refinedmods.refinedstorage2.api.grid.operations.GridExtractMode; +import com.refinedmods.refinedstorage2.api.grid.operations.GridInsertMode; +import com.refinedmods.refinedstorage2.api.grid.operations.GridOperations; +import com.refinedmods.refinedstorage2.api.resource.ResourceKey; +import com.refinedmods.refinedstorage2.api.storage.ExtractableStorage; +import com.refinedmods.refinedstorage2.api.storage.InsertableStorage; +import com.refinedmods.refinedstorage2.platform.api.PlatformApi; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformSecurityNetworkComponent; +import com.refinedmods.refinedstorage2.platform.common.security.BuiltinPermission; + +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.server.level.ServerPlayer; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + +public class SecuredGridOperations implements GridOperations { + private static final MutableComponent CANNOT_EXTRACT_MESSAGE = createTranslation("misc", "no_permission.extract"); + private static final MutableComponent CANNOT_INSERT_MESSAGE = createTranslation("misc", "no_permission.insert"); + + private final ServerPlayer player; + private final PlatformSecurityNetworkComponent securityNetworkComponent; + private final GridOperations delegate; + + public SecuredGridOperations(final ServerPlayer player, + final PlatformSecurityNetworkComponent securityNetworkComponent, + final GridOperations delegate) { + this.player = player; + this.securityNetworkComponent = securityNetworkComponent; + this.delegate = delegate; + } + + @Override + public boolean extract(final ResourceKey resource, + final GridExtractMode extractMode, + final InsertableStorage destination) { + if (!securityNetworkComponent.isAllowed(BuiltinPermission.EXTRACT, player)) { + PlatformApi.INSTANCE.sendNoPermissionMessage(player, CANNOT_EXTRACT_MESSAGE); + return false; + } + return delegate.extract(resource, extractMode, destination); + } + + @Override + public boolean insert(final ResourceKey resource, final GridInsertMode insertMode, + final ExtractableStorage source) { + if (!securityNetworkComponent.isAllowed(BuiltinPermission.INSERT, player)) { + PlatformApi.INSTANCE.sendNoPermissionMessage(player, CANNOT_INSERT_MESSAGE); + return false; + } + return delegate.insert(resource, insertMode, source); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGrid.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGrid.java index 4389dadac..54df1fd18 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGrid.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGrid.java @@ -5,13 +5,15 @@ import com.refinedmods.refinedstorage2.api.grid.watcher.GridWatcher; import com.refinedmods.refinedstorage2.api.grid.watcher.GridWatcherManager; import com.refinedmods.refinedstorage2.api.grid.watcher.GridWatcherManagerImpl; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.NoopStorage; import com.refinedmods.refinedstorage2.api.storage.Storage; import com.refinedmods.refinedstorage2.api.storage.TrackedResourceAmount; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformSecurityNetworkComponent; +import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.NetworkBoundItemSession; import com.refinedmods.refinedstorage2.platform.api.support.resource.ResourceType; import com.refinedmods.refinedstorage2.platform.common.Platform; @@ -20,6 +22,8 @@ import java.util.List; import java.util.Optional; +import net.minecraft.server.level.ServerPlayer; + class WirelessGrid implements Grid { private final NetworkBoundItemSession session; private final GridWatcherManager watchers = new GridWatcherManagerImpl(); @@ -32,6 +36,10 @@ private Optional getStorage() { return session.resolveNetwork().map(network -> network.getComponent(StorageNetworkComponent.class)); } + private Optional getSecurity() { + return session.resolveNetwork().map(network -> network.getComponent(PlatformSecurityNetworkComponent.class)); + } + @Override public void addWatcher(final GridWatcher watcher, final Class actorType) { session.drainEnergy(Platform.INSTANCE.getConfig().getWirelessGrid().getOpenEnergyUsage()); @@ -69,11 +77,20 @@ public List getResources(final Class act } @Override - public GridOperations createOperations(final ResourceType resourceType, - final Actor actor) { + public GridOperations createOperations(final ResourceType resourceType, final ServerPlayer player) { return getStorage() - .map(storageChannel -> resourceType.createGridOperations(storageChannel, actor)) + .flatMap(storageChannel -> + getSecurity().map(security -> createGridOperations(resourceType, player, storageChannel, security))) .map(gridOperations -> (GridOperations) new WirelessGridOperations(gridOperations, session, watchers)) .orElseGet(NoopGridOperations::new); } + + private GridOperations createGridOperations(final ResourceType resourceType, + final ServerPlayer player, + final StorageNetworkComponent storageChannel, + final PlatformSecurityNetworkComponent securityNetworkComponent) { + final PlayerActor playerActor = new PlayerActor(player); + final GridOperations operations = resourceType.createGridOperations(storageChannel, playerActor); + return new SecuredGridOperations(player, securityNetworkComponent, operations); + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGridContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGridContainerMenu.java index 7ecfa7dfa..9803393a5 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGridContainerMenu.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGridContainerMenu.java @@ -12,7 +12,7 @@ public class WirelessGridContainerMenu extends AbstractGridContainerMenu { public WirelessGridContainerMenu(final int syncId, final Inventory playerInventory, final FriendlyByteBuf buf) { super(Menus.INSTANCE.getWirelessGrid(), syncId, playerInventory, buf); this.disabledSlot = PlatformApi.INSTANCE.getSlotReference(buf).orElse(null); - addSlots(0); + onScreenReady(0); } WirelessGridContainerMenu(final int syncId, @@ -21,6 +21,6 @@ public WirelessGridContainerMenu(final int syncId, final Inventory playerInvento final SlotReference slotReference) { super(Menus.INSTANCE.getWirelessGrid(), syncId, playerInventory, grid); this.disabledSlot = slotReference; - addSlots(0); + onScreenReady(0); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGridItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGridItem.java index 7aac3acad..e7124ff40 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGridItem.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/WirelessGridItem.java @@ -4,10 +4,13 @@ import com.refinedmods.refinedstorage2.api.network.impl.energy.EnergyStorageImpl; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; +import com.refinedmods.refinedstorage2.platform.api.security.SecurityHelper; import com.refinedmods.refinedstorage2.platform.api.support.energy.AbstractNetworkBoundEnergyItem; import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.NetworkBoundItemSession; import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; import com.refinedmods.refinedstorage2.platform.common.Platform; +import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; +import com.refinedmods.refinedstorage2.platform.common.security.BuiltinPermission; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.Item; @@ -33,6 +36,13 @@ public EnergyStorage createEnergyStorage(final ItemStack stack) { public void use(final ServerPlayer player, final SlotReference slotReference, final NetworkBoundItemSession session) { + final boolean isAllowed = session.resolveNetwork() + .map(network -> SecurityHelper.isAllowed(player, BuiltinPermission.OPEN, network)) + .orElse(true); // if the network can't be resolved that will be apparent later in the UI. + if (!isAllowed) { + PlatformApi.INSTANCE.sendNoPermissionToOpenMessage(player, ContentNames.WIRELESS_GRID); + return; + } final Grid grid = new WirelessGrid(session); Platform.INSTANCE.getMenuOpener().openMenu(player, new WirelessGridExtendedMenuProvider(grid, slotReference)); } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/screen/AbstractGridScreen.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/screen/AbstractGridScreen.java index a46f2213e..65910f8ac 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/screen/AbstractGridScreen.java @@ -7,27 +7,24 @@ import com.refinedmods.refinedstorage2.api.storage.tracked.TrackedResource; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; import com.refinedmods.refinedstorage2.platform.api.grid.GridScrollMode; -import com.refinedmods.refinedstorage2.platform.api.grid.GridSynchronizer; import com.refinedmods.refinedstorage2.platform.api.grid.view.PlatformGridResource; -import com.refinedmods.refinedstorage2.platform.api.support.registry.PlatformRegistry; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.common.Platform; import com.refinedmods.refinedstorage2.platform.common.grid.AbstractGridContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.grid.NoopGridSynchronizer; import com.refinedmods.refinedstorage2.platform.common.grid.view.ItemGridResource; -import com.refinedmods.refinedstorage2.platform.common.support.AbstractBaseScreen; import com.refinedmods.refinedstorage2.platform.common.support.containermenu.DisabledSlot; import com.refinedmods.refinedstorage2.platform.common.support.containermenu.PropertyTypes; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; +import com.refinedmods.refinedstorage2.platform.common.support.stretching.AbstractStretchingScreen; import com.refinedmods.refinedstorage2.platform.common.support.tooltip.SmallTextClientTooltipComponent; import com.refinedmods.refinedstorage2.platform.common.support.widget.History; import com.refinedmods.refinedstorage2.platform.common.support.widget.RedstoneModeSideButtonWidget; -import com.refinedmods.refinedstorage2.platform.common.support.widget.ScrollbarWidget; import com.refinedmods.refinedstorage2.query.lexer.SyntaxHighlighter; import com.refinedmods.refinedstorage2.query.lexer.SyntaxHighlighterColors; import java.util.ArrayList; import java.util.List; -import java.util.Objects; import javax.annotation.Nullable; import com.mojang.blaze3d.systems.RenderSystem; @@ -43,16 +40,14 @@ import org.slf4j.LoggerFactory; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; +import static java.util.Objects.requireNonNullElse; -public abstract class AbstractGridScreen extends AbstractBaseScreen { +public abstract class AbstractGridScreen extends AbstractStretchingScreen { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractGridScreen.class); private static final int MODIFIED_JUST_NOW_MAX_SECONDS = 10; - private static final int TOP_HEIGHT = 19; - private static final int INVENTORY_INCLUDING_TITLE_HEIGHT = 99; private static final int COLUMNS = 9; - private static final int MIN_ROWS = 3; private static final int DISABLED_SLOT_COLOR = 0xFF5B5B5B; private static final int SELECTION_SLOT_COLOR = -2130706433; @@ -63,10 +58,7 @@ public abstract class AbstractGridScreen ex @Nullable GridSearchBoxWidget searchField; - @Nullable - private ScrollbarWidget scrollbar; private int totalRows; - private int visibleRows; private int currentGridSlotIndex; protected AbstractGridScreen(final T menu, @@ -75,19 +67,12 @@ protected AbstractGridScreen(final T menu, final int bottomHeight) { super(menu, playerInventory, text); this.bottomHeight = bottomHeight; - this.menu.setSizeChangedListener(this::init); } @Override - protected void init() { + protected void init(final int rows) { LOGGER.info("Initializing grid screen"); - this.visibleRows = calculateVisibleRows(); - this.imageHeight = TOP_HEIGHT + (visibleRows * 18) + bottomHeight; - this.inventoryLabelY = imageHeight - INVENTORY_INCLUDING_TITLE_HEIGHT + 4; - - super.init(); - if (searchField == null) { searchField = new GridSearchBoxWidget( font, @@ -103,14 +88,9 @@ protected void init() { } getMenu().setSearchBox(searchField); - getMenu().addSlots(imageHeight - INVENTORY_INCLUDING_TITLE_HEIGHT + 17); + getMenu().getView().setListener(this::updateScrollbar); + updateScrollbar(); - this.scrollbar = new ScrollbarWidget(leftPos + 174, topPos + 20, 12, (visibleRows * 18) - 2); - this.scrollbar.setScrollAnimation(Platform.INSTANCE.getConfig().getGrid().isSmoothScrolling()); - this.getMenu().getView().setListener(this::resourcesChanged); - resourcesChanged(); - - addWidget(scrollbar); addWidget(searchField); if (getMenu().hasProperty(PropertyTypes.REDSTONE_MODE)) { @@ -118,12 +98,14 @@ protected void init() { } addSideButton(new SortingDirectionSideButtonWidget(getMenu())); addSideButton(new SortingTypeSideButtonWidget(getMenu())); - addSideButton(new SizeSideButtonWidget(getMenu())); addSideButton(new AutoSelectedSideButtonWidget(getMenu())); addSideButton(new ResourceTypeSideButtonWidget(getMenu())); - final PlatformRegistry synchronizers = PlatformApi.INSTANCE.getGridSynchronizerRegistry(); - if (!synchronizers.isEmpty()) { + final boolean onlyHasNoopSynchronizer = PlatformApi.INSTANCE.getGridSynchronizerRegistry() + .getAll() + .stream() + .allMatch(synchronizer -> synchronizer == NoopGridSynchronizer.INSTANCE); + if (!onlyHasNoopSynchronizer) { addSideButton(new SynchronizationSideButtonWidget(getMenu())); searchField.addListener(this::trySynchronizeFromGrid); } @@ -150,104 +132,75 @@ private void trySynchronizeToGrid() { searchField.setValue(text); } - private void resourcesChanged() { - if (scrollbar == null) { - return; - } - totalRows = (int) Math.ceil((float) getMenu().getView().getViewList().size() / (float) COLUMNS); - scrollbar.setEnabled(totalRows > visibleRows); - final int rowsExcludingVisibleOnes = totalRows - visibleRows; - final int maxOffset = scrollbar.isScrollAnimation() - ? (rowsExcludingVisibleOnes * 18) - : rowsExcludingVisibleOnes; - scrollbar.setMaxOffset(maxOffset); - } - - private int calculateVisibleRows() { - final int screenSpaceAvailable = height - TOP_HEIGHT - bottomHeight; - final int maxRows = getMaxRows(); - return Math.max(MIN_ROWS, Math.min((screenSpaceAvailable / 18) - MIN_ROWS, maxRows)); - } - - private int getMaxRows() { - return switch (getMenu().getSize()) { - case STRETCH -> Platform.INSTANCE.getConfig().getGrid().getMaxRowsStretch(); - case SMALL -> 3; - case MEDIUM -> 5; - case LARGE -> 8; - case EXTRA_LARGE -> 12; - }; + private void updateScrollbar() { + this.totalRows = (int) Math.ceil((float) getMenu().getView().getViewList().size() / (float) COLUMNS); + updateScrollbar(totalRows); } private boolean isOverStorageArea(final int mouseX, final int mouseY) { final int relativeMouseX = mouseX - leftPos; final int relativeMouseY = mouseY - topPos; return relativeMouseX >= 7 - && relativeMouseY >= TOP_HEIGHT && relativeMouseX <= 168 - && relativeMouseY <= TOP_HEIGHT + (visibleRows * 18); + && isInStretchedArea(relativeMouseY); } @Override - protected void renderBg(final GuiGraphics graphics, final float delta, final int mouseX, final int mouseY) { - final int x = (width - imageWidth) / 2; - final int y = (height - imageHeight) / 2; - - graphics.blit(getTexture(), x, y, 0, 0, imageWidth, TOP_HEIGHT); - - for (int row = 0; row < visibleRows; ++row) { + protected void renderStretchingBackground(final GuiGraphics graphics, final int x, final int y, final int rows) { + for (int row = 0; row < rows; ++row) { int textureY = 37; if (row == 0) { textureY = 19; - } else if (row == visibleRows - 1) { + } else if (row == rows - 1) { textureY = 55; } - graphics.blit(getTexture(), x, y + TOP_HEIGHT + (18 * row), 0, textureY, imageWidth, 18); + graphics.blit(getTexture(), x, y + (ROW_SIZE * row), 0, textureY, imageWidth, ROW_SIZE); } + } - graphics.blit(getTexture(), x, y + TOP_HEIGHT + (18 * visibleRows), 0, 73, imageWidth, bottomHeight); + @Override + protected int getBottomHeight() { + return bottomHeight; + } - currentGridSlotIndex = -1; + @Override + protected int getBottomV() { + return 73; + } - graphics.enableScissor(x + 7, y + TOP_HEIGHT, x + 7 + (18 * COLUMNS), y + TOP_HEIGHT + (visibleRows * 18)); - for (int row = 0; row < Math.max(totalRows, visibleRows); ++row) { - renderRow(graphics, mouseX, mouseY, x, y, row); + @Override + protected void renderRows(final GuiGraphics graphics, + final int x, + final int y, + final int topHeight, + final int rows, + final int mouseX, + final int mouseY) { + currentGridSlotIndex = -1; + for (int row = 0; row < Math.max(totalRows, rows); ++row) { + final int rowX = x + 7; + final int rowY = y + topHeight + (row * ROW_SIZE) - getScrollbarOffset(); + final boolean isOutOfFrame = (rowY < y + topHeight - ROW_SIZE) + || (rowY > y + topHeight + (ROW_SIZE * rows)); + if (isOutOfFrame) { + continue; + } + renderRow(graphics, mouseX, mouseY, rowX, rowY, row); } - graphics.disableScissor(); } private void renderRow(final GuiGraphics graphics, final int mouseX, final int mouseY, - final int x, - final int y, + final int rowX, + final int rowY, final int row) { - final int rowX = x + 7; - final int rowY = y + TOP_HEIGHT + (row * 18) - getScrollbarOffset(); - - final boolean isOutOfFrame = (rowY < y + TOP_HEIGHT - 18) || (rowY > y + TOP_HEIGHT + (visibleRows * 18)); - if (isOutOfFrame) { - return; - } - - graphics.blit(getTexture(), rowX, rowY, 0, 238, 162, 18); - + graphics.blit(getTexture(), rowX, rowY, 0, 238, 162, ROW_SIZE); for (int column = 0; column < COLUMNS; ++column) { renderCell(graphics, mouseX, mouseY, rowX, rowY, (row * COLUMNS) + column, column); } } - private int getScrollbarOffset() { - if (scrollbar == null) { - return 0; - } - final int scrollbarOffset = (int) scrollbar.getOffset(); - if (!scrollbar.isScrollAnimation()) { - return scrollbarOffset * 18; - } - return scrollbarOffset; - } - private void renderCell(final GuiGraphics graphics, final int mouseX, final int mouseY, @@ -256,7 +209,7 @@ private void renderCell(final GuiGraphics graphics, final int idx, final int column) { final GridView view = getMenu().getView(); - final int slotX = rowX + 1 + (column * 18); + final int slotX = rowX + 1 + (column * ROW_SIZE); final int slotY = rowY + 1; if (!getMenu().isActive()) { renderDisabledSlot(graphics, slotX, slotY); @@ -308,8 +261,8 @@ private void renderAmount(final GuiGraphics graphics, } final String text = resource.isZeroed() ? "0" : platformResource.getDisplayedAmount(); final int color = resource.isZeroed() - ? Objects.requireNonNullElse(ChatFormatting.RED.getColor(), 15) - : Objects.requireNonNullElse(ChatFormatting.WHITE.getColor(), 15); + ? requireNonNullElse(ChatFormatting.RED.getColor(), 15) + : requireNonNullElse(ChatFormatting.WHITE.getColor(), 15); final boolean large = (minecraft != null && minecraft.isEnforceUnicode()) || Platform.INSTANCE.getConfig().getGrid().isLargeFont(); renderAmount(graphics, slotX, slotY, text, color, large); @@ -439,9 +392,6 @@ public PlatformResourceKey getCurrentResource() { @Override public void render(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { super.render(graphics, mouseX, mouseY, partialTicks); - if (scrollbar != null) { - scrollbar.render(graphics, mouseX, mouseY, partialTicks); - } if (searchField != null) { searchField.render(graphics, 0, 0, 0); } @@ -449,10 +399,6 @@ public void render(final GuiGraphics graphics, final int mouseX, final int mouse @Override public boolean mouseClicked(final double mouseX, final double mouseY, final int clickedButton) { - if (scrollbar != null && scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { - return true; - } - final ItemStack carriedStack = getMenu().getCarried(); final PlatformGridResource resource = getCurrentGridResource(); @@ -497,19 +443,6 @@ private static boolean shouldExtractToCursor() { return !hasShiftDown(); } - @Override - public void mouseMoved(final double mx, final double my) { - if (scrollbar != null) { - scrollbar.mouseMoved(mx, my); - } - super.mouseMoved(mx, my); - } - - @Override - public boolean mouseReleased(final double mx, final double my, final int button) { - return (scrollbar != null && scrollbar.mouseReleased(mx, my, button)) || super.mouseReleased(mx, my, button); - } - @Override public boolean mouseScrolled(final double x, final double y, final double z, final double delta) { final boolean up = delta > 0; @@ -523,9 +456,7 @@ public boolean mouseScrolled(final double x, final double y, final double z, fin mouseScrolledInInventory(up, hoveredSlot); } - final boolean didScrollbar = - scrollbar != null && !hasShiftDown() && !hasControlDown() && scrollbar.mouseScrolled(x, y, z, delta); - return didScrollbar || super.mouseScrolled(x, y, z, delta); + return super.mouseScrolled(x, y, z, delta); } private void mouseScrolledInInventory(final boolean up, final Slot slot) { diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/iface/InterfaceBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/iface/InterfaceBlock.java index 80f4de506..91f870bbe 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/iface/InterfaceBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/iface/InterfaceBlock.java @@ -4,7 +4,7 @@ import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBaseBlock; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; -import com.refinedmods.refinedstorage2.platform.common.support.SimpleBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import javax.annotation.Nullable; @@ -62,6 +62,6 @@ public BlockEntityTicker getTicker(final Level level, } public BlockItem createBlockItem() { - return new SimpleBlockItem(this, HELP); + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/iface/InterfaceBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/iface/InterfaceBlockEntity.java index 58f5a9965..c09b5ad03 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/iface/InterfaceBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/iface/InterfaceBlockEntity.java @@ -12,7 +12,7 @@ import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; import com.refinedmods.refinedstorage2.platform.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage2.platform.common.support.FilterWithFuzzyMode; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceContainerImpl; @@ -33,7 +33,7 @@ public class InterfaceBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider, BlockEntityWithDrops { + implements NetworkNodeMenuProvider, BlockEntityWithDrops { private static final String TAG_EXPORT_ITEMS = "ei"; private static final int EXPORT_SLOTS = 9; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/importer/ImporterBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/importer/ImporterBlock.java index 061634789..d63240ccd 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/importer/ImporterBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/importer/ImporterBlock.java @@ -5,10 +5,11 @@ import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalCableBlock; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; import com.refinedmods.refinedstorage2.platform.common.support.ColorableBlock; import com.refinedmods.refinedstorage2.platform.common.support.DirectionalCableBlockShapes; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import java.util.HashMap; @@ -20,7 +21,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; @@ -32,7 +32,7 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class ImporterBlock extends AbstractDirectionalCableBlock implements - ColorableBlock, EntityBlock, BlockItemProvider { + ColorableBlock, EntityBlock, BlockItemProvider { private static final Component HELP = createTranslation("item", "importer.help"); private static final Map SHAPE_CACHE = new HashMap<>(); private static final AbstractBlockEntityTicker TICKER = @@ -65,7 +65,7 @@ public BlockEntityTicker getTicker(final Level level, } @Override - public BlockColorMap getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getImporter(); } @@ -87,7 +87,7 @@ public MutableComponent getName() { } @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), name, HELP); + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/importer/ImporterBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/importer/ImporterBlockEntity.java index 8db0e297c..20aedfa69 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/importer/ImporterBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/importer/ImporterBlockEntity.java @@ -14,7 +14,7 @@ import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage2.platform.common.support.FilterModeSettings; import com.refinedmods.refinedstorage2.platform.common.support.FilterWithFuzzyMode; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractUpgradeableNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage2.platform.common.upgrade.UpgradeDestinations; @@ -39,7 +39,7 @@ public class ImporterBlockEntity extends AbstractUpgradeableNetworkNodeContainerBlockEntity - implements AmountOverride, ExtendedMenuProvider { + implements AmountOverride, NetworkNodeMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(ImporterBlockEntity.class); private static final String TAG_FILTER_MODE = "fim"; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/CableBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/CableBlock.java index d49d16772..06ecfa786 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/CableBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/CableBlock.java @@ -8,10 +8,11 @@ import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage2.platform.common.support.AbstractColoredBlock; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.CableBlockSupport; import com.refinedmods.refinedstorage2.platform.common.support.CableShapeCacheKey; import com.refinedmods.refinedstorage2.platform.common.support.ColorableBlock; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeContainerBlockEntityImpl; @@ -41,7 +42,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; public class CableBlock extends AbstractColoredBlock - implements ColorableBlock, SimpleWaterloggedBlock, EntityBlock { + implements ColorableBlock, SimpleWaterloggedBlock, EntityBlock { private static final AbstractBlockEntityTicker> TICKER = new NetworkNodeBlockEntityTicker<>(BlockEntities.INSTANCE::getCable); @@ -119,7 +120,7 @@ public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { } @Override - public BlockColorMap getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getCable(); } @@ -130,4 +131,9 @@ public BlockEntityTicker getTicker(final Level level, final BlockEntityType type) { return TICKER.get(level, type); } + + @Override + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this); + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkReceiverBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkReceiverBlock.java index 94db2f415..2cd782ed3 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkReceiverBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkReceiverBlock.java @@ -6,7 +6,8 @@ import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage2.platform.common.support.AbstractColoredBlock; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import javax.annotation.Nullable; @@ -46,7 +47,7 @@ protected void createBlockStateDefinition(final StateDefinition.Builder getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getNetworkReceiver(); } @@ -63,4 +64,9 @@ public BlockEntityTicker getTicker(final Level level, final BlockEntityType type) { return TICKER.get(level, type); } + + @Override + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this); + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkTransmitterBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkTransmitterBlock.java index 44f7184f7..62abfcb18 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkTransmitterBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkTransmitterBlock.java @@ -5,7 +5,8 @@ import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage2.platform.common.support.AbstractColoredBlock; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import javax.annotation.Nullable; @@ -47,7 +48,7 @@ protected void createBlockStateDefinition(final StateDefinition.Builder getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getNetworkTransmitter(); } @@ -64,4 +65,9 @@ public BlockEntityTicker getTicker(final Level level, final BlockEntityType type) { return TICKER.get(level, type); } + + @Override + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this); + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkTransmitterBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkTransmitterBlockEntity.java index 03adbb4bf..37ad5e2cf 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkTransmitterBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkTransmitterBlockEntity.java @@ -1,15 +1,15 @@ package com.refinedmods.refinedstorage2.platform.common.networking; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; import com.refinedmods.refinedstorage2.platform.api.support.network.ConnectionSink; import com.refinedmods.refinedstorage2.platform.common.Platform; import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; import com.refinedmods.refinedstorage2.platform.common.support.BlockEntityWithDrops; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import javax.annotation.Nullable; @@ -37,7 +37,7 @@ public class NetworkTransmitterBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider, BlockEntityWithDrops { + implements NetworkNodeMenuProvider, BlockEntityWithDrops { private static final Logger LOGGER = LoggerFactory.getLogger(NetworkTransmitterBlockEntity.class); private static final NetworkTransmitterStatus INACTIVE = NetworkTransmitterStatus.message( @@ -67,7 +67,7 @@ public NetworkTransmitterBlockEntity(final BlockPos pos, final BlockState state) setChanged(); updateReceiverLocation(); if (level != null) { - LOGGER.info("Network card was changed at {}, sending network update", worldPosition); + LOGGER.debug("Network card was changed at {}, sending network update", worldPosition); PlatformApi.INSTANCE.requestNetworkNodeUpdate(this, level); } }); @@ -86,7 +86,7 @@ public void updateStateInLevel(final BlockState state) { final NetworkTransmitterState currentState = state.getValue(NetworkTransmitterBlock.STATE); final NetworkTransmitterState newState = getState(); if (currentState != newState && level != null && stateChangeRateLimiter.tryAcquire()) { - LOGGER.info("Updating network transmitter at {} from {} to {}", worldPosition, currentState, newState); + LOGGER.debug("Updating network transmitter at {} from {} to {}", worldPosition, currentState, newState); level.setBlockAndUpdate(worldPosition, state.setValue(NetworkTransmitterBlock.STATE, newState)); } } @@ -142,7 +142,7 @@ private void tryReconnectingWithReceiver() { if (level == null) { return; } - LOGGER.info( + LOGGER.debug( "Receiver {} was not found in network for transmitter at {}, retrying and sending network update", receiverKey, worldPosition diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/recipemod/jei/RefinedStorageJeiModPlugin.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/recipemod/jei/RefinedStorageJeiModPlugin.java index 767208eb4..5f4657f2f 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/recipemod/jei/RefinedStorageJeiModPlugin.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/recipemod/jei/RefinedStorageJeiModPlugin.java @@ -69,7 +69,7 @@ public static IJeiRuntime getRuntime() { } private void initializePlatform(final IPlatformFluidHelper fluidHelper) { - LOGGER.info("Enabling JEI integration"); + LOGGER.debug("Enabling JEI integration"); registerIngredientConverters(fluidHelper); registerGridSynchronizers(); } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardContainerMenu.java new file mode 100644 index 000000000..a99097ed2 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardContainerMenu.java @@ -0,0 +1,119 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.platform.api.PlatformApi; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; +import com.refinedmods.refinedstorage2.platform.common.Platform; +import com.refinedmods.refinedstorage2.platform.common.support.AbstractBaseContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.support.stretching.ScreenSizeListener; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; + +public abstract class AbstractSecurityCardContainerMenu extends AbstractBaseContainerMenu + implements ScreenSizeListener { + protected final Inventory playerInventory; + private final List permissions = new ArrayList<>(); + + protected AbstractSecurityCardContainerMenu(final MenuType menuType, + final int syncId, + final Inventory playerInventory, + final FriendlyByteBuf buf) { + super(menuType, syncId); + this.playerInventory = playerInventory; + this.disabledSlot = PlatformApi.INSTANCE.getSlotReference(buf).orElse(null); + final int amountOfPermissions = buf.readInt(); + for (int i = 0; i < amountOfPermissions; ++i) { + final ResourceLocation id = buf.readResourceLocation(); + final boolean allowed = buf.readBoolean(); + final boolean dirty = buf.readBoolean(); + PlatformApi.INSTANCE.getPermissionRegistry().get(id).ifPresent(permission -> permissions.add(new Permission( + permission, + allowed, + dirty + ))); + } + } + + protected AbstractSecurityCardContainerMenu(final MenuType menuType, + final int syncId, + final Inventory playerInventory, + final SlotReference disabledSlot) { + super(menuType, syncId); + this.playerInventory = playerInventory; + this.disabledSlot = disabledSlot; + onScreenReady(0); + } + + List getPermissions() { + return permissions; + } + + @Override + public void onScreenReady(final int playerInventoryY) { + resetSlots(); + addPlayerInventory(playerInventory, 8, playerInventoryY); + } + + public void setPermission(final ResourceLocation permissionId, final boolean allowed) { + if (disabledSlot == null) { + return; + } + disabledSlot.resolve(playerInventory.player).ifPresent(stack -> setPermission(stack, permissionId, allowed)); + } + + private void setPermission(final ItemStack stack, final ResourceLocation permissionId, final boolean allowed) { + if (stack.getItem() instanceof AbstractSecurityCardItem securityCardItem) { + securityCardItem.setPermission(stack, permissionId, allowed); + } + } + + public void resetPermission(final ResourceLocation permissionId) { + if (disabledSlot == null) { + return; + } + disabledSlot.resolve(playerInventory.player).ifPresent(stack -> resetPermission(stack, permissionId)); + } + + private void resetPermission(final ItemStack stack, final ResourceLocation permissionId) { + if (stack.getItem() instanceof AbstractSecurityCardItem securityCardItem) { + securityCardItem.resetPermission(stack, permissionId); + } + } + + Permission resetPermission(final PlatformPermission permission) { + final boolean allowed = permission.isAllowedByDefault(); + Platform.INSTANCE.getClientToServerCommunications().sendSecurityCardResetPermission(permission); + return updatePermissionLocally(permission, allowed, false); + } + + Permission changePermission(final PlatformPermission permission, final boolean selected) { + Platform.INSTANCE.getClientToServerCommunications().sendSecurityCardPermission(permission, selected); + return updatePermissionLocally(permission, selected, true); + } + + private Permission updatePermissionLocally(final PlatformPermission permission, + final boolean allowed, + final boolean dirty) { + final Permission localPermission = permissions.stream().filter(p -> p.platformPermission == permission) + .findFirst() + .orElseThrow(); + final int index = permissions.indexOf(localPermission); + final Permission updatedLocalPermission = new Permission( + localPermission.platformPermission, + allowed, + dirty + ); + permissions.set(index, updatedLocalPermission); + return updatedLocalPermission; + } + + record Permission(PlatformPermission platformPermission, boolean allowed, boolean dirty) { + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardExtendedMenuProvider.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardExtendedMenuProvider.java new file mode 100644 index 000000000..92247cfc1 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardExtendedMenuProvider.java @@ -0,0 +1,42 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage2.platform.api.PlatformApi; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; + +import java.util.List; +import java.util.Set; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; + +abstract class AbstractSecurityCardExtendedMenuProvider implements ExtendedMenuProvider { + private final SlotReference slotReference; + private final SecurityPolicy securityPolicy; + private final Set dirtyPermissions; + + AbstractSecurityCardExtendedMenuProvider(final SlotReference slotReference, + final SecurityPolicy securityPolicy, + final Set dirtyPermissions) { + this.slotReference = slotReference; + this.securityPolicy = securityPolicy; + this.dirtyPermissions = dirtyPermissions; + } + + @Override + public void writeScreenOpeningData(final ServerPlayer player, final FriendlyByteBuf buf) { + PlatformApi.INSTANCE.writeSlotReference(slotReference, buf); + + final List permissions = PlatformApi.INSTANCE.getPermissionRegistry().getAll(); + buf.writeInt(permissions.size()); + for (final PlatformPermission permission : permissions) { + final ResourceLocation id = PlatformApi.INSTANCE.getPermissionRegistry().getId(permission).orElseThrow(); + buf.writeResourceLocation(id); + buf.writeBoolean(securityPolicy.isAllowed(permission)); + buf.writeBoolean(dirtyPermissions.contains(permission)); + } + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardItem.java new file mode 100644 index 000000000..beef7bf88 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardItem.java @@ -0,0 +1,158 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.security.Permission; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage2.platform.api.PlatformApi; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.api.security.SecurityPolicyContainerItem; +import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; +import com.refinedmods.refinedstorage2.platform.common.Platform; + +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.Nullable; + +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + +abstract class AbstractSecurityCardItem extends Item implements SecurityPolicyContainerItem { + private static final String TAG_PERMISSIONS = "permissions"; + + protected AbstractSecurityCardItem(final Properties properties) { + super(properties); + } + + @Override + public void appendHoverText(final ItemStack stack, + @Nullable final Level level, + final List lines, + final TooltipFlag flag) { + super.appendHoverText(stack, level, lines, flag); + getPolicy(stack).ifPresent(policy -> appendHoverText(lines, policy, getDirtyPermissions(stack))); + } + + private void appendHoverText(final List lines, + final SecurityPolicy policy, + final Set dirtyPermissions) { + final List allPermissions = PlatformApi.INSTANCE.getPermissionRegistry().getAll(); + allPermissions.forEach(permission -> { + final boolean allowed = policy.isAllowed(permission); + final boolean dirty = dirtyPermissions.contains(permission); + final Style style = Style.EMPTY + .withColor(allowed ? ChatFormatting.GREEN : ChatFormatting.RED) + .withItalic(dirty); + final Component permissionTooltip = Component.literal(allowed ? "✓ " : "❌ ") + .append(permission.getName()) + .append(dirty ? " (*)" : "") + .withStyle(style); + lines.add(permissionTooltip); + }); + } + + @Override + public InteractionResultHolder use(final Level level, final Player player, final InteractionHand hand) { + final ItemStack stack = player.getItemInHand(hand); + if (player instanceof ServerPlayer serverPlayer) { + doUse(hand, serverPlayer, stack); + } + return InteractionResultHolder.consume(stack); + } + + private void doUse(final InteractionHand hand, final ServerPlayer player, final ItemStack stack) { + if (player.isCrouching()) { + clearConfiguration(player, stack); + return; + } + getPolicy(stack).ifPresent(policy -> { + final Set dirtyPermissions = getDirtyPermissions(stack); + Platform.INSTANCE.getMenuOpener().openMenu(player, createMenuProvider( + PlatformApi.INSTANCE.createInventorySlotReference(player, hand), + policy, + dirtyPermissions, + stack + )); + }); + } + + private void clearConfiguration(final ServerPlayer player, final ItemStack stack) { + stack.setTag(null); + player.sendSystemMessage(createTranslation("item", "security_card.cleared_configuration")); + } + + abstract AbstractSecurityCardExtendedMenuProvider createMenuProvider(SlotReference slotReference, + SecurityPolicy policy, + Set dirtyPermissions, + ItemStack stack); + + @Override + public Optional getPolicy(final ItemStack stack) { + if (!isValid(stack)) { + return Optional.empty(); + } + if (stack.getTag() == null || !stack.getTag().contains(TAG_PERMISSIONS)) { + return Optional.of(PlatformApi.INSTANCE.createDefaultSecurityPolicy()); + } + final CompoundTag permissionsTag = stack.getTag().getCompound(TAG_PERMISSIONS); + return Optional.of(createPolicy(permissionsTag)); + } + + private SecurityPolicy createPolicy(final CompoundTag permissionsTag) { + final Set allowedPermissions = new HashSet<>(); + for (final PlatformPermission permission : PlatformApi.INSTANCE.getPermissionRegistry().getAll()) { + final ResourceLocation permissionId = PlatformApi.INSTANCE.getPermissionRegistry() + .getId(permission) + .orElseThrow(); + final boolean dirty = permissionsTag.contains(permissionId.toString()); + final boolean didExplicitlyAllow = dirty && permissionsTag.getBoolean(permissionId.toString()); + final boolean isAllowedByDefault = !dirty && permission.isAllowedByDefault(); + if (didExplicitlyAllow || isAllowedByDefault) { + allowedPermissions.add(permission); + } + } + return new SecurityPolicy(allowedPermissions); + } + + @Override + public boolean isValid(final ItemStack stack) { + return true; + } + + Set getDirtyPermissions(final ItemStack stack) { + if (stack.getTag() == null || !stack.getTag().contains(TAG_PERMISSIONS)) { + return Collections.emptySet(); + } + final CompoundTag permissionsTag = stack.getTag().getCompound(TAG_PERMISSIONS); + return permissionsTag.getAllKeys() + .stream() + .map(ResourceLocation::new) + .flatMap(id -> PlatformApi.INSTANCE.getPermissionRegistry().get(id).stream()) + .collect(Collectors.toSet()); + } + + void setPermission(final ItemStack stack, final ResourceLocation permissionId, final boolean allowed) { + final CompoundTag permissionsTag = stack.getOrCreateTagElement(TAG_PERMISSIONS); + permissionsTag.putBoolean(permissionId.toString(), allowed); + } + + void resetPermission(final ItemStack stack, final ResourceLocation permissionId) { + final CompoundTag permissionsTag = stack.getOrCreateTagElement(TAG_PERMISSIONS); + permissionsTag.remove(permissionId.toString()); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardScreen.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardScreen.java new file mode 100644 index 000000000..84d8e2b78 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/AbstractSecurityCardScreen.java @@ -0,0 +1,222 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.common.support.stretching.AbstractStretchingScreen; +import com.refinedmods.refinedstorage2.platform.common.support.widget.CustomCheckboxWidget; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + +public abstract class AbstractSecurityCardScreen + extends AbstractStretchingScreen { + private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/security_card.png"); + + private static final int RESET_BUTTON_WIDTH = 40; + private static final int RESET_BUTTON_RIGHT_PADDING = 16; + private static final Component RESET_TITLE = createTranslation("gui", "security_card.permission.reset"); + private static final Component MODIFIED_TITLE = createTranslation("gui", "security_card.permission.modified") + .withStyle(Style.EMPTY.withItalic(true).withColor(ChatFormatting.YELLOW)); + + private final List permissions = new ArrayList<>(); + + protected AbstractSecurityCardScreen(final T menu, final Inventory playerInventory, final Component text) { + super(menu, playerInventory, text); + this.inventoryLabelY = 97; + this.imageWidth = 193; + this.imageHeight = 176; + } + + @Override + protected void init(final int rows) { + permissions.clear(); + final List menuPermissions = getMenu().getPermissions(); + for (int i = 0; i < menuPermissions.size(); ++i) { + final Permission permission = createPermission(menuPermissions.get(i), i, rows); + addWidget(permission.checkbox); + addWidget(permission.resetButton); + permissions.add(permission); + } + updateScrollbar(permissions.size()); + } + + private Permission createPermission( + final AbstractSecurityCardContainerMenu.Permission menuPermission, + final int index, + final int rows + ) { + final int y = getPermissionY(index); + final boolean visible = isPermissionVisible(rows, y); + final CustomCheckboxWidget checkbox = createPermissionCheckbox(menuPermission, y, visible); + final Button resetButton = createPermissionResetButton(menuPermission, checkbox, y, visible); + checkbox.setOnPressed((c, selected) -> updatePermission(menuPermission, resetButton, c, selected)); + return new Permission(checkbox, resetButton); + } + + private CustomCheckboxWidget createPermissionCheckbox( + final AbstractSecurityCardContainerMenu.Permission menuPermission, + final int y, + final boolean visible + ) { + final CustomCheckboxWidget checkbox = new CustomCheckboxWidget( + leftPos + 10, + y, + getPermissionName(menuPermission), + font, + menuPermission.allowed() + ); + checkbox.visible = visible; + checkbox.setTooltip(getPermissionTooltip(menuPermission)); + return checkbox; + } + + private void updatePermission(final AbstractSecurityCardContainerMenu.Permission menuPermission, + final Button resetButton, + final CustomCheckboxWidget checkbox, + final boolean allowed) { + updateCheckboxAndResetButton(checkbox, resetButton, menu.changePermission( + menuPermission.platformPermission(), + allowed + )); + } + + private Tooltip getPermissionTooltip(final AbstractSecurityCardContainerMenu.Permission menuPermission) { + final PlatformPermission permission = menuPermission.platformPermission(); + final MutableComponent ownerName = permission.getOwnerName().copy().withStyle( + Style.EMPTY.withItalic(true).withColor(ChatFormatting.GRAY) + ); + final MutableComponent tooltip = permission.getDescription().copy().append("\n").append(ownerName); + return Tooltip.create(menuPermission.dirty() ? tooltip.append("\n").append(MODIFIED_TITLE) : tooltip); + } + + private Button createPermissionResetButton(final AbstractSecurityCardContainerMenu.Permission menuPermission, + final CustomCheckboxWidget checkbox, + final int y, + final boolean visible) { + final Button resetButton = Button.builder(RESET_TITLE, btn -> resetPermission(menuPermission, checkbox, btn)) + .pos(leftPos + imageWidth - RESET_BUTTON_RIGHT_PADDING - RESET_BUTTON_WIDTH - 11, y) + .size(RESET_BUTTON_WIDTH, 16) + .build(); + resetButton.visible = visible; + resetButton.active = menuPermission.dirty(); + return resetButton; + } + + private void resetPermission(final AbstractSecurityCardContainerMenu.Permission menuPermission, + final CustomCheckboxWidget checkbox, + final Button resetButton) { + updateCheckboxAndResetButton(checkbox, resetButton, menu.resetPermission(menuPermission.platformPermission())); + } + + private void updateCheckboxAndResetButton(final CustomCheckboxWidget checkbox, + final Button resetButton, + final AbstractSecurityCardContainerMenu.Permission menuPermission) { + checkbox.setMessage(getPermissionName(menuPermission)); + checkbox.setTooltip(getPermissionTooltip(menuPermission)); + checkbox.setSelected(menuPermission.allowed()); + resetButton.active = menuPermission.dirty(); + } + + private Component getPermissionName(final AbstractSecurityCardContainerMenu.Permission menuPermission) { + final Component name = menuPermission.platformPermission().getName(); + if (!menuPermission.dirty()) { + return name; + } + return name.copy().append(" (*)").setStyle(Style.EMPTY.withItalic(true)); + } + + private int getPermissionY(final int index) { + return topPos + 19 + (index * ROW_SIZE) + 3; + } + + private boolean isPermissionVisible(final int rows, final int y) { + return y >= (topPos + 19 - ROW_SIZE) && y < (topPos + 19 + (rows * ROW_SIZE)); + } + + @Override + protected int getScrollPanePadding() { + return 4; + } + + @Override + protected void scrollbarChanged(final int rows) { + final int offset = getScrollbarOffset(); + for (int i = 0; i < permissions.size(); ++i) { + final Permission permission = permissions.get(i); + final int y = getPermissionY(i) - offset; + final boolean visible = isPermissionVisible(rows, y); + permission.setY(y); + permission.setVisible(visible); + } + } + + @Override + protected void renderRows(final GuiGraphics graphics, + final int x, + final int y, + final int topHeight, + final int rows, + final int mouseX, + final int mouseY) { + for (final Permission permission : permissions) { + permission.render(graphics, mouseX, mouseY); + } + } + + @Override + protected void renderStretchingBackground(final GuiGraphics graphics, final int x, final int y, final int rows) { + for (int row = 0; row < rows; ++row) { + int textureY = 37; + if (row == 0) { + textureY = 19; + } else if (row == rows - 1) { + textureY = 55; + } + graphics.blit(getTexture(), x, y + (ROW_SIZE * row), 0, textureY, imageWidth, ROW_SIZE); + } + } + + @Override + protected int getBottomHeight() { + return 99; + } + + @Override + protected int getBottomV() { + return 73; + } + + @Override + protected ResourceLocation getTexture() { + return TEXTURE; + } + + private record Permission(CustomCheckboxWidget checkbox, Button resetButton) { + private void setY(final int y) { + checkbox.setY(y); + resetButton.setY(y); + } + + private void setVisible(final boolean visible) { + checkbox.visible = visible; + resetButton.visible = visible; + } + + private void render(final GuiGraphics graphics, final int mouseX, final int mouseY) { + checkbox.render(graphics, mouseX, mouseY, 0); + resetButton.render(graphics, mouseX, mouseY, 0); + } + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/BuiltinPermission.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/BuiltinPermission.java new file mode 100644 index 000000000..f796acbf6 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/BuiltinPermission.java @@ -0,0 +1,81 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.platform.api.security.BuiltinPermissions; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; + +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + +public enum BuiltinPermission implements PlatformPermission { + /** + * Whether the player can insert resources into a network. + */ + INSERT("insert"), + /** + * Whether the player can extract resources from a network. + */ + EXTRACT("extract"), + /** + * Whether the player can start, cancel or view an autocrafting task. + */ + AUTOCRAFTING("autocrafting"), + /** + * Whether the player can open network device GUIs. + */ + OPEN("open"), + /** + * Whether the player can add or remove network devices. + */ + BUILD("build"), + /** + * Whether the player can manage the security options for a network. + */ + SECURITY("security"); + + public static final BuiltinPermissions VIEW = new BuiltinPermissions( + INSERT, + EXTRACT, + AUTOCRAFTING, + OPEN, + BUILD, + SECURITY + ); + + private final ResourceLocation id; + private final Component name; + private final Component description; + + BuiltinPermission(final String id) { + this.id = createIdentifier(id); + this.name = createTranslation("permission", id); + this.description = createTranslation("permission", id + ".description"); + } + + public ResourceLocation getId() { + return id; + } + + @Override + public Component getName() { + return name; + } + + @Override + public Component getDescription() { + return description; + } + + @Override + public Component getOwnerName() { + return ContentNames.MOD; + } + + @Override + public boolean isAllowedByDefault() { + return true; + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardContainerMenu.java new file mode 100644 index 000000000..67eb37da1 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardContainerMenu.java @@ -0,0 +1,21 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; +import com.refinedmods.refinedstorage2.platform.common.content.Menus; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; + +public class FallbackSecurityCardContainerMenu extends AbstractSecurityCardContainerMenu { + public FallbackSecurityCardContainerMenu(final int syncId, + final Inventory playerInventory, + final FriendlyByteBuf buf) { + super(Menus.INSTANCE.getFallbackSecurityCard(), syncId, playerInventory, buf); + } + + FallbackSecurityCardContainerMenu(final int syncId, + final Inventory playerInventory, + final SlotReference disabledSlot) { + super(Menus.INSTANCE.getFallbackSecurityCard(), syncId, playerInventory, disabledSlot); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardExtendedMenuProvider.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardExtendedMenuProvider.java new file mode 100644 index 000000000..4d7914689 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardExtendedMenuProvider.java @@ -0,0 +1,37 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; +import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; + +import java.util.Set; +import javax.annotation.Nullable; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; + +class FallbackSecurityCardExtendedMenuProvider extends AbstractSecurityCardExtendedMenuProvider { + private final SlotReference slotReference; + + FallbackSecurityCardExtendedMenuProvider(final SlotReference slotReference, + final SecurityPolicy securityPolicy, + final Set dirtyPermissions, + final SlotReference slotReference1) { + super(slotReference, securityPolicy, dirtyPermissions); + this.slotReference = slotReference1; + } + + @Override + public Component getDisplayName() { + return ContentNames.FALLBACK_SECURITY_CARD; + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(final int syncId, final Inventory inventory, final Player player) { + return new FallbackSecurityCardContainerMenu(syncId, inventory, slotReference); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardItem.java new file mode 100644 index 000000000..85e94b6d0 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardItem.java @@ -0,0 +1,49 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.api.support.HelpTooltipComponent; +import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; +import com.refinedmods.refinedstorage2.platform.common.Platform; + +import java.util.Optional; +import java.util.Set; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.tooltip.TooltipComponent; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + +public class FallbackSecurityCardItem extends AbstractSecurityCardItem { + private static final Component HELP = createTranslation("item", "fallback_security_card.help"); + + public FallbackSecurityCardItem() { + super(new Item.Properties().stacksTo(1)); + } + + @Override + AbstractSecurityCardExtendedMenuProvider createMenuProvider(final SlotReference slotReference, + final SecurityPolicy policy, + final Set dirtyPermissions, + final ItemStack stack) { + return new FallbackSecurityCardExtendedMenuProvider(slotReference, policy, dirtyPermissions, slotReference); + } + + @Override + public Optional getTooltipImage(final ItemStack stack) { + return Optional.of(new HelpTooltipComponent(HELP)); + } + + @Override + public Optional getActor(final ItemStack stack) { + return Optional.empty(); + } + + @Override + public long getEnergyUsage() { + return Platform.INSTANCE.getConfig().getFallbackSecurityCard().getEnergyUsage(); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardScreen.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardScreen.java new file mode 100644 index 000000000..3ea220f41 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardScreen.java @@ -0,0 +1,12 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; + +public class FallbackSecurityCardScreen extends AbstractSecurityCardScreen { + public FallbackSecurityCardScreen(final FallbackSecurityCardContainerMenu menu, + final Inventory playerInventory, + final Component text) { + super(menu, playerInventory, text); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlatformSecurityNetworkComponentImpl.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlatformSecurityNetworkComponentImpl.java new file mode 100644 index 000000000..b11f97eb4 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlatformSecurityNetworkComponentImpl.java @@ -0,0 +1,31 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.impl.security.SecurityNetworkComponentImpl; +import com.refinedmods.refinedstorage2.api.network.security.Permission; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformSecurityNetworkComponent; + +import com.mojang.authlib.GameProfile; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; + +public class PlatformSecurityNetworkComponentImpl extends SecurityNetworkComponentImpl + implements PlatformSecurityNetworkComponent { + public PlatformSecurityNetworkComponentImpl(final SecurityPolicy defaultPolicy) { + super(defaultPolicy); + } + + @Override + public boolean isAllowed(final Permission permission, final ServerPlayer player) { + final MinecraftServer server = player.getServer(); + if (server == null) { + return false; + } + final GameProfile gameProfile = player.getGameProfile(); + if (server.getPlayerList().isOp(gameProfile)) { + return true; + } + final PlayerSecurityActor actor = new PlayerSecurityActor(gameProfile.getId()); + return super.isAllowed(permission, actor); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlayerSecurityActor.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlayerSecurityActor.java new file mode 100644 index 000000000..47ea8c321 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlayerSecurityActor.java @@ -0,0 +1,8 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; + +import java.util.UUID; + +public record PlayerSecurityActor(UUID playerId) implements SecurityActor { +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardContainerMenu.java new file mode 100644 index 000000000..6118bc260 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardContainerMenu.java @@ -0,0 +1,72 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; +import com.refinedmods.refinedstorage2.platform.common.Platform; +import com.refinedmods.refinedstorage2.platform.common.content.Menus; +import com.refinedmods.refinedstorage2.platform.common.support.stretching.ScreenSizeListener; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; + +public class SecurityCardContainerMenu extends AbstractSecurityCardContainerMenu implements ScreenSizeListener { + private final List players = new ArrayList<>(); + private Player boundTo; + + public SecurityCardContainerMenu(final int syncId, + final Inventory playerInventory, + final FriendlyByteBuf buf) { + super(Menus.INSTANCE.getSecurityCard(), syncId, playerInventory, buf); + this.boundTo = new Player(buf.readUUID(), buf.readUtf()); + final int amountOfPlayers = buf.readInt(); + for (int i = 0; i < amountOfPlayers; ++i) { + final UUID id = buf.readUUID(); + final String name = buf.readUtf(); + players.add(new Player(id, name)); + } + } + + SecurityCardContainerMenu(final int syncId, final Inventory playerInventory, final SlotReference disabledSlot) { + super(Menus.INSTANCE.getSecurityCard(), syncId, playerInventory, disabledSlot); + this.boundTo = new Player(UUID.randomUUID(), ""); + } + + List getPlayers() { + return players; + } + + Player getBoundTo() { + return boundTo; + } + + public void setBoundPlayer(final MinecraftServer server, final UUID playerId) { + if (disabledSlot == null) { + return; + } + disabledSlot.resolve(playerInventory.player).ifPresent(stack -> setBoundPlayer(server, playerId, stack)); + } + + private void setBoundPlayer(final MinecraftServer server, final UUID playerId, final ItemStack stack) { + if (stack.getItem() instanceof SecurityCardItem securityCardItem) { + final ServerPlayer player = server.getPlayerList().getPlayer(playerId); + if (player == null) { + return; + } + securityCardItem.setBoundPlayer(player, stack); + } + } + + void changeBoundPlayer(final Player player) { + Platform.INSTANCE.getClientToServerCommunications().sendSecurityCardBoundPlayer(player.id()); + this.boundTo = player; + } + + record Player(UUID id, String name) { + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardExtendedMenuProvider.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardExtendedMenuProvider.java new file mode 100644 index 000000000..4f5cbc6c2 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardExtendedMenuProvider.java @@ -0,0 +1,64 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; +import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; + +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import javax.annotation.Nullable; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; + +class SecurityCardExtendedMenuProvider extends AbstractSecurityCardExtendedMenuProvider { + private final SlotReference slotReference; + private final UUID boundPlayerId; + private final String boundPlayerName; + + SecurityCardExtendedMenuProvider(final SlotReference slotReference, + final SecurityPolicy securityPolicy, + final Set dirtyPermissions, + final UUID boundPlayerId, + final String boundPlayerName) { + super(slotReference, securityPolicy, dirtyPermissions); + this.slotReference = slotReference; + this.boundPlayerId = boundPlayerId; + this.boundPlayerName = boundPlayerName; + } + + @Override + public void writeScreenOpeningData(final ServerPlayer player, final FriendlyByteBuf buf) { + super.writeScreenOpeningData(player, buf); + + buf.writeUUID(boundPlayerId); + buf.writeUtf(boundPlayerName); + + final List players = player.getServer() == null + ? Collections.emptyList() + : player.getServer().getPlayerList().getPlayers(); + buf.writeInt(players.size()); + for (final ServerPlayer otherPlayer : players) { + buf.writeUUID(otherPlayer.getUUID()); + buf.writeUtf(otherPlayer.getGameProfile().getName()); + } + } + + @Override + public Component getDisplayName() { + return ContentNames.SECURITY_CARD; + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(final int syncId, final Inventory inventory, final Player player) { + return new SecurityCardContainerMenu(syncId, inventory, slotReference); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardItem.java new file mode 100644 index 000000000..b3040bb60 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardItem.java @@ -0,0 +1,129 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; +import com.refinedmods.refinedstorage2.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; +import com.refinedmods.refinedstorage2.platform.api.support.HelpTooltipComponent; +import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; +import com.refinedmods.refinedstorage2.platform.common.Platform; + +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import javax.annotation.Nullable; + +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.tooltip.TooltipComponent; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; +import static java.util.Objects.requireNonNull; + +public class SecurityCardItem extends AbstractSecurityCardItem { + private static final String TAG_BOUND_PLAYER_ID = "bid"; + private static final String TAG_BOUND_PLAYER_NAME = "bname"; + + private static final Component UNBOUND_HELP = createTranslation("item", "security_card.unbound.help"); + private static final Component BOUND_HELP = createTranslation("item", "security_card.bound.help"); + + public SecurityCardItem() { + super(new Item.Properties().stacksTo(1)); + } + + @Override + public void appendHoverText(final ItemStack stack, + @Nullable final Level level, + final List lines, + final TooltipFlag flag) { + final String boundPlayerName = getBoundPlayerName(stack); + if (boundPlayerName == null) { + lines.add(createTranslation("item", "security_card.unbound").withStyle(ChatFormatting.GRAY)); + } else { + lines.add(createTranslation( + "item", + "security_card.bound", + Component.literal(boundPlayerName).withStyle(ChatFormatting.YELLOW) + ).withStyle(ChatFormatting.GRAY)); + } + super.appendHoverText(stack, level, lines, flag); + } + + @Override + public InteractionResultHolder use(final Level level, final Player player, final InteractionHand hand) { + final ItemStack stack = player.getItemInHand(hand); + if (player instanceof ServerPlayer serverPlayer && !stack.hasTag()) { + setBoundPlayer(serverPlayer, stack); + } + return super.use(level, player, hand); + } + + @Override + public Optional getTooltipImage(final ItemStack stack) { + return Optional.of(new HelpTooltipComponent(isValid(stack) ? BOUND_HELP : UNBOUND_HELP)); + } + + @Override + AbstractSecurityCardExtendedMenuProvider createMenuProvider(final SlotReference slotReference, + final SecurityPolicy policy, + final Set dirtyPermissions, + final ItemStack stack) { + return new SecurityCardExtendedMenuProvider( + slotReference, + policy, + dirtyPermissions, + requireNonNull(getBoundPlayerId(stack)), + requireNonNull(getBoundPlayerName(stack)) + ); + } + + @Override + public boolean isValid(final ItemStack stack) { + return stack.getTag() != null + && stack.getTag().contains(TAG_BOUND_PLAYER_ID) + && stack.getTag().contains(TAG_BOUND_PLAYER_NAME); + } + + @Override + public Optional getActor(final ItemStack stack) { + final UUID playerId = getBoundPlayerId(stack); + if (playerId == null) { + return Optional.empty(); + } + return Optional.of(new PlayerSecurityActor(playerId)); + } + + @Override + public long getEnergyUsage() { + return Platform.INSTANCE.getConfig().getSecurityCard().getEnergyUsage(); + } + + @Nullable + UUID getBoundPlayerId(final ItemStack stack) { + return (stack.getTag() == null || !stack.getTag().contains(TAG_BOUND_PLAYER_ID)) + ? null + : stack.getTag().getUUID(TAG_BOUND_PLAYER_ID); + } + + @Nullable + String getBoundPlayerName(final ItemStack stack) { + return (stack.getTag() == null || !stack.getTag().contains(TAG_BOUND_PLAYER_NAME)) + ? null + : stack.getTag().getString(TAG_BOUND_PLAYER_NAME); + } + + void setBoundPlayer(final ServerPlayer player, final ItemStack stack) { + final CompoundTag tag = stack.getOrCreateTag(); + tag.putUUID(TAG_BOUND_PLAYER_ID, player.getGameProfile().getId()); + tag.putString(TAG_BOUND_PLAYER_NAME, player.getGameProfile().getName()); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardItemPropertyFunction.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardItemPropertyFunction.java new file mode 100644 index 000000000..1583c2f80 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardItemPropertyFunction.java @@ -0,0 +1,24 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import javax.annotation.Nullable; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.item.ClampedItemPropertyFunction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; + +public class SecurityCardItemPropertyFunction implements ClampedItemPropertyFunction { + public static final ResourceLocation NAME = new ResourceLocation("active"); + + @Override + public float unclampedCall(final ItemStack itemStack, + @Nullable final ClientLevel clientLevel, + @Nullable final LivingEntity livingEntity, + final int i) { + if (itemStack.getItem() instanceof SecurityCardItem cardItem) { + return cardItem.isValid(itemStack) ? 1 : 0; + } + return 0; + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardScreen.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardScreen.java new file mode 100644 index 000000000..c44596498 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardScreen.java @@ -0,0 +1,39 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; + +public class SecurityCardScreen extends AbstractSecurityCardScreen { + private static final int BOUND_PLAYER_BUTTON_RIGHT_PADDING = 6; + private static final int BOUND_PLAYER_BUTTON_WIDTH = 80; + + public SecurityCardScreen(final SecurityCardContainerMenu menu, + final Inventory playerInventory, + final Component text) { + super(menu, playerInventory, text); + } + + @Override + protected void init(final int rows) { + super.init(rows); + final Component boundToText = Component.literal(menu.getBoundTo().name()); + final Button boundPlayerButton = Button.builder(boundToText, this::toggleBoundPlayer) + .pos(leftPos + imageWidth - BOUND_PLAYER_BUTTON_RIGHT_PADDING - BOUND_PLAYER_BUTTON_WIDTH, topPos + 4) + .size(BOUND_PLAYER_BUTTON_WIDTH, 14) + .build(); + addRenderableWidget(boundPlayerButton); + } + + private void toggleBoundPlayer(final Button button) { + if (menu.getPlayers().isEmpty()) { + return; + } + final SecurityCardContainerMenu.Player currentPlayer = menu.getBoundTo(); + final int index = menu.getPlayers().indexOf(currentPlayer); + final int nextIndex = (index + 1) % menu.getPlayers().size(); + final SecurityCardContainerMenu.Player nextPlayer = menu.getPlayers().get(nextIndex); + menu.changeBoundPlayer(nextPlayer); + button.setMessage(Component.literal(nextPlayer.name())); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlock.java new file mode 100644 index 000000000..e47df4f6e --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlock.java @@ -0,0 +1,101 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.platform.common.content.BlockColorMap; +import com.refinedmods.refinedstorage2.platform.common.content.BlockConstants; +import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; +import com.refinedmods.refinedstorage2.platform.common.content.Blocks; +import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; +import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; +import com.refinedmods.refinedstorage2.platform.common.support.ColorableBlock; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.direction.DirectionType; +import com.refinedmods.refinedstorage2.platform.common.support.direction.HorizontalDirection; +import com.refinedmods.refinedstorage2.platform.common.support.direction.HorizontalDirectionType; +import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + +public class SecurityManagerBlock extends AbstractDirectionalBlock + implements ColorableBlock, BlockItemProvider, EntityBlock { + public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); + + private static final MutableComponent HELP = createTranslation("block", "security_manager.help"); + private static final AbstractBlockEntityTicker TICKER = + new NetworkNodeBlockEntityTicker<>(BlockEntities.INSTANCE::getSecurityManager, ACTIVE); + + private final DyeColor color; + private final MutableComponent name; + + public SecurityManagerBlock(final DyeColor color, final MutableComponent name) { + super(BlockConstants.PROPERTIES); + this.color = color; + this.name = name; + } + + @Override + protected BlockState getDefaultState() { + return super.getDefaultState().setValue(ACTIVE, false); + } + + @Override + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(ACTIVE); + } + + @Override + protected DirectionType getDirectionType() { + return HorizontalDirectionType.INSTANCE; + } + + @Override + public BlockColorMap getBlockColorMap() { + return Blocks.INSTANCE.getSecurityManager(); + } + + @Override + public DyeColor getColor() { + return color; + } + + @Override + public MutableComponent getName() { + return name; + } + + @Override + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { + return new SecurityManagerBlockEntity(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(final Level level, + final BlockState blockState, + final BlockEntityType type) { + return TICKER.get(level, type); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlockEntity.java new file mode 100644 index 000000000..929c2a1bc --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlockEntity.java @@ -0,0 +1,190 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.impl.node.security.SecurityDecisionProviderProxyNetworkNode; +import com.refinedmods.refinedstorage2.api.network.impl.security.SecurityDecisionProviderImpl; +import com.refinedmods.refinedstorage2.platform.api.security.SecurityHelper; +import com.refinedmods.refinedstorage2.platform.api.security.SecurityPolicyContainerItem; +import com.refinedmods.refinedstorage2.platform.api.support.network.ConnectionSink; +import com.refinedmods.refinedstorage2.platform.common.Platform; +import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; +import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; +import com.refinedmods.refinedstorage2.platform.common.support.BlockEntityWithDrops; +import com.refinedmods.refinedstorage2.platform.common.support.SimpleFilteredContainer; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage2.platform.common.util.ContainerUtil; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; + +public class SecurityManagerBlockEntity + extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + implements BlockEntityWithDrops, NetworkNodeMenuProvider { + static final int CARD_AMOUNT = 18; + + private static final String TAG_SECURITY_CARDS = "sc"; + private static final String TAG_FALLBACK_SECURITY_CARD = "fsc"; + + private final SimpleContainer securityCards = new SimpleFilteredContainer( + CARD_AMOUNT, + SecurityManagerBlockEntity::isValidSecurityCard + ); + private final SimpleContainer fallbackSecurityCard = new SimpleFilteredContainer( + 1, + SecurityManagerBlockEntity::isValidFallbackSecurityCard + ); + + private final SecurityDecisionProviderImpl securityDecisionProvider = new SecurityDecisionProviderImpl(); + + public SecurityManagerBlockEntity(final BlockPos pos, final BlockState state) { + super( + BlockEntities.INSTANCE.getSecurityManager(), + pos, + state, + new SecurityDecisionProviderProxyNetworkNode( + Platform.INSTANCE.getConfig().getSecurityManager().getEnergyUsage() + ) + ); + securityCards.addListener(c -> invalidate()); + fallbackSecurityCard.addListener(c -> invalidate()); + getNode().setDelegate(securityDecisionProvider); + } + + private void invalidate() { + if (level != null) { + setChanged(); + } + securityDecisionProvider.clearPolicies(); + long energyUsage = Platform.INSTANCE.getConfig().getSecurityManager().getEnergyUsage(); + for (int i = 0; i < securityCards.getContainerSize(); ++i) { + final ItemStack securityCard = securityCards.getItem(i); + if (!(securityCard.getItem() instanceof SecurityPolicyContainerItem securityPolicyContainerItem)) { + continue; + } + energyUsage += securityPolicyContainerItem.getEnergyUsage(); + securityPolicyContainerItem.getPolicy(securityCard).ifPresent( + policy -> securityPolicyContainerItem.getActor(securityCard).ifPresent( + actor -> securityDecisionProvider.setPolicy(actor, policy))); + } + energyUsage += updateDefaultPolicyAndGetEnergyUsage(); + getNode().setEnergyUsage(energyUsage); + } + + private long updateDefaultPolicyAndGetEnergyUsage() { + final ItemStack fallbackSecurityCardStack = fallbackSecurityCard.getItem(0); + if (fallbackSecurityCardStack.getItem() instanceof SecurityPolicyContainerItem securityPolicyContainerItem) { + securityPolicyContainerItem.getPolicy(fallbackSecurityCardStack).ifPresentOrElse( + securityDecisionProvider::setDefaultPolicy, + () -> securityDecisionProvider.setDefaultPolicy(null) + ); + return securityPolicyContainerItem.getEnergyUsage(); + } + securityDecisionProvider.setDefaultPolicy(null); + return 0; + } + + @Override + public void load(final CompoundTag tag) { + if (tag.contains(TAG_SECURITY_CARDS)) { + ContainerUtil.read(tag.getCompound(TAG_SECURITY_CARDS), securityCards); + } + if (tag.contains(TAG_FALLBACK_SECURITY_CARD)) { + ContainerUtil.read(tag.getCompound(TAG_FALLBACK_SECURITY_CARD), fallbackSecurityCard); + } + super.load(tag); + } + + @Override + public void saveAdditional(final CompoundTag tag) { + super.saveAdditional(tag); + tag.put(TAG_SECURITY_CARDS, ContainerUtil.write(securityCards)); + tag.put(TAG_FALLBACK_SECURITY_CARD, ContainerUtil.write(fallbackSecurityCard)); + } + + @Override + public NonNullList getDrops() { + final NonNullList drops = NonNullList.create(); + for (int i = 0; i < securityCards.getContainerSize(); ++i) { + drops.add(securityCards.getItem(i)); + } + drops.add(fallbackSecurityCard.getItem(0)); + return drops; + } + + SimpleContainer getSecurityCards() { + return securityCards; + } + + SimpleContainer getFallbackSecurityCard() { + return fallbackSecurityCard; + } + + static boolean isValidSecurityCard(final ItemStack stack) { + return stack.getItem() instanceof SecurityPolicyContainerItem securityPolicyContainerItem + && securityPolicyContainerItem.isValid(stack) + && !(stack.getItem() instanceof FallbackSecurityCardItem); + } + + static boolean isValidFallbackSecurityCard(final ItemStack stack) { + return stack.getItem() instanceof FallbackSecurityCardItem; + } + + @Override + public void writeScreenOpeningData(final ServerPlayer player, final FriendlyByteBuf buf) { + // no op + } + + @Override + public Component getDisplayName() { + return ContentNames.SECURITY_MANAGER; + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(final int syncId, final Inventory inventory, final Player player) { + return new SecurityManagerContainerMenu(syncId, inventory, this); + } + + @Override + public boolean canOpen(final ServerPlayer player) { + final boolean isAllowedViaSecuritySystem = NetworkNodeMenuProvider.super.canOpen(player) + && SecurityHelper.isAllowed(player, BuiltinPermission.SECURITY, getNode()); + return isAllowedViaSecuritySystem || isPlacedBy(player.getGameProfile().getId()); + } + + @Override + public boolean canBreakOrRotate(final ServerPlayer player) { + return super.canBreakOrRotate(player) || isPlacedBy(player.getGameProfile().getId()); + } + + @Override + public void addOutgoingConnections(final ConnectionSink sink) { + for (final Direction direction : Direction.values()) { + if (direction == Direction.UP) { + continue; + } + sink.tryConnectInSameDimension(worldPosition.relative(direction), direction.getOpposite()); + } + } + + @Override + public boolean canAcceptIncomingConnection(final Direction incomingDirection, final BlockState connectingState) { + if (!colorsAllowConnecting(connectingState)) { + return false; + } + return incomingDirection != Direction.UP; + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerContainerMenu.java new file mode 100644 index 000000000..78ece2d4e --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerContainerMenu.java @@ -0,0 +1,73 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.platform.common.content.Menus; +import com.refinedmods.refinedstorage2.platform.common.support.AbstractBaseContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.support.RedstoneMode; +import com.refinedmods.refinedstorage2.platform.common.support.SimpleFilteredContainer; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ClientProperty; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.PropertyTypes; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ServerProperty; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ValidatedSlot; + +import javax.annotation.Nullable; + +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.Slot; + +import static com.refinedmods.refinedstorage2.platform.common.security.SecurityManagerBlockEntity.CARD_AMOUNT; + +public class SecurityManagerContainerMenu extends AbstractBaseContainerMenu { + @Nullable + private Slot fallbackSecurityCardSlot; + + public SecurityManagerContainerMenu(final int syncId, final Inventory playerInventory) { + super(Menus.INSTANCE.getSecurityManager(), syncId); + addSlots( + playerInventory, + new SimpleFilteredContainer(CARD_AMOUNT, SecurityManagerBlockEntity::isValidSecurityCard), + new SimpleFilteredContainer(1, SecurityManagerBlockEntity::isValidFallbackSecurityCard) + ); + registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); + } + + SecurityManagerContainerMenu(final int syncId, + final Inventory playerInventory, + final SecurityManagerBlockEntity securityManager) { + super(Menus.INSTANCE.getSecurityManager(), syncId); + addSlots(playerInventory, securityManager.getSecurityCards(), securityManager.getFallbackSecurityCard()); + registerProperty(new ServerProperty<>( + PropertyTypes.REDSTONE_MODE, + securityManager::getRedstoneMode, + securityManager::setRedstoneMode + )); + } + + private void addSlots(final Inventory playerInventory, + final Container securityCards, + final Container fallbackSecurityCard) { + for (int i = 0; i < CARD_AMOUNT; ++i) { + final int column = i % 9; + final int x = 8 + (column * 18); + final int row = i / 9; + final int y = 20 + (row * 18); + addSlot(new ValidatedSlot(securityCards, i, x, y, SecurityManagerBlockEntity::isValidSecurityCard)); + } + fallbackSecurityCardSlot = new ValidatedSlot( + fallbackSecurityCard, + 0, + 174, + 20, + SecurityManagerBlockEntity::isValidFallbackSecurityCard + ); + addSlot(fallbackSecurityCardSlot); + addPlayerInventory(playerInventory, 8, 72); + transferManager.addBiTransfer(playerInventory, securityCards); + transferManager.addBiTransfer(playerInventory, fallbackSecurityCard); + } + + @Nullable + Slot getFallbackSecurityCardSlot() { + return fallbackSecurityCardSlot; + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerScreen.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerScreen.java new file mode 100644 index 000000000..7a819c1e7 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerScreen.java @@ -0,0 +1,61 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.platform.common.Platform; +import com.refinedmods.refinedstorage2.platform.common.support.AbstractBaseScreen; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.PropertyTypes; +import com.refinedmods.refinedstorage2.platform.common.support.tooltip.HelpClientTooltipComponent; +import com.refinedmods.refinedstorage2.platform.common.support.widget.RedstoneModeSideButtonWidget; + +import java.util.List; + +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + +public class SecurityManagerScreen extends AbstractBaseScreen { + private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/security_manager.png"); + + public SecurityManagerScreen(final SecurityManagerContainerMenu menu, + final Inventory playerInventory, + final Component text) { + super(menu, playerInventory, text); + this.inventoryLabelY = 59; + this.imageWidth = 197; + this.imageHeight = 154; + } + + @Override + protected void init() { + super.init(); + addSideButton(new RedstoneModeSideButtonWidget( + getMenu().getProperty(PropertyTypes.REDSTONE_MODE), + createTranslation("gui", "security_manager.redstone_mode_help") + )); + } + + @Override + protected void renderTooltip(final GuiGraphics graphics, final int x, final int y) { + if (hoveredSlot != null && hoveredSlot == menu.getFallbackSecurityCardSlot() && !hoveredSlot.hasItem()) { + Platform.INSTANCE.renderTooltip(graphics, List.of( + ClientTooltipComponent.create( + createTranslation("gui", "security_manager.fallback_security_card_slot_hint").getVisualOrderText() + ), + HelpClientTooltipComponent.create( + createTranslation("gui", "security_manager.no_fallback_security_card_consequence") + ) + ), x, y); + return; + } + super.renderTooltip(graphics, x, y); + } + + @Override + protected ResourceLocation getTexture() { + return TEXTURE; + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/package-info.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/package-info.java new file mode 100644 index 000000000..77692e9ab --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/StorageTooltipHelper.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/StorageTooltipHelper.java index 8b7334c2b..3b3d562f0 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/StorageTooltipHelper.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/StorageTooltipHelper.java @@ -1,13 +1,13 @@ package com.refinedmods.refinedstorage2.platform.common.storage; -import com.refinedmods.refinedstorage2.platform.api.PlatformApi; - import java.util.List; import java.util.function.LongFunction; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + final class StorageTooltipHelper { private StorageTooltipHelper() { } @@ -15,7 +15,7 @@ private StorageTooltipHelper() { static void addAmountStoredWithoutCapacity(final List tooltip, final long stored, final LongFunction quantityFormatter) { - tooltip.add(PlatformApi.INSTANCE.createTranslation( + tooltip.add(createTranslation( "misc", "stored", Component.literal(quantityFormatter.apply(stored)).withStyle(ChatFormatting.WHITE) @@ -31,7 +31,7 @@ static void addAmountStoredWithCapacity(final List tooltip, return; } final int progress = (int) ((double) stored / capacity * 100D); - tooltip.add(PlatformApi.INSTANCE.createTranslation( + tooltip.add(createTranslation( "misc", "stored_with_capacity", Component.literal(quantityFormatter.apply(stored)).withStyle(ChatFormatting.WHITE), diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java index 964534919..872113d49 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java @@ -12,7 +12,7 @@ import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage2.platform.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage2.platform.common.support.FilterWithFuzzyMode; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage2.platform.common.util.ContainerUtil; @@ -40,7 +40,7 @@ public abstract class AbstractDiskDriveBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements BlockEntityWithDrops, ExtendedMenuProvider { + implements BlockEntityWithDrops, NetworkNodeMenuProvider { public static final int AMOUNT_OF_DISKS = 8; private static final String TAG_DISK_INVENTORY = "inv"; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/diskdrive/DiskDriveBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/diskdrive/DiskDriveBlock.java index 597b90aff..fa5752604 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/diskdrive/DiskDriveBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/diskdrive/DiskDriveBlock.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.platform.common.content.BlockConstants; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; -import com.refinedmods.refinedstorage2.platform.common.support.SimpleBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.direction.BiDirection; import com.refinedmods.refinedstorage2.platform.common.support.direction.BiDirectionType; import com.refinedmods.refinedstorage2.platform.common.support.direction.DirectionType; @@ -50,6 +50,6 @@ public BlockEntityTicker getTicker(final Level level, } public BlockItem createBlockItem() { - return new SimpleBlockItem(this, HELP); + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/externalstorage/ExternalStorageBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/externalstorage/ExternalStorageBlock.java index 4cbcd239f..db7fb2008 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/externalstorage/ExternalStorageBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/externalstorage/ExternalStorageBlock.java @@ -5,10 +5,11 @@ import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalCableBlock; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; import com.refinedmods.refinedstorage2.platform.common.support.ColorableBlock; import com.refinedmods.refinedstorage2.platform.common.support.DirectionalCableBlockShapes; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; import java.util.HashMap; @@ -21,7 +22,6 @@ import net.minecraft.network.chat.MutableComponent; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock; @@ -36,7 +36,7 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class ExternalStorageBlock extends AbstractDirectionalCableBlock - implements ColorableBlock, EntityBlock, BlockItemProvider { + implements ColorableBlock, EntityBlock, BlockItemProvider { private static final Component HELP = createTranslation("item", "external_storage.help"); private static final Map SHAPE_CACHE = new HashMap<>(); private static final AbstractBlockEntityTicker TICKER = @@ -87,7 +87,7 @@ public void neighborChanged(final BlockState state, } @Override - public BlockColorMap getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getExternalStorage(); } @@ -109,7 +109,7 @@ public MutableComponent getName() { } @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), name, HELP); + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/externalstorage/ExternalStorageBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/externalstorage/ExternalStorageBlockEntity.java index b0fc937b0..d037b1834 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/externalstorage/ExternalStorageBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/externalstorage/ExternalStorageBlockEntity.java @@ -8,7 +8,7 @@ import com.refinedmods.refinedstorage2.platform.common.storage.StorageConfigurationContainerImpl; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage2.platform.common.support.FilterWithFuzzyMode; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceContainerImpl; @@ -31,7 +31,7 @@ public class ExternalStorageBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider { + implements NetworkNodeMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(ExternalStorageBlockEntity.class); private static final String TAG_TRACKED_RESOURCES = "tr"; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/AbstractPortableGridBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/AbstractPortableGridBlockEntity.java index ab17a63d0..f69d122c3 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/AbstractPortableGridBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/AbstractPortableGridBlockEntity.java @@ -66,14 +66,7 @@ protected AbstractPortableGridBlockEntity(final PortableGridType type, final Blo super(getBlockEntityType(type), pos, state); this.diskInventory = new DiskInventory((inventory, slot) -> onDiskChanged(), 1); this.energyStorage = createEnergyStorage(type, this); - this.grid = new PortableGrid(energyStorage, diskInventory, diskStateListener) { - @Override - public boolean isGridActive() { - return super.isGridActive() - && level != null - && redstoneMode.isActive(level.hasNeighborSignal(worldPosition)); - } - }; + this.grid = new InWorldPortableGrid(energyStorage, diskInventory, diskStateListener, this); } static void readDiskInventory(final CompoundTag tag, final DiskInventory diskInventory) { diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/AbstractPortableGridContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/AbstractPortableGridContainerMenu.java index ab9a16b06..814003ce2 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/AbstractPortableGridContainerMenu.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/AbstractPortableGridContainerMenu.java @@ -65,8 +65,8 @@ protected boolean canTransferSlot(final Slot slot) { } @Override - public void addSlots(final int playerInventoryY) { - super.addSlots(playerInventoryY); + public void onScreenReady(final int playerInventoryY) { + super.onScreenReady(playerInventoryY); diskSlot = new ValidatedSlot( diskInventory, 0, diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/InWorldPortableGrid.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/InWorldPortableGrid.java new file mode 100644 index 000000000..8dfffe5ef --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/InWorldPortableGrid.java @@ -0,0 +1,29 @@ +package com.refinedmods.refinedstorage2.platform.common.storage.portablegrid; + +import com.refinedmods.refinedstorage2.api.network.energy.EnergyStorage; +import com.refinedmods.refinedstorage2.api.storage.StateTrackedStorage; +import com.refinedmods.refinedstorage2.platform.common.storage.DiskInventory; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; + +class InWorldPortableGrid extends PortableGrid { + private final AbstractPortableGridBlockEntity blockEntity; + + InWorldPortableGrid(final EnergyStorage energyStorage, + final DiskInventory diskInventory, + final StateTrackedStorage.Listener diskListener, + final AbstractPortableGridBlockEntity blockEntity) { + super(energyStorage, diskInventory, diskListener); + this.blockEntity = blockEntity; + } + + @Override + public boolean isGridActive() { + final Level level = blockEntity.getLevel(); + final BlockPos worldPosition = blockEntity.getBlockPos(); + return super.isGridActive() + && level != null + && blockEntity.getRedstoneMode().isActive(level.hasNeighborSignal(worldPosition)); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGrid.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGrid.java index 9b0fbd3d0..a32eb89e6 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGrid.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGrid.java @@ -15,6 +15,7 @@ import com.refinedmods.refinedstorage2.api.storage.TrackedResourceAmount; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; +import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.api.support.resource.ResourceType; import com.refinedmods.refinedstorage2.platform.common.Platform; import com.refinedmods.refinedstorage2.platform.common.storage.DiskInventory; @@ -23,6 +24,8 @@ import java.util.List; import javax.annotation.Nullable; +import net.minecraft.server.level.ServerPlayer; + class PortableGrid implements Grid { private final EnergyStorage energyStorage; private final DiskInventory diskInventory; @@ -108,13 +111,12 @@ public List getResources(final Class act } @Override - public GridOperations createOperations(final ResourceType resourceType, - final Actor actor) { + public GridOperations createOperations(final ResourceType resourceType, final ServerPlayer player) { if (storage == null) { return new NoopGridOperations(); } final StorageChannel storageChannel = this.storage.getStorageChannel(); - final GridOperations operations = resourceType.createGridOperations(storageChannel, actor); + final GridOperations operations = resourceType.createGridOperations(storageChannel, new PlayerActor(player)); return new PortableGridOperations(operations, energyStorage); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGridBlockContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGridBlockContainerMenu.java index 880c59258..047058204 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGridBlockContainerMenu.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGridBlockContainerMenu.java @@ -15,7 +15,7 @@ public PortableGridBlockContainerMenu(final int syncId, final FriendlyByteBuf buf) { super(Menus.INSTANCE.getPortableGridBlock(), syncId, playerInventory, buf); registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); - addSlots(0); + this.onScreenReady(0); } PortableGridBlockContainerMenu(final int syncId, @@ -34,6 +34,6 @@ public PortableGridBlockContainerMenu(final int syncId, portableGrid::getRedstoneMode, portableGrid::setRedstoneMode )); - addSlots(0); + this.onScreenReady(0); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGridItemContainerMenu.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGridItemContainerMenu.java index 995c5af9c..32388cb79 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGridItemContainerMenu.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/PortableGridItemContainerMenu.java @@ -16,7 +16,7 @@ public PortableGridItemContainerMenu(final int syncId, final FriendlyByteBuf buf) { super(Menus.INSTANCE.getPortableGridItem(), syncId, playerInventory, buf); this.disabledSlot = PlatformApi.INSTANCE.getSlotReference(buf).orElse(null); - addSlots(0); + this.onScreenReady(0); } PortableGridItemContainerMenu(final int syncId, @@ -34,6 +34,6 @@ public PortableGridItemContainerMenu(final int syncId, energyStorage ); this.disabledSlot = slotReference; - addSlots(0); + this.onScreenReady(0); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/AbstractStorageBlockBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/AbstractStorageBlockBlockEntity.java index 2415a1c8d..4063cd07a 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/AbstractStorageBlockBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/AbstractStorageBlockBlockEntity.java @@ -9,7 +9,7 @@ import com.refinedmods.refinedstorage2.platform.api.support.resource.ResourceFactory; import com.refinedmods.refinedstorage2.platform.common.storage.StorageConfigurationContainerImpl; import com.refinedmods.refinedstorage2.platform.common.support.FilterWithFuzzyMode; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceContainerImpl; @@ -29,7 +29,7 @@ abstract class AbstractStorageBlockBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider, ItemTransferableStorageBlockEntity { + implements NetworkNodeMenuProvider, ItemTransferableStorageBlockEntity { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractStorageBlockBlockEntity.class); private static final String TAG_STORAGE_ID = "sid"; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/FluidStorageBlockBlockItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/FluidStorageBlockBlockItem.java index 936737ea6..d43dc07d5 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/FluidStorageBlockBlockItem.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/FluidStorageBlockBlockItem.java @@ -9,9 +9,12 @@ import javax.annotation.Nullable; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; public class FluidStorageBlockBlockItem extends AbstractStorageContainerBlockItem { private final FluidStorageType.Variant variant; @@ -48,4 +51,13 @@ protected ItemStack createSecondaryDisassemblyByproduct(final int count) { } return new ItemStack(Items.INSTANCE.getFluidStoragePart(variant), count); } + + @Override + protected boolean placeBlock(final BlockPlaceContext ctx, final BlockState state) { + if (ctx.getPlayer() instanceof ServerPlayer serverPlayer + && !(PlatformApi.INSTANCE.canPlaceNetworkNode(serverPlayer, ctx.getLevel(), ctx.getClickedPos(), state))) { + return false; + } + return super.placeBlock(ctx, state); + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/ItemStorageBlockBlockItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/ItemStorageBlockBlockItem.java index 085ee20c8..3e6bb5634 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/ItemStorageBlockBlockItem.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/storageblock/ItemStorageBlockBlockItem.java @@ -9,9 +9,12 @@ import javax.annotation.Nullable; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; public class ItemStorageBlockBlockItem extends AbstractStorageContainerBlockItem { private final ItemStorageType.Variant variant; @@ -48,4 +51,13 @@ protected ItemStack createSecondaryDisassemblyByproduct(final int count) { } return new ItemStack(Items.INSTANCE.getItemStoragePart(variant), count); } + + @Override + protected boolean placeBlock(final BlockPlaceContext ctx, final BlockState state) { + if (ctx.getPlayer() instanceof ServerPlayer serverPlayer + && !(PlatformApi.INSTANCE.canPlaceNetworkNode(serverPlayer, ctx.getLevel(), ctx.getClickedPos(), state))) { + return false; + } + return super.placeBlock(ctx, state); + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/FluidStorageMonitorExtractionStrategy.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/FluidStorageMonitorExtractionStrategy.java index 87329091f..4d941915c 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/FluidStorageMonitorExtractionStrategy.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/FluidStorageMonitorExtractionStrategy.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage2.platform.common.storagemonitor; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.TransferHelper; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/FluidStorageMonitorInsertionStrategy.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/FluidStorageMonitorInsertionStrategy.java index 1c428973b..3929d4a31 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/FluidStorageMonitorInsertionStrategy.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/FluidStorageMonitorInsertionStrategy.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/ItemStorageMonitorExtractionStrategy.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/ItemStorageMonitorExtractionStrategy.java index 915d9ce36..5a91d2740 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/ItemStorageMonitorExtractionStrategy.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/ItemStorageMonitorExtractionStrategy.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.platform.api.storagemonitor.StorageMonitorExtractionStrategy; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/ItemStorageMonitorInsertionStrategy.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/ItemStorageMonitorInsertionStrategy.java index 2eb65b710..63b251f10 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/ItemStorageMonitorInsertionStrategy.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/ItemStorageMonitorInsertionStrategy.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.storage.Actor; import com.refinedmods.refinedstorage2.platform.api.storagemonitor.StorageMonitorInsertionStrategy; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/StorageMonitorBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/StorageMonitorBlockEntity.java index 9e76ff199..316f0cd16 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/StorageMonitorBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storagemonitor/StorageMonitorBlockEntity.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage2.platform.common.storagemonitor; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage2.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage2.api.resource.ResourceAmount; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.storage.channel.StorageChannel; @@ -15,7 +15,7 @@ import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage2.platform.common.support.FilterWithFuzzyMode; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceContainerImpl; @@ -43,7 +43,7 @@ import org.slf4j.LoggerFactory; public class StorageMonitorBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider { + implements NetworkNodeMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(StorageMonitorBlockEntity.class); private static final String TAG_CLIENT_FILTER = "cf"; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/AbstractBaseBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/AbstractBaseBlock.java index dcfed8e26..59909a309 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/AbstractBaseBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/AbstractBaseBlock.java @@ -1,13 +1,18 @@ package com.refinedmods.refinedstorage2.platform.common.support; +import com.refinedmods.refinedstorage2.api.network.Network; +import com.refinedmods.refinedstorage2.platform.api.PlatformApi; +import com.refinedmods.refinedstorage2.platform.api.support.network.PlatformNetworkNodeContainer; import com.refinedmods.refinedstorage2.platform.common.Platform; import com.refinedmods.refinedstorage2.platform.common.content.BlockColorMap; import com.refinedmods.refinedstorage2.platform.common.content.Sounds; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import java.util.Optional; import javax.annotation.Nullable; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; import net.minecraft.world.Containers; @@ -29,6 +34,8 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.VoxelShape; +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + public abstract class AbstractBaseBlock extends Block { protected AbstractBaseBlock(final Properties properties) { super(properties); @@ -75,13 +82,22 @@ private Optional tryOpenScreen(final BlockState state, final MenuProvider menuProvider = state.getMenuProvider(level, pos); if (menuProvider != null) { if (player instanceof ServerPlayer serverPlayer) { - Platform.INSTANCE.getMenuOpener().openMenu(serverPlayer, menuProvider); + tryOpenScreen(serverPlayer, menuProvider); } return Optional.of(InteractionResult.SUCCESS); } return Optional.empty(); } + private void tryOpenScreen(final ServerPlayer player, final MenuProvider menuProvider) { + if (menuProvider instanceof NetworkNodeMenuProvider networkNodeMenuProvider + && !networkNodeMenuProvider.canOpen(player)) { + PlatformApi.INSTANCE.sendNoPermissionToOpenMessage(player, getName()); + return; + } + Platform.INSTANCE.getMenuOpener().openMenu(player, menuProvider); + } + @Override @SuppressWarnings("deprecation") public MenuProvider getMenuProvider(final BlockState state, final Level level, final BlockPos pos) { @@ -137,8 +153,8 @@ public final Optional tryUseWrench(final BlockState state, if (!isWrenchingOwnBlock) { return Optional.empty(); } - if (!level.isClientSide()) { - final boolean success = dismantleOrRotate(state, level, hitResult, player); + if (player instanceof ServerPlayer serverPlayer) { + final boolean success = dismantleOrRotate(state, level, hitResult, serverPlayer); if (success) { level.playSound( null, @@ -156,21 +172,54 @@ public final Optional tryUseWrench(final BlockState state, private boolean dismantleOrRotate(final BlockState state, final Level level, final BlockHitResult hitResult, - final Player player) { + final ServerPlayer player) { if (player.isCrouching()) { - dismantle(state, level, hitResult, player); - return true; + return dismantle(state, level, hitResult, player); } else { - return rotate(state, level, hitResult.getBlockPos()); + return rotate(state, level, hitResult.getBlockPos(), player); } } - private boolean rotate(final BlockState state, final Level level, final BlockPos pos) { + private boolean rotate(final BlockState state, + final Level level, + final BlockPos pos, + final ServerPlayer player) { + final BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof PlatformNetworkNodeContainer platformNetworkNodeContainer) { + final Network network = platformNetworkNodeContainer.getNode().getNetwork(); + if (!platformNetworkNodeContainer.canBreakOrRotate(player) + || mightMakeConnectionWithAnotherSecuredNetwork(level, pos, player, network)) { + PlatformApi.INSTANCE.sendNoPermissionMessage( + player, + createTranslation("misc", "no_permission.build.rotate", getName()) + ); + return false; + } + } final BlockState rotated = getRotatedBlockState(state, level, pos); level.setBlockAndUpdate(pos, rotated); return !state.equals(rotated); } + private boolean mightMakeConnectionWithAnotherSecuredNetwork(final Level level, + final BlockPos pos, + final ServerPlayer player, + @Nullable final Network rotatedNetwork) { + for (final Direction direction : Direction.values()) { + final BlockPos neighborPos = pos.relative(direction); + final BlockEntity neighborBlockEntity = level.getBlockEntity(neighborPos); + if (neighborBlockEntity instanceof PlatformNetworkNodeContainer neighborNetworkNodeContainer + && neighborNetworkNodeContainer.getNode().getNetwork() != rotatedNetwork) { + PlatformApi.INSTANCE.sendNoPermissionMessage( + player, + createTranslation("misc", "no_permission.build.rotate", getName()) + ); + return true; + } + } + return false; + } + @SuppressWarnings("deprecation") protected BlockState getRotatedBlockState(final BlockState state, final Level level, final BlockPos pos) { return state.rotate(Rotation.CLOCKWISE_90); @@ -180,12 +229,20 @@ private boolean isWrench(final ItemStack item) { return item.is(Platform.INSTANCE.getWrenchTag()); } - private void dismantle(final BlockState state, - final Level level, - final BlockHitResult hitResult, - final Player player) { - final ItemStack stack = Platform.INSTANCE.getCloneItemStack(state, level, hitResult, player); + private boolean dismantle(final BlockState state, + final Level level, + final BlockHitResult hitResult, + final ServerPlayer player) { final BlockEntity blockEntity = level.getBlockEntity(hitResult.getBlockPos()); + if (blockEntity instanceof PlatformNetworkNodeContainer platformNetworkNodeContainer + && !platformNetworkNodeContainer.canBreakOrRotate(player)) { + PlatformApi.INSTANCE.sendNoPermissionMessage( + player, + createTranslation("misc", "no_permission.build.dismantle", getName()) + ); + return false; + } + final ItemStack stack = Platform.INSTANCE.getCloneItemStack(state, level, hitResult, player); if (blockEntity != null) { blockEntity.saveToItem(stack); // Ensure that we don't drop items @@ -199,6 +256,7 @@ private void dismantle(final BlockState state, hitResult.getLocation().z, stack )); + return true; } public final Optional tryUpdateColor(final BlockState state, diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/AbstractColoredBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/AbstractColoredBlock.java index 08754b8b1..5c032635e 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/AbstractColoredBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/AbstractColoredBlock.java @@ -2,11 +2,10 @@ import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; -public abstract class AbstractColoredBlock> - extends AbstractBaseBlock implements ColorableBlock, BlockItemProvider { +public abstract class AbstractColoredBlock> + extends AbstractBaseBlock implements ColorableBlock, BlockItemProvider { private final DyeColor color; private final MutableComponent name; @@ -25,9 +24,4 @@ public MutableComponent getName() { public DyeColor getColor() { return color; } - - @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), name); - } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/NamedBlockItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/BaseBlockItem.java similarity index 63% rename from refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/NamedBlockItem.java rename to refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/BaseBlockItem.java index 80183c9b0..15d228129 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/NamedBlockItem.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/BaseBlockItem.java @@ -11,34 +11,33 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; -public class NamedBlockItem extends BlockItem { - private final Component name; +public class BaseBlockItem extends BlockItem { + private final Block block; @Nullable private final Component helpText; - public NamedBlockItem(final Block block, - final Properties properties, - final Component name) { - this(block, properties, name, null); + public BaseBlockItem(final Block block) { + this(block, null); } - public NamedBlockItem(final Block block, - final Properties properties, - final Component name, - @Nullable final Component helpText) { + public BaseBlockItem(final Block block, @Nullable final Component helpText) { + this(block, new Properties(), helpText); + } + + public BaseBlockItem(final Block block, final Properties properties, @Nullable final Component helpText) { super(block, properties); - this.name = name; + this.block = block; this.helpText = helpText; } @Override public Component getDescription() { - return name; + return block.getName(); } @Override public Component getName(final ItemStack stack) { - return name; + return block.getName(); } @Override diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/ClientToServerCommunications.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/ClientToServerCommunications.java index 5aeca9c19..52a867812 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/ClientToServerCommunications.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/ClientToServerCommunications.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage2.api.grid.operations.GridExtractMode; import com.refinedmods.refinedstorage2.api.grid.operations.GridInsertMode; import com.refinedmods.refinedstorage2.platform.api.grid.GridScrollMode; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.common.support.containermenu.PropertyType; @@ -35,4 +36,10 @@ public interface ClientToServerCommunications { void sendSingleAmountChange(double amount); void sendUseNetworkBoundItem(SlotReference slotReference); + + void sendSecurityCardPermission(PlatformPermission permission, boolean allowed); + + void sendSecurityCardResetPermission(PlatformPermission permission); + + void sendSecurityCardBoundPlayer(UUID playerId); } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/NetworkNodeBlockItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/NetworkNodeBlockItem.java new file mode 100644 index 000000000..ef29acba8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/NetworkNodeBlockItem.java @@ -0,0 +1,34 @@ +package com.refinedmods.refinedstorage2.platform.common.support; + +import com.refinedmods.refinedstorage2.platform.api.PlatformApi; + +import javax.annotation.Nullable; + +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +public class NetworkNodeBlockItem extends BaseBlockItem { + public NetworkNodeBlockItem(final Block block) { + super(block); + } + + public NetworkNodeBlockItem(final Block block, final Component helpText) { + super(block, helpText); + } + + public NetworkNodeBlockItem(final Block block, final Properties properties, @Nullable final Component helpText) { + super(block, properties, helpText); + } + + @Override + protected boolean placeBlock(final BlockPlaceContext ctx, final BlockState state) { + if (ctx.getPlayer() instanceof ServerPlayer serverPlayer + && !(PlatformApi.INSTANCE.canPlaceNetworkNode(serverPlayer, ctx.getLevel(), ctx.getClickedPos(), state))) { + return false; + } + return super.placeBlock(ctx, state); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/ServerToClientCommunications.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/ServerToClientCommunications.java index ac865be62..6ed54994f 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/ServerToClientCommunications.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/ServerToClientCommunications.java @@ -9,6 +9,7 @@ import java.util.UUID; import javax.annotation.Nullable; +import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; public interface ServerToClientCommunications { @@ -32,4 +33,6 @@ void sendResourceSlotUpdate(ServerPlayer player, void sendStorageInfoResponse(ServerPlayer player, UUID id, StorageInfo storageInfo); void sendNetworkTransmitterStatus(ServerPlayer player, NetworkTransmitterStatus status); + + void sendNoPermission(ServerPlayer player, Component message); } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/SimpleBlockItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/SimpleBlockItem.java deleted file mode 100644 index 05ef58f3f..000000000 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/SimpleBlockItem.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.refinedmods.refinedstorage2.platform.common.support; - -import com.refinedmods.refinedstorage2.platform.api.support.HelpTooltipComponent; - -import java.util.Optional; -import javax.annotation.Nullable; - -import net.minecraft.network.chat.Component; -import net.minecraft.world.inventory.tooltip.TooltipComponent; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; - -public final class SimpleBlockItem extends BlockItem { - @Nullable - private final Component helpText; - - public SimpleBlockItem(final Block block) { - this(block, null); - } - - public SimpleBlockItem(final Block block, @Nullable final Component helpText) { - super(block, new Item.Properties()); - this.helpText = helpText; - } - - @Override - public Optional getTooltipImage(final ItemStack stack) { - if (helpText == null) { - return Optional.empty(); - } - return Optional.of(new HelpTooltipComponent(helpText)); - } -} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/SimpleFilteredContainer.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/SimpleFilteredContainer.java new file mode 100644 index 000000000..13a83635f --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/SimpleFilteredContainer.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage2.platform.common.support; + +import java.util.function.Predicate; + +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; + +public final class SimpleFilteredContainer extends SimpleContainer { + private final Predicate filter; + + public SimpleFilteredContainer(final int size, final Predicate filter) { + super(size); + this.filter = filter; + } + + @Override + public boolean canPlaceItem(final int slot, final ItemStack stack) { + return filter.test(stack); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/containermenu/NetworkNodeMenuProvider.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/containermenu/NetworkNodeMenuProvider.java new file mode 100644 index 000000000..c24cd3bb6 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/containermenu/NetworkNodeMenuProvider.java @@ -0,0 +1,15 @@ +package com.refinedmods.refinedstorage2.platform.common.support.containermenu; + +import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; +import com.refinedmods.refinedstorage2.platform.api.security.SecurityHelper; +import com.refinedmods.refinedstorage2.platform.common.security.BuiltinPermission; + +import net.minecraft.server.level.ServerPlayer; + +public interface NetworkNodeMenuProvider extends ExtendedMenuProvider { + NetworkNode getNode(); + + default boolean canOpen(final ServerPlayer player) { + return SecurityHelper.isAllowed(player, BuiltinPermission.OPEN, getNode()); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/direction/HorizontalDirection.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/direction/HorizontalDirection.java new file mode 100644 index 000000000..36a77b423 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/direction/HorizontalDirection.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage2.platform.common.support.direction; + +import java.util.Locale; + +import net.minecraft.util.StringRepresentable; + +public enum HorizontalDirection implements StringRepresentable { + NORTH, EAST, SOUTH, WEST; + + private final String name; + + HorizontalDirection() { + this.name = name().toLowerCase(Locale.ROOT); + } + + @Override + public String getSerializedName() { + return name; + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/direction/HorizontalDirectionType.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/direction/HorizontalDirectionType.java new file mode 100644 index 000000000..22116b079 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/direction/HorizontalDirectionType.java @@ -0,0 +1,55 @@ +package com.refinedmods.refinedstorage2.platform.common.support.direction; + +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.state.properties.EnumProperty; + +public class HorizontalDirectionType implements DirectionType { + public static final DirectionType INSTANCE = new HorizontalDirectionType(); + + private static final EnumProperty PROPERTY = EnumProperty.create( + "direction", + HorizontalDirection.class + ); + + @Override + public EnumProperty getProperty() { + return PROPERTY; + } + + @Override + public HorizontalDirection getDefault() { + return HorizontalDirection.NORTH; + } + + @Override + public Direction extractDirection(final HorizontalDirection direction) { + return switch (direction) { + case NORTH -> Direction.NORTH; + case EAST -> Direction.EAST; + case SOUTH -> Direction.SOUTH; + case WEST -> Direction.WEST; + }; + } + + @Override + public HorizontalDirection getDirection(final Direction clickedFace, + final Direction playerFacing, + final float playerPitch) { + return switch (playerFacing) { + case EAST -> HorizontalDirection.EAST; + case SOUTH -> HorizontalDirection.SOUTH; + case WEST -> HorizontalDirection.WEST; + default -> HorizontalDirection.NORTH; + }; + } + + @Override + public HorizontalDirection rotate(final HorizontalDirection direction) { + return switch (direction) { + case NORTH -> HorizontalDirection.EAST; + case EAST -> HorizontalDirection.SOUTH; + case SOUTH -> HorizontalDirection.WEST; + case WEST -> HorizontalDirection.NORTH; + }; + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java index 565fe7567..d2d53be3e 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java @@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage2.platform.common.support.RedstoneMode; import com.refinedmods.refinedstorage2.platform.common.support.RedstoneModeSettings; +import java.util.Objects; import java.util.UUID; import javax.annotation.Nullable; @@ -86,4 +87,8 @@ public void setPlacedBy(final UUID playerId) { protected final Player getFakePlayer(final ServerLevel serverLevel) { return Platform.INSTANCE.getFakePlayer(serverLevel, placedByPlayerId); } + + protected final boolean isPlacedBy(final UUID playerId) { + return Objects.equals(placedByPlayerId, playerId); + } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java index d89138423..6ca816d94 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java @@ -6,7 +6,7 @@ import com.refinedmods.refinedstorage2.platform.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage2.platform.common.support.SchedulingMode; import com.refinedmods.refinedstorage2.platform.common.support.SchedulingModeType; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage2.platform.common.upgrade.UpgradeDestinations; @@ -22,7 +22,7 @@ public abstract class AbstractSchedulingNetworkNodeContainerBlockEntity extends AbstractUpgradeableNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider { + implements NetworkNodeMenuProvider { protected final FilterWithFuzzyMode filter; private final SchedulingMode schedulingMode; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java index 3746b213e..69dc02d40 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java @@ -103,7 +103,7 @@ public void load(final CompoundTag tag) { } private void configureAccordingToUpgrades() { - LOGGER.info("Reconfiguring {} for upgrades", getBlockPos()); + LOGGER.debug("Reconfiguring {} for upgrades", getBlockPos()); final int amountOfSpeedUpgrades = upgradeContainer.getAmount(Items.INSTANCE.getSpeedUpgrade()); this.rateLimiter = createRateLimiter(amountOfSpeedUpgrades); this.setEnergyUsage(upgradeContainer.getEnergyUsage()); diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/ConnectionProviderImpl.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/ConnectionProviderImpl.java index 7d6f81382..4c0abfa92 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/ConnectionProviderImpl.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/ConnectionProviderImpl.java @@ -40,7 +40,11 @@ public Connections findConnections(final NetworkNodeContainer pivot, .filter(PlatformNetworkNodeContainer.class::isInstance) .map(PlatformNetworkNodeContainer.class::cast) .collect(Collectors.toSet()); - LOGGER.info("Finding connections for pivot {} with {} existing connections", pivot, existingConnections.size()); + LOGGER.debug( + "Finding connections for pivot {} with {} existing connections", + pivot, + existingConnections.size() + ); final ScanState scanState = new ScanState(existingPlatformConnections); addStartContainer(pivot, scanState); PlatformNetworkNodeContainer currentContainer; @@ -49,7 +53,7 @@ public Connections findConnections(final NetworkNodeContainer pivot, visit(scanState, new ScanEntry(currentContainer)); requests++; } - LOGGER.info( + LOGGER.debug( "Processed {} requests for pivot {} with {} found entries ({} removed and {} new)", requests, pivot, diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/NetworkNodeContainerBlockEntityImpl.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/NetworkNodeContainerBlockEntityImpl.java index 0ee9dbf3f..47e629a7c 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/NetworkNodeContainerBlockEntityImpl.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/NetworkNodeContainerBlockEntityImpl.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage2.platform.common.support.network; -import com.refinedmods.refinedstorage2.api.network.component.EnergyNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage2.api.network.impl.storage.AbstractNetworkNode; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; import com.refinedmods.refinedstorage2.platform.api.support.network.AbstractNetworkNodeContainerBlockEntity; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/bounditem/NetworkBoundItemSessionImpl.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/bounditem/NetworkBoundItemSessionImpl.java index a1ffad1c5..5011671a2 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/bounditem/NetworkBoundItemSessionImpl.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/bounditem/NetworkBoundItemSessionImpl.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage2.api.core.Action; import com.refinedmods.refinedstorage2.api.network.Network; -import com.refinedmods.refinedstorage2.api.network.component.GraphNetworkComponent; +import com.refinedmods.refinedstorage2.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; import com.refinedmods.refinedstorage2.platform.api.support.network.PlatformNetworkNodeContainer; import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.NetworkBoundItemSession; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/component/PlatformStorageNetworkComponent.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/component/PlatformStorageNetworkComponent.java index 2dc393e0e..879384f6d 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/component/PlatformStorageNetworkComponent.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/network/component/PlatformStorageNetworkComponent.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage2.platform.common.support.network.component; -import com.refinedmods.refinedstorage2.api.network.impl.component.StorageNetworkComponentImpl; +import com.refinedmods.refinedstorage2.api.network.impl.storage.StorageNetworkComponentImpl; import com.refinedmods.refinedstorage2.api.resource.ResourceAmount; import com.refinedmods.refinedstorage2.api.resource.ResourceKey; import com.refinedmods.refinedstorage2.api.resource.list.ResourceListImpl; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/packet/PacketIds.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/packet/PacketIds.java index bf476c452..c6a0ec64d 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/packet/PacketIds.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/packet/PacketIds.java @@ -26,6 +26,12 @@ public final class PacketIds { public static final ResourceLocation SINGLE_AMOUNT_CHANGE = createIdentifier("detector_amount_change"); public static final ResourceLocation USE_NETWORK_BOUND_ITEM = createIdentifier("use_network_bound_item"); public static final ResourceLocation NETWORK_TRANSMITTER_STATUS = createIdentifier("network_transmitter_status"); + public static final ResourceLocation SECURITY_CARD_PERMISSION = createIdentifier("security_card_permission"); + public static final ResourceLocation SECURITY_CARD_RESET_PERMISSION = createIdentifier( + "security_card_reset_permission" + ); + public static final ResourceLocation SECURITY_CARD_BOUND_PLAYER = createIdentifier("security_card_bound_player"); + public static final ResourceLocation NO_PERMISSION = createIdentifier("no_permission"); private PacketIds() { } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/registry/PlatformRegistryImpl.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/registry/PlatformRegistryImpl.java index 2873e2cfc..99e83daef 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/registry/PlatformRegistryImpl.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/registry/PlatformRegistryImpl.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage2.platform.api.support.registry.PlatformRegistry; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -19,12 +20,7 @@ public class PlatformRegistryImpl implements PlatformRegistry { private final Map idToValueMap = new HashMap<>(); private final Map valueToIdMap = new HashMap<>(); private final List order = new ArrayList<>(); - private final T defaultValue; - - public PlatformRegistryImpl(final ResourceLocation defaultValueId, final T defaultValue) { - this.register(defaultValueId, defaultValue); - this.defaultValue = defaultValue; - } + private final List viewList = Collections.unmodifiableList(order); @Override public void register(final ResourceLocation id, final T value) { @@ -38,11 +34,6 @@ public void register(final ResourceLocation id, final T value) { order.add(value); } - @Override - public boolean isEmpty() { - return order.size() == 1; - } - @Override public Optional getId(final T value) { CoreValidations.validateNotNull(value, VALUE_NOT_PRESENT_ERROR); @@ -55,29 +46,18 @@ public Optional get(final ResourceLocation id) { return Optional.ofNullable(idToValueMap.get(id)); } - @Override - public T getDefault() { - return defaultValue; - } - @Override public List getAll() { - return List.copyOf(order); - } - - @Override - public T next(final T value) { - final T nextValue = nextOrNullIfLast(value); - if (nextValue == null) { - return order.get(0); - } - return nextValue; + return viewList; } @Nullable @Override public T nextOrNullIfLast(final T value) { CoreValidations.validateNotNull(value, VALUE_NOT_PRESENT_ERROR); + if (order.isEmpty()) { + return null; + } final int index = order.indexOf(value); final int nextIndex = index + 1; if (nextIndex >= order.size()) { diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/AbstractStretchingScreen.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/AbstractStretchingScreen.java new file mode 100644 index 000000000..7bbd61d55 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/AbstractStretchingScreen.java @@ -0,0 +1,194 @@ +package com.refinedmods.refinedstorage2.platform.common.support.stretching; + +import com.refinedmods.refinedstorage2.platform.common.Platform; +import com.refinedmods.refinedstorage2.platform.common.support.AbstractBaseContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.support.AbstractBaseScreen; +import com.refinedmods.refinedstorage2.platform.common.support.widget.ScrollbarWidget; + +import javax.annotation.Nullable; + +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; + +public abstract class AbstractStretchingScreen + extends AbstractBaseScreen { + protected static final int ROW_SIZE = 18; + + private static final int TOP_HEIGHT = 19; + private static final int COLUMNS = 9; + private static final int MIN_ROWS = 3; + private static final int INVENTORY_INCLUDING_TITLE_HEIGHT = 99; + private static final int ROW_PADDING = 3; + + private int visibleRows; + @Nullable + private ScrollbarWidget scrollbar; + + protected AbstractStretchingScreen(final T menu, + final Inventory playerInventory, + final Component text) { + super(menu, playerInventory, text); + } + + @Override + protected void init() { + this.visibleRows = calculateVisibleRows(); + this.imageHeight = TOP_HEIGHT + (ROW_SIZE * visibleRows) + getBottomHeight(); + this.inventoryLabelY = imageHeight - INVENTORY_INCLUDING_TITLE_HEIGHT + 4; + + getMenu().onScreenReady(imageHeight - INVENTORY_INCLUDING_TITLE_HEIGHT + 17); + + super.init(); + + this.scrollbar = new ScrollbarWidget(leftPos + 174, topPos + 20, 12, (visibleRows * ROW_SIZE) - 2); + this.scrollbar.setListener(offset -> scrollbarChanged(visibleRows)); + addWidget(scrollbar); + + init(visibleRows); + + addSideButton(new ScreenSizeSideButtonWidget(this)); + } + + protected void init(final int rows) { + // no op + } + + protected final int getScrollbarOffset() { + if (scrollbar == null) { + return 0; + } + final int scrollbarOffset = (int) scrollbar.getOffset(); + if (!scrollbar.isSmoothScrolling()) { + return scrollbarOffset * ROW_SIZE; + } + return scrollbarOffset; + } + + protected void scrollbarChanged(final int rows) { + // no op + } + + @Override + protected void renderBg(final GuiGraphics graphics, final float delta, final int mouseX, final int mouseY) { + final int x = (width - imageWidth) / 2; + final int y = (height - imageHeight) / 2; + renderBackground(graphics, x, y); + renderRows(graphics, mouseX, mouseY, x, y); + } + + private void renderBackground(final GuiGraphics graphics, final int x, final int y) { + graphics.blit(getTexture(), x, y, 0, 0, imageWidth, TOP_HEIGHT); + renderStretchingBackground(graphics, x, y + TOP_HEIGHT, visibleRows); + graphics.blit( + getTexture(), + x, + y + TOP_HEIGHT + (ROW_SIZE * visibleRows), + 0, + getBottomV(), + imageWidth, + getBottomHeight() + ); + } + + private void renderRows(final GuiGraphics graphics, final int mouseX, final int mouseY, final int x, final int y) { + graphics.enableScissor( + x + 7, + y + TOP_HEIGHT + 1, + x + 7 + (ROW_SIZE * COLUMNS), + y + TOP_HEIGHT + 1 + (ROW_SIZE * visibleRows) - 2 + ); + renderRows(graphics, x, y, TOP_HEIGHT, visibleRows, mouseX, mouseY); + graphics.disableScissor(); + } + + protected abstract void renderRows( + GuiGraphics graphics, + int x, + int y, + int topHeight, + int rows, + int mouseX, + int mouseY + ); + + protected abstract void renderStretchingBackground(GuiGraphics graphics, int x, int y, int rows); + + @Override + public void render(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { + super.render(graphics, mouseX, mouseY, partialTicks); + if (scrollbar != null) { + scrollbar.render(graphics, mouseX, mouseY, partialTicks); + } + } + + @Override + public boolean mouseClicked(final double mouseX, final double mouseY, final int clickedButton) { + if (scrollbar != null && scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { + return true; + } + return super.mouseClicked(mouseX, mouseY, clickedButton); + } + + @Override + public void mouseMoved(final double mx, final double my) { + if (scrollbar != null) { + scrollbar.mouseMoved(mx, my); + } + super.mouseMoved(mx, my); + } + + @Override + public boolean mouseReleased(final double mx, final double my, final int button) { + return (scrollbar != null && scrollbar.mouseReleased(mx, my, button)) || super.mouseReleased(mx, my, button); + } + + @Override + public boolean mouseScrolled(final double x, final double y, final double z, final double delta) { + final boolean didScrollbar = scrollbar != null + && !hasShiftDown() + && !hasControlDown() + && scrollbar.mouseScrolled(x, y, z, delta); + return didScrollbar || super.mouseScrolled(x, y, z, delta); + } + + private int calculateVisibleRows() { + final int screenSpaceAvailable = height - TOP_HEIGHT - getBottomHeight(); + final int maxRows = getMaxRows(); + return Math.max(MIN_ROWS, Math.min((screenSpaceAvailable / ROW_SIZE) - ROW_PADDING, maxRows)); + } + + protected final boolean isInStretchedArea(final int y) { + return y >= TOP_HEIGHT && y < TOP_HEIGHT + (ROW_SIZE * visibleRows); + } + + private int getMaxRows() { + return switch (Platform.INSTANCE.getConfig().getScreenSize()) { + case STRETCH -> Platform.INSTANCE.getConfig().getMaxRowsStretch(); + case SMALL -> 3; + case MEDIUM -> 5; + case LARGE -> 8; + case EXTRA_LARGE -> 12; + }; + } + + protected final void updateScrollbar(final int totalRows) { + if (scrollbar == null) { + return; + } + scrollbar.setEnabled(totalRows > visibleRows); + final int rowsExcludingVisibleOnes = totalRows - visibleRows; + final int maxOffset = scrollbar.isSmoothScrolling() + ? ((rowsExcludingVisibleOnes * ROW_SIZE) + getScrollPanePadding()) + : rowsExcludingVisibleOnes; + scrollbar.setMaxOffset(maxOffset); + } + + protected abstract int getBottomHeight(); + + protected abstract int getBottomV(); + + protected int getScrollPanePadding() { + return 0; + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridSize.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/ScreenSize.java similarity index 69% rename from refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridSize.java rename to refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/ScreenSize.java index f045e4881..79efb5b0c 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/GridSize.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/ScreenSize.java @@ -1,13 +1,13 @@ -package com.refinedmods.refinedstorage2.platform.common.grid; +package com.refinedmods.refinedstorage2.platform.common.support.stretching; -public enum GridSize { +public enum ScreenSize { STRETCH, SMALL, MEDIUM, LARGE, EXTRA_LARGE; - public GridSize toggle() { + public ScreenSize toggle() { return switch (this) { case STRETCH -> SMALL; case SMALL -> MEDIUM; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/ScreenSizeListener.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/ScreenSizeListener.java new file mode 100644 index 000000000..275a8bcbf --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/ScreenSizeListener.java @@ -0,0 +1,6 @@ +package com.refinedmods.refinedstorage2.platform.common.support.stretching; + +@FunctionalInterface +public interface ScreenSizeListener { + void onScreenReady(int playerInventoryY); +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/screen/SizeSideButtonWidget.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/ScreenSizeSideButtonWidget.java similarity index 53% rename from refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/screen/SizeSideButtonWidget.java rename to refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/ScreenSizeSideButtonWidget.java index 957c0b467..e4affb966 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/grid/screen/SizeSideButtonWidget.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/ScreenSizeSideButtonWidget.java @@ -1,35 +1,36 @@ -package com.refinedmods.refinedstorage2.platform.common.grid.screen; +package com.refinedmods.refinedstorage2.platform.common.support.stretching; -import com.refinedmods.refinedstorage2.platform.common.grid.AbstractGridContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.Platform; import com.refinedmods.refinedstorage2.platform.common.support.widget.AbstractSideButtonWidget; import net.minecraft.network.chat.MutableComponent; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; -class SizeSideButtonWidget extends AbstractSideButtonWidget { - private static final MutableComponent TITLE = createTranslation("gui", "grid.size"); +public class ScreenSizeSideButtonWidget extends AbstractSideButtonWidget { + private static final MutableComponent TITLE = createTranslation("gui", "screen_size"); - private static final MutableComponent SUBTEXT_STRETCH = createTranslation("gui", "grid.size.stretch"); - private static final MutableComponent SUBTEXT_SMALL = createTranslation("gui", "grid.size.small"); - private static final MutableComponent SUBTEXT_MEDIUM = createTranslation("gui", "grid.size.medium"); - private static final MutableComponent SUBTEXT_LARGE = createTranslation("gui", "grid.size.large"); - private static final MutableComponent SUBTEXT_EXTRA_LARGE = createTranslation("gui", "grid.size.extra_large"); + private static final MutableComponent SUBTEXT_STRETCH = createTranslation("gui", "screen_size.stretch"); + private static final MutableComponent SUBTEXT_SMALL = createTranslation("gui", "screen_size.small"); + private static final MutableComponent SUBTEXT_MEDIUM = createTranslation("gui", "screen_size.medium"); + private static final MutableComponent SUBTEXT_LARGE = createTranslation("gui", "screen_size.large"); + private static final MutableComponent SUBTEXT_EXTRA_LARGE = createTranslation("gui", "screen_size.extra_large"); - private final AbstractGridContainerMenu menu; - - SizeSideButtonWidget(final AbstractGridContainerMenu menu) { - super(createPressAction(menu)); - this.menu = menu; + public ScreenSizeSideButtonWidget(final AbstractStretchingScreen stretchingScreen) { + super(createPressAction(stretchingScreen)); } - private static OnPress createPressAction(final AbstractGridContainerMenu menu) { - return btn -> menu.setSize(menu.getSize().toggle()); + private static OnPress createPressAction(final AbstractStretchingScreen stretchingScreen) { + return btn -> { + Platform.INSTANCE.getConfig().setScreenSize(Platform.INSTANCE.getConfig().getScreenSize().toggle()); + stretchingScreen.init(); + }; } @Override protected int getXTexture() { - return switch (menu.getSize()) { + final ScreenSize screenSize = Platform.INSTANCE.getConfig().getScreenSize(); + return switch (screenSize) { case STRETCH -> 64 + 48; case SMALL -> 64; case MEDIUM -> 64 + 16; @@ -49,7 +50,8 @@ protected MutableComponent getTitle() { @Override protected MutableComponent getSubText() { - return switch (menu.getSize()) { + final ScreenSize screenSize = Platform.INSTANCE.getConfig().getScreenSize(); + return switch (screenSize) { case STRETCH -> SUBTEXT_STRETCH; case SMALL -> SUBTEXT_SMALL; case MEDIUM -> SUBTEXT_MEDIUM; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/package-info.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/package-info.java new file mode 100644 index 000000000..c18a46a5b --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/stretching/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage2.platform.common.support.stretching; + +import com.refinedmods.refinedstorage2.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/widget/CustomCheckboxWidget.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/widget/CustomCheckboxWidget.java new file mode 100644 index 000000000..66d8b8fa5 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/widget/CustomCheckboxWidget.java @@ -0,0 +1,93 @@ +package com.refinedmods.refinedstorage2.platform.common.support.widget; + +import javax.annotation.Nullable; + +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.AbstractButton; +import net.minecraft.client.gui.narration.NarratedElementType; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +// A custom checkbox so that we can change the font color. +public class CustomCheckboxWidget extends AbstractButton { + private static final ResourceLocation CHECKBOX_SELECTED_HIGHLIGHTED_SPRITE = new ResourceLocation( + "widget/checkbox_selected_highlighted" + ); + private static final ResourceLocation CHECKBOX_SELECTED_SPRITE = new ResourceLocation( + "widget/checkbox_selected" + ); + private static final ResourceLocation CHECKBOX_HIGHLIGHTED_SPRITE = new ResourceLocation( + "widget/checkbox_highlighted" + ); + private static final ResourceLocation CHECKBOX_SPRITE = new ResourceLocation("widget/checkbox"); + + private static final int BOX_SIZE = 9 + 8; + + @Nullable + private OnPressed onPressed; + private boolean selected; + + public CustomCheckboxWidget(final int x, + final int y, + final Component text, + final Font font, + final boolean selected) { + super(x, y, BOX_SIZE + 4 + font.width(text), BOX_SIZE, text); + this.selected = selected; + } + + public void setOnPressed(@Nullable final OnPressed onPressed) { + this.onPressed = onPressed; + } + + public void onPress() { + this.selected = !this.selected; + if (onPressed != null) { + onPressed.onPressed(this, selected); + } + } + + public void setSelected(final boolean selected) { + this.selected = selected; + } + + public void updateWidgetNarration(final NarrationElementOutput output) { + output.add(NarratedElementType.TITLE, createNarrationMessage()); + if (active) { + if (isFocused()) { + output.add(NarratedElementType.USAGE, Component.translatable("narration.checkbox.usage.focused")); + } else { + output.add(NarratedElementType.USAGE, Component.translatable("narration.checkbox.usage.hovered")); + } + } + } + + @Override + public void renderWidget(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { + final Minecraft minecraft = Minecraft.getInstance(); + RenderSystem.enableDepthTest(); + final Font font = minecraft.font; + graphics.setColor(1.0F, 1.0F, 1.0F, this.alpha); + RenderSystem.enableBlend(); + final ResourceLocation sprite; + if (selected) { + sprite = isFocused() ? CHECKBOX_SELECTED_HIGHLIGHTED_SPRITE : CHECKBOX_SELECTED_SPRITE; + } else { + sprite = isFocused() ? CHECKBOX_HIGHLIGHTED_SPRITE : CHECKBOX_SPRITE; + } + final int x = getX() + BOX_SIZE + 4; + final int y = (getY() + (height >> 1)) - (9 >> 1); + graphics.blitSprite(sprite, getX(), getY(), BOX_SIZE, BOX_SIZE); + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + graphics.drawString(font, getMessage(), x, y, 4210752, false); + } + + @FunctionalInterface + public interface OnPressed { + void onPressed(CustomCheckboxWidget checkbox, boolean selected); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/widget/ScrollbarWidget.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/widget/ScrollbarWidget.java index 2925c0a8a..9111b4348 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/widget/ScrollbarWidget.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/widget/ScrollbarWidget.java @@ -1,5 +1,10 @@ package com.refinedmods.refinedstorage2.platform.common.support.widget; +import com.refinedmods.refinedstorage2.platform.common.Platform; + +import java.util.function.DoubleConsumer; +import javax.annotation.Nullable; + import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.narration.NarrationElementOutput; @@ -15,27 +20,31 @@ public class ScrollbarWidget extends AbstractWidget { private static final int ANIMATION_SCROLL_DURATION_IN_TICKS = 10; private static final double ANIMATION_SCROLL_HEIGHT_IN_PIXELS = 30; + private final boolean smoothScrolling; + private double offset; private double maxOffset; private boolean enabled = true; private boolean clicked; - private boolean scrollAnimation; private int animationScrollDirection = 0; private double animationStartOffset; private double animationTickCounter; private int animationSpeed; + @Nullable + private DoubleConsumer listener; public ScrollbarWidget(final int x, final int y, final int width, final int height) { super(x, y, width, height, Component.empty()); + this.smoothScrolling = Platform.INSTANCE.getConfig().isSmoothScrolling(); } - public boolean isScrollAnimation() { - return scrollAnimation; + public void setListener(@Nullable final DoubleConsumer listener) { + this.listener = listener; } - public void setScrollAnimation(final boolean scrollAnimation) { - this.scrollAnimation = scrollAnimation; + public boolean isSmoothScrolling() { + return smoothScrolling; } public void setEnabled(final boolean enabled) { @@ -127,7 +136,7 @@ public boolean mouseReleased(final double mouseX, final double mouseY, final int public boolean mouseScrolled(final double x, final double y, final double z, final double delta) { if (enabled) { final int scrollDirection = Math.max(Math.min(-(int) delta, 1), -1); - if (scrollAnimation) { + if (smoothScrolling) { startScrollAnimation(scrollDirection); } else { setOffset(offset + scrollDirection); @@ -161,6 +170,9 @@ public double getOffset() { public void setOffset(final double offset) { this.offset = Math.min(Math.max(0, offset), maxOffset); + if (listener != null) { + listener.accept(this.offset); + } } private void updateOffset(final double mouseY) { diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/upgrade/UpgradeContainer.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/upgrade/UpgradeContainer.java index 9cd9caaf9..de42370b7 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/upgrade/UpgradeContainer.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/upgrade/UpgradeContainer.java @@ -82,7 +82,7 @@ public void fromTag(final ListTag tag) { } private void updateIndex() { - LOGGER.info("Updating upgrade index for {}", destination); + LOGGER.debug("Updating upgrade index for {}", destination); index.clear(); for (int i = 0; i < getContainerSize(); ++i) { updateIndex(i); diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/util/SecurityToastHelper.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/util/SecurityToastHelper.java new file mode 100644 index 000000000..14ac988a7 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/util/SecurityToastHelper.java @@ -0,0 +1,23 @@ +package com.refinedmods.refinedstorage2.platform.common.util; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.toasts.SystemToast; +import net.minecraft.network.chat.Component; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + +public final class SecurityToastHelper { + private static final SystemToast.SystemToastId NO_PERMISSION_TOAST_ID = new SystemToast.SystemToastId(); + + private SecurityToastHelper() { + } + + public static void addNoPermissionToast(final Component message) { + SystemToast.add( + Minecraft.getInstance().getToasts(), + NO_PERMISSION_TOAST_ID, + createTranslation("misc", "no_permission"), + message + ); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/wirelesstransmitter/WirelessTransmitterBlock.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/wirelesstransmitter/WirelessTransmitterBlock.java index 4cca430bf..b45d2187c 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/wirelesstransmitter/WirelessTransmitterBlock.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/wirelesstransmitter/WirelessTransmitterBlock.java @@ -6,9 +6,10 @@ import com.refinedmods.refinedstorage2.platform.common.content.Blocks; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.BlockItemProvider; import com.refinedmods.refinedstorage2.platform.common.support.ColorableBlock; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage2.platform.common.support.direction.DirectionType; import com.refinedmods.refinedstorage2.platform.common.support.direction.DirectionTypeImpl; import com.refinedmods.refinedstorage2.platform.common.support.network.NetworkNodeBlockEntityTicker; @@ -20,7 +21,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -38,7 +38,7 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class WirelessTransmitterBlock extends AbstractDirectionalBlock - implements ColorableBlock, BlockItemProvider, + implements ColorableBlock, BlockItemProvider, EntityBlock { public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); @@ -99,7 +99,7 @@ public VoxelShape getShape(final BlockState state, } @Override - public BlockColorMap getBlockColorMap() { + public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getWirelessTransmitter(); } @@ -128,7 +128,7 @@ public MutableComponent getName() { } @Override - public NamedBlockItem createBlockItem() { - return new NamedBlockItem(this, new Item.Properties(), getName(), HELP); + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); } } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/wirelesstransmitter/WirelessTransmitterBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/wirelesstransmitter/WirelessTransmitterBlockEntity.java index 003611acc..387c76246 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/wirelesstransmitter/WirelessTransmitterBlockEntity.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/wirelesstransmitter/WirelessTransmitterBlockEntity.java @@ -8,7 +8,7 @@ import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; import com.refinedmods.refinedstorage2.platform.common.support.AbstractDirectionalBlock; -import com.refinedmods.refinedstorage2.platform.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage2.platform.common.support.containermenu.NetworkNodeMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage2.platform.common.upgrade.UpgradeDestinations; @@ -32,7 +32,7 @@ public class WirelessTransmitterBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider, WirelessTransmitter { + implements NetworkNodeMenuProvider, WirelessTransmitter { private static final String TAG_UPGRADES = "u"; private final UpgradeContainer upgradeContainer = new UpgradeContainer( diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/de_de.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/de_de.json new file mode 100644 index 000000000..325293e3d --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/de_de.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Kabel", + "block.refinedstorage2.quartz_enriched_iron_block": "Quarz angereichertes Eisenblock", + "block.refinedstorage2.disk_drive": "Laufwerk", + "block.refinedstorage2.machine_casing": "Maschinengehäuse", + "block.refinedstorage2.grid": "Konsole", + "block.refinedstorage2.crafting_grid": "Herstellungskonsole", + "block.refinedstorage2.controller": "Kontrollblock", + "block.refinedstorage2.controller.rei_fully_charged": "Vollständig geladener Kontrollblock", + "block.refinedstorage2.creative_controller": "Kreativer Kontrollblock", + "block.refinedstorage2.1k_storage_block": "1k Speicherblock", + "block.refinedstorage2.4k_storage_block": "4k Speicherblock", + "block.refinedstorage2.16k_storage_block": "16k Speicherblock", + "block.refinedstorage2.64k_storage_block": "64k Speicherblock", + "block.refinedstorage2.creative_storage_block": "Kreativer Speicherblock", + "block.refinedstorage2.64b_fluid_storage_block": "64B Flüssigspeicherblock", + "block.refinedstorage2.256b_fluid_storage_block": "256B Flüssigspeicherblock", + "block.refinedstorage2.1024b_fluid_storage_block": "1024B Flüssigspeicherblock", + "block.refinedstorage2.4096b_fluid_storage_block": "4096B Flüssigspeicherblock", + "block.refinedstorage2.creative_fluid_storage_block": "Kreativer Flüssigspeicherblock", + "block.refinedstorage2.importer": "Importierer", + "block.refinedstorage2.exporter": "Exportierer", + "block.refinedstorage2.interface": "Schnittstelle", + "block.refinedstorage2.external_storage": "Externer Speicher", + "block.refinedstorage2.detector": "Detektor", + "block.refinedstorage2.constructor": "Konstruktor", + "block.refinedstorage2.destructor": "Destruktor", + "block.refinedstorage2.wireless_transmitter": "Funksender", + "block.refinedstorage2.storage_monitor": "Speichermonitor", + "block.refinedstorage2.network_receiver": "Netzwerkempfänger", + "block.refinedstorage2.network_transmitter": "Netzwerksender", + "block.refinedstorage2.portable_grid": "Mobile Konsole", + "block.refinedstorage2.creative_portable_grid": "Mobile Kreative Konsole", + "gui.refinedstorage2.controller.redstone_mode_help": "Falls dieses Gerät inaktiv ist, kann das Speichernetzwerk dieses Gerät nicht als Energiequelle nutzen.", + "gui.refinedstorage2.disk_drive.disks": "Speicherplatten", + "gui.refinedstorage2.storage.redstone_mode_help": "Falls dieses Gerät inaktiv ist, ist der enthaltene Speicher nicht mehr über das Speichernetzwerk zugänglich.", + "gui.refinedstorage2.storage.filter_help": "Die Ressourcen, die in diesem Speicher erlaubt sind oder nicht, je nachdem, ob sich das Gerät in der Erlaubnisliste oder in der Sperrliste befindet.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Ohne konfigurierte Filter werden keine Ressourcen in diesem Speicher akzeptiert.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Erlaube nur Ressourcen in diesen Speicher, die in den Filtern konfiguriert sind.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Erlaube nur Ressourcen in diesen Speicher, die in den Filtern konfiguriert sind.", + "gui.refinedstorage2.grid.sorting.direction": "Sortierrichtung", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Aufsteigend", + "gui.refinedstorage2.grid.sorting.direction.descending": "Absteigend", + "gui.refinedstorage2.grid.sorting.type": "Sortierart", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantität", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Zuletzt geändert", + "gui.refinedstorage2.grid.size": "Größe", + "gui.refinedstorage2.grid.size.stretch": "Strecken", + "gui.refinedstorage2.grid.size.small": "Klein", + "gui.refinedstorage2.grid.size.medium": "Mittel", + "gui.refinedstorage2.grid.size.large": "Groß", + "gui.refinedstorage2.grid.size.extra_large": "Extra groß", + "gui.refinedstorage2.grid.auto_selected": "Automatisch ausgewählt", + "gui.refinedstorage2.grid.auto_selected.help": "Gibt an, ob das Suchfeld beim Öffnen der Konsole automatisch ausgewählt werden soll.", + "gui.refinedstorage2.grid.synchronizer": "Synchronisierungsmodus", + "gui.refinedstorage2.grid.synchronizer.off": "Aus", + "gui.refinedstorage2.grid.synchronizer.off.help": "Suchfeldtext nicht synchronisieren.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Synchronisieren Sie das Suchfeld Text mit dem JEI Filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI beidseitig", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Synchronisieren Sie das Suchfeld Text mit dem JEI Filter und den JEI Filter mit dem Suchfeld Text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Synchronisieren Sie das Suchfeld Text mit dem REI Filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI beidseitig", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Synchronisieren Sie das Suchfeld Text mit dem JEI Filter und den JEI Filter mit dem Suchfeld Text.", + "gui.refinedstorage2.grid.resource_type": "Ressourcentyp", + "gui.refinedstorage2.grid.resource_type.all": "Alle", + "gui.refinedstorage2.grid.resource_type.help": "Spezifische Ressourcentypen filtern.", + "gui.refinedstorage2.crafting_grid.move.network": "Items ins Netzwerk verschieben", + "gui.refinedstorage2.crafting_grid.move.inventory": "Items ins Inventar verschieben", + "gui.refinedstorage2.detector.mode": "Modus", + "gui.refinedstorage2.detector.mode.under": "Redstone-Signal ausgeben, falls unter der Menge", + "gui.refinedstorage2.detector.mode.equal": "Redstone-Signal ausgeben, falls auf der Menge", + "gui.refinedstorage2.detector.mode.above": "Redstone-Signal ausgeben, falls über der Menge", + "gui.refinedstorage2.detector.filter_help": "Die Ressource, die im Speichernetzwerk erkannt werden sollte.", + "gui.refinedstorage2.destructor.pickup_items": "Items aufheben, statt abzubauen", + "gui.refinedstorage2.destructor.filter_help": "Die Blöcke, die in diesem Speicher zerstört werden sollen oder nicht, je nachdem, ob sich das Gerät in der Erlaubnisliste oder in der Sperrliste befindet.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Erlaube nur Blöcke in das Speichernetzwerk, die in den Filtern konfiguriert sind.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Erlaube keine Blöcke in das Speichernetzwerk, die in den Filtern konfiguriert sind.", + "gui.refinedstorage2.constructor.drop_items": "Items fallenlassen, anstatt Blöcke zu platzieren", + "gui.refinedstorage2.constructor.filter_help": "Die Ressourcen, die ins Speichernetzwerk platziert werden sollen.", + "gui.refinedstorage2.interface.filter_help": "Die Ressourcen, die ins Speichernetzwerk exportiert werden sollen.", + "gui.refinedstorage2.exporter.filter_help": "Die Ressourcen, die vom Speichernetzwerk exportiert werden sollen.", + "gui.refinedstorage2.importer.filter_help": "Die Ressourcen, die aus dem Zielinventar importiert werden können.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Erlaube nur Ressourcen in das Speichernetzwerk, die in den Filtern konfiguriert sind.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Erlaube keine Ressourcen in das Speichernetzwerk, die in den Filtern konfiguriert sind.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d Block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "Die anzuzeigende Ressource.", + "gui.refinedstorage2.redstone_mode": "Redstone-Modus", + "gui.refinedstorage2.redstone_mode.ignore": "Ignorieren", + "gui.refinedstorage2.redstone_mode.ignore.help": "Dieses Gerät ist immer aktiv, unabhängig von Redstone-Signal.", + "gui.refinedstorage2.redstone_mode.high": "Hoch", + "gui.refinedstorage2.redstone_mode.high.help": "Dieses Gerät ist nur mit einem Redstone-Signal aktiv.", + "gui.refinedstorage2.redstone_mode.low": "Niedrig", + "gui.refinedstorage2.redstone_mode.low.help": "Dieses Gerät ist nur ohne Redstone-Signal aktiv.", + "gui.refinedstorage2.scheduling_mode": "Planungsmodus", + "gui.refinedstorage2.scheduling_mode.default": "Standard", + "gui.refinedstorage2.scheduling_mode.default.help": "Den ersten verfügbaren Filter verwenden.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Rundlaufverfahren", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Verwenden Sie jeden Filter nacheinander.", + "gui.refinedstorage2.scheduling_mode.random": "Zufällig", + "gui.refinedstorage2.scheduling_mode.random.help": "Benutze einen zufälligen Filter.", + "gui.refinedstorage2.priority": "Priorität", + "gui.refinedstorage2.priority.storage_help": "Die Reihenfolge, in der das Speichernetzwerk Ressourcen einfügen oder extrahieren soll, das höchste zuerst.", + "gui.refinedstorage2.amount": "Anzahl", + "gui.refinedstorage2.amount.reset": "Zurücksetzen", + "gui.refinedstorage2.amount.set": "Setzen", + "gui.refinedstorage2.filter_mode": "Filtermodus", + "gui.refinedstorage2.filter_mode.allow": "Erlaubnisliste", + "gui.refinedstorage2.filter_mode.block": "Sperrliste", + "gui.refinedstorage2.fuzzy_mode": "Unscharfer Modus", + "gui.refinedstorage2.fuzzy_mode.on": "An", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Passen Sie die Filter exakt auf die Erlaubnis- oder Sperrliste an.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Passen Sie den Filter exakt an.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Passen Sie die Filter beim Extrahieren aus dem Speichernetzwerk genau an.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Passen Sie die Filter beim Extrahieren aus der Quelle genau an.", + "gui.refinedstorage2.fuzzy_mode.off": "Aus", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Passen Sie die Filter für die Erlaubnisliste oder die Sperrliste an, ohne NBT-Tags zu vergleichen.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Passen Sie den Filter an, ohne NBT-Tags zu vergleichen.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Passen Sie die Filter beim Extrahieren aus dem Speichernetzwerk an, ohne NBT-Tags zu vergleichen.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Passen Sie die Filter an, wenn Sie aus der Quelle extrahieren, ohne NBT-Tags zu vergleichen.", + "gui.refinedstorage2.access_mode": "Zugriffsmodus", + "gui.refinedstorage2.access_mode.insert_extract": "Importieren und exportieren", + "gui.refinedstorage2.access_mode.insert_extract.help": "Das Speichernetzwerk kann von diesem Speicher importieren oder exportieren.", + "gui.refinedstorage2.access_mode.insert": "Nur importieren", + "gui.refinedstorage2.access_mode.insert.help": "Das Speichernetzwerk kann nur in diesen Speicher importieren. Enthaltene Ressourcen werden weiterhin in der Konsole sichtbar sein.", + "gui.refinedstorage2.access_mode.extract": "Nur exportieren", + "gui.refinedstorage2.access_mode.extract.help": "Das Speichernetzwerk kann nur von diesem Speicher extrahieren.", + "gui.refinedstorage2.void_excess": "Überschüssige Ressourcen löschen", + "gui.refinedstorage2.void_excess.help": "Wenn der überschüssige Modus eingeschaltet ist und die Speicherung voll ist, akzeptiert er weiterhin Ressourcen, löscht sie jedoch.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Der überschüssige Modus funktioniert nur, wenn der Speicher im Erlaubnisliste Modus ist.", + "gui.refinedstorage2.upgrade_slot": "Leerer Upgrade-Slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Leerer Filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Linksklick für", + "gui.refinedstorage2.filter_slot.right_click_for": "Rechtsklick für", + "gui.refinedstorage2.filter_slot.click_to_clear": "Klicke zum Löschen", + "gui.refinedstorage2.regulator_upgrade.filter_help": "Die Ressource, die im Ziel reguliert werden sollte.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inaktiv", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Fehlende Netzwerkkarte", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d Block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unerreichbar", + "item.refinedstorage2.controller.help": "Stellt das Speichernetzwerk mit Energie zur Verfügung. Mehrere sind in einem einzigen Speichernetzwerk erlaubt.", + "item.refinedstorage2.creative_controller.help": "Stellt dem Speichernetzwerk eine unendliche Energiequelle zur Verfügung.", + "item.refinedstorage2.disk_drive.help": "Akzeptiert Speicherplatten, um dem Speichernetz Speicherplatz zur Verfügung zu stellen.", + "item.refinedstorage2.grid.help": "Ermöglicht die Interaktion mit dem Speichernetzwerk.", + "item.refinedstorage2.crafting_grid.help": "Ermöglicht die Interaktion mit dem Speichernetzwerk, mit Herstellungsfähigkeiten.", + "item.refinedstorage2.importer.help": "Importiert Ressourcen von einer externen Quelle in das Speichernetzwerk.", + "item.refinedstorage2.exporter.help": "Exportiert Ressourcen aus dem Speichernetzwerk an ein externes Ziel.", + "item.refinedstorage2.interface.help": "Funktioniert als die Kombination von Importierer und Exportierer.", + "item.refinedstorage2.external_storage.help": "Stellt dem Speichernetzwerk Speicher von einer externen Quelle zur Verfügung.", + "item.refinedstorage2.detector.help": "Sendet ein Redstone Signal, wenn das Speichernetzwerk eine Ressource enthält, die gleich über oder unter einer bestimmten Menge ist.", + "item.refinedstorage2.constructor.help": "Platziert Blöcke aus dem Speichernetzwerk in der Welt.", + "item.refinedstorage2.destructor.help": "Zerstört Blöcke aus der Welt und setzt sie in das Speichernetzwerk.", + "item.refinedstorage2.quartz_enriched_iron": "Quarz angereichertes Eisen", + "item.refinedstorage2.processor_binding": "Prozessor Rohmaterial", + "item.refinedstorage2.silicon": "Silikon", + "item.refinedstorage2.raw_basic_processor": "Basisrohprozessor", + "item.refinedstorage2.raw_improved_processor": "Verbesserter Rohprozessor", + "item.refinedstorage2.raw_advanced_processor": "Fortschrittlicher Rohprozessor", + "item.refinedstorage2.basic_processor": "Basisprozessor", + "item.refinedstorage2.improved_processor": "Verbesserter Prozessor", + "item.refinedstorage2.advanced_processor": "Fortschrittlicher Prozessor", + "item.refinedstorage2.1k_storage_part": "1k Speicherkern", + "item.refinedstorage2.4k_storage_part": "4k Speicherkern", + "item.refinedstorage2.16k_storage_part": "16k Speicherkern", + "item.refinedstorage2.64k_storage_part": "64k Speicherkern", + "item.refinedstorage2.1k_storage_disk": "1k Speicherplatte", + "item.refinedstorage2.4k_storage_disk": "4k Speicherplatte", + "item.refinedstorage2.16k_storage_disk": "16k Speicherplatte", + "item.refinedstorage2.64k_storage_disk": "64k Speicherplatte", + "item.refinedstorage2.creative_storage_disk": "Kreative Speicherplatte", + "item.refinedstorage2.64b_fluid_storage_part": "64B Flüssigspeicherkern", + "item.refinedstorage2.256b_fluid_storage_part": "256B Flüssigspeicherkern", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Flüssigspeicherkern", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Flüssigspeicherkern", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Flüssigspeicherplatte", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Flüssigspeicherplatte", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Flüssigspeicherplatte", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Flüssigspeicherplatte", + "item.refinedstorage2.creative_fluid_storage_disk": "Kreative Flüssigspeicherplatte", + "item.refinedstorage2.storage_housing": "Speichergehäuse", + "item.refinedstorage2.construction_core": "Konstruktionskern", + "item.refinedstorage2.destruction_core": "Zerstörungskern", + "item.refinedstorage2.wrench": "Schraubenschlüssel", + "item.refinedstorage2.wrench.helper": "Verwende es, um Blöcke zu drehen oder drücke SHIFT und baue Refined Storage Blöcke ab.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Geschwindigkeitsupgrade", + "item.refinedstorage2.stack_upgrade": "Stapelupgrade", + "item.refinedstorage2.silk_touch_upgrade": "Behutsamkeitsupgrade", + "item.refinedstorage2.fortune_upgrade.1": "Glück I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Glück II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Glück III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In einem Exportierer wird nur dann exportiert, wenn der Betrag im Ziel geringer als im Upgrade konfiguriert ist. In einem Importierer wird nur importiert, wenn der Betrag im Ziel mehr als im Upgrade konfiguriert ist. Benutzen Sie das Item zur Konfiguration.", + "item.refinedstorage2.range_upgrade": "Reichweitenupgrade", + "item.refinedstorage2.creative_range_upgrade": "Kreativer Reichweitenupgrade", + "item.refinedstorage2.wireless_grid": "Drahtlose Konsole", + "item.refinedstorage2.creative_wireless_grid": "Kreative drahtlose Konsole", + "item.refinedstorage2.wireless_transmitter.help": "Stellt drahtlosen Netzwerkzugang für Items wie die drahtlose Konsole zur Verfügung. Mehrere sind in einem Bereich für eine breitere Abdeckung erlaubt.", + "item.refinedstorage2.network_item.unbound": "Ungebunden.", + "item.refinedstorage2.network_item.unbound.help": "Auf irgendeinem Speichernetzwerk verwenden, um es zu verbinden.", + "item.refinedstorage2.network_item.bound_to": "Verbunden zu %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "Es gibt mehr als ein %s in deinem Inventar.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "Es gibt keine %s in deinem Inventar.", + "item.refinedstorage2.configuration_card": "Konfigurationskarte", + "item.refinedstorage2.configuration_card.empty": "Leer.", + "item.refinedstorage2.configuration_card.configured": "Enthält Konfiguration für %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Konfiguration für %s kopiert.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Konfiguration geleert.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Konfigurationskarte kann nicht auf andere Gerätetypen angewendet werden. Sie ist für %s konfiguriert.", + "item.refinedstorage2.configuration_card.applied_configuration": "Konfiguration angewandt.", + "item.refinedstorage2.configuration_card.empty_help": "Benutzen auf einem Speichernetzwerkgerät während Sie schleichen um die Konfigurationen und Upgrades auf die Karte zu kopieren.", + "item.refinedstorage2.configuration_card.configured_help": "Benutzen auf dem Ziel Speichernetzwerk während Sie Schleichen um die Konfigurationen und Upgrades zu übertragen. Zum Leeren beim Schleichen verwenden.", + "item.refinedstorage2.network_card": "Netzwerkkarte", + "item.refinedstorage2.network_card.unbound_help": "Verwende beim Schleichen auf einem Netzwerk-Empfänger.", + "item.refinedstorage2.network_card.unbound": "Ungebunden.", + "item.refinedstorage2.network_card.bound_help": "Einfügen in einen Netzwerksender. Benutzen beim Schleichen um die Verbindung zu löschen.", + "item.refinedstorage2.network_card.bound": "Verbunden zu %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Gespeichert: %s", + "misc.refinedstorage2.stored_with_capacity": "Gespeichert: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d Gesamt", + "misc.refinedstorage2.last_modified.just_now": "Zuletzt geändert von %s", + "misc.refinedstorage2.last_modified.second": "Zuletzt vor %d Sekunde von %s geändert", + "misc.refinedstorage2.last_modified.seconds": "Zuletzt vor %d Sekunden von %s geändert", + "misc.refinedstorage2.last_modified.minute": "Zuletzt vor %d Minute von %s geändert", + "misc.refinedstorage2.last_modified.minutes": "Zuletzt vor %d Minuten von %s geändert", + "misc.refinedstorage2.last_modified.hour": "Zuletzt vor %d Stunde von %s geändert", + "misc.refinedstorage2.last_modified.hours": "Zuletzt vor %d Stunden von %s geändert", + "misc.refinedstorage2.last_modified.day": "Zuletzt vor %d Tag von %s geändert", + "misc.refinedstorage2.last_modified.days": "Zuletzt vor %d Tagen von %s geändert", + "misc.refinedstorage2.last_modified.week": "Zuletzt vor %d Woche von %s geändert", + "misc.refinedstorage2.last_modified.weeks": "Zuletzt vor %d Wochen von %s geändert", + "misc.refinedstorage2.last_modified.year": "Zuletzt vor %d Jahr von %s geändert", + "misc.refinedstorage2.last_modified.years": "Zuletzt vor %d Jahren von %s geändert", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Flüssigkeit", + "misc.refinedstorage2.press_shift_for_help": "Drücke SHIFT für Hilfe", + "key.refinedstorage2.focus_search_bar": "Suchleiste Selektieren", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Werkbank in der Konsole zum Netzwerk leeren", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Werkbank in der Konsole zum Inventar leeren", + "key.refinedstorage2.open_wireless_grid": "Drahtlose Konsole öffnen", + "refinedstorage2.subtitle.wrench": "Schraubenschlüssel benutzt", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Konsole", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Große Schriftart", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximale Anzahl von Zeilen wenn gestreckt", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Sortierung verhindern während SHIFT gedrückt ist", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detaillierte Kurzinfo", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Suchabfrage merken", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Sanftes Scrollen", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Autoselektieres Suchfeld", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronisator", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Ressourcentyp", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sortierrichtung", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sortierart", + "text.autoconfig.refinedstorage2.option.grid.size": "Größe", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Herstellungskonsole", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Werkbank Schließverhalten", + "text.autoconfig.refinedstorage2.option.controller": "Kontrollblock", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energiekapazität", + "text.autoconfig.refinedstorage2.option.cable": "Kabel", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.diskDrive": "Laufwerk", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energieverbrauch pro Festplatte", + "text.autoconfig.refinedstorage2.option.storageBlock": "Speicherblock", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1k Energieverbrauch", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4k Energieverbrauch", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16k Energieverbrauch", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64k Energieverbrauch", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Kreativer Energieverbrauch", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Flüssigspeicherblock", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B Energieverbrauch", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B Energieverbrauch", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B Energieverbrauch", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B Energieverbrauch", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Kreativer Energieverbrauch", + "text.autoconfig.refinedstorage2.option.importer": "Importierer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.exporter": "Exportierer", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.detector": "Detektor", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.constructor": "Konstruktor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.destructor": "Destruktor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Energieverbrauch von Geschwindigkeitsupgrade", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Energieverbrauch vom Stapelupgrade", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Energieverbrauch vom Glück 1 Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Energieverbrauch vom Glück 2 Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Energieverbrauch vom Glück 3 Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Energieverbrauch vom Behutsamkeitsupgrade", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Energieverbrauch vom Regulator Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Energieverbrauch vom Reichweitenupgrade", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Energieverbrauch vom Kreativen Reichweitenupgrade", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Reichweite vom Reichweitenupgrade", + "text.autoconfig.refinedstorage2.option.iface": "Schnittstelle", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.externalStorage": "Externer Speicher", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Drahtlose Konsole", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energiekapazität", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Energieverbrauch beim Öffnen", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Energieverbrauch beim Importieren", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Energieverbrauch beim Exportieren", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Funksender", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Basisreichweite", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Speichermonitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Netzwerkempfänger", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Netzwerksender", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energieverbrauch", + "text.autoconfig.refinedstorage2.option.portableGrid": "Mobile Konsole", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energiekapazität", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Energieverbrauch beim Öffnen", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Energieverbrauch beim Importieren", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Energieverbrauch beim Exportieren", + "advancements.refinedstorage2.root.description": "Verwenden Sie einen oder mehrere Konsolen in einem Netzwerk, um Ihr Netzwerk mit Energie zu versorgen", + "advancements.refinedstorage2.connecting": "Verbinden", + "advancements.refinedstorage2.connecting.description": "Benutze Kabel um Geräte miteinander zu verbinden, oder platziere Geräte nebeneinander", + "advancements.refinedstorage2.drives": "Festplatten", + "advancements.refinedstorage2.drives.description": "Erstellen Sie ein Laufwerk, um Ihre Speicherplatten einsetzen zu können", + "advancements.refinedstorage2.storing_items": "Items speichern", + "advancements.refinedstorage2.storing_items.description": "Erstelle eine Speicherplatte und stecke sie in dein Laufwerk", + "advancements.refinedstorage2.viewing_your_storage": "Ihren Speicher anzeigen", + "advancements.refinedstorage2.viewing_your_storage.description": "Stelle eine Konsole her, um mit deinem Speicher zu interagieren", + "advancements.refinedstorage2.upgrading_your_grid": "Konsole verbessern", + "advancements.refinedstorage2.upgrading_your_grid.description": "Verbessere deine Konsole zu einem Handwerksraster, um eine Werkbank zu erhalten", + "advancements.refinedstorage2.storing_fluids": "Flüssigkeiten speichern", + "advancements.refinedstorage2.storing_fluids.description": "Erstelle eine Flüssigspeicherplatte und stecke sie in dein Laufwerk", + "advancements.refinedstorage2.importing": "Importieren", + "advancements.refinedstorage2.importing.description": "Holen Sie sich Ressourcen in das Speichernetzwerk mit einem Importierer", + "advancements.refinedstorage2.exporting": "Exportieren", + "advancements.refinedstorage2.exporting.description": "Holen Sie Ressourcen aus dem Speichernetzwerk mit einem Exportierer", + "advancements.refinedstorage2.upgrading": "Verbessern", + "advancements.refinedstorage2.upgrading.description": "Bau ein Upgrade um verschiedene Geräte zu verbessern", + "advancements.refinedstorage2.interface_to_the_world": "Schnittstelle zur Welt", + "advancements.refinedstorage2.interface_to_the_world.description": "Exportieren und Importieren von Items gleichzeitig mit einer Schnittstelle", + "advancements.refinedstorage2.storing_externally": "Extern speichern", + "advancements.refinedstorage2.storing_externally.description": "Verwenden Sie einen externen Speicher um dem Netzwerk Speicher von einem externen Block wie einer Truhe zur Verfügung zu stellen", + "advancements.refinedstorage2.detecting": "Erkennung", + "advancements.refinedstorage2.detecting.description": "Verwende Redstone um Ressourcen im Netzwerk zu überprüfen", + "advancements.refinedstorage2.construction": "Konstruktion", + "advancements.refinedstorage2.construction.description": "Erhalte Blöcke aus dem Speichernetzwerk in die Welt mit einem Konstruktor", + "advancements.refinedstorage2.destruction": "Zerstörung", + "advancements.refinedstorage2.destruction.description": "Erhalte Blöcke aus der Welt in das Speichernetzwerk mit einem Destruktor", + "advancements.refinedstorage2.wireless": "Drahtlos", + "advancements.refinedstorage2.wireless.description": "Greifen Sie drahtlos auf Ihre Ressourcen mit einer drahtlosen Konsole zu.", + "advancements.refinedstorage2.better_than_a_barrel": "Besser als ein Fass", + "advancements.refinedstorage2.better_than_a_barrel.description": "Stelle einen Speichermonitor her, um Ressourcen in einem Speichernetzwerk anzuzeigen, zu importieren oder zu exportieren", + "advancements.refinedstorage2.no_cables_required": "Keine Kabel erforderlich", + "advancements.refinedstorage2.no_cables_required.description": "Fügen Sie Ihrem Netzwerk zusätzliche Komponenten hinzu, ohne Kabel zu verwenden, indem Sie einen Netzwerkübermittler, Netzwerkempfänger und Netzwerkkarte verwenden", + "advancements.refinedstorage2.portable_storage": "Tragbarer Speicher", + "advancements.refinedstorage2.portable_storage.description": "Erstelle eine mobile Konsole um auf den Inhalt von Speicherplatten zuzugreifen, ohne ein Speichernetzwerk zu benötigen" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/en_us.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/en_us.json index 0e58472c8..36f89262b 100644 --- a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/en_us.json +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/en_us.json @@ -1,5 +1,5 @@ { - "itemGroup.refinedstorage2.general": "Refined Storage 2", + "mod.refinedstorage2": "Refined Storage 2", "block.refinedstorage2.cable": "Cable", "block.refinedstorage2.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", "block.refinedstorage2.disk_drive": "Disk Drive", @@ -32,6 +32,8 @@ "block.refinedstorage2.network_transmitter": "Network Transmitter", "block.refinedstorage2.portable_grid": "Portable Grid", "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", + "block.refinedstorage2.security_manager": "Security Manager", + "block.refinedstorage2.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "gui.refinedstorage2.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", "gui.refinedstorage2.disk_drive.disks": "Disks", "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", @@ -47,12 +49,6 @@ "gui.refinedstorage2.grid.sorting.type.name": "Name", "gui.refinedstorage2.grid.sorting.type.id": "ID", "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", - "gui.refinedstorage2.grid.size": "Size", - "gui.refinedstorage2.grid.size.stretch": "Stretch", - "gui.refinedstorage2.grid.size.small": "Small", - "gui.refinedstorage2.grid.size.medium": "Medium", - "gui.refinedstorage2.grid.size.large": "Large", - "gui.refinedstorage2.grid.size.extra_large": "Extra large", "gui.refinedstorage2.grid.auto_selected": "Auto-selected", "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", @@ -65,12 +61,18 @@ "gui.refinedstorage2.grid.synchronizer.rei": "REI", "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", - "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the REI filter, and the REI filter to the search box text.", "gui.refinedstorage2.grid.resource_type": "Resource type", "gui.refinedstorage2.grid.resource_type.all": "All", "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.screen_size": "Screen size", + "gui.refinedstorage2.screen_size.stretch": "Stretch", + "gui.refinedstorage2.screen_size.small": "Small", + "gui.refinedstorage2.screen_size.medium": "Medium", + "gui.refinedstorage2.screen_size.large": "Large", + "gui.refinedstorage2.screen_size.extra_large": "Extra large", "gui.refinedstorage2.detector.mode": "Mode", "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", @@ -142,6 +144,11 @@ "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "gui.refinedstorage2.security_card.permission.reset": "Reset", + "gui.refinedstorage2.security_card.permission.modified": "Modified", + "gui.refinedstorage2.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", + "gui.refinedstorage2.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", + "gui.refinedstorage2.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", @@ -219,6 +226,14 @@ "item.refinedstorage2.network_card.unbound": "Unbound.", "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "item.refinedstorage2.security_card": "Security Card", + "item.refinedstorage2.security_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.security_card.unbound": "Unbound.", + "item.refinedstorage2.security_card.unbound.help": "Right click to configure and bind to the current player.", + "item.refinedstorage2.security_card.bound": "Bound to %s.", + "item.refinedstorage2.security_card.bound.help": "Right click to configure. Use while crouching to clear configuration and binding.", + "item.refinedstorage2.fallback_security_card": "Fallback Security Card", + "item.refinedstorage2.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "misc.refinedstorage2.stored": "Stored: %s", "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", "misc.refinedstorage2.total": "%d total", @@ -238,29 +253,48 @@ "misc.refinedstorage2.resource_type.item": "Item", "misc.refinedstorage2.resource_type.fluid": "Fluid", "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "misc.refinedstorage2.no_permission": "No permission", + "misc.refinedstorage2.no_permission.open": "You are not allowed to open the %s.", + "misc.refinedstorage2.no_permission.insert": "You are not allowed to insert.", + "misc.refinedstorage2.no_permission.extract": "You are not allowed to extract.", + "misc.refinedstorage2.no_permission.build.place": "You are not allowed to place a %s here.", + "misc.refinedstorage2.no_permission.build.break": "You are not allowed to break the %s.", + "misc.refinedstorage2.no_permission.build.rotate": "You are not allowed to rotate the %s.", + "misc.refinedstorage2.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", "key.refinedstorage2.focus_search_bar": "Focus search bar", "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", "refinedstorage2.subtitle.wrench": "Wrench used", - "category.refinedstorage2.key_bindings": "Refined Storage 2", "curios.identifier.refinedstorage2": "Refined Storage 2", "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "permission.refinedstorage2.insert": "Insert", + "permission.refinedstorage2.insert.description": "Whether the player can insert resources in a network.", + "permission.refinedstorage2.extract": "Extract", + "permission.refinedstorage2.extract.description": "Whether the player can extract resources from a network.", + "permission.refinedstorage2.autocrafting": "Autocrafting", + "permission.refinedstorage2.autocrafting.description": "Whether the player can start, cancel or view an autocrafting task.", + "permission.refinedstorage2.open": "Open", + "permission.refinedstorage2.open.description": "Whether the player can open network device GUIs.", + "permission.refinedstorage2.build": "Build", + "permission.refinedstorage2.build.description": "Whether the player can add or remove network devices.", + "permission.refinedstorage2.security": "Security", + "permission.refinedstorage2.security.description": "Whether the player can manage the security options for a network.", "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.screenSize": "Screen size", + "text.autoconfig.refinedstorage2.option.maxRowsStretch": "Maximum amount of rows when screen size is stretched", "text.autoconfig.refinedstorage2.option.grid": "Grid", "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", - "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", - "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", - "text.autoconfig.refinedstorage2.option.grid.size": "Size", "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", @@ -327,7 +361,13 @@ "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", - "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "text.autoconfig.refinedstorage2.option.securityCard": "Security Card", + "text.autoconfig.refinedstorage2.option.securityCard.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.fallbackSecurityCard": "Fallback Security Card", + "text.autoconfig.refinedstorage2.option.fallbackSecurityCard.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.securityManager": "Security Manager", + "text.autoconfig.refinedstorage2.option.securityManager.energyUsage": "Energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage2.connecting": "Connecting", "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", "advancements.refinedstorage2.drives": "Drives", @@ -351,17 +391,19 @@ "advancements.refinedstorage2.storing_externally": "Storing externally", "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", "advancements.refinedstorage2.detecting": "Detecting", - "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the storage network", "advancements.refinedstorage2.construction": "Construction", "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", "advancements.refinedstorage2.destruction": "Destruction", "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", "advancements.refinedstorage2.wireless": "Wireless", - "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid", "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", "advancements.refinedstorage2.no_cables_required": "No cables required", - "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your storage network without using cables by using a Network Transmitter, Network Receiver and Network Card", "advancements.refinedstorage2.portable_storage": "Portable storage", - "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network", + "advancements.refinedstorage2.security": "Security", + "advancements.refinedstorage2.security.description": "Secure your storage network with a Security Manager and a Security Card" } diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/es_es.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/es_es.json new file mode 100644 index 000000000..0e58472c8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/es_es.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Cable", + "block.refinedstorage2.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", + "block.refinedstorage2.disk_drive": "Disk Drive", + "block.refinedstorage2.machine_casing": "Machine Casing", + "block.refinedstorage2.grid": "Grid", + "block.refinedstorage2.crafting_grid": "Crafting Grid", + "block.refinedstorage2.controller": "Controller", + "block.refinedstorage2.controller.rei_fully_charged": "Fully charged Controller", + "block.refinedstorage2.creative_controller": "Creative Controller", + "block.refinedstorage2.1k_storage_block": "1K Storage Block", + "block.refinedstorage2.4k_storage_block": "4K Storage Block", + "block.refinedstorage2.16k_storage_block": "16K Storage Block", + "block.refinedstorage2.64k_storage_block": "64K Storage Block", + "block.refinedstorage2.creative_storage_block": "Creative Storage Block", + "block.refinedstorage2.64b_fluid_storage_block": "64B Fluid Storage Block", + "block.refinedstorage2.256b_fluid_storage_block": "256B Fluid Storage Block", + "block.refinedstorage2.1024b_fluid_storage_block": "1024B Fluid Storage Block", + "block.refinedstorage2.4096b_fluid_storage_block": "4096B Fluid Storage Block", + "block.refinedstorage2.creative_fluid_storage_block": "Creative Fluid Storage Block", + "block.refinedstorage2.importer": "Importer", + "block.refinedstorage2.exporter": "Exporter", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "External Storage", + "block.refinedstorage2.detector": "Detector", + "block.refinedstorage2.constructor": "Constructor", + "block.refinedstorage2.destructor": "Destructor", + "block.refinedstorage2.wireless_transmitter": "Wireless Transmitter", + "block.refinedstorage2.storage_monitor": "Storage Monitor", + "block.refinedstorage2.network_receiver": "Network Receiver", + "block.refinedstorage2.network_transmitter": "Network Transmitter", + "block.refinedstorage2.portable_grid": "Portable Grid", + "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", + "gui.refinedstorage2.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", + "gui.refinedstorage2.disk_drive.disks": "Disks", + "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage2.grid.sorting.type": "Sorting type", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Size", + "gui.refinedstorage2.grid.size.stretch": "Stretch", + "gui.refinedstorage2.grid.size.small": "Small", + "gui.refinedstorage2.grid.size.medium": "Medium", + "gui.refinedstorage2.grid.size.large": "Large", + "gui.refinedstorage2.grid.size.extra_large": "Extra large", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Resource type", + "gui.refinedstorage2.grid.resource_type.all": "All", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/fr_fr.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/fr_fr.json new file mode 100644 index 000000000..9d221632a --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/fr_fr.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Câble", + "block.refinedstorage2.quartz_enriched_iron_block": "Bloc de Fer Enrichi en Quartz", + "block.refinedstorage2.disk_drive": "Lecteur de Disque", + "block.refinedstorage2.machine_casing": "Boitier de Machine", + "block.refinedstorage2.grid": "Grille", + "block.refinedstorage2.crafting_grid": "Grille d’Artisanat", + "block.refinedstorage2.controller": "Contrôleur", + "block.refinedstorage2.controller.rei_fully_charged": "Contrôleur entièrement chargé", + "block.refinedstorage2.creative_controller": "Contrôleur créatif", + "block.refinedstorage2.1k_storage_block": "Bloc de Stockage 1K", + "block.refinedstorage2.4k_storage_block": "Bloc de Stockage 4k", + "block.refinedstorage2.16k_storage_block": "Bloc de Stockage 16k", + "block.refinedstorage2.64k_storage_block": "Bloc de Stockage 64k", + "block.refinedstorage2.creative_storage_block": "Bloc de Stockage Créatif", + "block.refinedstorage2.64b_fluid_storage_block": "Bloc de Stockage de Fluides 64B", + "block.refinedstorage2.256b_fluid_storage_block": "Bloc de Stockage de Fluides 256B", + "block.refinedstorage2.1024b_fluid_storage_block": "Bloc de Stockage de Fluides 1024B", + "block.refinedstorage2.4096b_fluid_storage_block": "Bloc de Stockage de Fluides 4096B", + "block.refinedstorage2.creative_fluid_storage_block": "Bloc de Stockage de Fluides Créatif", + "block.refinedstorage2.importer": "Importateur", + "block.refinedstorage2.exporter": "Exportateur", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "Stockage Externe", + "block.refinedstorage2.detector": "Détecteur", + "block.refinedstorage2.constructor": "Constructeur", + "block.refinedstorage2.destructor": "Destructeur", + "block.refinedstorage2.wireless_transmitter": "Transmetteur sans fil", + "block.refinedstorage2.storage_monitor": "Moniteur de Stockage", + "block.refinedstorage2.network_receiver": "Récepteur Réseau", + "block.refinedstorage2.network_transmitter": "Transmetteur Réseau", + "block.refinedstorage2.portable_grid": "Grille portable", + "block.refinedstorage2.creative_portable_grid": "Grille portable créative", + "gui.refinedstorage2.controller.redstone_mode_help": "Lorsque cet appareil est inactif, le réseau de stockage ne pourra pas utiliser cet appareil comme source d'énergie.", + "gui.refinedstorage2.disk_drive.disks": "Disques", + "gui.refinedstorage2.storage.redstone_mode_help": "Lorsque cet appareil est inactif, le stockage contenu ne sera plus accessible depuis le réseau de stockage.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascendant", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descendant", + "gui.refinedstorage2.grid.sorting.type": "Type de tri", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantité", + "gui.refinedstorage2.grid.sorting.type.name": "Nom", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Taille", + "gui.refinedstorage2.grid.size.stretch": "Étirée", + "gui.refinedstorage2.grid.size.small": "Petite", + "gui.refinedstorage2.grid.size.medium": "Moyenne", + "gui.refinedstorage2.grid.size.large": "Grande", + "gui.refinedstorage2.grid.size.extra_large": "Très grande", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Type de ressource", + "gui.refinedstorage2.grid.resource_type.all": "Toutes", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Aléatoire", + "gui.refinedstorage2.scheduling_mode.random.help": "Utiliser un filtre aléatoire.", + "gui.refinedstorage2.priority": "Priorité", + "gui.refinedstorage2.priority.storage_help": "L'ordre dans lequel le réseau de stockage va insérer ou extraire les ressources, le plus élevé en premier.", + "gui.refinedstorage2.amount": "Quantité", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Liste blanche", + "gui.refinedstorage2.filter_mode.block": "Liste noire", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Mode d'accès", + "gui.refinedstorage2.access_mode.insert_extract": "Insertion et extraction", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Lié à %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Carte de configuration", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contient une configuration pour %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Configuration copiée pour %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Configuration effacée.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Impossible d'appliquer la carte de configuration à un autre type d'appareil. Elle est configurée pour %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grille", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importateur", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exportateur", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Détecteur", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructeur", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructeur", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "Stockage Externe", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Grille sans fil", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Moniteur de Stockage", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Récepteur Réseau", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Transmetteur Réseau", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Grille portable", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/hu_hu.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/hu_hu.json new file mode 100644 index 000000000..0e58472c8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/hu_hu.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Cable", + "block.refinedstorage2.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", + "block.refinedstorage2.disk_drive": "Disk Drive", + "block.refinedstorage2.machine_casing": "Machine Casing", + "block.refinedstorage2.grid": "Grid", + "block.refinedstorage2.crafting_grid": "Crafting Grid", + "block.refinedstorage2.controller": "Controller", + "block.refinedstorage2.controller.rei_fully_charged": "Fully charged Controller", + "block.refinedstorage2.creative_controller": "Creative Controller", + "block.refinedstorage2.1k_storage_block": "1K Storage Block", + "block.refinedstorage2.4k_storage_block": "4K Storage Block", + "block.refinedstorage2.16k_storage_block": "16K Storage Block", + "block.refinedstorage2.64k_storage_block": "64K Storage Block", + "block.refinedstorage2.creative_storage_block": "Creative Storage Block", + "block.refinedstorage2.64b_fluid_storage_block": "64B Fluid Storage Block", + "block.refinedstorage2.256b_fluid_storage_block": "256B Fluid Storage Block", + "block.refinedstorage2.1024b_fluid_storage_block": "1024B Fluid Storage Block", + "block.refinedstorage2.4096b_fluid_storage_block": "4096B Fluid Storage Block", + "block.refinedstorage2.creative_fluid_storage_block": "Creative Fluid Storage Block", + "block.refinedstorage2.importer": "Importer", + "block.refinedstorage2.exporter": "Exporter", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "External Storage", + "block.refinedstorage2.detector": "Detector", + "block.refinedstorage2.constructor": "Constructor", + "block.refinedstorage2.destructor": "Destructor", + "block.refinedstorage2.wireless_transmitter": "Wireless Transmitter", + "block.refinedstorage2.storage_monitor": "Storage Monitor", + "block.refinedstorage2.network_receiver": "Network Receiver", + "block.refinedstorage2.network_transmitter": "Network Transmitter", + "block.refinedstorage2.portable_grid": "Portable Grid", + "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", + "gui.refinedstorage2.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", + "gui.refinedstorage2.disk_drive.disks": "Disks", + "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage2.grid.sorting.type": "Sorting type", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Size", + "gui.refinedstorage2.grid.size.stretch": "Stretch", + "gui.refinedstorage2.grid.size.small": "Small", + "gui.refinedstorage2.grid.size.medium": "Medium", + "gui.refinedstorage2.grid.size.large": "Large", + "gui.refinedstorage2.grid.size.extra_large": "Extra large", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Resource type", + "gui.refinedstorage2.grid.resource_type.all": "All", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/id_id.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/id_id.json new file mode 100644 index 000000000..7259a10a3 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/id_id.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Kabel", + "block.refinedstorage2.quartz_enriched_iron_block": "Balok Besi yang Diperkaya Kuarsa", + "block.refinedstorage2.disk_drive": "Lemari Cakram", + "block.refinedstorage2.machine_casing": "Kerangka Mesin", + "block.refinedstorage2.grid": "Kisi", + "block.refinedstorage2.crafting_grid": "Kisi Kerajinan", + "block.refinedstorage2.controller": "Pengendali", + "block.refinedstorage2.controller.rei_fully_charged": "Pengendali terisi penuh", + "block.refinedstorage2.creative_controller": "Pengendali Kreatif", + "block.refinedstorage2.1k_storage_block": "Balok Penyimpanan 1K", + "block.refinedstorage2.4k_storage_block": "Balok Penyimpanan 4K", + "block.refinedstorage2.16k_storage_block": "Balok Penyimpanan 16K", + "block.refinedstorage2.64k_storage_block": "Balok Penyimpanan 64K", + "block.refinedstorage2.creative_storage_block": "Balok Penyimpanan Kreatif", + "block.refinedstorage2.64b_fluid_storage_block": "Balok Penyimpanan Cairan 64B", + "block.refinedstorage2.256b_fluid_storage_block": "Balok Penyimpanan Cairan 256B", + "block.refinedstorage2.1024b_fluid_storage_block": "Balok Penyimpanan Cairan 1024B", + "block.refinedstorage2.4096b_fluid_storage_block": "Balok Penyimpanan Cairan 4096B", + "block.refinedstorage2.creative_fluid_storage_block": "Balok Penyimpanan Cairan Kreatif", + "block.refinedstorage2.importer": "Importir", + "block.refinedstorage2.exporter": "Eksportir", + "block.refinedstorage2.interface": "Antarmuka", + "block.refinedstorage2.external_storage": "Penyimpanan Eksternal", + "block.refinedstorage2.detector": "Pendeteksi", + "block.refinedstorage2.constructor": "Pembangun", + "block.refinedstorage2.destructor": "Penghancur", + "block.refinedstorage2.wireless_transmitter": "Pemancar Nirkabel", + "block.refinedstorage2.storage_monitor": "Monitor Penyimpanan", + "block.refinedstorage2.network_receiver": "Penerima Jaringan", + "block.refinedstorage2.network_transmitter": "Pemancar Jaringan", + "block.refinedstorage2.portable_grid": "Kisi Portabel", + "block.refinedstorage2.creative_portable_grid": "Kisi Portabel Kreatif", + "gui.refinedstorage2.controller.redstone_mode_help": "Ketika peranagkat ini nonaktif, jaringan penyimpanan tidak dapat menggunakan perangkat ini sebagai sumber energi.", + "gui.refinedstorage2.disk_drive.disks": "Cakram", + "gui.refinedstorage2.storage.redstone_mode_help": "Ketika perangkat ini nonaktif, penyimpanan tidak akan dapat diakses dari dalam jaringan penyimpanan.", + "gui.refinedstorage2.storage.filter_help": "Sumber daya yang diperbolehkan atau tidak ke dalam penyimpanan ini, tergantung jika perangkat dalam mode diizinkan atau diblokir.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Tanpa konfigurasi filter, tidak ada sumber daya yang akan diterima kedalam penyimpanan ini.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Hanya izinkan sumber daya kedalam penyimpanan ini yang telah dikonfigurasi dalam filter.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Blokir sumber daya kedalam penyimpanan ini yang telah dikonfigurasi dalam filter.", + "gui.refinedstorage2.grid.sorting.direction": "Arah Pengurutan", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Menaik", + "gui.refinedstorage2.grid.sorting.direction.descending": "Menurun", + "gui.refinedstorage2.grid.sorting.type": "Jenis pengurutan", + "gui.refinedstorage2.grid.sorting.type.quantity": "Kuantitas", + "gui.refinedstorage2.grid.sorting.type.name": "Nama", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Terakhir dirubah", + "gui.refinedstorage2.grid.size": "Ukuran", + "gui.refinedstorage2.grid.size.stretch": "Regang", + "gui.refinedstorage2.grid.size.small": "Kecil", + "gui.refinedstorage2.grid.size.medium": "Sedang", + "gui.refinedstorage2.grid.size.large": "Besar", + "gui.refinedstorage2.grid.size.extra_large": "Ekstra Besar", + "gui.refinedstorage2.grid.auto_selected": "Pilih otomatis", + "gui.refinedstorage2.grid.auto_selected.help": "Memilih kotak pencarian secara otomatis saat membuka Kisi.", + "gui.refinedstorage2.grid.synchronizer": "Mode sinkronisasi", + "gui.refinedstorage2.grid.synchronizer.off": "Nonaktif", + "gui.refinedstorage2.grid.synchronizer.off.help": "Jangan sinkronkan teks kotak pencarian.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sinkronkan teks kotak pencarian ke filter JEI.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI dua arah", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sinkronkan teks kotak pencarian ke filter JEI, dan filter JEI ke teks kotak pencarian.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sinkronkan teks kotak pencarian ke filter REI.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI dua arah", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sinkronkan teks kotak pencarian ke filter JEI, dan filter JEI ke teks kotak pencarian.", + "gui.refinedstorage2.grid.resource_type": "Jenis sumber daya", + "gui.refinedstorage2.grid.resource_type.all": "Semua", + "gui.refinedstorage2.grid.resource_type.help": "Filter jenis sumber daya tertentu.", + "gui.refinedstorage2.crafting_grid.move.network": "Pindahkan barang ke jaringan", + "gui.refinedstorage2.crafting_grid.move.inventory": "Pindahkan barang ke inventaris", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Pancarkan sinyal redstone saat berada di bawah jumlah yang ditentukan", + "gui.refinedstorage2.detector.mode.equal": "Pancarkan sinyal redstone saat berada pada jumlah yang ditentukan", + "gui.refinedstorage2.detector.mode.above": "Pancarkan sinyal redstone saat berada diatas jumlah yang ditentukan", + "gui.refinedstorage2.detector.filter_help": "Sumber daya yang harus dideteksi dalam jaringan penyimpanan.", + "gui.refinedstorage2.destructor.pickup_items": "Ambil barang daripada memecah", + "gui.refinedstorage2.destructor.filter_help": "Balok yang dapat atau tidak dapat untuk dihancurkan, tergantung jika perangkat dalam mode diizinkan atau diblokir.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Hanya izinkan balok kedalam jaringan penyimpanan yang telah dikonfigurasi dalam filter.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Blokir balok kedalam jaringan penyimpanan yang telah dikonfigurasi dalam filter.", + "gui.refinedstorage2.constructor.drop_items": "Jatuhkan barang dibanding menempatkan balok", + "gui.refinedstorage2.constructor.filter_help": "Sumber daya yang harus ditempatkan dari jaringan penyimpanan.", + "gui.refinedstorage2.interface.filter_help": "Sumber daya yang harus diekspor dari jaringan penyimpanan.", + "gui.refinedstorage2.exporter.filter_help": "Sumber daya yang harus diekspor dari jaringan penyimpanan.", + "gui.refinedstorage2.importer.filter_help": "Sumber daya yang mungkin diimpor dari penyimpanan sasaran.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Hanya izinkan sumber daya kedalam jaringan penyimpanan yang telah dikonfigurasi dalam filter.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Blokir sumber daya kedalam jaringan penyimpanan yang telah dikonfigurasi dalam filter.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d blok", + "gui.refinedstorage2.storage_monitor.filter_help": "Sumber daya untuk ditampilkan.", + "gui.refinedstorage2.redstone_mode": "Mode redstone", + "gui.refinedstorage2.redstone_mode.ignore": "Abaikan", + "gui.refinedstorage2.redstone_mode.ignore.help": "Perangkat ini akan selalu aktif, menghiraukan sinyal redstone.", + "gui.refinedstorage2.redstone_mode.high": "Tinggi", + "gui.refinedstorage2.redstone_mode.high.help": "Perangkat ini hanya akan aktif dengan sinyal redstone.", + "gui.refinedstorage2.redstone_mode.low": "Rendah", + "gui.refinedstorage2.redstone_mode.low.help": "Perangkat ini hanya akan aktif tanpa sinyal redstone.", + "gui.refinedstorage2.scheduling_mode": "Mode penjadwalan", + "gui.refinedstorage2.scheduling_mode.default": "Bawaan", + "gui.refinedstorage2.scheduling_mode.default.help": "Gunakan filter yang tersedia terlebih dahulu.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Gunakan setiap filter secara bergilir.", + "gui.refinedstorage2.scheduling_mode.random": "Acak", + "gui.refinedstorage2.scheduling_mode.random.help": "Gunakan filter acak.", + "gui.refinedstorage2.priority": "Prioritas", + "gui.refinedstorage2.priority.storage_help": "Urutan dimana jaringan penyimpanan akan memasukkan atau mengekstrak sumber daya, mulai dari yang tertinggi.", + "gui.refinedstorage2.amount": "Jumlah", + "gui.refinedstorage2.amount.reset": "Atur Ulang", + "gui.refinedstorage2.amount.set": "Atur", + "gui.refinedstorage2.filter_mode": "Mode Filter", + "gui.refinedstorage2.filter_mode.allow": "Diizinkan", + "gui.refinedstorage2.filter_mode.block": "Diblokir", + "gui.refinedstorage2.fuzzy_mode": "Mode acak", + "gui.refinedstorage2.fuzzy_mode.on": "Hidup", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Cocokkan persis filter untuk daftar yang diizinkan atau yang diblokir.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Sesuaikan persis filter.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Sesuaikan persis filter ketika mengekstrak dari jaringan penyimpanan.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Sesuaikan persis filter ketika mengekstrak dari sumber.", + "gui.refinedstorage2.fuzzy_mode.off": "Nonaktif", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Cocokkan filter untuk daftar yang diizinkan atau yang diblokir tanpa membandingkan label NBT.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Sesuaikan filter tanpa membandingkan label NBT.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Sesuaikan filter ketika mengekstrak dari jaringan penyimpanan tanpa membandingkan label NBT.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Sesuaikan filter ketika mengekstrak dari sumber tanpa membandingkan label NBT.", + "gui.refinedstorage2.access_mode": "Modus akses", + "gui.refinedstorage2.access_mode.insert_extract": "Masukkan dan ekstrak", + "gui.refinedstorage2.access_mode.insert_extract.help": "Jaringan penyimpanan akan dapat memasukkan atau mengekstrak dari penyimpanan ini.", + "gui.refinedstorage2.access_mode.insert": "Masukkan saja", + "gui.refinedstorage2.access_mode.insert.help": "Jaringan penyimpanan hanya akan dapat memasukkan kedalam penyimpanan ini. Sumber daya masih dapat dilihat dalam Kisi.", + "gui.refinedstorage2.access_mode.extract": "Ekstrak saja", + "gui.refinedstorage2.access_mode.extract.help": "Jaringan penyimpanan hanya akan dapat mengekstrak dari penyimpanan ini.", + "gui.refinedstorage2.void_excess": "Kosongkan sumber daya berlebih", + "gui.refinedstorage2.void_excess.help": "Ketika mode kosongan kelebihan dihidupkan dan penyimpanan penuh, penyimpanan akan tetap menerima sumber daya akan tetapi akan mengosongkannya.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Kosongkan kelebihan hanya akan bekerja ketika penyimpanan dalam mode diizinkan.", + "gui.refinedstorage2.upgrade_slot": "Slot peningkatan kosong", + "gui.refinedstorage2.filter_slot.empty_filter": "Filter kosong", + "gui.refinedstorage2.filter_slot.left_click_for": "Klik kiri untuk", + "gui.refinedstorage2.filter_slot.right_click_for": "Klik kanan untuk", + "gui.refinedstorage2.filter_slot.click_to_clear": "Klik untuk membersihkan", + "gui.refinedstorage2.regulator_upgrade.filter_help": "Sumber daya yang harus diatur dalam sasaran.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Tidak aktif", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Kartu Jaringan Tidak Ditemukan", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d blok", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Tidak dapat diraih", + "item.refinedstorage2.controller.help": "Menyediakan energi ke jaringan penyimpanan. dapat digunakan beberapa kali dalam satu jaringan penyimpanan.", + "item.refinedstorage2.creative_controller.help": "Menyediakan energi tidak terbatas ke jaringan penyimpanan.", + "item.refinedstorage2.disk_drive.help": "Menerima cakram penyimpanan untuk menyediakan ruang penyimpanan kedalam jaringan penyimpanan.", + "item.refinedstorage2.grid.help": "Memungkinkan untuk mengakses jaringan penyimpanan.", + "item.refinedstorage2.crafting_grid.help": "Memungkinkan untuk mengakses jaringan penyimpanan, dengan kemampuan untuk merakit.", + "item.refinedstorage2.importer.help": "Import sumber daya dari sumber eksternal kedalam jaringan penyimpanan.", + "item.refinedstorage2.exporter.help": "Ekspor sumber daya dari jaringan penyimpanan kedalam tujuan eksternal.", + "item.refinedstorage2.interface.help": "Berfungsi sebagai gabungan dari Importir dan Eksportir.", + "item.refinedstorage2.external_storage.help": "Menyediakan penyimpanan dari sumber eksternal kedalam jaringan penyimpanan.", + "item.refinedstorage2.detector.help": "Pancarkan sinyal redstone jika jaringan penyimpanan berisi sumber daya sama dengan, diatas atau dibawah jumlah yang ditentukan.", + "item.refinedstorage2.constructor.help": "Tempatkan balok dari jaringan penyimpanan ke dunia.", + "item.refinedstorage2.destructor.help": "Memecahkan balok dari dunia dan memasukkannya kedalam jaringan penyimpanan.", + "item.refinedstorage2.quartz_enriched_iron": "Besi yang Diperkaya Kuarsa", + "item.refinedstorage2.processor_binding": "Pengikat Prosesor", + "item.refinedstorage2.silicon": "Silikon", + "item.refinedstorage2.raw_basic_processor": "Procesor Dasar Mentah", + "item.refinedstorage2.raw_improved_processor": "Prosesor Ditingkatkan Mentah", + "item.refinedstorage2.raw_advanced_processor": "Prosesor Canggih Mentah", + "item.refinedstorage2.basic_processor": "Procesor Dasar", + "item.refinedstorage2.improved_processor": "Prosesor Ditingkatkan", + "item.refinedstorage2.advanced_processor": "Prosesor Canggih", + "item.refinedstorage2.1k_storage_part": "Suku Cadang Penyimpanan 1K", + "item.refinedstorage2.4k_storage_part": "Suku Cadang Penyimpanan 4K", + "item.refinedstorage2.16k_storage_part": "Suku Cadang Penyimpanan 16K", + "item.refinedstorage2.64k_storage_part": "Suku Cadang Penyimpanan 64K", + "item.refinedstorage2.1k_storage_disk": "Cakram Penyimpanan 1K", + "item.refinedstorage2.4k_storage_disk": "Cakram Penyimpanan 4K", + "item.refinedstorage2.16k_storage_disk": "Cakram Penyimpanan 16K", + "item.refinedstorage2.64k_storage_disk": "Cakram Penyimpanan 64K", + "item.refinedstorage2.creative_storage_disk": "Cakram Penyimpanan Kreatif", + "item.refinedstorage2.64b_fluid_storage_part": "Suku cadang Penyimpanan Cairan 64B", + "item.refinedstorage2.256b_fluid_storage_part": "Suku cadang Penyimpanan Cairan 256B", + "item.refinedstorage2.1024b_fluid_storage_part": "Suku cadang Penyimpanan Cairan 1024B", + "item.refinedstorage2.4096b_fluid_storage_part": "Suku cadang Penyimpanan Cairan 4096B", + "item.refinedstorage2.64b_fluid_storage_disk": "Cakram Penyimpanan Cairan 64B", + "item.refinedstorage2.256b_fluid_storage_disk": "Cakram Penyimpanan Cairan 256B", + "item.refinedstorage2.1024b_fluid_storage_disk": "Cakram Penyimpanan Cairan 1024B", + "item.refinedstorage2.4096b_fluid_storage_disk": "Cakram Penyimpanan Cairan 4096B", + "item.refinedstorage2.creative_fluid_storage_disk": "Cakram Penyimpanan Cairan Kreatif", + "item.refinedstorage2.storage_housing": "Kerangka Penyimpanan", + "item.refinedstorage2.construction_core": "Inti Pembangunan", + "item.refinedstorage2.destruction_core": "Inti Penghancuran", + "item.refinedstorage2.wrench": "Kunci inggris", + "item.refinedstorage2.wrench.helper": "Gunakan untuk memutar balok atau tekan SHIFT dan gunakan untuk membongkar balok Refined Storage.", + "item.refinedstorage2.upgrade": "Tingkatkan", + "item.refinedstorage2.speed_upgrade": "Peningkatan Kecepatan", + "item.refinedstorage2.stack_upgrade": "Peningkatan Tumpukan", + "item.refinedstorage2.silk_touch_upgrade": "Peningkatan Sentuhan Sutra", + "item.refinedstorage2.fortune_upgrade.1": "Peningkatan Peruntungan 1", + "item.refinedstorage2.fortune_upgrade.2": "Peningkatan Peruntungan 2", + "item.refinedstorage2.fortune_upgrade.3": "Peningkatan Peruntungan 3", + "item.refinedstorage2.regulator_upgrade": "Peningkatan Pengatur", + "item.refinedstorage2.regulator_upgrade.help": "Didalam Eksportir, hanya akan mengekspor jika jumlah sasaran kurang dari yang dikonfigurasi dalam peningkatan. Didalam Importir, hanya akan mengimpor jika jumlah sasaran lebih dari yang dikonfigurasi dalam peningkatan. Gunakan barang untuk mengonfigurasi.", + "item.refinedstorage2.range_upgrade": "Peningkatan Jangkauan", + "item.refinedstorage2.creative_range_upgrade": "Peningkatan Jangkauan Kreatif", + "item.refinedstorage2.wireless_grid": "Kisi Nirkabel", + "item.refinedstorage2.creative_wireless_grid": "Kisi Nirkabel Kreatif", + "item.refinedstorage2.wireless_transmitter.help": "Menyediakan akses jaringan nirkabel untuk barang seperti Kisi Nirkabel. Dapat digunakan beberapa dalam area untuk jangkauan yang lebih luas.", + "item.refinedstorage2.network_item.unbound": "Tidak terikat.", + "item.refinedstorage2.network_item.unbound.help": "Gunakan pada perangkat jaringan penyimpanan manapun untuk mengikat.", + "item.refinedstorage2.network_item.bound_to": "Terikat pada %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "Terdapat %s lebih dari satu di inventaris anda.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "Tidak ada %s di inventaris anda.", + "item.refinedstorage2.configuration_card": "Kartu Konfigurasi", + "item.refinedstorage2.configuration_card.empty": "Kosong.", + "item.refinedstorage2.configuration_card.configured": "Berisi konfigurasi untuk %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Menyalin konfigurasi untuk %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Konfigurasi dibersihkan.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Tidak dapat menerapkan kartu konfigurasi ke jenis perangkat yang berbeda. Kartu terkonfigurasi untuk %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Konfigurasi diterapkan.", + "item.refinedstorage2.configuration_card.empty_help": "Gunakan pada perangkat perangkat jaringan penyimpanan sambil berjongkok untuk menyalin konfigurasi dan peningkatannya kedalam kartu.", + "item.refinedstorage2.configuration_card.configured_help": "Gunakan pada perangkat jaringan penyimpanan tujuan sambil berjongkok untuk mengirimkan konfigurasi dan peningkatan. Gunakan sambil berjongkok untuk membersihkan.", + "item.refinedstorage2.network_card": "Kartu Jaringan", + "item.refinedstorage2.network_card.unbound_help": "Gunakan sambil berjongkok pada Penerima Jaringan.", + "item.refinedstorage2.network_card.unbound": "Tidak terikat.", + "item.refinedstorage2.network_card.bound_help": "Masukkan ke Pemancar Jaringan. Gunakan sambil berjongkok untuk membersihkan ikatan.", + "item.refinedstorage2.network_card.bound": "Terikat pada %d, %d, %d dalam %s.", + "misc.refinedstorage2.stored": "Tersimpan: %s", + "misc.refinedstorage2.stored_with_capacity": "Tersimpan: %s / %s (%d%%)", + "misc.refinedstorage2.total": "Total %d", + "misc.refinedstorage2.last_modified.just_now": "Baru saja dirubah oleh %s", + "misc.refinedstorage2.last_modified.second": "Terakhir dirubah %d detik yang lalu oleh %s", + "misc.refinedstorage2.last_modified.seconds": "Terakhir dirubah %d detik yang lalu oleh %s", + "misc.refinedstorage2.last_modified.minute": "Terakhir dirubah %d menit yang lalu oleh %s", + "misc.refinedstorage2.last_modified.minutes": "Terakhir dirubah %d menit yang lalu oleh %s", + "misc.refinedstorage2.last_modified.hour": "Terakhir dirubah %d jam yang lalu oleh %s", + "misc.refinedstorage2.last_modified.hours": "Terakhir dirubah %d jam yang lalu oleh %s", + "misc.refinedstorage2.last_modified.day": "Terakhir dirubah %d hari yang lalu oleh %s", + "misc.refinedstorage2.last_modified.days": "Terakhir dirubah %d hari yang lalu oleh %s", + "misc.refinedstorage2.last_modified.week": "Terakhir dirubah %d minggu yang lalu oleh %s", + "misc.refinedstorage2.last_modified.weeks": "Terakhir dirubah %d minggu yang lalu oleh %s", + "misc.refinedstorage2.last_modified.year": "Terakhir dirubah %d tahun yang lalu oleh %s", + "misc.refinedstorage2.last_modified.years": "Terakhir dirubah %d tahun yang lalu oleh %s", + "misc.refinedstorage2.resource_type.item": "Barang", + "misc.refinedstorage2.resource_type.fluid": "Cairan", + "misc.refinedstorage2.press_shift_for_help": "Tekan SHIFT untuk bantuan", + "key.refinedstorage2.focus_search_bar": "Fokus pada kotak pencarian", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Singkirkan matriks Kisi Kerajinan ke jaringan", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Singkirkan matriks Kisi Kerajinan ke inventaris", + "key.refinedstorage2.open_wireless_grid": "Buka Kisi Nirkabel", + "refinedstorage2.subtitle.wrench": "Kunci inggris digunakan", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Kisi", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Font besar", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Baris maksimum saat diregangkan", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Mencegah pengurutan ketika SHIFT ditekan", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detail teks keterangan", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Ingat permintaan pencarian", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Pengguliran mulus", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Memilih otomatis kotak pencarian", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Sinkronisasi", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Jenis sumber daya", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Arah Pengurutan", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Jenis pengurutan", + "text.autoconfig.refinedstorage2.option.grid.size": "Ukuran", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Kisi Kerajinan", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Perilaku menutup Matriks kerajinan", + "text.autoconfig.refinedstorage2.option.controller": "Pengendali", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Kapasitas daya", + "text.autoconfig.refinedstorage2.option.cable": "Kabel", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.diskDrive": "Lemari Cakram", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Pemakaian daya per cakram", + "text.autoconfig.refinedstorage2.option.storageBlock": "Balok Penyimpanan", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "Pemakaian daya 1K", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "Pemakaian daya 4K", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "Pemakaian daya 16K", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "Pemakaian daya 64K", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Pemakaian daya kreatif", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Balok Penyimpanan Cairan", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "Pemakaian daya 64M", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "Pemakaian daya 256M", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "Pemakaian daya 1024M", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "Pemakaian daya 4096M", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Pemakaian daya kreatif", + "text.autoconfig.refinedstorage2.option.importer": "Importir", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.exporter": "Eksportir", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.detector": "Pendeteksi", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.constructor": "Pembangun", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.destructor": "Penghancur", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.upgrade": "Peningkatan", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Pemakaian daya peningkat kecepatan", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Pemakaian daya peningkat tumpukan", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Pemakaian daya peningkat peruntungan 1", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Pemakaian daya peningkat peruntungan 2", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Pemakaian daya peningkat peruntungan 3", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Pemakaian daya peningkat sentuhan sutra", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Pemakaian daya peningkat pengatur", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Pemakaian daya peningkat jangkauan", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Pemakaian daya peningkat jangkauan kreatif", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Rentang Peningkatan Jangkauan", + "text.autoconfig.refinedstorage2.option.iface": "Antarmuka", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.externalStorage": "Penyimpanan Eksternal", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Kisi Nirkabel", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Kapasitas energi", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Buka pemakaian daya", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Masukkan pemakaian daya", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Ekstrak pemakaian daya", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Pemancar Nirkabel", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Jangkauan Dasar", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Monitor Penyimpanan", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Penerima Jaringan", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Pemancar Jaringan", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Pemakaian daya", + "text.autoconfig.refinedstorage2.option.portableGrid": "Kisi Portabel", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Kapasitas energi", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Buka pemakaian daya", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Masukkan pemakaian daya", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Ekstrak pemakaian daya", + "advancements.refinedstorage2.root.description": "Gunakan satu atau beberapa Pengendali dalam jaringan untuk menyediakan energi kedalam jaringan anda", + "advancements.refinedstorage2.connecting": "Menyambungkan", + "advancements.refinedstorage2.connecting.description": "Gunakan Kabel untuk menghubungkan perangkat satu sama lain, atau letakkan perangkat melawan satu sama lain", + "advancements.refinedstorage2.drives": "Cakram", + "advancements.refinedstorage2.drives.description": "Rakit Lemari Cakram untuk menyimpan cakram penyimpanan anda", + "advancements.refinedstorage2.storing_items": "Menyimpan Barang", + "advancements.refinedstorage2.storing_items.description": "Rakit Cakram Penyimpanan dan letakkan kedalam Lemari Cakram anda", + "advancements.refinedstorage2.viewing_your_storage": "Melihat penyimpanan anda", + "advancements.refinedstorage2.viewing_your_storage.description": "Rakit Kisi untuk berinteraksi dengan penyimpanan anda", + "advancements.refinedstorage2.upgrading_your_grid": "Meningkatkan Kisi anda", + "advancements.refinedstorage2.upgrading_your_grid.description": "Tingkatkan Kisi anda menjadi Kisi Kerajinan untuk mendapatkan kemampuan kerajinan", + "advancements.refinedstorage2.storing_fluids": "Menyimpan cairan", + "advancements.refinedstorage2.storing_fluids.description": "Rakit Cakram Penyimpanan Cairan dan letakkan kedalam Lemari Cakram anda", + "advancements.refinedstorage2.importing": "Pengimporan", + "advancements.refinedstorage2.importing.description": "Masukkan sumber daya kedalam jaringan penyimpanan menggunakan Importir", + "advancements.refinedstorage2.exporting": "Pengeksporan", + "advancements.refinedstorage2.exporting.description": "Keluarkan sumberdaya dari jaringan penyimpanan menggunakan Eksportir", + "advancements.refinedstorage2.upgrading": "Meningkatkan", + "advancements.refinedstorage2.upgrading.description": "Rakit Peningkatan untuk meningkatkan berbagai perangkat", + "advancements.refinedstorage2.interface_to_the_world": "Antarmuka ke dunia", + "advancements.refinedstorage2.interface_to_the_world.description": "Ekspor dan Impor barang secara bersamaan dengan Antarmuka", + "advancements.refinedstorage2.storing_externally": "Menyimpan secara eksternal", + "advancements.refinedstorage2.storing_externally.description": "Gunakan Penyimpanan Eksternal untuk menyediakan jaringan dengan penyimpanan dari balok eksternal seperti peti", + "advancements.refinedstorage2.detecting": "Mendeteksi", + "advancements.refinedstorage2.detecting.description": "Gunakan redstone untuk memeriksa sumber daya yang tersimpan di jaringan", + "advancements.refinedstorage2.construction": "Pembangunan", + "advancements.refinedstorage2.construction.description": "Tempatkan balok dari jaringan penyimpanan ke dunia menggunakan Pembangun", + "advancements.refinedstorage2.destruction": "Penghancuran", + "advancements.refinedstorage2.destruction.description": "Peroleh balok dari dunia kedalam jaringan penyimpanan menggunakan Penghancur", + "advancements.refinedstorage2.wireless": "Nirkabel", + "advancements.refinedstorage2.wireless.description": "Akses sumber daya anda secara nirkabel menggunakan Kisi Nirkabel.", + "advancements.refinedstorage2.better_than_a_barrel": "Lebih baik dari tong", + "advancements.refinedstorage2.better_than_a_barrel.description": "Rakit Monitor Penyimpanan untuk melihat, memasukkan atau mengekstrak sumber daya dalam jaringan penyimpanan", + "advancements.refinedstorage2.no_cables_required": "Tidak memerlukan kabel", + "advancements.refinedstorage2.no_cables_required.description": "Tambahkan komponen tambahan ke jaringan anda tanpa menggunakan kabel dengan menggunakan Pemancar Jaringan, Penerima Jaringan dan Kartu Jaringan", + "advancements.refinedstorage2.portable_storage": "Penyimpanan portabel", + "advancements.refinedstorage2.portable_storage.description": "Rakit Kisi Portabel untuk mengakses isi dari cakram tanpa memerlukan jaringan penyimpanan" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/it_it.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/it_it.json new file mode 100644 index 000000000..0e58472c8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/it_it.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Cable", + "block.refinedstorage2.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", + "block.refinedstorage2.disk_drive": "Disk Drive", + "block.refinedstorage2.machine_casing": "Machine Casing", + "block.refinedstorage2.grid": "Grid", + "block.refinedstorage2.crafting_grid": "Crafting Grid", + "block.refinedstorage2.controller": "Controller", + "block.refinedstorage2.controller.rei_fully_charged": "Fully charged Controller", + "block.refinedstorage2.creative_controller": "Creative Controller", + "block.refinedstorage2.1k_storage_block": "1K Storage Block", + "block.refinedstorage2.4k_storage_block": "4K Storage Block", + "block.refinedstorage2.16k_storage_block": "16K Storage Block", + "block.refinedstorage2.64k_storage_block": "64K Storage Block", + "block.refinedstorage2.creative_storage_block": "Creative Storage Block", + "block.refinedstorage2.64b_fluid_storage_block": "64B Fluid Storage Block", + "block.refinedstorage2.256b_fluid_storage_block": "256B Fluid Storage Block", + "block.refinedstorage2.1024b_fluid_storage_block": "1024B Fluid Storage Block", + "block.refinedstorage2.4096b_fluid_storage_block": "4096B Fluid Storage Block", + "block.refinedstorage2.creative_fluid_storage_block": "Creative Fluid Storage Block", + "block.refinedstorage2.importer": "Importer", + "block.refinedstorage2.exporter": "Exporter", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "External Storage", + "block.refinedstorage2.detector": "Detector", + "block.refinedstorage2.constructor": "Constructor", + "block.refinedstorage2.destructor": "Destructor", + "block.refinedstorage2.wireless_transmitter": "Wireless Transmitter", + "block.refinedstorage2.storage_monitor": "Storage Monitor", + "block.refinedstorage2.network_receiver": "Network Receiver", + "block.refinedstorage2.network_transmitter": "Network Transmitter", + "block.refinedstorage2.portable_grid": "Portable Grid", + "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", + "gui.refinedstorage2.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", + "gui.refinedstorage2.disk_drive.disks": "Disks", + "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage2.grid.sorting.type": "Sorting type", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Size", + "gui.refinedstorage2.grid.size.stretch": "Stretch", + "gui.refinedstorage2.grid.size.small": "Small", + "gui.refinedstorage2.grid.size.medium": "Medium", + "gui.refinedstorage2.grid.size.large": "Large", + "gui.refinedstorage2.grid.size.extra_large": "Extra large", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Resource type", + "gui.refinedstorage2.grid.resource_type.all": "All", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/ja_jp.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/ja_jp.json new file mode 100644 index 000000000..0e58472c8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/ja_jp.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Cable", + "block.refinedstorage2.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", + "block.refinedstorage2.disk_drive": "Disk Drive", + "block.refinedstorage2.machine_casing": "Machine Casing", + "block.refinedstorage2.grid": "Grid", + "block.refinedstorage2.crafting_grid": "Crafting Grid", + "block.refinedstorage2.controller": "Controller", + "block.refinedstorage2.controller.rei_fully_charged": "Fully charged Controller", + "block.refinedstorage2.creative_controller": "Creative Controller", + "block.refinedstorage2.1k_storage_block": "1K Storage Block", + "block.refinedstorage2.4k_storage_block": "4K Storage Block", + "block.refinedstorage2.16k_storage_block": "16K Storage Block", + "block.refinedstorage2.64k_storage_block": "64K Storage Block", + "block.refinedstorage2.creative_storage_block": "Creative Storage Block", + "block.refinedstorage2.64b_fluid_storage_block": "64B Fluid Storage Block", + "block.refinedstorage2.256b_fluid_storage_block": "256B Fluid Storage Block", + "block.refinedstorage2.1024b_fluid_storage_block": "1024B Fluid Storage Block", + "block.refinedstorage2.4096b_fluid_storage_block": "4096B Fluid Storage Block", + "block.refinedstorage2.creative_fluid_storage_block": "Creative Fluid Storage Block", + "block.refinedstorage2.importer": "Importer", + "block.refinedstorage2.exporter": "Exporter", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "External Storage", + "block.refinedstorage2.detector": "Detector", + "block.refinedstorage2.constructor": "Constructor", + "block.refinedstorage2.destructor": "Destructor", + "block.refinedstorage2.wireless_transmitter": "Wireless Transmitter", + "block.refinedstorage2.storage_monitor": "Storage Monitor", + "block.refinedstorage2.network_receiver": "Network Receiver", + "block.refinedstorage2.network_transmitter": "Network Transmitter", + "block.refinedstorage2.portable_grid": "Portable Grid", + "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", + "gui.refinedstorage2.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", + "gui.refinedstorage2.disk_drive.disks": "Disks", + "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage2.grid.sorting.type": "Sorting type", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Size", + "gui.refinedstorage2.grid.size.stretch": "Stretch", + "gui.refinedstorage2.grid.size.small": "Small", + "gui.refinedstorage2.grid.size.medium": "Medium", + "gui.refinedstorage2.grid.size.large": "Large", + "gui.refinedstorage2.grid.size.extra_large": "Extra large", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Resource type", + "gui.refinedstorage2.grid.resource_type.all": "All", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/ko_kr.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/ko_kr.json new file mode 100644 index 000000000..0e58472c8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/ko_kr.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Cable", + "block.refinedstorage2.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", + "block.refinedstorage2.disk_drive": "Disk Drive", + "block.refinedstorage2.machine_casing": "Machine Casing", + "block.refinedstorage2.grid": "Grid", + "block.refinedstorage2.crafting_grid": "Crafting Grid", + "block.refinedstorage2.controller": "Controller", + "block.refinedstorage2.controller.rei_fully_charged": "Fully charged Controller", + "block.refinedstorage2.creative_controller": "Creative Controller", + "block.refinedstorage2.1k_storage_block": "1K Storage Block", + "block.refinedstorage2.4k_storage_block": "4K Storage Block", + "block.refinedstorage2.16k_storage_block": "16K Storage Block", + "block.refinedstorage2.64k_storage_block": "64K Storage Block", + "block.refinedstorage2.creative_storage_block": "Creative Storage Block", + "block.refinedstorage2.64b_fluid_storage_block": "64B Fluid Storage Block", + "block.refinedstorage2.256b_fluid_storage_block": "256B Fluid Storage Block", + "block.refinedstorage2.1024b_fluid_storage_block": "1024B Fluid Storage Block", + "block.refinedstorage2.4096b_fluid_storage_block": "4096B Fluid Storage Block", + "block.refinedstorage2.creative_fluid_storage_block": "Creative Fluid Storage Block", + "block.refinedstorage2.importer": "Importer", + "block.refinedstorage2.exporter": "Exporter", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "External Storage", + "block.refinedstorage2.detector": "Detector", + "block.refinedstorage2.constructor": "Constructor", + "block.refinedstorage2.destructor": "Destructor", + "block.refinedstorage2.wireless_transmitter": "Wireless Transmitter", + "block.refinedstorage2.storage_monitor": "Storage Monitor", + "block.refinedstorage2.network_receiver": "Network Receiver", + "block.refinedstorage2.network_transmitter": "Network Transmitter", + "block.refinedstorage2.portable_grid": "Portable Grid", + "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", + "gui.refinedstorage2.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", + "gui.refinedstorage2.disk_drive.disks": "Disks", + "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage2.grid.sorting.type": "Sorting type", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Size", + "gui.refinedstorage2.grid.size.stretch": "Stretch", + "gui.refinedstorage2.grid.size.small": "Small", + "gui.refinedstorage2.grid.size.medium": "Medium", + "gui.refinedstorage2.grid.size.large": "Large", + "gui.refinedstorage2.grid.size.extra_large": "Extra large", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Resource type", + "gui.refinedstorage2.grid.resource_type.all": "All", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/nl_nl.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/nl_nl.json new file mode 100644 index 000000000..0e58472c8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/nl_nl.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Cable", + "block.refinedstorage2.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", + "block.refinedstorage2.disk_drive": "Disk Drive", + "block.refinedstorage2.machine_casing": "Machine Casing", + "block.refinedstorage2.grid": "Grid", + "block.refinedstorage2.crafting_grid": "Crafting Grid", + "block.refinedstorage2.controller": "Controller", + "block.refinedstorage2.controller.rei_fully_charged": "Fully charged Controller", + "block.refinedstorage2.creative_controller": "Creative Controller", + "block.refinedstorage2.1k_storage_block": "1K Storage Block", + "block.refinedstorage2.4k_storage_block": "4K Storage Block", + "block.refinedstorage2.16k_storage_block": "16K Storage Block", + "block.refinedstorage2.64k_storage_block": "64K Storage Block", + "block.refinedstorage2.creative_storage_block": "Creative Storage Block", + "block.refinedstorage2.64b_fluid_storage_block": "64B Fluid Storage Block", + "block.refinedstorage2.256b_fluid_storage_block": "256B Fluid Storage Block", + "block.refinedstorage2.1024b_fluid_storage_block": "1024B Fluid Storage Block", + "block.refinedstorage2.4096b_fluid_storage_block": "4096B Fluid Storage Block", + "block.refinedstorage2.creative_fluid_storage_block": "Creative Fluid Storage Block", + "block.refinedstorage2.importer": "Importer", + "block.refinedstorage2.exporter": "Exporter", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "External Storage", + "block.refinedstorage2.detector": "Detector", + "block.refinedstorage2.constructor": "Constructor", + "block.refinedstorage2.destructor": "Destructor", + "block.refinedstorage2.wireless_transmitter": "Wireless Transmitter", + "block.refinedstorage2.storage_monitor": "Storage Monitor", + "block.refinedstorage2.network_receiver": "Network Receiver", + "block.refinedstorage2.network_transmitter": "Network Transmitter", + "block.refinedstorage2.portable_grid": "Portable Grid", + "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", + "gui.refinedstorage2.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", + "gui.refinedstorage2.disk_drive.disks": "Disks", + "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage2.grid.sorting.type": "Sorting type", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Size", + "gui.refinedstorage2.grid.size.stretch": "Stretch", + "gui.refinedstorage2.grid.size.small": "Small", + "gui.refinedstorage2.grid.size.medium": "Medium", + "gui.refinedstorage2.grid.size.large": "Large", + "gui.refinedstorage2.grid.size.extra_large": "Extra large", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Resource type", + "gui.refinedstorage2.grid.resource_type.all": "All", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/pl_pl.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/pl_pl.json new file mode 100644 index 000000000..de98e8bce --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/pl_pl.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Kabel", + "block.refinedstorage2.quartz_enriched_iron_block": "Blok kwarcowego żelaza", + "block.refinedstorage2.disk_drive": "Napęd dysku", + "block.refinedstorage2.machine_casing": "Osłona maszyny", + "block.refinedstorage2.grid": "Terminal", + "block.refinedstorage2.crafting_grid": "Terminal rzemieślniczy", + "block.refinedstorage2.controller": "Kontroler", + "block.refinedstorage2.controller.rei_fully_charged": "Kontroler w pełni naładowany", + "block.refinedstorage2.creative_controller": "Kontroler kreatywny", + "block.refinedstorage2.1k_storage_block": "Blok pamięci 1k", + "block.refinedstorage2.4k_storage_block": "Blok pamięci 4k", + "block.refinedstorage2.16k_storage_block": "Blok pamięci 16k", + "block.refinedstorage2.64k_storage_block": "Blok pamięci 64k", + "block.refinedstorage2.creative_storage_block": "Kreatywny blok pamięci", + "block.refinedstorage2.64b_fluid_storage_block": "Blok pamięci płynów 64B", + "block.refinedstorage2.256b_fluid_storage_block": "Blok pamięci płynów 256B", + "block.refinedstorage2.1024b_fluid_storage_block": "Blok pamięci płynów 1024B", + "block.refinedstorage2.4096b_fluid_storage_block": "Blok pamięci płynów 4096B", + "block.refinedstorage2.creative_fluid_storage_block": "Kreatywny blok pamięci płynów", + "block.refinedstorage2.importer": "Importer", + "block.refinedstorage2.exporter": "Eksporter", + "block.refinedstorage2.interface": "Interfejs", + "block.refinedstorage2.external_storage": "Zewnętrzny magazyn", + "block.refinedstorage2.detector": "Detektor", + "block.refinedstorage2.constructor": "Konstruktor", + "block.refinedstorage2.destructor": "Destruktor", + "block.refinedstorage2.wireless_transmitter": "Nadajnik bezprzewodowy", + "block.refinedstorage2.storage_monitor": "Monitor magazynu", + "block.refinedstorage2.network_receiver": "Odbiornik sieci", + "block.refinedstorage2.network_transmitter": "Nadajnik sieci", + "block.refinedstorage2.portable_grid": "Przenośny terminal", + "block.refinedstorage2.creative_portable_grid": "Kreatywny przenośny terminal", + "gui.refinedstorage2.controller.redstone_mode_help": "Gdy to urządzenie jest nieaktywne, sieć magazynowa nie będzie w stanie używać tego urządzenia jako źródła energii.", + "gui.refinedstorage2.disk_drive.disks": "Dyski", + "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Kierunek sortowania", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Rosnąco", + "gui.refinedstorage2.grid.sorting.direction.descending": "Malejąco", + "gui.refinedstorage2.grid.sorting.type": "Rodzaj sortowania", + "gui.refinedstorage2.grid.sorting.type.quantity": "Ilość", + "gui.refinedstorage2.grid.sorting.type.name": "Nazwa", + "gui.refinedstorage2.grid.sorting.type.id": "Identyfikator", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Ostatnia modyfikacja", + "gui.refinedstorage2.grid.size": "Rozmiar", + "gui.refinedstorage2.grid.size.stretch": "Rozciągnięcie", + "gui.refinedstorage2.grid.size.small": "Mały", + "gui.refinedstorage2.grid.size.medium": "Średni", + "gui.refinedstorage2.grid.size.large": "Duży", + "gui.refinedstorage2.grid.size.extra_large": "Bardzo duży", + "gui.refinedstorage2.grid.auto_selected": "Automatycznie zaznaczone", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Tryb synchronizacji", + "gui.refinedstorage2.grid.synchronizer.off": "Wyłączone", + "gui.refinedstorage2.grid.synchronizer.off.help": "Nie synchronizuj tekstu pola wyszukiwania.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Synchronizuj pole wyszukiwania z filtrem JEI.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "Dwukierunkowe JEI", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Synchronizuj pole wyszukiwania z filtrem JEI i filtr JEI do pola wyszukiwania.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Synchronizuj pole wyszukiwania z filtrem REI.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "Dwukierunkowe REI", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Synchronizuj pole wyszukiwania z filtrem REI i filtr REI do pola wyszukiwania.", + "gui.refinedstorage2.grid.resource_type": "Typ zasobu", + "gui.refinedstorage2.grid.resource_type.all": "Wszystko", + "gui.refinedstorage2.grid.resource_type.help": "Filtruj określone typy zasobów.", + "gui.refinedstorage2.crafting_grid.move.network": "Przenieś przedmioty do sieci", + "gui.refinedstorage2.crafting_grid.move.inventory": "Przenieś przedmioty do ekwipunku", + "gui.refinedstorage2.detector.mode": "Tryb", + "gui.refinedstorage2.detector.mode.under": "Emituj sygnał redstone, kiedy poniżej danej ilości", + "gui.refinedstorage2.detector.mode.equal": "Emituj sygnał redstone, kiedy dana ilość", + "gui.refinedstorage2.detector.mode.above": "Emituj sygnał redstone, kiedy powyżej danej ilości", + "gui.refinedstorage2.detector.filter_help": "Zasób, który powinien zostać wykryty w sieci magazynowania.", + "gui.refinedstorage2.destructor.pickup_items": "Ponieść przedmiot, zamiast niszczyć", + "gui.refinedstorage2.destructor.filter_help": "Bloki, które mogą lub nie mogą być zniszczone, w zależności od tego, czy urządzenie jest w trybie dozwolonych lub zablokowanych.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Zezwalaj tylko na bloki do sieci magazynowej, które są skonfigurowane w filtrach.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Nie zezwalaj na bloki do sieci magazynowej, które są skonfigurowane w filtrach.", + "gui.refinedstorage2.constructor.drop_items": "Upuszczaj przedmioty zamiast stawiania bloków", + "gui.refinedstorage2.constructor.filter_help": "Zasób, który zostać postawiony z sieci magazynowania.", + "gui.refinedstorage2.interface.filter_help": "Zasoby, które powinny być eksportowane z sieci magazynowania.", + "gui.refinedstorage2.exporter.filter_help": "Zasoby, które powinny być eksportowane z sieci magazynowania.", + "gui.refinedstorage2.importer.filter_help": "Zasoby, które mogą być importowane z docelowego ekwipunku.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Zezwalaj tylko na zasoby do sieci magazynowej, które są skonfigurowane w filtrach.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Nie zezwalaj na zasoby do sieci magazynowej, które są skonfigurowane w filtrach.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d blok(ów)", + "gui.refinedstorage2.storage_monitor.filter_help": "Zasób do wyświetlenia.", + "gui.refinedstorage2.redstone_mode": "Tryb redstone", + "gui.refinedstorage2.redstone_mode.ignore": "Ignoruj", + "gui.refinedstorage2.redstone_mode.ignore.help": "To urządzenie będzie zawsze aktywne, niezależnie od sygnału redstone.", + "gui.refinedstorage2.redstone_mode.high": "Wysoki", + "gui.refinedstorage2.redstone_mode.high.help": "To urządzenie będzie aktywne tylko z sygnałem redstone.", + "gui.refinedstorage2.redstone_mode.low": "Niski", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Brak karty sieci", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d blok(ów)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Nieosiągalny", + "item.refinedstorage2.controller.help": "Zapewnia sieć magazynowania w energie. Sieć może mieć ich kilka.", + "item.refinedstorage2.creative_controller.help": "Zapewnia sieć magazynowania w nieskończoną energię.", + "item.refinedstorage2.disk_drive.help": "Akceptuje dyski do zapewnienia przestrzeni dyskowej dla sieci magazynowania.", + "item.refinedstorage2.grid.help": "Umożliwia interakcję z siecią magazynowania.", + "item.refinedstorage2.crafting_grid.help": "Umożliwia interakcję z siecią magazynowania, z możliwością tworzenia.", + "item.refinedstorage2.importer.help": "Importuj zasoby ze źródła zewnętrznego do sieci magazynowej.", + "item.refinedstorage2.exporter.help": "Eksport zasobów z sieci magazynowej do zewnętrznego miejsca przeznaczenia.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Dostarcza pamięć z zewnętrznego źródła.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "Zewnętrzny magazyn", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Zużycie energii", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Przechowywanie zewnętrzne", + "advancements.refinedstorage2.storing_externally.description": "Użyj zewnętrznego magazynu, aby zapewnić sieć w pamięć z zewnętrznego bloku jak skrzynia", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/pt_br.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/pt_br.json new file mode 100644 index 000000000..f62422275 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/pt_br.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Cabo", + "block.refinedstorage2.quartz_enriched_iron_block": "Bloco de ferro com quartzo infundido", + "block.refinedstorage2.disk_drive": "Disco rígido", + "block.refinedstorage2.machine_casing": "Revestimento de máquina", + "block.refinedstorage2.grid": "Grade", + "block.refinedstorage2.crafting_grid": "Grade de Criação", + "block.refinedstorage2.controller": "Controlador", + "block.refinedstorage2.controller.rei_fully_charged": "Controlador com carga completa", + "block.refinedstorage2.creative_controller": "Controlador Criativo", + "block.refinedstorage2.1k_storage_block": "Bloco de armazenamento 1k", + "block.refinedstorage2.4k_storage_block": "Bloco de armazenamento 4K", + "block.refinedstorage2.16k_storage_block": "Bloco de armazenamento 16K", + "block.refinedstorage2.64k_storage_block": "Bloco de armazenamento 64K", + "block.refinedstorage2.creative_storage_block": "Bloco de armazenamento Criativo", + "block.refinedstorage2.64b_fluid_storage_block": "Bloco de Armazenamento de Fluido 64B", + "block.refinedstorage2.256b_fluid_storage_block": "Bloco de Armazenamento de Fluido 256B", + "block.refinedstorage2.1024b_fluid_storage_block": "Bloco de Armazenamento de Fluido 1024B", + "block.refinedstorage2.4096b_fluid_storage_block": "Bloco de armazenamento de fluido 4096B", + "block.refinedstorage2.creative_fluid_storage_block": "Bloco de armazenamento de fluido Criativo", + "block.refinedstorage2.importer": "Importador", + "block.refinedstorage2.exporter": "Exportador", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "Armazenamento Externo", + "block.refinedstorage2.detector": "Detector", + "block.refinedstorage2.constructor": "Construtor", + "block.refinedstorage2.destructor": "Destrutor", + "block.refinedstorage2.wireless_transmitter": "Transmissor sem fio", + "block.refinedstorage2.storage_monitor": "Monitor de Armazenamento", + "block.refinedstorage2.network_receiver": "Receptor da Rede", + "block.refinedstorage2.network_transmitter": "Transmissor de Rede", + "block.refinedstorage2.portable_grid": "Grade Portátil", + "block.refinedstorage2.creative_portable_grid": "Grade Portátil Criativa", + "gui.refinedstorage2.controller.redstone_mode_help": "Quando este dispositivo estiver inativo, a rede de armazenamento não poderá usar este dispositivo como fonte de energia.", + "gui.refinedstorage2.disk_drive.disks": "Discos", + "gui.refinedstorage2.storage.redstone_mode_help": "Quando este dispositivo estiver inativo, o armazenamento contido não estará mais acessível a partir da rede de armazenamento.", + "gui.refinedstorage2.storage.filter_help": "Os recursos que podem ou não ser permitidos neste armazenamento, dependendo se o dispositivo está no modo de lista de permissões ou lista de bloqueio.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Sem filtros configurados, nenhum recurso será aceito neste armazenamento.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Só permite recursos neste armazenamento que está configurado nos filtros.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage2.grid.sorting.type": "Sorting type", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Size", + "gui.refinedstorage2.grid.size.stretch": "Stretch", + "gui.refinedstorage2.grid.size.small": "Small", + "gui.refinedstorage2.grid.size.medium": "Medium", + "gui.refinedstorage2.grid.size.large": "Large", + "gui.refinedstorage2.grid.size.extra_large": "Extra large", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Resource type", + "gui.refinedstorage2.grid.resource_type.all": "All", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/ru_ru.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/ru_ru.json new file mode 100644 index 000000000..0e58472c8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/ru_ru.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Cable", + "block.refinedstorage2.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", + "block.refinedstorage2.disk_drive": "Disk Drive", + "block.refinedstorage2.machine_casing": "Machine Casing", + "block.refinedstorage2.grid": "Grid", + "block.refinedstorage2.crafting_grid": "Crafting Grid", + "block.refinedstorage2.controller": "Controller", + "block.refinedstorage2.controller.rei_fully_charged": "Fully charged Controller", + "block.refinedstorage2.creative_controller": "Creative Controller", + "block.refinedstorage2.1k_storage_block": "1K Storage Block", + "block.refinedstorage2.4k_storage_block": "4K Storage Block", + "block.refinedstorage2.16k_storage_block": "16K Storage Block", + "block.refinedstorage2.64k_storage_block": "64K Storage Block", + "block.refinedstorage2.creative_storage_block": "Creative Storage Block", + "block.refinedstorage2.64b_fluid_storage_block": "64B Fluid Storage Block", + "block.refinedstorage2.256b_fluid_storage_block": "256B Fluid Storage Block", + "block.refinedstorage2.1024b_fluid_storage_block": "1024B Fluid Storage Block", + "block.refinedstorage2.4096b_fluid_storage_block": "4096B Fluid Storage Block", + "block.refinedstorage2.creative_fluid_storage_block": "Creative Fluid Storage Block", + "block.refinedstorage2.importer": "Importer", + "block.refinedstorage2.exporter": "Exporter", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "External Storage", + "block.refinedstorage2.detector": "Detector", + "block.refinedstorage2.constructor": "Constructor", + "block.refinedstorage2.destructor": "Destructor", + "block.refinedstorage2.wireless_transmitter": "Wireless Transmitter", + "block.refinedstorage2.storage_monitor": "Storage Monitor", + "block.refinedstorage2.network_receiver": "Network Receiver", + "block.refinedstorage2.network_transmitter": "Network Transmitter", + "block.refinedstorage2.portable_grid": "Portable Grid", + "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", + "gui.refinedstorage2.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", + "gui.refinedstorage2.disk_drive.disks": "Disks", + "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage2.grid.sorting.type": "Sorting type", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Size", + "gui.refinedstorage2.grid.size.stretch": "Stretch", + "gui.refinedstorage2.grid.size.small": "Small", + "gui.refinedstorage2.grid.size.medium": "Medium", + "gui.refinedstorage2.grid.size.large": "Large", + "gui.refinedstorage2.grid.size.extra_large": "Extra large", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Resource type", + "gui.refinedstorage2.grid.resource_type.all": "All", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/zh_cn.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/zh_cn.json index d226f265b..8bb3939ce 100644 --- a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/zh_cn.json +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/zh_cn.json @@ -30,6 +30,8 @@ "block.refinedstorage2.storage_monitor": "存储监控器", "block.refinedstorage2.network_receiver": "网络接收器", "block.refinedstorage2.network_transmitter": "网络变送器", + "block.refinedstorage2.portable_grid": "Portable Grid", + "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", "gui.refinedstorage2.controller.redstone_mode_help": "当此设备处于非活动状态时,存储网络将无法将此设备用作能源来源。", "gui.refinedstorage2.disk_drive.disks": "磁盘", "gui.refinedstorage2.storage.redstone_mode_help": "当此设备处于非活动状态时,存储在其中的存储空间将无法从存储网络内访问。", @@ -127,6 +129,9 @@ "gui.refinedstorage2.access_mode.insert.help": "存储网络只能插入此存储。包含的资源仍然可在终端中看到。", "gui.refinedstorage2.access_mode.extract": "仅提取", "gui.refinedstorage2.access_mode.extract.help": "存储网络只能从此存储中提取。", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", "gui.refinedstorage2.upgrade_slot": "空升级槽", "gui.refinedstorage2.filter_slot.empty_filter": "空过滤器", "gui.refinedstorage2.filter_slot.left_click_for": "左键点击", @@ -304,7 +309,6 @@ "text.autoconfig.refinedstorage2.option.externalStorage": "外部存储", "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "能源", "text.autoconfig.refinedstorage2.option.wirelessGrid": "无线网格", - "text.autoconfig.refinedstorage2.option.wirelessGrid.useEnergy": "使用能源", "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "能源容量", "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "打开能源", "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "插入能源", @@ -316,6 +320,13 @@ "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "能源", "text.autoconfig.refinedstorage2.option.networkReceiver": "网络接收器", "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "能源", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", "advancements.refinedstorage2.root.description": "在网络中使用一个或多个控制器为您的网络提供能源", "advancements.refinedstorage2.connecting": "连接中", "advancements.refinedstorage2.connecting.description": "使用电缆将设备连接在一起,或将设备放置在一起", @@ -350,5 +361,7 @@ "advancements.refinedstorage2.better_than_a_barrel": "比桶更好", "advancements.refinedstorage2.better_than_a_barrel.description": "制作存储监视器以查看、插入或提取存储网络中的资源", "advancements.refinedstorage2.no_cables_required": "无需电缆", - "advancements.refinedstorage2.no_cables_required.description": "通过使用网络发射器、网络接收器和网络卡,添加额外组件到您的网络而无需使用电缆" + "advancements.refinedstorage2.no_cables_required.description": "通过使用网络发射器、网络接收器和网络卡,添加额外组件到您的网络而无需使用电缆", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" } diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/zh_tw.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/zh_tw.json new file mode 100644 index 000000000..0e58472c8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/zh_tw.json @@ -0,0 +1,367 @@ +{ + "itemGroup.refinedstorage2.general": "Refined Storage 2", + "block.refinedstorage2.cable": "Cable", + "block.refinedstorage2.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", + "block.refinedstorage2.disk_drive": "Disk Drive", + "block.refinedstorage2.machine_casing": "Machine Casing", + "block.refinedstorage2.grid": "Grid", + "block.refinedstorage2.crafting_grid": "Crafting Grid", + "block.refinedstorage2.controller": "Controller", + "block.refinedstorage2.controller.rei_fully_charged": "Fully charged Controller", + "block.refinedstorage2.creative_controller": "Creative Controller", + "block.refinedstorage2.1k_storage_block": "1K Storage Block", + "block.refinedstorage2.4k_storage_block": "4K Storage Block", + "block.refinedstorage2.16k_storage_block": "16K Storage Block", + "block.refinedstorage2.64k_storage_block": "64K Storage Block", + "block.refinedstorage2.creative_storage_block": "Creative Storage Block", + "block.refinedstorage2.64b_fluid_storage_block": "64B Fluid Storage Block", + "block.refinedstorage2.256b_fluid_storage_block": "256B Fluid Storage Block", + "block.refinedstorage2.1024b_fluid_storage_block": "1024B Fluid Storage Block", + "block.refinedstorage2.4096b_fluid_storage_block": "4096B Fluid Storage Block", + "block.refinedstorage2.creative_fluid_storage_block": "Creative Fluid Storage Block", + "block.refinedstorage2.importer": "Importer", + "block.refinedstorage2.exporter": "Exporter", + "block.refinedstorage2.interface": "Interface", + "block.refinedstorage2.external_storage": "External Storage", + "block.refinedstorage2.detector": "Detector", + "block.refinedstorage2.constructor": "Constructor", + "block.refinedstorage2.destructor": "Destructor", + "block.refinedstorage2.wireless_transmitter": "Wireless Transmitter", + "block.refinedstorage2.storage_monitor": "Storage Monitor", + "block.refinedstorage2.network_receiver": "Network Receiver", + "block.refinedstorage2.network_transmitter": "Network Transmitter", + "block.refinedstorage2.portable_grid": "Portable Grid", + "block.refinedstorage2.creative_portable_grid": "Creative Portable Grid", + "gui.refinedstorage2.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", + "gui.refinedstorage2.disk_drive.disks": "Disks", + "gui.refinedstorage2.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage2.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage2.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage2.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage2.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage2.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage2.grid.sorting.type": "Sorting type", + "gui.refinedstorage2.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage2.grid.sorting.type.name": "Name", + "gui.refinedstorage2.grid.sorting.type.id": "ID", + "gui.refinedstorage2.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage2.grid.size": "Size", + "gui.refinedstorage2.grid.size.stretch": "Stretch", + "gui.refinedstorage2.grid.size.small": "Small", + "gui.refinedstorage2.grid.size.medium": "Medium", + "gui.refinedstorage2.grid.size.large": "Large", + "gui.refinedstorage2.grid.size.extra_large": "Extra large", + "gui.refinedstorage2.grid.auto_selected": "Auto-selected", + "gui.refinedstorage2.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage2.grid.synchronizer": "Synchronization mode", + "gui.refinedstorage2.grid.synchronizer.off": "Off", + "gui.refinedstorage2.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage2.grid.synchronizer.jei": "JEI", + "gui.refinedstorage2.grid.synchronizer.jei.help": "Sync the search box text to the JEI filter.", + "gui.refinedstorage2.grid.synchronizer.jei.two_way": "JEI two-way", + "gui.refinedstorage2.grid.synchronizer.jei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.synchronizer.rei": "REI", + "gui.refinedstorage2.grid.synchronizer.rei.help": "Sync the search box text to the REI filter.", + "gui.refinedstorage2.grid.synchronizer.rei.two_way": "REI two-way", + "gui.refinedstorage2.grid.synchronizer.rei.two_way.help": "Sync the search box text to the JEI filter, and the JEI filter to the search box text.", + "gui.refinedstorage2.grid.resource_type": "Resource type", + "gui.refinedstorage2.grid.resource_type.all": "All", + "gui.refinedstorage2.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage2.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage2.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage2.detector.mode": "Mode", + "gui.refinedstorage2.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage2.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage2.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage2.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage2.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage2.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage2.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage2.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage2.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage2.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage2.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage2.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage2.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage2.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage2.redstone_mode": "Redstone mode", + "gui.refinedstorage2.redstone_mode.ignore": "Ignore", + "gui.refinedstorage2.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage2.redstone_mode.high": "High", + "gui.refinedstorage2.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage2.redstone_mode.low": "Low", + "gui.refinedstorage2.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage2.scheduling_mode": "Scheduling mode", + "gui.refinedstorage2.scheduling_mode.default": "Default", + "gui.refinedstorage2.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage2.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage2.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage2.scheduling_mode.random": "Random", + "gui.refinedstorage2.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage2.priority": "Priority", + "gui.refinedstorage2.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage2.amount": "Amount", + "gui.refinedstorage2.amount.reset": "Reset", + "gui.refinedstorage2.amount.set": "Set", + "gui.refinedstorage2.filter_mode": "Filter mode", + "gui.refinedstorage2.filter_mode.allow": "Allowlist", + "gui.refinedstorage2.filter_mode.block": "Blocklist", + "gui.refinedstorage2.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage2.fuzzy_mode.on": "On", + "gui.refinedstorage2.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage2.fuzzy_mode.on.generic_help": "Match the filter exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage2.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage2.fuzzy_mode.off": "Off", + "gui.refinedstorage2.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", + "gui.refinedstorage2.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage2.access_mode": "Access mode", + "gui.refinedstorage2.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage2.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage2.access_mode.insert": "Insert only", + "gui.refinedstorage2.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage2.access_mode.extract": "Extract only", + "gui.refinedstorage2.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage2.void_excess": "Void excess resources", + "gui.refinedstorage2.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage2.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage2.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage2.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage2.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage2.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage2.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage2.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage2.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage2.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage2.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage2.network_transmitter.status.receiver_unreachable": "Unreachable", + "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage2.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage2.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage2.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage2.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage2.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage2.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage2.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage2.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage2.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage2.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage2.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage2.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage2.processor_binding": "Processor Binding", + "item.refinedstorage2.silicon": "Silicon", + "item.refinedstorage2.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage2.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage2.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage2.basic_processor": "Basic Processor", + "item.refinedstorage2.improved_processor": "Improved Processor", + "item.refinedstorage2.advanced_processor": "Advanced Processor", + "item.refinedstorage2.1k_storage_part": "1K Storage Part", + "item.refinedstorage2.4k_storage_part": "4K Storage Part", + "item.refinedstorage2.16k_storage_part": "16K Storage Part", + "item.refinedstorage2.64k_storage_part": "64K Storage Part", + "item.refinedstorage2.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage2.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage2.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage2.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage2.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage2.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage2.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage2.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage2.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage2.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage2.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage2.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage2.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage2.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage2.storage_housing": "Storage Housing", + "item.refinedstorage2.construction_core": "Construction Core", + "item.refinedstorage2.destruction_core": "Destruction Core", + "item.refinedstorage2.wrench": "Wrench", + "item.refinedstorage2.wrench.helper": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage2.upgrade": "Upgrade", + "item.refinedstorage2.speed_upgrade": "Speed Upgrade", + "item.refinedstorage2.stack_upgrade": "Stack Upgrade", + "item.refinedstorage2.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage2.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage2.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage2.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage2.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage2.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage2.range_upgrade": "Range Upgrade", + "item.refinedstorage2.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage2.wireless_grid": "Wireless Grid", + "item.refinedstorage2.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage2.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage2.network_item.unbound": "Unbound.", + "item.refinedstorage2.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage2.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage2.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage2.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage2.configuration_card": "Configuration Card", + "item.refinedstorage2.configuration_card.empty": "Empty.", + "item.refinedstorage2.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage2.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage2.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage2.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage2.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage2.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage2.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage2.network_card": "Network Card", + "item.refinedstorage2.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage2.network_card.unbound": "Unbound.", + "item.refinedstorage2.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage2.network_card.bound": "Bound to %d, %d, %d in %s.", + "misc.refinedstorage2.stored": "Stored: %s", + "misc.refinedstorage2.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage2.total": "%d total", + "misc.refinedstorage2.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage2.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage2.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage2.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage2.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage2.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage2.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage2.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage2.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage2.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage2.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage2.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage2.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage2.resource_type.item": "Item", + "misc.refinedstorage2.resource_type.fluid": "Fluid", + "misc.refinedstorage2.press_shift_for_help": "Press SHIFT for help", + "key.refinedstorage2.focus_search_bar": "Focus search bar", + "key.refinedstorage2.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage2.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage2.open_wireless_grid": "Open Wireless Grid", + "refinedstorage2.subtitle.wrench": "Wrench used", + "category.refinedstorage2.key_bindings": "Refined Storage 2", + "curios.identifier.refinedstorage2": "Refined Storage 2", + "trinkets.slot.refinedstorage2.wireless": "Refined Storage 2", + "text.autoconfig.refinedstorage2.title": "Refined Storage 2", + "text.autoconfig.refinedstorage2.option.grid": "Grid", + "text.autoconfig.refinedstorage2.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage2.option.grid.maxRowsStretch": "Maximum amount of rows when stretched", + "text.autoconfig.refinedstorage2.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage2.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage2.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage2.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.grid.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage2.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage2.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage2.option.grid.resourceTypeId": "Resource type", + "text.autoconfig.refinedstorage2.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage2.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage2.option.grid.size": "Size", + "text.autoconfig.refinedstorage2.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage2.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage2.option.controller": "Controller", + "text.autoconfig.refinedstorage2.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.cable": "Cable", + "text.autoconfig.refinedstorage2.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage2.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage2.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage2.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage2.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage2.option.importer": "Importer", + "text.autoconfig.refinedstorage2.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.exporter": "Exporter", + "text.autoconfig.refinedstorage2.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.detector": "Detector", + "text.autoconfig.refinedstorage2.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.constructor": "Constructor", + "text.autoconfig.refinedstorage2.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.destructor": "Destructor", + "text.autoconfig.refinedstorage2.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage2.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage2.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage2.option.iface": "Interface", + "text.autoconfig.refinedstorage2.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage2.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage2.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage2.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage2.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage2.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage2.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage2.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage2.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage2.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "advancements.refinedstorage2.root.description": "Use one or multiple Controllers in a network to provide your network with energy", + "advancements.refinedstorage2.connecting": "Connecting", + "advancements.refinedstorage2.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage2.drives": "Drives", + "advancements.refinedstorage2.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage2.storing_items": "Storing items", + "advancements.refinedstorage2.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage2.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage2.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage2.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage2.storing_fluids": "Storing fluids", + "advancements.refinedstorage2.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage2.importing": "Importing", + "advancements.refinedstorage2.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage2.exporting": "Exporting", + "advancements.refinedstorage2.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage2.upgrading": "Upgrading", + "advancements.refinedstorage2.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage2.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage2.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage2.storing_externally": "Storing externally", + "advancements.refinedstorage2.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage2.detecting": "Detecting", + "advancements.refinedstorage2.detecting.description": "Use redstone to check resources stored in the network", + "advancements.refinedstorage2.construction": "Construction", + "advancements.refinedstorage2.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage2.destruction": "Destruction", + "advancements.refinedstorage2.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage2.wireless": "Wireless", + "advancements.refinedstorage2.wireless.description": "Access your resources wirelessly with a Wireless Grid.", + "advancements.refinedstorage2.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage2.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage2.no_cables_required": "No cables required", + "advancements.refinedstorage2.no_cables_required.description": "Add extra components to your network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage2.portable_storage": "Portable storage", + "advancements.refinedstorage2.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network" +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/block/cutout.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/block/cutout.json new file mode 100644 index 000000000..f6cf9f51a --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/block/cutout.json @@ -0,0 +1,82 @@ +{ + "render_type": "cutout", + "parent": "block/cube", + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#down", + "cullface": "down" + }, + "up": { + "texture": "#up", + "cullface": "up" + }, + "north": { + "texture": "#north", + "cullface": "north" + }, + "south": { + "texture": "#south", + "cullface": "south" + }, + "west": { + "texture": "#west", + "cullface": "west" + }, + "east": { + "texture": "#east", + "cullface": "east" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "up": { + "texture": "#cutout_up", + "cullface": "up" + }, + "down": { + "texture": "#cutout_down", + "cullface": "down" + }, + "north": { + "texture": "#cutout_north", + "cullface": "north" + }, + "south": { + "texture": "#cutout_south", + "cullface": "south" + }, + "west": { + "texture": "#cutout_west", + "cullface": "west" + }, + "east": { + "texture": "#cutout_east", + "cullface": "east" + } + } + } + ] +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/block/emissive_cutout.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/block/emissive_cutout.json new file mode 100644 index 000000000..418944f69 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/block/emissive_cutout.json @@ -0,0 +1,106 @@ +{ + "render_type": "cutout", + "parent": "block/cube", + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#down", + "cullface": "down" + }, + "up": { + "texture": "#up", + "cullface": "up" + }, + "north": { + "texture": "#north", + "cullface": "north" + }, + "south": { + "texture": "#south", + "cullface": "south" + }, + "west": { + "texture": "#west", + "cullface": "west" + }, + "east": { + "texture": "#east", + "cullface": "east" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "up": { + "texture": "#cutout_up", + "cullface": "up", + "neoforge_data": { + "block_light": 15, + "sky_light": 15 + } + }, + "down": { + "texture": "#cutout_down", + "cullface": "down", + "neoforge_data": { + "block_light": 15, + "sky_light": 15 + } + }, + "north": { + "texture": "#cutout_north", + "cullface": "north", + "neoforge_data": { + "block_light": 15, + "sky_light": 15 + } + }, + "south": { + "texture": "#cutout_south", + "cullface": "south", + "neoforge_data": { + "block_light": 15, + "sky_light": 15 + } + }, + "west": { + "texture": "#cutout_west", + "cullface": "west", + "neoforge_data": { + "block_light": 15, + "sky_light": 15 + } + }, + "east": { + "texture": "#cutout_east", + "cullface": "east", + "neoforge_data": { + "block_light": 15, + "sky_light": 15 + } + } + } + } + ] +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/fallback_security_card.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/fallback_security_card.json new file mode 100755 index 000000000..2ec96d3b9 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/fallback_security_card.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage2:item/security_card/fallback" + } +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/security_card.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/security_card.json new file mode 100755 index 000000000..9bf6e03d2 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/security_card.json @@ -0,0 +1,17 @@ +{ + "parent": "item/generated", + "overrides": [ + { + "predicate": { + "active": 0 + }, + "model": "refinedstorage2:item/security_card/inactive" + }, + { + "predicate": { + "active": 1 + }, + "model": "refinedstorage2:item/security_card/active" + } + ] +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/security_card/active.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/security_card/active.json new file mode 100644 index 000000000..c007d44dc --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/security_card/active.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage2:item/security_card/active" + } +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/security_card/inactive.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/security_card/inactive.json new file mode 100644 index 000000000..3753723ad --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/item/security_card/inactive.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage2:item/security_card/inactive" + } +} diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/back.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/back.png new file mode 100644 index 000000000..1b87bf05b Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/back.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/black.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/black.png new file mode 100644 index 000000000..7ad301ab6 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/black.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/blue.png new file mode 100644 index 000000000..bbcc81641 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/brown.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/brown.png new file mode 100644 index 000000000..bfb5241ba Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/brown.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/cyan.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/cyan.png new file mode 100644 index 000000000..95925f4d2 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/cyan.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/gray.png new file mode 100644 index 000000000..a45937171 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/green.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/green.png new file mode 100644 index 000000000..a864d757a Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/green.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/inactive.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/inactive.png new file mode 100644 index 000000000..bb33dbaa7 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/inactive.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/light_blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/light_blue.png new file mode 100644 index 000000000..9327df7da Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/light_blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/light_gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/light_gray.png new file mode 100644 index 000000000..66d439cb2 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/light_gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/lime.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/lime.png new file mode 100644 index 000000000..95b7f6892 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/lime.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/magenta.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/magenta.png new file mode 100644 index 000000000..a6de6b077 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/magenta.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/orange.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/orange.png new file mode 100644 index 000000000..749f7be5e Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/orange.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/pink.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/pink.png new file mode 100644 index 000000000..59b977ef8 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/pink.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/purple.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/purple.png new file mode 100644 index 000000000..41f2a7d49 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/purple.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/red.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/red.png new file mode 100644 index 000000000..b244f44e0 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/red.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/white.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/white.png new file mode 100644 index 000000000..7e600d051 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/white.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/yellow.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/yellow.png new file mode 100644 index 000000000..631071c7d Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/yellow.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/black.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/black.png new file mode 100644 index 000000000..4d55ab4fd Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/black.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/blue.png new file mode 100644 index 000000000..3be1b6ab9 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/brown.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/brown.png new file mode 100644 index 000000000..9d2fc4560 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/brown.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/cyan.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/cyan.png new file mode 100644 index 000000000..bd17fda7e Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/cyan.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/gray.png new file mode 100644 index 000000000..6c4dacd08 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/green.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/green.png new file mode 100644 index 000000000..565c2f7c2 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/green.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/inactive.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/inactive.png new file mode 100644 index 000000000..9538a69d3 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/inactive.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/light_blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/light_blue.png new file mode 100644 index 000000000..f69f2c2e0 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/light_blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/light_gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/light_gray.png new file mode 100644 index 000000000..3238c7e9f Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/light_gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/lime.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/lime.png new file mode 100644 index 000000000..caaa6c2ab Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/lime.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/magenta.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/magenta.png new file mode 100644 index 000000000..9d32b2a13 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/magenta.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/orange.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/orange.png new file mode 100644 index 000000000..f3775ec33 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/orange.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/pink.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/pink.png new file mode 100644 index 000000000..789bf613b Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/pink.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/purple.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/purple.png new file mode 100644 index 000000000..6ceb953fd Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/purple.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/red.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/red.png new file mode 100644 index 000000000..4ed761795 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/red.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/white.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/white.png new file mode 100644 index 000000000..653b30626 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/white.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/yellow.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/yellow.png new file mode 100644 index 000000000..b9e5bd587 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/yellow.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/black.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/black.png new file mode 100644 index 000000000..c23465029 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/black.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/blue.png new file mode 100644 index 000000000..72d1f0392 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/brown.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/brown.png new file mode 100644 index 000000000..d9c27e393 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/brown.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/cyan.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/cyan.png new file mode 100644 index 000000000..520dc0944 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/cyan.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/gray.png new file mode 100644 index 000000000..bee22fd56 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/green.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/green.png new file mode 100644 index 000000000..6e5e56050 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/green.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/inactive.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/inactive.png new file mode 100644 index 000000000..e8efb48af Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/inactive.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/light_blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/light_blue.png new file mode 100644 index 000000000..2716a6245 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/light_blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/light_gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/light_gray.png new file mode 100644 index 000000000..18906df19 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/light_gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/lime.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/lime.png new file mode 100644 index 000000000..a667e1336 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/lime.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/magenta.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/magenta.png new file mode 100644 index 000000000..46a68819c Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/magenta.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/orange.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/orange.png new file mode 100644 index 000000000..55b86c156 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/orange.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/pink.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/pink.png new file mode 100644 index 000000000..6a22034e8 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/pink.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/purple.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/purple.png new file mode 100644 index 000000000..9510daaf3 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/purple.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/red.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/red.png new file mode 100644 index 000000000..e8856b0e7 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/red.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/white.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/white.png new file mode 100644 index 000000000..ed060d2c1 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/white.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/yellow.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/yellow.png new file mode 100644 index 000000000..442bca726 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/yellow.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/black.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/black.png new file mode 100644 index 000000000..2b2c70768 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/black.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/blue.png new file mode 100644 index 000000000..98c4611b3 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/brown.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/brown.png new file mode 100644 index 000000000..20154533b Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/brown.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/cyan.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/cyan.png new file mode 100644 index 000000000..f660428b6 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/cyan.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/gray.png new file mode 100644 index 000000000..579398934 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/green.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/green.png new file mode 100644 index 000000000..9582dac31 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/green.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/inactive.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/inactive.png new file mode 100644 index 000000000..8648202ac Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/inactive.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/light_blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/light_blue.png new file mode 100644 index 000000000..88e6db32c Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/light_blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/light_gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/light_gray.png new file mode 100644 index 000000000..f574a924e Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/light_gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/lime.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/lime.png new file mode 100644 index 000000000..f1fb7ea4b Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/lime.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/magenta.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/magenta.png new file mode 100644 index 000000000..fe70ad63c Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/magenta.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/orange.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/orange.png new file mode 100644 index 000000000..c187b5b00 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/orange.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/pink.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/pink.png new file mode 100644 index 000000000..9dc028eba Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/pink.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/purple.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/purple.png new file mode 100644 index 000000000..28c996269 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/purple.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/red.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/red.png new file mode 100644 index 000000000..754efbd8a Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/red.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/white.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/white.png new file mode 100644 index 000000000..7929cbddc Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/white.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/yellow.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/yellow.png new file mode 100644 index 000000000..e1d4a4539 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/yellow.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/black.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/black.png new file mode 100644 index 000000000..8289cb44c Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/black.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/blue.png new file mode 100644 index 000000000..d932cea43 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/brown.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/brown.png new file mode 100644 index 000000000..b7a8d1560 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/brown.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/cyan.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/cyan.png new file mode 100644 index 000000000..ddee835b7 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/cyan.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/gray.png new file mode 100644 index 000000000..9acbaaf81 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/green.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/green.png new file mode 100644 index 000000000..1931e49f4 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/green.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/inactive.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/inactive.png new file mode 100644 index 000000000..a3ae9cca5 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/inactive.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/light_blue.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/light_blue.png new file mode 100644 index 000000000..c2e32a0a5 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/light_blue.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/light_gray.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/light_gray.png new file mode 100644 index 000000000..7604f549e Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/light_gray.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/lime.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/lime.png new file mode 100644 index 000000000..6b34177e7 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/lime.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/magenta.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/magenta.png new file mode 100644 index 000000000..6f2bbb319 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/magenta.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/orange.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/orange.png new file mode 100644 index 000000000..9a59570d1 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/orange.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/pink.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/pink.png new file mode 100644 index 000000000..b5d2dbde8 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/pink.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/purple.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/purple.png new file mode 100644 index 000000000..b5c6b313a Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/purple.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/red.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/red.png new file mode 100644 index 000000000..541da8ded Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/red.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/white.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/white.png new file mode 100644 index 000000000..4d070a9bf Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/white.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/yellow.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/yellow.png new file mode 100644 index 000000000..76db07352 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/yellow.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/front.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/front.png new file mode 100644 index 000000000..019b77189 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/front.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/left.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/left.png new file mode 100644 index 000000000..6cc471736 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/left.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/right.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/right.png new file mode 100644 index 000000000..ec8e1f3be Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/right.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/top.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/top.png new file mode 100644 index 000000000..e3f1124a1 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/top.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/gui/security_card.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/gui/security_card.png new file mode 100644 index 000000000..a6e5b98c4 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/gui/security_card.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/gui/security_manager.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/gui/security_manager.png new file mode 100644 index 000000000..67eb6b970 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/gui/security_manager.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/item/security_card/active.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/item/security_card/active.png new file mode 100644 index 000000000..242d78634 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/item/security_card/active.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/item/security_card/fallback.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/item/security_card/fallback.png new file mode 100644 index 000000000..af70c7143 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/item/security_card/fallback.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/item/security_card/inactive.png b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/item/security_card/inactive.png new file mode 100644 index 000000000..bc3f9b102 Binary files /dev/null and b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/item/security_card/inactive.png differ diff --git a/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/advancements/root.json b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/advancements/root.json index 9241b0fa0..3a930f8ff 100644 --- a/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/advancements/root.json +++ b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/advancements/root.json @@ -4,7 +4,7 @@ "item": "refinedstorage2:creative_controller" }, "title": { - "translate": "itemGroup.refinedstorage2.general" + "translate": "mod.refinedstorage2" }, "description": { "translate": "advancements.refinedstorage2.root.description" diff --git a/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/advancements/security.json b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/advancements/security.json new file mode 100644 index 000000000..c8bc62011 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/advancements/security.json @@ -0,0 +1,32 @@ +{ + "display": { + "icon": { + "item": "refinedstorage2:security_manager" + }, + "title": { + "translate": "advancements.refinedstorage2.security" + }, + "description": { + "translate": "advancements.refinedstorage2.security.description" + } + }, + "parent": "refinedstorage2:root", + "criteria": { + "security_in_inventory": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "refinedstorage2:security_managers" + }, + { + "items": [ + "refinedstorage2:security_card", + "refinedstorage2:fallback_security_card" + ] + } + ] + } + } + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/fallback_security_card.json b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/fallback_security_card.json new file mode 100644 index 000000000..0186f81b7 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/fallback_security_card.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "refinedstorage2:security_card" + }, + { + "item": "minecraft:paper" + } + ], + "result": { + "item": "refinedstorage2:fallback_security_card" + } +} diff --git a/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/security_card.json b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/security_card.json new file mode 100644 index 000000000..073ce7ff8 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/security_card.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "EEE", + "CAC", + "EEE" + ], + "key": { + "E": { + "item": "refinedstorage2:quartz_enriched_iron" + }, + "C": { + "item": "refinedstorage2:network_card" + }, + "A": { + "item": "refinedstorage2:advanced_processor" + } + }, + "result": { + "item": "refinedstorage2:security_card" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/security_manager.json b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/security_manager.json new file mode 100644 index 000000000..73b19056c --- /dev/null +++ b/refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/security_manager.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "ECE", + "SMS", + "EFE" + ], + "key": { + "E": { + "item": "refinedstorage2:quartz_enriched_iron" + }, + "C": { + "item": "minecraft:chest" + }, + "S": { + "item": "refinedstorage2:security_card" + }, + "F": { + "item": "refinedstorage2:fallback_security_card" + }, + "M": { + "item": "refinedstorage2:machine_casing" + } + }, + "result": { + "item": "refinedstorage2:security_manager" + } +} \ No newline at end of file diff --git a/refinedstorage2-platform-common/src/test/java/com/refinedmods/refinedstorage2/platform/common/PlatformTestFixtures.java b/refinedstorage2-platform-common/src/test/java/com/refinedmods/refinedstorage2/platform/common/PlatformTestFixtures.java index 84b25d394..5c12ddd44 100644 --- a/refinedstorage2-platform-common/src/test/java/com/refinedmods/refinedstorage2/platform/common/PlatformTestFixtures.java +++ b/refinedstorage2-platform-common/src/test/java/com/refinedmods/refinedstorage2/platform/common/PlatformTestFixtures.java @@ -8,10 +8,11 @@ import net.minecraft.resources.ResourceLocation; public final class PlatformTestFixtures { - public static final PlatformRegistry STORAGE_TYPE_REGISTRY = new PlatformRegistryImpl<>( - new ResourceLocation("item"), - StorageTypes.ITEM - ); + public static final PlatformRegistry STORAGE_TYPE_REGISTRY = new PlatformRegistryImpl<>(); + + static { + STORAGE_TYPE_REGISTRY.register(new ResourceLocation("item"), StorageTypes.ITEM); + } private PlatformTestFixtures() { } diff --git a/refinedstorage2-platform-common/src/test/java/com/refinedmods/refinedstorage2/platform/common/support/registry/PlatformRegistryImplTest.java b/refinedstorage2-platform-common/src/test/java/com/refinedmods/refinedstorage2/platform/common/support/registry/PlatformRegistryImplTest.java index af72b8a35..fe2acd6c9 100644 --- a/refinedstorage2-platform-common/src/test/java/com/refinedmods/refinedstorage2/platform/common/support/registry/PlatformRegistryImplTest.java +++ b/refinedstorage2-platform-common/src/test/java/com/refinedmods/refinedstorage2/platform/common/support/registry/PlatformRegistryImplTest.java @@ -12,31 +12,24 @@ import static org.junit.jupiter.api.Assertions.assertThrows; class PlatformRegistryImplTest { - private static final ResourceLocation A = new ResourceLocation("minecraft:a"); - private static final ResourceLocation B = new ResourceLocation("minecraft:b"); - private static final ResourceLocation C = new ResourceLocation("minecraft:c"); + private static final ResourceLocation A = new ResourceLocation("a"); + private static final ResourceLocation B = new ResourceLocation("b"); + private static final ResourceLocation C = new ResourceLocation("c"); PlatformRegistry sut; @BeforeEach void setUp() { - sut = new PlatformRegistryImpl<>(A, 10); + sut = new PlatformRegistryImpl<>(); } @Test void testDefaults() { // Assert - assertThat(sut.getDefault()).isEqualTo(10); - assertThat(sut.getAll()).containsExactly(10); - assertThat(sut.get(A)).get().isEqualTo(10); - assertThat(sut.get(B)).isEmpty(); - assertThat(sut.getId(10)).get().isEqualTo(A); - assertThat(sut.getId(20)).isEmpty(); - assertThat(sut.next(10)).isEqualTo(10); + assertThat(sut.getAll()).isEmpty(); + assertThat(sut.get(A)).isEmpty(); + assertThat(sut.getId(10)).isEmpty(); assertThat(sut.nextOrNullIfLast(10)).isNull(); - assertThat(sut.next(20)).isEqualTo(10); - assertThat(sut.nextOrNullIfLast(20)).isEqualTo(10); - assertThat(sut.isEmpty()).isTrue(); } @Test @@ -46,25 +39,23 @@ void shouldNotBeAbleToModifyUnderlyingRegistryList() { // Act & assert assertThrows(UnsupportedOperationException.class, () -> list.add(1)); + assertThrows(UnsupportedOperationException.class, () -> list.remove(1)); } @Test void shouldRegisterAndRetrieve() { // Act + sut.register(A, 10); sut.register(B, 20); // Assert - assertThat(sut.getDefault()).isEqualTo(10); assertThat(sut.getAll()).containsExactly(10, 20); assertThat(sut.get(A)).get().isEqualTo(10); assertThat(sut.get(B)).get().isEqualTo(20); assertThat(sut.getId(10)).get().isEqualTo(A); assertThat(sut.getId(20)).get().isEqualTo(B); - assertThat(sut.next(10)).isEqualTo(20); assertThat(sut.nextOrNullIfLast(10)).isEqualTo(20); - assertThat(sut.next(20)).isEqualTo(10); assertThat(sut.nextOrNullIfLast(20)).isNull(); - assertThat(sut.isEmpty()).isFalse(); } @Test @@ -74,7 +65,7 @@ void shouldNotRegisterDuplicateId() { // Act & assert assertThrows(IllegalArgumentException.class, () -> sut.register(B, 20)); - assertThat(sut.getAll()).containsExactly(10, 20); + assertThat(sut.getAll()).containsExactly(20); } @Test @@ -84,7 +75,7 @@ void shouldNotRegisterDuplicateValue() { // Act & assert assertThrows(IllegalArgumentException.class, () -> sut.register(C, 20)); - assertThat(sut.getAll()).containsExactly(10, 20); + assertThat(sut.getAll()).containsExactly(20); } @Test @@ -96,19 +87,9 @@ void testInvalidRegistration() { assertThrows(NullPointerException.class, () -> sut.register(null, null)); } - @Test - @SuppressWarnings("ConstantConditions") - void testInvalidDefaults() { - // Act & assert - assertThrows(NullPointerException.class, () -> new PlatformRegistryImpl<>(null, 20)); - assertThrows(NullPointerException.class, () -> new PlatformRegistryImpl<>(B, null)); - assertThrows(NullPointerException.class, () -> new PlatformRegistryImpl<>(null, null)); - } - @Test @SuppressWarnings("ConstantConditions") void testInvalidNextValues() { - assertThrows(NullPointerException.class, () -> sut.next(null)); assertThrows(NullPointerException.class, () -> sut.nextOrNullIfLast(null)); } diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ClientModInitializerImpl.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ClientModInitializerImpl.java index 18eac2b73..7e8ead76a 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ClientModInitializerImpl.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ClientModInitializerImpl.java @@ -9,10 +9,12 @@ import com.refinedmods.refinedstorage2.platform.common.content.BlockColorMap; import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.Blocks; +import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; import com.refinedmods.refinedstorage2.platform.common.content.Items; import com.refinedmods.refinedstorage2.platform.common.content.KeyMappings; import com.refinedmods.refinedstorage2.platform.common.controller.ControllerModelPredicateProvider; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkCardItemPropertyFunction; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardItemPropertyFunction; import com.refinedmods.refinedstorage2.platform.common.storagemonitor.StorageMonitorBlockEntityRenderer; import com.refinedmods.refinedstorage2.platform.common.support.network.bounditem.NetworkBoundItemItemPropertyFunction; import com.refinedmods.refinedstorage2.platform.common.support.packet.PacketIds; @@ -27,6 +29,7 @@ import com.refinedmods.refinedstorage2.platform.fabric.packet.s2c.GridClearPacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.s2c.GridUpdatePacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.s2c.NetworkTransmitterStatusPacket; +import com.refinedmods.refinedstorage2.platform.fabric.packet.s2c.NoPermissionPacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.s2c.ResourceSlotUpdatePacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.s2c.StorageInfoResponsePacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.s2c.WirelessTransmitterRangePacket; @@ -73,7 +76,6 @@ public class ClientModInitializerImpl extends AbstractClientModInitializer implements ClientModInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(ClientModInitializerImpl.class); - private static final String KEY_BINDINGS_TRANSLATION_KEY = createTranslationKey("category", "key_bindings"); @Override public void onInitializeClient() { @@ -117,6 +119,7 @@ private void setRenderLayers() { setCutout(Blocks.INSTANCE.getNetworkTransmitter()); setCutout(Blocks.INSTANCE.getPortableGrid()); setCutout(Blocks.INSTANCE.getCreativePortableGrid()); + setCutout(Blocks.INSTANCE.getSecurityManager()); } private void setCutout(final BlockColorMap blockMap) { @@ -159,6 +162,12 @@ private void registerEmissiveModels() { Blocks.INSTANCE.getNetworkTransmitter().forEach( (color, id, block) -> registerEmissiveNetworkTransmitterModels(color, id) ); + Blocks.INSTANCE.getGrid().forEach( + (color, id, block) -> registerEmissiveGridModels(color, id) + ); + Blocks.INSTANCE.getSecurityManager().forEach( + (color, id, block) -> registerEmissiveSecurityManagerModels(color, id) + ); } private void registerEmissiveControllerModels(final DyeColor color) { @@ -268,6 +277,27 @@ private void registerEmissiveNetworkTransmitterModels(final DyeColor color, fina ); } + private void registerEmissiveSecurityManagerModels(final DyeColor color, final ResourceLocation id) { + // Block + EmissiveModelRegistry.INSTANCE.register( + createIdentifier("block/security_manager/" + color.getName()), + createIdentifier("block/security_manager/cutouts/back/" + color.getName()), + createIdentifier("block/security_manager/cutouts/front/" + color.getName()), + createIdentifier("block/security_manager/cutouts/left/" + color.getName()), + createIdentifier("block/security_manager/cutouts/right/" + color.getName()), + createIdentifier("block/security_manager/cutouts/top/" + color.getName()) + ); + // Item + EmissiveModelRegistry.INSTANCE.register( + id, + createIdentifier("block/security_manager/cutouts/back/" + color.getName()), + createIdentifier("block/security_manager/cutouts/front/" + color.getName()), + createIdentifier("block/security_manager/cutouts/left/" + color.getName()), + createIdentifier("block/security_manager/cutouts/right/" + color.getName()), + createIdentifier("block/security_manager/cutouts/top/" + color.getName()) + ); + } + private void registerPackets() { ClientPlayNetworking.registerGlobalReceiver(PacketIds.STORAGE_INFO_RESPONSE, new StorageInfoResponsePacket()); ClientPlayNetworking.registerGlobalReceiver(PacketIds.GRID_UPDATE, new GridUpdatePacket()); @@ -283,6 +313,7 @@ private void registerPackets() { PacketIds.NETWORK_TRANSMITTER_STATUS, new NetworkTransmitterStatusPacket() ); + ClientPlayNetworking.registerGlobalReceiver(PacketIds.NO_PERMISSION, new NoPermissionPacket()); } private void registerBlockEntityRenderers() { @@ -364,13 +395,13 @@ private void registerKeyBindings() { createTranslationKey("key", "focus_search_bar"), InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_TAB, - KEY_BINDINGS_TRANSLATION_KEY + ContentNames.MOD_TRANSLATION_KEY ))); KeyMappings.INSTANCE.setOpenWirelessGrid(KeyBindingHelper.registerKeyBinding(new KeyMapping( createTranslationKey("key", "open_wireless_grid"), InputConstants.Type.KEYSYM, InputConstants.UNKNOWN.getValue(), - KEY_BINDINGS_TRANSLATION_KEY + ContentNames.MOD_TRANSLATION_KEY ))); ClientTickEvents.END_CLIENT_TICK.register(client -> handleInputEvents()); } @@ -384,6 +415,7 @@ private void registerModelPredicates() { } private void registerGridSynchronizers() { + registerBaseGridSynchronizer(); final FabricLoader loader = FabricLoader.getInstance(); if (loader.isModLoaded("roughlyenoughitems")) { registerReiGridSynchronizers(); @@ -391,7 +423,7 @@ private void registerGridSynchronizers() { } private void registerReiGridSynchronizers() { - LOGGER.info("Enabling REI grid synchronizers"); + LOGGER.debug("Enabling REI grid synchronizers"); // This is so the ingredient converters are only registered once // see https://github.com/refinedmods/refinedstorage2/pull/302#discussion_r1070015672 RefinedStorageREIClientPlugin.registerIngredientConverters(); @@ -427,5 +459,10 @@ private void registerItemProperties() { NetworkCardItemPropertyFunction.NAME, new NetworkCardItemPropertyFunction() ); + ItemProperties.register( + Items.INSTANCE.getSecurityCard(), + SecurityCardItemPropertyFunction.NAME, + new SecurityCardItemPropertyFunction() + ); } } diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ConfigImpl.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ConfigImpl.java index a35756902..ce44228b7 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ConfigImpl.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ConfigImpl.java @@ -3,8 +3,8 @@ import com.refinedmods.refinedstorage2.api.grid.view.GridSortingDirection; import com.refinedmods.refinedstorage2.platform.common.content.DefaultEnergyUsage; import com.refinedmods.refinedstorage2.platform.common.grid.CraftingGridMatrixCloseBehavior; -import com.refinedmods.refinedstorage2.platform.common.grid.GridSize; import com.refinedmods.refinedstorage2.platform.common.grid.GridSortingTypes; +import com.refinedmods.refinedstorage2.platform.common.support.stretching.ScreenSize; import com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil; import java.util.Optional; @@ -17,6 +17,13 @@ @Config(name = IdentifierUtil.MOD_ID) public class ConfigImpl implements ConfigData, com.refinedmods.refinedstorage2.platform.common.Config { + private ScreenSize screenSize = ScreenSize.STRETCH; + + private boolean smoothScrolling = true; + + @ConfigEntry.BoundedDiscrete(min = 3L, max = 256) + private int maxRowsStretch = 256; + @ConfigEntry.Gui.CollapsibleObject private GridEntryImpl grid = new GridEntryImpl(); @@ -88,10 +95,44 @@ public class ConfigImpl implements ConfigData, com.refinedmods.refinedstorage2.p @ConfigEntry.Gui.CollapsibleObject private PortableGridEntryImpl portableGrid = new PortableGridEntryImpl(); + @ConfigEntry.Gui.CollapsibleObject + private SimpleEnergyUsageEntryImpl securityCard = new SimpleEnergyUsageEntryImpl(DefaultEnergyUsage.SECURITY_CARD); + + @ConfigEntry.Gui.CollapsibleObject + private SimpleEnergyUsageEntryImpl fallbackSecurityCard = new SimpleEnergyUsageEntryImpl( + DefaultEnergyUsage.FALLBACK_SECURITY_CARD + ); + + @ConfigEntry.Gui.CollapsibleObject + private SimpleEnergyUsageEntryImpl securityManager = new SimpleEnergyUsageEntryImpl( + DefaultEnergyUsage.SECURITY_MANAGER + ); + public static ConfigImpl get() { return AutoConfig.getConfigHolder(ConfigImpl.class).getConfig(); } + @Override + public ScreenSize getScreenSize() { + return screenSize; + } + + @Override + public void setScreenSize(final ScreenSize screenSize) { + this.screenSize = screenSize; + AutoConfig.getConfigHolder(ConfigImpl.class).save(); + } + + @Override + public boolean isSmoothScrolling() { + return smoothScrolling; + } + + @Override + public int getMaxRowsStretch() { + return maxRowsStretch; + } + @Override public GridEntry getGrid() { return grid; @@ -197,22 +238,32 @@ public PortableGridEntry getPortableGrid() { return portableGrid; } + @Override + public SimpleEnergyUsageEntry getSecurityCard() { + return securityCard; + } + + @Override + public SimpleEnergyUsageEntry getFallbackSecurityCard() { + return fallbackSecurityCard; + } + + @Override + public SimpleEnergyUsageEntry getSecurityManager() { + return securityManager; + } + private static class GridEntryImpl implements GridEntry { private boolean largeFont = false; private long energyUsage = DefaultEnergyUsage.GRID; - @ConfigEntry.BoundedDiscrete(min = 3L, max = 256) - private int maxRowsStretch = 256; - private boolean preventSortingWhileShiftIsDown = true; private boolean detailedTooltip = true; private boolean rememberSearchQuery = false; - private boolean smoothScrolling = true; - private boolean autoSelected = false; private String synchronizer = ""; @@ -223,18 +274,11 @@ private static class GridEntryImpl implements GridEntry { private GridSortingTypes sortingType = GridSortingTypes.QUANTITY; - private GridSize size = GridSize.STRETCH; - @Override public boolean isLargeFont() { return largeFont; } - @Override - public int getMaxRowsStretch() { - return maxRowsStretch; - } - @Override public boolean isPreventSortingWhileShiftIsDown() { return preventSortingWhileShiftIsDown; @@ -255,11 +299,6 @@ public long getEnergyUsage() { return energyUsage; } - @Override - public boolean isSmoothScrolling() { - return smoothScrolling; - } - @Override public boolean isAutoSelected() { return autoSelected; @@ -313,17 +352,6 @@ public void setSortingType(final GridSortingTypes sortingType) { save(); } - @Override - public GridSize getSize() { - return size; - } - - @Override - public void setSize(final GridSize size) { - this.size = size; - save(); - } - @Override public Optional getResourceTypeId() { if (resourceTypeId == null || resourceTypeId.trim().isBlank()) { diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ModInitializerImpl.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ModInitializerImpl.java index 93908e0ec..74fa4beba 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ModInitializerImpl.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/ModInitializerImpl.java @@ -6,13 +6,17 @@ import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.BlockEntityTypeFactory; import com.refinedmods.refinedstorage2.platform.common.content.Blocks; +import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; import com.refinedmods.refinedstorage2.platform.common.content.CreativeModeTabItems; import com.refinedmods.refinedstorage2.platform.common.content.DirectRegistryCallback; import com.refinedmods.refinedstorage2.platform.common.content.Items; import com.refinedmods.refinedstorage2.platform.common.content.MenuTypeFactory; +import com.refinedmods.refinedstorage2.platform.common.content.RegistryCallback; import com.refinedmods.refinedstorage2.platform.common.grid.WirelessGridItem; import com.refinedmods.refinedstorage2.platform.common.iface.InterfaceBlockEntity; import com.refinedmods.refinedstorage2.platform.common.iface.InterfacePlatformExternalStorageProviderFactory; +import com.refinedmods.refinedstorage2.platform.common.security.FallbackSecurityCardItem; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardItem; import com.refinedmods.refinedstorage2.platform.common.storage.diskdrive.AbstractDiskDriveBlockEntity; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridBlockItem; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridType; @@ -37,9 +41,13 @@ import com.refinedmods.refinedstorage2.platform.fabric.packet.c2s.ResourceFilterSlotChangePacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.c2s.ResourceSlotAmountChangePacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.c2s.ResourceSlotChangePacket; +import com.refinedmods.refinedstorage2.platform.fabric.packet.c2s.SecurityCardBoundPlayerPacket; +import com.refinedmods.refinedstorage2.platform.fabric.packet.c2s.SecurityCardPermissionPacket; +import com.refinedmods.refinedstorage2.platform.fabric.packet.c2s.SecurityCardResetPermissionPacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.c2s.SingleAmountChangePacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage2.platform.fabric.packet.c2s.UseNetworkBoundItemPacket; +import com.refinedmods.refinedstorage2.platform.fabric.security.NetworkNodeBreakSecurityEventListener; import com.refinedmods.refinedstorage2.platform.fabric.storage.diskdrive.FabricDiskDriveBlockEntity; import com.refinedmods.refinedstorage2.platform.fabric.storage.externalstorage.FabricStoragePlatformExternalStorageProviderFactory; import com.refinedmods.refinedstorage2.platform.fabric.storage.portablegrid.FabricPortableGridBlockEntity; @@ -58,6 +66,7 @@ import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType; @@ -74,6 +83,7 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; @@ -83,8 +93,14 @@ import org.slf4j.LoggerFactory; import team.reborn.energy.api.EnergyStorage; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.CREATIVE_PORTABLE_GRID; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.CREATIVE_WIRELESS_GRID; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.FALLBACK_SECURITY_CARD; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.PORTABLE_GRID; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.REGULATOR_UPGRADE; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.SECURITY_CARD; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.WIRELESS_GRID; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createIdentifier; -import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; public class ModInitializerImpl extends AbstractModInitializer implements ModInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(ModInitializerImpl.class); @@ -107,10 +123,10 @@ public void onInitialize() { registerRecipeSerializers(new DirectRegistryCallback<>(BuiltInRegistries.RECIPE_SERIALIZER)); registerSidedHandlers(); registerTickHandler(); - registerSlotReferenceProviders(); registerWrenchingEvent(); + registerSecurityBlockBreakEvent(); - LOGGER.info("Refined Storage 2 has loaded."); + LOGGER.debug("Refined Storage 2 has loaded."); } private void registerAdditionalGridInsertionStrategyFactories() { @@ -195,26 +211,56 @@ private void registerContent() { (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.NORMAL, pos, state), (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.CREATIVE, pos, state) ); - registerItems( - new DirectRegistryCallback<>(BuiltInRegistries.ITEM), - () -> new RegulatorUpgradeItem(PlatformApi.INSTANCE.getUpgradeRegistry()) { - @Override - public boolean allowNbtUpdateAnimation(final Player player, - final InteractionHand hand, - final ItemStack oldStack, - final ItemStack newStack) { - return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); - } - }, - () -> new WirelessGridItem() { + final DirectRegistryCallback itemRegistryCallback = new DirectRegistryCallback<>(BuiltInRegistries.ITEM); + registerItems(itemRegistryCallback); + registerCustomItems(itemRegistryCallback); + registerUpgradeMappings(); + registerCreativeModeTab(); + registerBlockEntities( + new DirectRegistryCallback<>(BuiltInRegistries.BLOCK_ENTITY_TYPE), + new BlockEntityTypeFactory() { @Override - public boolean allowNbtUpdateAnimation(final Player player, - final InteractionHand hand, - final ItemStack oldStack, - final ItemStack newStack) { - return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); + public BlockEntityType create(final BlockEntitySupplier factory, + final Block... allowedBlocks) { + return new BlockEntityType<>(factory::create, new HashSet<>(Arrays.asList(allowedBlocks)), null); } }, + FabricDiskDriveBlockEntity::new, + (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.NORMAL, pos, state), + (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.CREATIVE, pos, state) + ); + registerMenus(new DirectRegistryCallback<>(BuiltInRegistries.MENU), new MenuTypeFactory() { + @Override + public MenuType create(final MenuSupplier supplier) { + return new ExtendedScreenHandlerType<>(supplier::create); + } + }); + registerLootFunctions(new DirectRegistryCallback<>(BuiltInRegistries.LOOT_FUNCTION_TYPE)); + } + + private void registerCustomItems(final RegistryCallback callback) { + Items.INSTANCE.setRegulatorUpgrade(callback.register(REGULATOR_UPGRADE, () -> new RegulatorUpgradeItem( + PlatformApi.INSTANCE.getUpgradeRegistry() + ) { + @Override + public boolean allowNbtUpdateAnimation(final Player player, + final InteractionHand hand, + final ItemStack oldStack, + final ItemStack newStack) { + return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); + } + })); + Items.INSTANCE.setWirelessGrid(callback.register(WIRELESS_GRID, () -> new WirelessGridItem() { + @Override + public boolean allowNbtUpdateAnimation(final Player player, + final InteractionHand hand, + final ItemStack oldStack, + final ItemStack newStack) { + return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); + } + })); + Items.INSTANCE.setCreativeWirelessGrid(callback.register( + CREATIVE_WIRELESS_GRID, () -> new WirelessGridItem() { @Override public boolean allowNbtUpdateAnimation(final Player player, @@ -223,8 +269,22 @@ public boolean allowNbtUpdateAnimation(final Player player, final ItemStack newStack) { return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); } - }, - () -> new PortableGridBlockItem(Blocks.INSTANCE.getPortableGrid(), PortableGridType.NORMAL) { + } + )); + Items.INSTANCE.setPortableGrid(callback.register(PORTABLE_GRID, () -> new PortableGridBlockItem( + Blocks.INSTANCE.getPortableGrid(), PortableGridType.NORMAL + ) { + @Override + public boolean allowNbtUpdateAnimation(final Player player, + final InteractionHand hand, + final ItemStack oldStack, + final ItemStack newStack) { + return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); + } + })); + Items.INSTANCE.setCreativePortableGrid(callback.register( + CREATIVE_PORTABLE_GRID, + () -> new PortableGridBlockItem(Blocks.INSTANCE.getCreativePortableGrid(), PortableGridType.CREATIVE) { @Override public boolean allowNbtUpdateAnimation(final Player player, final InteractionHand hand, @@ -232,8 +292,20 @@ public boolean allowNbtUpdateAnimation(final Player player, final ItemStack newStack) { return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); } - }, - () -> new PortableGridBlockItem(Blocks.INSTANCE.getCreativePortableGrid(), PortableGridType.CREATIVE) { + } + )); + Items.INSTANCE.setSecurityCard(callback.register(SECURITY_CARD, () -> new SecurityCardItem() { + @Override + public boolean allowNbtUpdateAnimation(final Player player, + final InteractionHand hand, + final ItemStack oldStack, + final ItemStack newStack) { + return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); + } + })); + Items.INSTANCE.setFallbackSecurityCard(callback.register( + FALLBACK_SECURITY_CARD, + () -> new FallbackSecurityCardItem() { @Override public boolean allowNbtUpdateAnimation(final Player player, final InteractionHand hand, @@ -242,29 +314,7 @@ public boolean allowNbtUpdateAnimation(final Player player, return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); } } - ); - registerUpgradeMappings(); - registerCreativeModeTab(); - registerBlockEntities( - new DirectRegistryCallback<>(BuiltInRegistries.BLOCK_ENTITY_TYPE), - new BlockEntityTypeFactory() { - @Override - public BlockEntityType create(final BlockEntitySupplier factory, - final Block... allowedBlocks) { - return new BlockEntityType<>(factory::create, new HashSet<>(Arrays.asList(allowedBlocks)), null); - } - }, - FabricDiskDriveBlockEntity::new, - (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.NORMAL, pos, state), - (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.CREATIVE, pos, state) - ); - registerMenus(new DirectRegistryCallback<>(BuiltInRegistries.MENU), new MenuTypeFactory() { - @Override - public MenuType create(final MenuSupplier supplier) { - return new ExtendedScreenHandlerType<>(supplier::create); - } - }); - registerLootFunctions(new DirectRegistryCallback<>(BuiltInRegistries.LOOT_FUNCTION_TYPE)); + )); } private void registerCreativeModeTab() { @@ -272,7 +322,7 @@ private void registerCreativeModeTab() { BuiltInRegistries.CREATIVE_MODE_TAB, createIdentifier("general"), CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) - .title(createTranslation("itemGroup", "general")) + .title(ContentNames.MOD) .icon(() -> new ItemStack(Blocks.INSTANCE.getCreativeController().getDefault())) .displayItems((params, output) -> CreativeModeTabItems.append(output::accept)) .build() @@ -304,6 +354,18 @@ private void registerPackets() { ); ServerPlayNetworking.registerGlobalReceiver(PacketIds.SINGLE_AMOUNT_CHANGE, new SingleAmountChangePacket()); ServerPlayNetworking.registerGlobalReceiver(PacketIds.USE_NETWORK_BOUND_ITEM, new UseNetworkBoundItemPacket()); + ServerPlayNetworking.registerGlobalReceiver( + PacketIds.SECURITY_CARD_PERMISSION, + new SecurityCardPermissionPacket() + ); + ServerPlayNetworking.registerGlobalReceiver( + PacketIds.SECURITY_CARD_RESET_PERMISSION, + new SecurityCardResetPermissionPacket() + ); + ServerPlayNetworking.registerGlobalReceiver( + PacketIds.SECURITY_CARD_BOUND_PLAYER, + new SecurityCardBoundPlayerPacket() + ); } private void registerSidedHandlers() { @@ -370,7 +432,9 @@ private void registerTickHandler() { ServerTickEvents.START_SERVER_TICK.register(server -> ServerEventQueue.runQueuedActions()); } - private void registerSlotReferenceProviders() { + @Override + protected void registerSlotReferenceProviders() { + super.registerSlotReferenceProviders(); TrinketsSlotReferenceProvider.create().ifPresent(slotReferenceProvider -> { PlatformApi.INSTANCE.getSlotReferenceFactoryRegistry().register( createIdentifier("trinkets"), @@ -391,4 +455,8 @@ private void registerWrenchingEvent() { .orElse(InteractionResult.PASS); }); } + + private void registerSecurityBlockBreakEvent() { + PlayerBlockBreakEvents.BEFORE.register(new NetworkNodeBreakSecurityEventListener()); + } } diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/FluidGridExtractionStrategy.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/FluidGridExtractionStrategy.java index ea2616144..9b3e480d5 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/FluidGridExtractionStrategy.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/FluidGridExtractionStrategy.java @@ -7,7 +7,6 @@ import com.refinedmods.refinedstorage2.api.storage.Storage; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridExtractionStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.common.support.resource.FluidResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; @@ -20,7 +19,7 @@ import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant; import net.fabricmc.fabric.api.transfer.v1.item.PlayerInventoryStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.Items; @@ -36,9 +35,9 @@ public class FluidGridExtractionStrategy implements GridExtractionStrategy { private final Storage itemStorage; public FluidGridExtractionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { - this.gridOperations = grid.createOperations(ResourceTypes.FLUID, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.FLUID, player); this.playerInventoryStorage = PlayerInventoryStorage.of(player.getInventory()); this.playerCursorStorage = PlayerInventoryStorage.getCursorStorage(containerMenu); this.itemStorage = grid.getItemStorage(); diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/FluidGridInsertionStrategy.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/FluidGridInsertionStrategy.java index a02c50bcb..cb2f79d4e 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/FluidGridInsertionStrategy.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/FluidGridInsertionStrategy.java @@ -5,7 +5,6 @@ import com.refinedmods.refinedstorage2.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridInsertionStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.common.support.resource.FluidResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; @@ -20,6 +19,7 @@ import net.fabricmc.fabric.api.transfer.v1.storage.StorageUtil; import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleSlotStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -33,10 +33,10 @@ public class FluidGridInsertionStrategy implements GridInsertionStrategy { private final PlayerInventoryStorage playerInventoryStorage; public FluidGridInsertionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { this.containerMenu = containerMenu; - this.gridOperations = grid.createOperations(ResourceTypes.FLUID, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.FLUID, player); this.player = player; this.playerInventoryStorage = PlayerInventoryStorage.of(player.getInventory()); } diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridExtractionStrategy.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridExtractionStrategy.java index b40f135fa..2582951e6 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridExtractionStrategy.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridExtractionStrategy.java @@ -5,7 +5,6 @@ import com.refinedmods.refinedstorage2.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridExtractionStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; @@ -15,7 +14,7 @@ import net.fabricmc.fabric.api.transfer.v1.storage.Storage; import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleSlotStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import static com.refinedmods.refinedstorage2.platform.fabric.support.resource.VariantUtil.toItemVariant; @@ -26,9 +25,9 @@ public class ItemGridExtractionStrategy implements GridExtractionStrategy { private final SingleSlotStorage playerCursorStorage; public ItemGridExtractionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { - this.gridOperations = grid.createOperations(ResourceTypes.ITEM, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.ITEM, player); this.playerInventoryStorage = PlayerInventoryStorage.of(player.getInventory()); this.playerCursorStorage = PlayerInventoryStorage.getCursorStorage(containerMenu); } diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridInsertionStrategy.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridInsertionStrategy.java index 1632bea91..77fad8db0 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridInsertionStrategy.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridInsertionStrategy.java @@ -5,7 +5,6 @@ import com.refinedmods.refinedstorage2.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridInsertionStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; @@ -15,7 +14,7 @@ import net.fabricmc.fabric.api.transfer.v1.storage.StorageUtil; import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleSlotStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; @@ -29,10 +28,10 @@ public class ItemGridInsertionStrategy implements GridInsertionStrategy { private final SingleSlotStorage playerCursorStorage; public ItemGridInsertionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { this.containerMenu = containerMenu; - this.gridOperations = grid.createOperations(ResourceTypes.ITEM, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.ITEM, player); this.playerCursorStorage = PlayerInventoryStorage.getCursorStorage(containerMenu); } diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridScrollingStrategy.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridScrollingStrategy.java index 7d51b15b0..fd82958dd 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridScrollingStrategy.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/grid/strategy/ItemGridScrollingStrategy.java @@ -7,7 +7,6 @@ import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.GridScrollMode; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridScrollingStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; @@ -17,7 +16,7 @@ import net.fabricmc.fabric.api.transfer.v1.storage.Storage; import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleSlotStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import static com.refinedmods.refinedstorage2.platform.fabric.support.resource.VariantUtil.toItemVariant; @@ -28,9 +27,9 @@ public class ItemGridScrollingStrategy implements GridScrollingStrategy { private final SingleSlotStorage playerCursorStorage; public ItemGridScrollingStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { - this.gridOperations = grid.createOperations(ResourceTypes.ITEM, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.ITEM, player); this.playerInventoryStorage = PlayerInventoryStorage.of(player.getInventory()); this.playerCursorStorage = PlayerInventoryStorage.getCursorStorage(containerMenu); } diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/ClientToServerCommunicationsImpl.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/ClientToServerCommunicationsImpl.java index 064d16ddb..3d164f3f7 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/ClientToServerCommunicationsImpl.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/ClientToServerCommunicationsImpl.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage2.api.grid.operations.GridInsertMode; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; import com.refinedmods.refinedstorage2.platform.api.grid.GridScrollMode; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.api.support.resource.ResourceType; @@ -129,6 +130,30 @@ public void sendUseNetworkBoundItem(final SlotReference slotReference) { ); } + @Override + public void sendSecurityCardPermission(final PlatformPermission permission, final boolean allowed) { + PlatformApi.INSTANCE.getPermissionRegistry().getId(permission).ifPresent(id -> sendToServer( + PacketIds.SECURITY_CARD_PERMISSION, + buf -> { + buf.writeResourceLocation(id); + buf.writeBoolean(allowed); + } + )); + } + + @Override + public void sendSecurityCardResetPermission(final PlatformPermission permission) { + PlatformApi.INSTANCE.getPermissionRegistry().getId(permission).ifPresent(id -> sendToServer( + PacketIds.SECURITY_CARD_RESET_PERMISSION, + buf -> buf.writeResourceLocation(id) + )); + } + + @Override + public void sendSecurityCardBoundPlayer(final UUID playerId) { + sendToServer(PacketIds.SECURITY_CARD_BOUND_PLAYER, buf -> buf.writeUUID(playerId)); + } + private static void sendToServer(final ResourceLocation id, final Consumer bufConsumer) { final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); bufConsumer.accept(buf); diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/SecurityCardBoundPlayerPacket.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/SecurityCardBoundPlayerPacket.java new file mode 100644 index 000000000..42540536c --- /dev/null +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/SecurityCardBoundPlayerPacket.java @@ -0,0 +1,26 @@ +package com.refinedmods.refinedstorage2.platform.fabric.packet.c2s; + +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardContainerMenu; + +import java.util.UUID; + +import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; + +public class SecurityCardBoundPlayerPacket implements ServerPlayNetworking.PlayChannelHandler { + @Override + public void receive(final MinecraftServer server, + final ServerPlayer player, + final ServerGamePacketListenerImpl handler, + final FriendlyByteBuf buf, + final PacketSender responseSender) { + final UUID playerId = buf.readUUID(); + if (player.containerMenu instanceof SecurityCardContainerMenu securityCardContainerMenu) { + server.execute(() -> securityCardContainerMenu.setBoundPlayer(server, playerId)); + } + } +} diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/SecurityCardPermissionPacket.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/SecurityCardPermissionPacket.java new file mode 100644 index 000000000..cfebef7b1 --- /dev/null +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/SecurityCardPermissionPacket.java @@ -0,0 +1,26 @@ +package com.refinedmods.refinedstorage2.platform.fabric.packet.c2s; + +import com.refinedmods.refinedstorage2.platform.common.security.AbstractSecurityCardContainerMenu; + +import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; + +public class SecurityCardPermissionPacket implements ServerPlayNetworking.PlayChannelHandler { + @Override + public void receive(final MinecraftServer server, + final ServerPlayer player, + final ServerGamePacketListenerImpl handler, + final FriendlyByteBuf buf, + final PacketSender responseSender) { + final ResourceLocation permissionId = buf.readResourceLocation(); + final boolean allowed = buf.readBoolean(); + if (player.containerMenu instanceof AbstractSecurityCardContainerMenu securityCardContainerMenu) { + server.execute(() -> securityCardContainerMenu.setPermission(permissionId, allowed)); + } + } +} diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/SecurityCardResetPermissionPacket.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/SecurityCardResetPermissionPacket.java new file mode 100644 index 000000000..de26b2f54 --- /dev/null +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/c2s/SecurityCardResetPermissionPacket.java @@ -0,0 +1,25 @@ +package com.refinedmods.refinedstorage2.platform.fabric.packet.c2s; + +import com.refinedmods.refinedstorage2.platform.common.security.AbstractSecurityCardContainerMenu; + +import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; + +public class SecurityCardResetPermissionPacket implements ServerPlayNetworking.PlayChannelHandler { + @Override + public void receive(final MinecraftServer server, + final ServerPlayer player, + final ServerGamePacketListenerImpl handler, + final FriendlyByteBuf buf, + final PacketSender responseSender) { + final ResourceLocation permissionId = buf.readResourceLocation(); + if (player.containerMenu instanceof AbstractSecurityCardContainerMenu securityCardContainerMenu) { + server.execute(() -> securityCardContainerMenu.resetPermission(permissionId)); + } + } +} diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/s2c/NoPermissionPacket.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/s2c/NoPermissionPacket.java new file mode 100644 index 000000000..4cbfd9608 --- /dev/null +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/s2c/NoPermissionPacket.java @@ -0,0 +1,21 @@ +package com.refinedmods.refinedstorage2.platform.fabric.packet.s2c; + +import com.refinedmods.refinedstorage2.platform.common.util.SecurityToastHelper; + +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; + +public class NoPermissionPacket implements ClientPlayNetworking.PlayChannelHandler { + @Override + public void receive(final Minecraft client, + final ClientPacketListener handler, + final FriendlyByteBuf buf, + final PacketSender responseSender) { + final Component message = buf.readComponent(); + client.execute(() -> SecurityToastHelper.addNoPermissionToast(message)); + } +} diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/s2c/ServerToClientCommunicationsImpl.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/s2c/ServerToClientCommunicationsImpl.java index 19c2f4644..610a440f2 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/s2c/ServerToClientCommunicationsImpl.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/packet/s2c/ServerToClientCommunicationsImpl.java @@ -18,6 +18,7 @@ import io.netty.buffer.Unpooled; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -108,6 +109,11 @@ public void sendNetworkTransmitterStatus(final ServerPlayer player, final Networ }); } + @Override + public void sendNoPermission(final ServerPlayer player, final Component message) { + sendToPlayer(player, PacketIds.NO_PERMISSION, buf -> buf.writeComponent(message)); + } + private static void sendToPlayer(final ServerPlayer playerEntity, final ResourceLocation id, final Consumer bufConsumer) { diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/recipemod/rei/RefinedStorageREIClientPlugin.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/recipemod/rei/RefinedStorageREIClientPlugin.java index 466e8260d..3369fe363 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/recipemod/rei/RefinedStorageREIClientPlugin.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/recipemod/rei/RefinedStorageREIClientPlugin.java @@ -95,6 +95,12 @@ public void registerCollapsibleEntries(final CollapsibleEntryRegistry registry) ContentIds.NETWORK_TRANSMITTER, Tags.NETWORK_TRANSMITTERS ); + groupItems( + registry, + Blocks.INSTANCE.getSecurityManager(), + ContentIds.SECURITY_MANAGER, + Tags.SECURITY_MANAGERS + ); } @Override diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/security/NetworkNodeBreakSecurityEventListener.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/security/NetworkNodeBreakSecurityEventListener.java new file mode 100644 index 000000000..92ae8d63c --- /dev/null +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/security/NetworkNodeBreakSecurityEventListener.java @@ -0,0 +1,36 @@ +package com.refinedmods.refinedstorage2.platform.fabric.security; + +import com.refinedmods.refinedstorage2.platform.api.PlatformApi; +import com.refinedmods.refinedstorage2.platform.api.support.network.PlatformNetworkNodeContainer; + +import javax.annotation.Nullable; + +import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; + +public class NetworkNodeBreakSecurityEventListener implements PlayerBlockBreakEvents.Before { + @Override + public boolean beforeBlockBreak(final Level world, + final Player player, + final BlockPos pos, + final BlockState state, + @Nullable final BlockEntity blockEntity) { + if (blockEntity instanceof PlatformNetworkNodeContainer platformNetworkNodeContainer + && player instanceof ServerPlayer serverPlayer + && !platformNetworkNodeContainer.canBreakOrRotate(serverPlayer)) { + PlatformApi.INSTANCE.sendNoPermissionMessage( + serverPlayer, + createTranslation("misc", "no_permission.build.break", state.getBlock().getName()) + ); + return false; + } + return true; + } +} diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/security/package-info.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/security/package-info.java new file mode 100644 index 000000000..2d9c25b8b --- /dev/null +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/security/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage2.platform.fabric.security; + +import com.refinedmods.refinedstorage2.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveBakedModel.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveBakedModel.java index ee1845579..4e336d905 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveBakedModel.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveBakedModel.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage2.platform.fabric.support.render; +import java.util.Set; import java.util.function.Supplier; import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel; @@ -15,9 +16,9 @@ class EmissiveBakedModel extends ForwardingBakedModel { private final EmissiveTransform transform; - EmissiveBakedModel(final BakedModel wrapped, final ResourceLocation emissiveSprite) { + EmissiveBakedModel(final BakedModel wrapped, final Set emissiveSprites) { this.wrapped = wrapped; - this.transform = new EmissiveTransform(emissiveSprite); + this.transform = new EmissiveTransform(emissiveSprites); } @Override diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveModelRegistry.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveModelRegistry.java index 1087b13ae..8350779ba 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveModelRegistry.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveModelRegistry.java @@ -1,6 +1,8 @@ package com.refinedmods.refinedstorage2.platform.fabric.support.render; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.function.Function; import javax.annotation.Nullable; @@ -38,7 +40,9 @@ public BakedModel makeEmissive(final ResourceLocation model, final BakedModel ba } public void register(final ResourceLocation location, - final ResourceLocation spriteLocation) { - factories.put(location, bakedModel -> new EmissiveBakedModel(bakedModel, spriteLocation)); + final ResourceLocation... spriteLocations) { + factories.put(location, bakedModel -> new EmissiveBakedModel(bakedModel, new HashSet<>( + Arrays.asList(spriteLocations) + ))); } } diff --git a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveTransform.java b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveTransform.java index 69a7cad1e..c87fc09b0 100644 --- a/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveTransform.java +++ b/refinedstorage2-platform-fabric/src/main/java/com/refinedmods/refinedstorage2/platform/fabric/support/render/EmissiveTransform.java @@ -1,5 +1,7 @@ package com.refinedmods.refinedstorage2.platform.fabric.support.render; +import java.util.Set; + import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView; import net.fabricmc.fabric.api.renderer.v1.model.SpriteFinder; import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; @@ -10,10 +12,10 @@ import net.minecraft.resources.ResourceLocation; class EmissiveTransform implements RenderContext.QuadTransform { - private final ResourceLocation emissiveSprite; + private final Set emissiveSprites; - EmissiveTransform(final ResourceLocation emissiveSprite) { - this.emissiveSprite = emissiveSprite; + EmissiveTransform(final Set emissiveSprites) { + this.emissiveSprites = emissiveSprites; } @Override @@ -31,7 +33,7 @@ private void doTransform(final MutableQuadView quad) { if (sprite == null) { return; } - if (!emissiveSprite.equals(sprite.contents().name())) { + if (!emissiveSprites.contains(sprite.contents().name())) { return; } applyLightmap(quad); diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ClientModInitializer.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ClientModInitializer.java index 90c5f8129..d0bbe2230 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ClientModInitializer.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ClientModInitializer.java @@ -7,10 +7,12 @@ import com.refinedmods.refinedstorage2.platform.common.AbstractClientModInitializer; import com.refinedmods.refinedstorage2.platform.common.configurationcard.ConfigurationCardItemPropertyFunction; import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; +import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; import com.refinedmods.refinedstorage2.platform.common.content.Items; import com.refinedmods.refinedstorage2.platform.common.content.KeyMappings; import com.refinedmods.refinedstorage2.platform.common.controller.ControllerModelPredicateProvider; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkCardItemPropertyFunction; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardItemPropertyFunction; import com.refinedmods.refinedstorage2.platform.common.storagemonitor.StorageMonitorBlockEntityRenderer; import com.refinedmods.refinedstorage2.platform.common.support.network.bounditem.NetworkBoundItemItemPropertyFunction; import com.refinedmods.refinedstorage2.platform.common.support.tooltip.CompositeClientTooltipComponent; @@ -59,7 +61,6 @@ public final class ClientModInitializer extends AbstractClientModInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(ClientModInitializer.class); - private static final String KEY_BINDINGS_TRANSLATION_KEY = createTranslationKey("category", "key_bindings"); private ClientModInitializer() { } @@ -115,7 +116,7 @@ public static void onRegisterKeyMappings(final RegisterKeyMappingsEvent e) { createTranslationKey("key", "focus_search_bar"), InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_TAB, - KEY_BINDINGS_TRANSLATION_KEY + ContentNames.MOD_TRANSLATION_KEY ); e.register(focusSearchBarKeyBinding); KeyMappings.INSTANCE.setFocusSearchBar(focusSearchBarKeyBinding); @@ -126,7 +127,7 @@ public static void onRegisterKeyMappings(final RegisterKeyMappingsEvent e) { KeyModifier.CONTROL, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_X, - KEY_BINDINGS_TRANSLATION_KEY + ContentNames.MOD_TRANSLATION_KEY ); e.register(clearCraftingGridMatrixToNetwork); KeyMappings.INSTANCE.setClearCraftingGridMatrixToNetwork(clearCraftingGridMatrixToNetwork); @@ -134,7 +135,7 @@ public static void onRegisterKeyMappings(final RegisterKeyMappingsEvent e) { final KeyMapping clearCraftingGridMatrixToInventory = new KeyMapping( createTranslationKey("key", "clear_crafting_grid_matrix_to_inventory"), InputConstants.UNKNOWN.getValue(), - KEY_BINDINGS_TRANSLATION_KEY + ContentNames.MOD_TRANSLATION_KEY ); e.register(clearCraftingGridMatrixToInventory); KeyMappings.INSTANCE.setClearCraftingGridMatrixToInventory(clearCraftingGridMatrixToInventory); @@ -143,7 +144,7 @@ public static void onRegisterKeyMappings(final RegisterKeyMappingsEvent e) { createTranslationKey("key", "open_wireless_grid"), KeyConflictContext.IN_GAME, InputConstants.UNKNOWN, - KEY_BINDINGS_TRANSLATION_KEY + ContentNames.MOD_TRANSLATION_KEY ); e.register(openWirelessGrid); KeyMappings.INSTANCE.setOpenWirelessGrid(openWirelessGrid); @@ -169,6 +170,7 @@ private static void registerBlockEntityRenderer() { } private static void registerGridSynchronizers() { + registerBaseGridSynchronizer(); final ModList list = ModList.get(); // Give priority to REI, as REI requires a JEI compat mod on Forge. // This means that both JEI + REI support would be activated. We only want REI in that case. @@ -178,7 +180,7 @@ private static void registerGridSynchronizers() { } private static void registerReiGridSynchronizers() { - LOGGER.info("Enabling REI grid synchronizers"); + LOGGER.debug("Enabling REI grid synchronizers"); // This is so the ingredient converters are only registered once // see https://github.com/refinedmods/refinedstorage2/pull/302#discussion_r1070015672 RefinedStorageREIClientPlugin.registerIngredientConverters(); @@ -245,5 +247,10 @@ private static void registerItemProperties() { NetworkCardItemPropertyFunction.NAME, new NetworkCardItemPropertyFunction() ); + ItemProperties.register( + Items.INSTANCE.getSecurityCard(), + SecurityCardItemPropertyFunction.NAME, + new SecurityCardItemPropertyFunction() + ); } } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ConfigImpl.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ConfigImpl.java index 3055b0a68..549efa30c 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ConfigImpl.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ConfigImpl.java @@ -4,8 +4,8 @@ import com.refinedmods.refinedstorage2.platform.common.Config; import com.refinedmods.refinedstorage2.platform.common.content.DefaultEnergyUsage; import com.refinedmods.refinedstorage2.platform.common.grid.CraftingGridMatrixCloseBehavior; -import com.refinedmods.refinedstorage2.platform.common.grid.GridSize; import com.refinedmods.refinedstorage2.platform.common.grid.GridSortingTypes; +import com.refinedmods.refinedstorage2.platform.common.support.stretching.ScreenSize; import java.util.Optional; @@ -19,6 +19,9 @@ public class ConfigImpl implements Config { private final ModConfigSpec.Builder builder = new ModConfigSpec.Builder(); private final ModConfigSpec spec; + private final ModConfigSpec.EnumValue screenSize; + private final ModConfigSpec.BooleanValue smoothScrolling; + private final ModConfigSpec.IntValue maxRowsStretch; private final SimpleEnergyUsageEntry cable; private final ControllerEntry controller; private final DiskDriveEntry diskDrive; @@ -40,8 +43,20 @@ public class ConfigImpl implements Config { private final SimpleEnergyUsageEntry networkReceiver; private final SimpleEnergyUsageEntry networkTransmitter; private final PortableGridEntry portableGrid; + private final SimpleEnergyUsageEntry securityCard; + private final SimpleEnergyUsageEntry fallbackSecurityCard; + private final SimpleEnergyUsageEntry securityManager; public ConfigImpl() { + screenSize = builder + .comment("The screen size") + .defineEnum("screenSize", ScreenSize.STRETCH); + smoothScrolling = builder + .comment("Whether scrollbars should use smooth scrolling") + .define("smoothScrolling", true); + maxRowsStretch = builder + .comment("The maximum amount of rows that can be displayed when the screen size is stretched") + .defineInRange("maxRowsStretch", 256, 3, 256); cable = new SimpleEnergyUsageEntryImpl("cable", "Cable", DefaultEnergyUsage.CABLE); controller = new ControllerEntryImpl(); diskDrive = new DiskDriveEntryImpl(); @@ -79,6 +94,21 @@ public ConfigImpl() { DefaultEnergyUsage.NETWORK_TRANSMITTER ); portableGrid = new PortableGridEntryImpl(); + securityCard = new SimpleEnergyUsageEntryImpl( + "securityCard", + "Security Card", + DefaultEnergyUsage.SECURITY_CARD + ); + fallbackSecurityCard = new SimpleEnergyUsageEntryImpl( + "fallbackSecurityCard", + "Fallback Security Card", + DefaultEnergyUsage.FALLBACK_SECURITY_CARD + ); + securityManager = new SimpleEnergyUsageEntryImpl( + "securityManager", + "Security Manager", + DefaultEnergyUsage.SECURITY_MANAGER + ); spec = builder.build(); } @@ -86,6 +116,26 @@ public ModConfigSpec getSpec() { return spec; } + @Override + public ScreenSize getScreenSize() { + return screenSize.get(); + } + + @Override + public boolean isSmoothScrolling() { + return smoothScrolling.get(); + } + + @Override + public int getMaxRowsStretch() { + return maxRowsStretch.get(); + } + + @Override + public void setScreenSize(final ScreenSize screenSize) { + this.screenSize.set(screenSize); + } + @Override public GridEntry getGrid() { return grid; @@ -191,6 +241,21 @@ public PortableGridEntry getPortableGrid() { return portableGrid; } + @Override + public SimpleEnergyUsageEntry getSecurityCard() { + return securityCard; + } + + @Override + public SimpleEnergyUsageEntry getFallbackSecurityCard() { + return fallbackSecurityCard; + } + + @Override + public SimpleEnergyUsageEntry getSecurityManager() { + return securityManager; + } + private class SimpleEnergyUsageEntryImpl implements SimpleEnergyUsageEntry { private final ModConfigSpec.LongValue energyUsage; @@ -250,27 +315,21 @@ public long getEnergyUsagePerDisk() { private class GridEntryImpl implements GridEntry { private final ModConfigSpec.BooleanValue largeFont; - private final ModConfigSpec.IntValue maxRowsStretch; private final ModConfigSpec.BooleanValue preventSortingWhileShiftIsDown; private final ModConfigSpec.BooleanValue detailedTooltip; private final ModConfigSpec.BooleanValue rememberSearchQuery; private final ModConfigSpec.LongValue energyUsage; - private final ModConfigSpec.BooleanValue smoothScrolling; private final ModConfigSpec.BooleanValue autoSelected; private final ModConfigSpec.ConfigValue synchronizer; private final ModConfigSpec.ConfigValue resourceType; private final ModConfigSpec.EnumValue sortingDirection; private final ModConfigSpec.EnumValue sortingType; - private final ModConfigSpec.EnumValue size; GridEntryImpl() { builder.push("grid"); largeFont = builder .comment("Whether the Grid should use a large font for quantities") .define("largeFont", false); - maxRowsStretch = builder - .comment("The maximum amount of rows that can be displayed when the Grid is in stretch view mode") - .defineInRange("maxRowsStretch", 256, 3, 256); preventSortingWhileShiftIsDown = builder .comment("Whether the Grid should avoid sorting when shift is held down") .define("preventSortingWhileShiftIsDown", true); @@ -283,9 +342,6 @@ private class GridEntryImpl implements GridEntry { energyUsage = builder .comment("The energy used by the Grid") .defineInRange(ENERGY_USAGE, DefaultEnergyUsage.GRID, 0, Long.MAX_VALUE); - smoothScrolling = builder - .comment("Whether the Grid should use smooth scrolling") - .define("smoothScrolling", true); autoSelected = builder .comment("Whether the Grid search box is auto selected") .define("autoSelected", false); @@ -301,9 +357,6 @@ private class GridEntryImpl implements GridEntry { sortingType = builder .comment("The sorting type") .defineEnum("sortingType", GridSortingTypes.QUANTITY); - size = builder - .comment("The size") - .defineEnum("size", GridSize.STRETCH); builder.pop(); } @@ -312,11 +365,6 @@ public boolean isLargeFont() { return largeFont.get(); } - @Override - public int getMaxRowsStretch() { - return maxRowsStretch.get(); - } - @Override public boolean isPreventSortingWhileShiftIsDown() { return preventSortingWhileShiftIsDown.get(); @@ -337,11 +385,6 @@ public long getEnergyUsage() { return energyUsage.get(); } - @Override - public boolean isSmoothScrolling() { - return smoothScrolling.get(); - } - @Override public boolean isAutoSelected() { return autoSelected.get(); @@ -390,16 +433,6 @@ public void setSortingType(final GridSortingTypes sortingType) { this.sortingType.set(sortingType); } - @Override - public GridSize getSize() { - return this.size.get(); - } - - @Override - public void setSize(final GridSize size) { - this.size.set(size); - } - @Override public Optional getResourceTypeId() { if (resourceType == null || resourceType.get().trim().isBlank()) { diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ModInitializer.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ModInitializer.java index a1edc8856..eb988a812 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ModInitializer.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ModInitializer.java @@ -1,11 +1,13 @@ package com.refinedmods.refinedstorage2.platform.forge; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; +import com.refinedmods.refinedstorage2.platform.api.support.network.PlatformNetworkNodeContainer; import com.refinedmods.refinedstorage2.platform.common.AbstractModInitializer; import com.refinedmods.refinedstorage2.platform.common.PlatformProxy; import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; import com.refinedmods.refinedstorage2.platform.common.content.BlockEntityTypeFactory; import com.refinedmods.refinedstorage2.platform.common.content.Blocks; +import com.refinedmods.refinedstorage2.platform.common.content.ContentNames; import com.refinedmods.refinedstorage2.platform.common.content.CreativeModeTabItems; import com.refinedmods.refinedstorage2.platform.common.content.DirectRegistryCallback; import com.refinedmods.refinedstorage2.platform.common.content.Items; @@ -13,6 +15,8 @@ import com.refinedmods.refinedstorage2.platform.common.content.RegistryCallback; import com.refinedmods.refinedstorage2.platform.common.grid.WirelessGridItem; import com.refinedmods.refinedstorage2.platform.common.iface.InterfacePlatformExternalStorageProviderFactory; +import com.refinedmods.refinedstorage2.platform.common.security.FallbackSecurityCardItem; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardItem; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridBlockItem; import com.refinedmods.refinedstorage2.platform.common.storage.portablegrid.PortableGridType; import com.refinedmods.refinedstorage2.platform.common.support.AbstractBaseBlock; @@ -44,6 +48,9 @@ import com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s.ResourceFilterSlotChangePacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s.ResourceSlotAmountChangePacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s.ResourceSlotChangePacket; +import com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s.SecurityCardBoundPlayerPacket; +import com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s.SecurityCardPermissionPacket; +import com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s.SecurityCardResetPermissionPacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s.SingleAmountChangePacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s.UseNetworkBoundItemPacket; @@ -52,6 +59,7 @@ import com.refinedmods.refinedstorage2.platform.forge.support.packet.s2c.GridClearPacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.s2c.GridUpdatePacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.s2c.NetworkTransmitterStatusPacket; +import com.refinedmods.refinedstorage2.platform.forge.support.packet.s2c.NoPermissionPacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.s2c.ResourceSlotUpdatePacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.s2c.StorageInfoResponsePacket; import com.refinedmods.refinedstorage2.platform.forge.support.packet.s2c.WirelessTransmitterRangePacket; @@ -64,6 +72,7 @@ import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; @@ -88,12 +97,20 @@ import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; import net.neoforged.neoforge.event.TickEvent; import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; +import net.neoforged.neoforge.event.level.BlockEvent; import net.neoforged.neoforge.items.wrapper.InvWrapper; import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; import net.neoforged.neoforge.network.registration.IPayloadRegistrar; import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.registries.RegisterEvent; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.CREATIVE_PORTABLE_GRID; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.CREATIVE_WIRELESS_GRID; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.FALLBACK_SECURITY_CARD; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.PORTABLE_GRID; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.REGULATOR_UPGRADE; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.SECURITY_CARD; +import static com.refinedmods.refinedstorage2.platform.common.content.ContentIds.WIRELESS_GRID; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.MOD_ID; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createIdentifier; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; @@ -126,7 +143,6 @@ public ModInitializer(final IEventBus eventBus) { registerSounds(eventBus); registerRecipeSerializers(eventBus); registerTickHandler(); - registerSlotReferenceProviders(); if (FMLEnvironment.dist == Dist.CLIENT) { eventBus.addListener(ClientModInitializer::onClientSetup); @@ -142,6 +158,7 @@ public ModInitializer(final IEventBus eventBus) { eventBus.addListener(this::registerCapabilities); NeoForge.EVENT_BUS.addListener(this::registerWrenchingEvent); + NeoForge.EVENT_BUS.addListener(this::registerSecurityBlockBreakEvent); } private void registerAdditionalGridInsertionStrategyFactories() { @@ -204,24 +221,33 @@ private void registerBlocks(final IEventBus eventBus) { } private void registerItems(final IEventBus eventBus) { - registerItems( - new ForgeRegistryCallback<>(itemRegistry), - () -> new RegulatorUpgradeItem(PlatformApi.INSTANCE.getUpgradeRegistry()) { - @Override - public boolean shouldCauseReequipAnimation(final ItemStack oldStack, - final ItemStack newStack, - final boolean slotChanged) { - return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); - } - }, - () -> new WirelessGridItem() { - @Override - public boolean shouldCauseReequipAnimation(final ItemStack oldStack, - final ItemStack newStack, - final boolean slotChanged) { - return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); - } - }, + final RegistryCallback callback = new ForgeRegistryCallback<>(itemRegistry); + registerItems(callback); + registerCustomItems(callback); + itemRegistry.register(eventBus); + } + + private void registerCustomItems(final RegistryCallback callback) { + Items.INSTANCE.setRegulatorUpgrade(callback.register(REGULATOR_UPGRADE, () -> new RegulatorUpgradeItem( + PlatformApi.INSTANCE.getUpgradeRegistry() + ) { + @Override + public boolean shouldCauseReequipAnimation(final ItemStack oldStack, + final ItemStack newStack, + final boolean slotChanged) { + return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); + } + })); + Items.INSTANCE.setWirelessGrid(callback.register(WIRELESS_GRID, () -> new WirelessGridItem() { + @Override + public boolean shouldCauseReequipAnimation(final ItemStack oldStack, + final ItemStack newStack, + final boolean slotChanged) { + return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); + } + })); + Items.INSTANCE.setCreativeWirelessGrid(callback.register( + CREATIVE_WIRELESS_GRID, () -> new WirelessGridItem() { @Override public boolean shouldCauseReequipAnimation(final ItemStack oldStack, @@ -229,16 +255,40 @@ public boolean shouldCauseReequipAnimation(final ItemStack oldStack, final boolean slotChanged) { return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); } - }, - () -> new PortableGridBlockItem(Blocks.INSTANCE.getPortableGrid(), PortableGridType.NORMAL) { + } + )); + Items.INSTANCE.setPortableGrid(callback.register(PORTABLE_GRID, () -> new PortableGridBlockItem( + Blocks.INSTANCE.getPortableGrid(), PortableGridType.NORMAL + ) { + @Override + public boolean shouldCauseReequipAnimation(final ItemStack oldStack, + final ItemStack newStack, + final boolean slotChanged) { + return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); + } + })); + Items.INSTANCE.setCreativePortableGrid(callback.register( + CREATIVE_PORTABLE_GRID, + () -> new PortableGridBlockItem(Blocks.INSTANCE.getCreativePortableGrid(), PortableGridType.CREATIVE) { @Override public boolean shouldCauseReequipAnimation(final ItemStack oldStack, final ItemStack newStack, final boolean slotChanged) { return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); } - }, - () -> new PortableGridBlockItem(Blocks.INSTANCE.getCreativePortableGrid(), PortableGridType.CREATIVE) { + } + )); + Items.INSTANCE.setSecurityCard(callback.register(SECURITY_CARD, () -> new SecurityCardItem() { + @Override + public boolean shouldCauseReequipAnimation(final ItemStack oldStack, + final ItemStack newStack, + final boolean slotChanged) { + return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); + } + })); + Items.INSTANCE.setFallbackSecurityCard(callback.register( + FALLBACK_SECURITY_CARD, + () -> new FallbackSecurityCardItem() { @Override public boolean shouldCauseReequipAnimation(final ItemStack oldStack, final ItemStack newStack, @@ -246,8 +296,7 @@ public boolean shouldCauseReequipAnimation(final ItemStack oldStack, return AbstractModInitializer.allowNbtUpdateAnimation(oldStack, newStack); } } - ); - itemRegistry.register(eventBus); + )); } private void registerBlockEntities(final IEventBus eventBus) { @@ -334,7 +383,9 @@ private void registerTickHandler() { NeoForge.EVENT_BUS.addListener(this::onServerTick); } + @Override protected void registerSlotReferenceProviders() { + super.registerSlotReferenceProviders(); CuriosSlotReferenceProvider.create().ifPresent(slotReferenceProvider -> { PlatformApi.INSTANCE.getSlotReferenceFactoryRegistry().register( createIdentifier("curios"), @@ -358,7 +409,7 @@ public void onRegister(final RegisterEvent e) { e.register(Registries.CREATIVE_MODE_TAB, helper -> helper.register( createIdentifier("general"), CreativeModeTab.builder() - .title(createTranslation("itemGroup", "general")) + .title(ContentNames.MOD) .icon(() -> new ItemStack(Blocks.INSTANCE.getController().getDefault())) .displayItems((params, output) -> CreativeModeTabItems.append(output::accept)) .build() @@ -384,6 +435,20 @@ public void registerWrenchingEvent(final PlayerInteractEvent.RightClickBlock e) }); } + @SubscribeEvent + public void registerSecurityBlockBreakEvent(final BlockEvent.BreakEvent e) { + final BlockEntity blockEntity = e.getLevel().getBlockEntity(e.getPos()); + if (blockEntity instanceof PlatformNetworkNodeContainer platformNetworkNodeContainer + && e.getPlayer() instanceof ServerPlayer serverPlayer + && !platformNetworkNodeContainer.canBreakOrRotate(serverPlayer)) { + PlatformApi.INSTANCE.sendNoPermissionMessage( + serverPlayer, + createTranslation("misc", "no_permission.build.break", e.getState().getBlock().getName()) + ); + e.setCanceled(true); + } + } + @SubscribeEvent public void registerNetworkPackets(final RegisterPayloadHandlerEvent event) { final IPayloadRegistrar registrar = event.registrar(MOD_ID); @@ -432,6 +497,11 @@ private static void registerServerToClientPackets(final IPayloadRegistrar regist WirelessTransmitterRangePacket::decode, handler -> handler.client(WirelessTransmitterRangePacket::handle) ); + registrar.play( + PacketIds.NO_PERMISSION, + NoPermissionPacket::decode, + handler -> handler.client(NoPermissionPacket::handle) + ); } private static void registerClientToServerPackets(final IPayloadRegistrar registrar) { @@ -495,6 +565,21 @@ private static void registerClientToServerPackets(final IPayloadRegistrar regist UseNetworkBoundItemPacket::decode, handler -> handler.server(UseNetworkBoundItemPacket::handle) ); + registrar.play( + PacketIds.SECURITY_CARD_PERMISSION, + SecurityCardPermissionPacket::decode, + handler -> handler.server(SecurityCardPermissionPacket::handle) + ); + registrar.play( + PacketIds.SECURITY_CARD_RESET_PERMISSION, + SecurityCardResetPermissionPacket::decode, + handler -> handler.server(SecurityCardResetPermissionPacket::handle) + ); + registrar.play( + PacketIds.SECURITY_CARD_BOUND_PLAYER, + SecurityCardBoundPlayerPacket::decode, + handler -> handler.server(SecurityCardBoundPlayerPacket::handle) + ); } @SubscribeEvent diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/BlockModelProviderImpl.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/BlockModelProviderImpl.java index b9cffaf10..bf5080b64 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/BlockModelProviderImpl.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/BlockModelProviderImpl.java @@ -17,10 +17,18 @@ public class BlockModelProviderImpl extends BlockModelProvider { private static final String CUTOUT_TEXTURE = "cutout"; private static final String BLOCK_PREFIX = "block"; + private static final ResourceLocation EMISSIVE_CUTOUT = createIdentifier("block/emissive_cutout"); private static final ResourceLocation EMISSIVE_ALL_CUTOUT = createIdentifier("block/emissive_all_cutout"); private static final ResourceLocation EMISSIVE_NORTH_CUTOUT = createIdentifier("block/emissive_north_cutout"); - private static final ResourceLocation NORTH_CUTOUT = createIdentifier("block/north_cutout"); + + private static final ResourceLocation CUTOUT = createIdentifier("block/cutout"); private static final ResourceLocation ALL_CUTOUT = createIdentifier("block/all_cutout"); + private static final ResourceLocation NORTH_CUTOUT = createIdentifier("block/north_cutout"); + + private static final String NORTH = "north"; + private static final String SOUTH = "south"; + + private static final ResourceLocation BOTTOM_TEXTURE = createIdentifier("block/bottom"); public BlockModelProviderImpl(final PackOutput output, final ExistingFileHelper existingFileHelper) { super(output, MOD_ID, existingFileHelper); @@ -36,6 +44,7 @@ protected void registerModels() { registerWirelessTransmitters(); registerNetworkReceivers(); registerNetworkTransmitters(); + registerSecurityManagers(); } private void registerCables() { @@ -82,15 +91,14 @@ private void registerGrids(final String name, final ResourceLocation back = createIdentifier(BLOCK_PREFIX + "/" + name + "/back"); final ResourceLocation front = createIdentifier(BLOCK_PREFIX + "/" + name + "/front"); final ResourceLocation top = createIdentifier(BLOCK_PREFIX + "/" + name + "/top"); - final ResourceLocation bottom = createIdentifier("block/bottom"); withExistingParent(BLOCK_PREFIX + "/" + name + "/" + variantName, baseModel) .texture(PARTICLE_TEXTURE, right) - .texture("north", front) + .texture(NORTH, front) .texture("east", right) - .texture("south", back) + .texture(SOUTH, back) .texture("west", left) .texture("up", top) - .texture("down", bottom) + .texture("down", BOTTOM_TEXTURE) .texture(CUTOUT_TEXTURE, cutout); } @@ -155,4 +163,62 @@ private void registerNetworkTransmitters() { .texture("all", baseTexture) .texture(CUTOUT_TEXTURE, createIdentifier("block/network_transmitter/cutouts/error")); } + + private void registerSecurityManagers() { + final ResourceLocation back = createIdentifier("block/security_manager/back"); + final ResourceLocation front = createIdentifier("block/security_manager/front"); + final ResourceLocation left = createIdentifier("block/security_manager/left"); + final ResourceLocation right = createIdentifier("block/security_manager/right"); + final ResourceLocation top = createIdentifier("block/security_manager/top"); + Blocks.INSTANCE.getNetworkTransmitter().forEach((color, id, receiver) -> { + final ResourceLocation cutoutBack = createIdentifier( + "block/security_manager/cutouts/back/" + color.getName() + ); + final ResourceLocation cutoutFront = createIdentifier( + "block/security_manager/cutouts/front/" + color.getName() + ); + final ResourceLocation cutoutLeft = createIdentifier( + "block/security_manager/cutouts/left/" + color.getName() + ); + final ResourceLocation cutoutRight = createIdentifier( + "block/security_manager/cutouts/right/" + color.getName() + ); + final ResourceLocation cutoutTop = createIdentifier( + "block/security_manager/cutouts/top/" + color.getName() + ); + withExistingParent("block/security_manager/" + color.getName(), EMISSIVE_CUTOUT) + .texture(PARTICLE_TEXTURE, back) + .texture(NORTH, front) + .texture("east", right) + .texture(SOUTH, back) + .texture("west", left) + .texture("up", top) + .texture("down", BOTTOM_TEXTURE) + .texture("cutout_north", cutoutFront) + .texture("cutout_east", cutoutRight) + .texture("cutout_south", cutoutBack) + .texture("cutout_west", cutoutLeft) + .texture("cutout_up", cutoutTop) + .texture("cutout_down", BOTTOM_TEXTURE); + }); + final ResourceLocation cutoutBack = createIdentifier("block/security_manager/cutouts/back/inactive"); + final ResourceLocation cutoutFront = createIdentifier("block/security_manager/cutouts/front/inactive"); + final ResourceLocation cutoutLeft = createIdentifier("block/security_manager/cutouts/left/inactive"); + final ResourceLocation cutoutRight = createIdentifier("block/security_manager/cutouts/right/inactive"); + final ResourceLocation cutoutTop = createIdentifier("block/security_manager/cutouts/top/inactive"); + withExistingParent("block/security_manager/inactive", CUTOUT) + .texture(PARTICLE_TEXTURE, back) + .texture(NORTH, front) + .texture("east", right) + .texture(SOUTH, back) + .texture("west", left) + .texture("up", top) + .texture("down", BOTTOM_TEXTURE) + .texture("cutout_north", cutoutFront) + .texture("cutout_east", cutoutRight) + .texture("cutout_south", cutoutBack) + .texture("cutout_west", cutoutLeft) + .texture("cutout_up", cutoutTop) + .texture("cutout_down", BOTTOM_TEXTURE); + } } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/BlockStateProviderImpl.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/BlockStateProviderImpl.java index 100f823a4..e60050740 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/BlockStateProviderImpl.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/BlockStateProviderImpl.java @@ -9,10 +9,12 @@ import com.refinedmods.refinedstorage2.platform.common.grid.AbstractGridBlock; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkReceiverBlock; import com.refinedmods.refinedstorage2.platform.common.networking.NetworkTransmitterBlock; +import com.refinedmods.refinedstorage2.platform.common.security.SecurityManagerBlock; import com.refinedmods.refinedstorage2.platform.common.support.CableBlockSupport; import com.refinedmods.refinedstorage2.platform.common.support.direction.BiDirection; import com.refinedmods.refinedstorage2.platform.common.support.direction.BiDirectionType; import com.refinedmods.refinedstorage2.platform.common.support.direction.DirectionTypeImpl; +import com.refinedmods.refinedstorage2.platform.common.support.direction.HorizontalDirectionType; import com.refinedmods.refinedstorage2.platform.common.wirelesstransmitter.WirelessTransmitterBlock; import java.util.EnumMap; @@ -68,6 +70,7 @@ protected void registerStatesAndModels() { registerConstructorDestructors(Blocks.INSTANCE.getDestructor(), "destructor"); registerNetworkReceivers(); registerNetworkTransmitters(); + registerSecurityManagers(); } private void registerCables() { @@ -301,6 +304,27 @@ private void registerNetworkTransmitters() { }); } + private void registerSecurityManagers() { + final ModelFile inactive = modelFile(createIdentifier("block/security_manager/inactive")); + Blocks.INSTANCE.getSecurityManager().forEach((color, id, block) -> { + final ModelFile active = modelFile(createIdentifier("block/security_manager/" + color.getName())); + final var builder = getVariantBuilder(block.get()); + builder.forAllStates(blockState -> { + final ConfiguredModel.Builder model = ConfiguredModel.builder(); + if (Boolean.TRUE.equals(blockState.getValue(SecurityManagerBlock.ACTIVE))) { + model.modelFile(active); + } else { + model.modelFile(inactive); + } + final Direction direction = HorizontalDirectionType.INSTANCE.extractDirection(blockState.getValue( + HorizontalDirectionType.INSTANCE.getProperty() + )); + addRotation(model, BiDirection.forHorizontal(direction)); + return model.build(); + }); + }); + } + private void addRotation(final ConfiguredModel.Builder model, final Direction direction) { final int rotationX; if (direction.getAxis() == Direction.Axis.Y) { diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/ItemModelProviderImpl.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/ItemModelProviderImpl.java index 0b0c4cc54..07fc36159 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/ItemModelProviderImpl.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/ItemModelProviderImpl.java @@ -46,6 +46,7 @@ protected void registerModels() { registerWirelessTransmitters(); registerNetworkReceivers(); registerNetworkTransmitters(); + registerSecurityManagers(); } private void registerCables() { @@ -177,6 +178,14 @@ private void registerNetworkTransmitters() { )); } + private void registerSecurityManagers() { + final var blocks = Blocks.INSTANCE.getSecurityManager(); + blocks.forEach((color, id, block) -> withExistingParent( + id.getPath(), + createIdentifier("block/security_manager/" + color.getName()) + )); + } + private ModelFile modelFile(final ResourceLocation location) { return new ModelFile.ExistingModelFile(location, existingFileHelper); } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/loot/BlockDropProvider.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/loot/BlockDropProvider.java index f561592a7..b0a25b484 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/loot/BlockDropProvider.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/loot/BlockDropProvider.java @@ -32,6 +32,7 @@ protected void generate() { Blocks.INSTANCE.getWirelessTransmitter().forEach((color, id, block) -> dropSelf(block.get())); Blocks.INSTANCE.getNetworkReceiver().forEach((color, id, block) -> dropSelf(block.get())); Blocks.INSTANCE.getNetworkTransmitter().forEach((color, id, block) -> dropSelf(block.get())); + Blocks.INSTANCE.getSecurityManager().forEach((color, id, block) -> dropSelf(block.get())); } @Override @@ -48,6 +49,7 @@ protected Iterable getKnownBlocks() { blocks.addAll(Blocks.INSTANCE.getWirelessTransmitter().values()); blocks.addAll(Blocks.INSTANCE.getNetworkReceiver().values()); blocks.addAll(Blocks.INSTANCE.getNetworkTransmitter().values()); + blocks.addAll(Blocks.INSTANCE.getSecurityManager().values()); return blocks; } } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/loot/LootTableProviderImpl.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/loot/LootTableProviderImpl.java index b7ad4842d..6db6ee1c8 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/loot/LootTableProviderImpl.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/loot/LootTableProviderImpl.java @@ -5,15 +5,13 @@ import net.minecraft.data.PackOutput; import net.minecraft.data.loot.LootTableProvider; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; - -import static net.minecraft.world.level.storage.loot.parameters.LootContextParams.EXPLOSION_RADIUS; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; public class LootTableProviderImpl extends LootTableProvider { public LootTableProviderImpl(final PackOutput output) { super(output, Set.of(), List.of(new SubProviderEntry( BlockDropProvider::new, - LootContextParamSet.builder().required(EXPLOSION_RADIUS).build()) - )); + LootContextParamSets.BLOCK + ))); } } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/recipe/RecoloringRecipeProvider.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/recipe/RecoloringRecipeProvider.java index 60ca48254..65e8bbb32 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/recipe/RecoloringRecipeProvider.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/recipe/RecoloringRecipeProvider.java @@ -62,6 +62,9 @@ protected void buildRecipes(final RecipeOutput output) { Blocks.INSTANCE.getNetworkTransmitter().forEach((color, id, block) -> recipe(Tags.NETWORK_TRANSMITTERS, block.get().asItem(), color) .save(output, recipeId(color, "network_transmitter"))); + Blocks.INSTANCE.getSecurityManager().forEach((color, id, block) -> + recipe(Tags.SECURITY_MANAGERS, block.get().asItem(), color) + .save(output, recipeId(color, "security_manager"))); } private ResourceLocation recipeId(final DyeColor color, final String suffix) { diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/tag/ItemTagsProviderImpl.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/tag/ItemTagsProviderImpl.java index aec3ad664..6827cd5cb 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/tag/ItemTagsProviderImpl.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/datagen/tag/ItemTagsProviderImpl.java @@ -4,7 +4,7 @@ import com.refinedmods.refinedstorage2.platform.common.content.Items; import com.refinedmods.refinedstorage2.platform.common.storage.FluidStorageType; import com.refinedmods.refinedstorage2.platform.common.storage.ItemStorageType; -import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +import com.refinedmods.refinedstorage2.platform.common.support.BaseBlockItem; import java.util.Arrays; import java.util.Collection; @@ -34,6 +34,7 @@ import static com.refinedmods.refinedstorage2.platform.common.content.Tags.IMPORTERS; import static com.refinedmods.refinedstorage2.platform.common.content.Tags.NETWORK_RECEIVERS; import static com.refinedmods.refinedstorage2.platform.common.content.Tags.NETWORK_TRANSMITTERS; +import static com.refinedmods.refinedstorage2.platform.common.content.Tags.SECURITY_MANAGERS; import static com.refinedmods.refinedstorage2.platform.common.content.Tags.STORAGE_DISKS; import static com.refinedmods.refinedstorage2.platform.common.content.Tags.WIRELESS_TRANSMITTERS; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.MOD_ID; @@ -110,13 +111,17 @@ protected void addTags(final HolderLookup.Provider provider) { Blocks.INSTANCE.getNetworkTransmitter().values().stream() .map(block -> (Supplier) block::asItem) .toList()); + addAllToTag(SECURITY_MANAGERS, + Blocks.INSTANCE.getSecurityManager().values().stream() + .map(block -> (Supplier) block::asItem) + .toList()); } private void addAllToTag(final TagKey t, final Collection> items) { tag(t).add(items.stream().map(Supplier::get).toArray(Item[]::new)).replace(false); } - private void addAllToTag2(final TagKey t, final Collection> items) { + private void addAllToTag2(final TagKey t, final Collection> items) { tag(t).add(items.stream().map(Supplier::get).toArray(Item[]::new)).replace(false); } } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/FluidGridExtractionStrategy.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/FluidGridExtractionStrategy.java index 0e716b99a..dfcea5ddd 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/FluidGridExtractionStrategy.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/FluidGridExtractionStrategy.java @@ -8,7 +8,6 @@ import com.refinedmods.refinedstorage2.api.storage.Storage; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridExtractionStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.common.support.resource.FluidResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; @@ -16,7 +15,7 @@ import javax.annotation.Nullable; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; @@ -38,10 +37,10 @@ public class FluidGridExtractionStrategy implements GridExtractionStrategy { private final Storage itemStorage; public FluidGridExtractionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { this.menu = containerMenu; - this.gridOperations = grid.createOperations(ResourceTypes.FLUID, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.FLUID, player); this.playerInventoryStorage = new PlayerMainInvWrapper(player.getInventory()); this.itemStorage = grid.getItemStorage(); } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/FluidGridInsertionStrategy.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/FluidGridInsertionStrategy.java index 65bd05106..a63e81e68 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/FluidGridInsertionStrategy.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/FluidGridInsertionStrategy.java @@ -5,13 +5,12 @@ import com.refinedmods.refinedstorage2.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridInsertionStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.common.support.resource.FluidResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; import javax.annotation.Nullable; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.capabilities.Capabilities; @@ -26,9 +25,9 @@ public class FluidGridInsertionStrategy implements GridInsertionStrategy { private final AbstractContainerMenu menu; private final GridOperations gridOperations; - public FluidGridInsertionStrategy(final AbstractContainerMenu menu, final Player player, final Grid grid) { + public FluidGridInsertionStrategy(final AbstractContainerMenu menu, final ServerPlayer player, final Grid grid) { this.menu = menu; - this.gridOperations = grid.createOperations(ResourceTypes.FLUID, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.FLUID, player); } @Override diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridExtractionStrategy.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridExtractionStrategy.java index fc691d78a..f1d24744b 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridExtractionStrategy.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridExtractionStrategy.java @@ -5,14 +5,13 @@ import com.refinedmods.refinedstorage2.platform.api.exporter.AmountOverride; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridExtractionStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; import com.refinedmods.refinedstorage2.platform.forge.storage.CapabilityCache; import com.refinedmods.refinedstorage2.platform.forge.storage.ItemHandlerInsertableStorage; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import net.neoforged.neoforge.items.IItemHandler; import net.neoforged.neoforge.items.wrapper.PlayerMainInvWrapper; @@ -23,9 +22,9 @@ public class ItemGridExtractionStrategy implements GridExtractionStrategy { private final CursorItemHandler playerCursorItemHandler; public ItemGridExtractionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { - this.gridOperations = grid.createOperations(ResourceTypes.ITEM, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.ITEM, player); this.playerInventoryStorage = new PlayerMainInvWrapper(player.getInventory()); this.playerCursorItemHandler = new CursorItemHandler(containerMenu); } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridInsertionStrategy.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridInsertionStrategy.java index 732d2adee..326f7836d 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridInsertionStrategy.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridInsertionStrategy.java @@ -5,13 +5,12 @@ import com.refinedmods.refinedstorage2.platform.api.exporter.AmountOverride; import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridInsertionStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; import com.refinedmods.refinedstorage2.platform.forge.storage.CapabilityCache; import com.refinedmods.refinedstorage2.platform.forge.storage.ItemHandlerExtractableStorage; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; @@ -26,10 +25,10 @@ public class ItemGridInsertionStrategy implements GridInsertionStrategy { private final CursorItemHandler playerCursorItemHandler; public ItemGridInsertionStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { this.containerMenu = containerMenu; - this.gridOperations = grid.createOperations(ResourceTypes.ITEM, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.ITEM, player); this.playerCursorItemHandler = new CursorItemHandler(containerMenu); } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridScrollingStrategy.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridScrollingStrategy.java index 2b5b88169..8093f7982 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridScrollingStrategy.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/grid/strategy/ItemGridScrollingStrategy.java @@ -7,7 +7,6 @@ import com.refinedmods.refinedstorage2.platform.api.grid.Grid; import com.refinedmods.refinedstorage2.platform.api.grid.GridScrollMode; import com.refinedmods.refinedstorage2.platform.api.grid.strategy.GridScrollingStrategy; -import com.refinedmods.refinedstorage2.platform.api.storage.PlayerActor; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.common.support.resource.ItemResource; import com.refinedmods.refinedstorage2.platform.common.support.resource.ResourceTypes; @@ -15,8 +14,8 @@ import com.refinedmods.refinedstorage2.platform.forge.storage.ItemHandlerExtractableStorage; import com.refinedmods.refinedstorage2.platform.forge.storage.ItemHandlerInsertableStorage; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.neoforged.neoforge.items.IItemHandler; import net.neoforged.neoforge.items.wrapper.InvWrapper; @@ -30,9 +29,9 @@ public class ItemGridScrollingStrategy implements GridScrollingStrategy { private final CursorItemHandler playerCursorItemHandler; public ItemGridScrollingStrategy(final AbstractContainerMenu containerMenu, - final Player player, + final ServerPlayer player, final Grid grid) { - this.gridOperations = grid.createOperations(ResourceTypes.ITEM, new PlayerActor(player)); + this.gridOperations = grid.createOperations(ResourceTypes.ITEM, player); this.playerInventory = player.getInventory(); this.playerInventoryStorage = new PlayerMainInvWrapper(playerInventory); this.playerCursorItemHandler = new CursorItemHandler(containerMenu); diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/recipemod/rei/RefinedStorageREIClientPlugin.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/recipemod/rei/RefinedStorageREIClientPlugin.java index 1e73e5325..37064bfa7 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/recipemod/rei/RefinedStorageREIClientPlugin.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/recipemod/rei/RefinedStorageREIClientPlugin.java @@ -93,6 +93,12 @@ public void registerCollapsibleEntries(final CollapsibleEntryRegistry registry) ContentIds.NETWORK_TRANSMITTER, Tags.NETWORK_TRANSMITTERS ); + groupItems( + registry, + Blocks.INSTANCE.getSecurityManager(), + ContentIds.SECURITY_MANAGER, + Tags.SECURITY_MANAGERS + ); } @Override diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/ClientToServerCommunicationsImpl.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/ClientToServerCommunicationsImpl.java index 7554e91d4..d5944e233 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/ClientToServerCommunicationsImpl.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/ClientToServerCommunicationsImpl.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage2.api.grid.operations.GridInsertMode; import com.refinedmods.refinedstorage2.platform.api.PlatformApi; import com.refinedmods.refinedstorage2.platform.api.grid.GridScrollMode; +import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; import com.refinedmods.refinedstorage2.platform.api.support.network.bounditem.SlotReference; import com.refinedmods.refinedstorage2.platform.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage2.platform.api.support.resource.ResourceType; @@ -18,7 +19,7 @@ import net.neoforged.neoforge.network.PacketDistributor; public class ClientToServerCommunicationsImpl implements ClientToServerCommunications { - private void sendPacket(final CustomPacketPayload packet) { + private void sendToServer(final CustomPacketPayload packet) { PacketDistributor.SERVER.noArg().send(packet); } @@ -27,14 +28,9 @@ public void sendGridExtract(final PlatformResourceKey resource, final GridExtractMode mode, final boolean cursor) { final ResourceType resourceType = resource.getResourceType(); - PlatformApi.INSTANCE.getResourceTypeRegistry().getId(resourceType) - .ifPresent(id -> sendPacket(new GridExtractPacket( - resourceType, - id, - resource, - mode, - cursor - ))); + PlatformApi.INSTANCE.getResourceTypeRegistry().getId(resourceType).ifPresent(id -> sendToServer( + new GridExtractPacket(resourceType, id, resource, mode, cursor) + )); } @Override @@ -42,72 +38,80 @@ public void sendGridScroll(final PlatformResourceKey resource, final GridScrollMode mode, final int slotIndex) { final ResourceType resourceType = resource.getResourceType(); - PlatformApi.INSTANCE.getResourceTypeRegistry() - .getId(resourceType) - .ifPresent(id -> sendPacket(new GridScrollPacket( - resourceType, - id, - resource, - mode, - slotIndex - ))); + PlatformApi.INSTANCE.getResourceTypeRegistry().getId(resourceType).ifPresent(id -> sendToServer( + new GridScrollPacket(resourceType, id, resource, mode, slotIndex) + )); } @Override public void sendGridInsert(final GridInsertMode mode, final boolean tryAlternatives) { - sendPacket(new GridInsertPacket(mode == GridInsertMode.SINGLE_RESOURCE, tryAlternatives)); + sendToServer(new GridInsertPacket(mode == GridInsertMode.SINGLE_RESOURCE, tryAlternatives)); } @Override public void sendCraftingGridClear(final boolean toPlayerInventory) { - sendPacket(new CraftingGridClearPacket(toPlayerInventory)); + sendToServer(new CraftingGridClearPacket(toPlayerInventory)); } @Override public void sendCraftingGridRecipeTransfer(final List> recipe) { - sendPacket(new CraftingGridRecipeTransferPacket(recipe)); + sendToServer(new CraftingGridRecipeTransferPacket(recipe)); } @Override public void sendPropertyChange(final PropertyType type, final T value) { - sendPacket(new PropertyChangePacket(type.id(), type.serializer().apply(value))); + sendToServer(new PropertyChangePacket(type.id(), type.serializer().apply(value))); } @Override public void sendStorageInfoRequest(final UUID storageId) { - sendPacket(new StorageInfoRequestPacket(storageId)); + sendToServer(new StorageInfoRequestPacket(storageId)); } @Override public void sendResourceSlotChange(final int slotIndex, final boolean tryAlternatives) { - sendPacket(new ResourceSlotChangePacket(slotIndex, tryAlternatives)); + sendToServer(new ResourceSlotChangePacket(slotIndex, tryAlternatives)); } @Override public void sendResourceFilterSlotChange(final PlatformResourceKey resource, final int slotIndex) { final ResourceType resourceType = resource.getResourceType(); - PlatformApi.INSTANCE.getResourceTypeRegistry().getId(resourceType).ifPresent( - id -> sendPacket(new ResourceFilterSlotChangePacket( - slotIndex, - resource, - resourceType, - id - )) - ); + PlatformApi.INSTANCE.getResourceTypeRegistry().getId(resourceType).ifPresent(id -> sendToServer( + new ResourceFilterSlotChangePacket(slotIndex, resource, resourceType, id) + )); } @Override public void sendResourceSlotAmountChange(final int slotIndex, final long amount) { - sendPacket(new ResourceSlotAmountChangePacket(slotIndex, amount)); + sendToServer(new ResourceSlotAmountChangePacket(slotIndex, amount)); } @Override public void sendSingleAmountChange(final double amount) { - sendPacket(new SingleAmountChangePacket(amount)); + sendToServer(new SingleAmountChangePacket(amount)); } @Override public void sendUseNetworkBoundItem(final SlotReference slotReference) { - sendPacket(new UseNetworkBoundItemPacket(slotReference)); + sendToServer(new UseNetworkBoundItemPacket(slotReference)); + } + + @Override + public void sendSecurityCardPermission(final PlatformPermission permission, final boolean allowed) { + PlatformApi.INSTANCE.getPermissionRegistry().getId(permission).ifPresent(id -> sendToServer( + new SecurityCardPermissionPacket(id, allowed) + )); + } + + @Override + public void sendSecurityCardResetPermission(final PlatformPermission permission) { + PlatformApi.INSTANCE.getPermissionRegistry().getId(permission).ifPresent(id -> sendToServer( + new SecurityCardResetPermissionPacket(id) + )); + } + + @Override + public void sendSecurityCardBoundPlayer(final UUID playerId) { + sendToServer(new SecurityCardBoundPlayerPacket(playerId)); } } diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/SecurityCardBoundPlayerPacket.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/SecurityCardBoundPlayerPacket.java new file mode 100644 index 000000000..686cec4c5 --- /dev/null +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/SecurityCardBoundPlayerPacket.java @@ -0,0 +1,38 @@ +package com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s; + +import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.support.packet.PacketIds; + +import java.util.UUID; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +public record SecurityCardBoundPlayerPacket(UUID playerId) implements CustomPacketPayload { + public static SecurityCardBoundPlayerPacket decode(final FriendlyByteBuf buf) { + return new SecurityCardBoundPlayerPacket(buf.readUUID()); + } + + public static void handle(final SecurityCardBoundPlayerPacket packet, final PlayPayloadContext ctx) { + ctx.player().ifPresent(player -> ctx.workHandler().submitAsync(() -> { + if (player.getServer() == null) { + return; + } + if (player.containerMenu instanceof SecurityCardContainerMenu securityCardContainerMenu) { + securityCardContainerMenu.setBoundPlayer(player.getServer(), packet.playerId); + } + })); + } + + @Override + public void write(final FriendlyByteBuf buf) { + buf.writeUUID(playerId); + } + + @Override + public ResourceLocation id() { + return PacketIds.SECURITY_CARD_BOUND_PLAYER; + } +} diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/SecurityCardPermissionPacket.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/SecurityCardPermissionPacket.java new file mode 100644 index 000000000..16a8f5353 --- /dev/null +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/SecurityCardPermissionPacket.java @@ -0,0 +1,35 @@ +package com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s; + +import com.refinedmods.refinedstorage2.platform.common.security.AbstractSecurityCardContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.support.packet.PacketIds; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +public record SecurityCardPermissionPacket(ResourceLocation permissionId, boolean allowed) + implements CustomPacketPayload { + public static SecurityCardPermissionPacket decode(final FriendlyByteBuf buf) { + return new SecurityCardPermissionPacket(buf.readResourceLocation(), buf.readBoolean()); + } + + public static void handle(final SecurityCardPermissionPacket packet, final PlayPayloadContext ctx) { + ctx.player().ifPresent(player -> ctx.workHandler().submitAsync(() -> { + if (player.containerMenu instanceof AbstractSecurityCardContainerMenu securityCardContainerMenu) { + securityCardContainerMenu.setPermission(packet.permissionId, packet.allowed); + } + })); + } + + @Override + public void write(final FriendlyByteBuf buf) { + buf.writeResourceLocation(permissionId); + buf.writeBoolean(allowed); + } + + @Override + public ResourceLocation id() { + return PacketIds.SECURITY_CARD_PERMISSION; + } +} diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/SecurityCardResetPermissionPacket.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/SecurityCardResetPermissionPacket.java new file mode 100644 index 000000000..1831a87a1 --- /dev/null +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/c2s/SecurityCardResetPermissionPacket.java @@ -0,0 +1,33 @@ +package com.refinedmods.refinedstorage2.platform.forge.support.packet.c2s; + +import com.refinedmods.refinedstorage2.platform.common.security.AbstractSecurityCardContainerMenu; +import com.refinedmods.refinedstorage2.platform.common.support.packet.PacketIds; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +public record SecurityCardResetPermissionPacket(ResourceLocation permissionId) implements CustomPacketPayload { + public static SecurityCardResetPermissionPacket decode(final FriendlyByteBuf buf) { + return new SecurityCardResetPermissionPacket(buf.readResourceLocation()); + } + + public static void handle(final SecurityCardResetPermissionPacket packet, final PlayPayloadContext ctx) { + ctx.player().ifPresent(player -> ctx.workHandler().submitAsync(() -> { + if (player.containerMenu instanceof AbstractSecurityCardContainerMenu securityCardContainerMenu) { + securityCardContainerMenu.resetPermission(packet.permissionId); + } + })); + } + + @Override + public void write(final FriendlyByteBuf buf) { + buf.writeResourceLocation(permissionId); + } + + @Override + public ResourceLocation id() { + return PacketIds.SECURITY_CARD_RESET_PERMISSION; + } +} diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/s2c/NoPermissionPacket.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/s2c/NoPermissionPacket.java new file mode 100644 index 000000000..b0afbb025 --- /dev/null +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/s2c/NoPermissionPacket.java @@ -0,0 +1,30 @@ +package com.refinedmods.refinedstorage2.platform.forge.support.packet.s2c; + +import com.refinedmods.refinedstorage2.platform.common.support.packet.PacketIds; +import com.refinedmods.refinedstorage2.platform.common.util.SecurityToastHelper; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +public record NoPermissionPacket(Component component) implements CustomPacketPayload { + public static NoPermissionPacket decode(final FriendlyByteBuf buf) { + return new NoPermissionPacket(buf.readComponent()); + } + + public static void handle(final NoPermissionPacket packet, final PlayPayloadContext ctx) { + ctx.workHandler().submitAsync(() -> SecurityToastHelper.addNoPermissionToast(packet.component)); + } + + @Override + public void write(final FriendlyByteBuf friendlyByteBuf) { + friendlyByteBuf.writeComponent(component); + } + + @Override + public ResourceLocation id() { + return PacketIds.NO_PERMISSION; + } +} diff --git a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/s2c/ServerToClientCommunicationsImpl.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/s2c/ServerToClientCommunicationsImpl.java index 572261c2c..a57560624 100644 --- a/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/s2c/ServerToClientCommunicationsImpl.java +++ b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/support/packet/s2c/ServerToClientCommunicationsImpl.java @@ -11,6 +11,7 @@ import java.util.UUID; import javax.annotation.Nullable; +import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.level.ServerPlayer; import net.neoforged.neoforge.network.PacketDistributor; @@ -85,4 +86,9 @@ public void sendStorageInfoResponse(final ServerPlayer player, public void sendNetworkTransmitterStatus(final ServerPlayer player, final NetworkTransmitterStatus status) { sendToPlayer(player, new NetworkTransmitterStatusPacket(status.error(), status.message())); } + + @Override + public void sendNoPermission(final ServerPlayer player, final Component message) { + sendToPlayer(player, new NoPermissionPacket(message)); + } } diff --git a/settings.gradle b/settings.gradle index 62c0315a2..37d224592 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -gradle.ext.refinedArchitectVersion = "0.11.3" +gradle.ext.refinedArchitectVersion = "0.11.5" dependencyResolutionManagement { repositories {