From 4ae1b45cb284eef4879b204a7cb6026eacd2efe3 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 1 Apr 2024 15:47:39 +0200 Subject: [PATCH 1/7] fix: security card not updating while gui is open because slots were not present on the server --- .../common/security/AbstractSecurityCardContainerMenu.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 index f9127232f..9f1507add 100644 --- 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 @@ -48,6 +48,7 @@ protected AbstractSecurityCardContainerMenu(final MenuType menuType, super(menuType, syncId); this.playerInventory = playerInventory; this.disabledSlot = disabledSlot; + onScreenReady(0); } List getPermissions() { @@ -93,7 +94,7 @@ Permission resetPermission(final PlatformPermission permission) { 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); From 7975d1371c4a740cd4c0241fb228e2c76e23902f Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 1 Apr 2024 19:29:11 +0200 Subject: [PATCH 2/7] feat: security manager block Also fixes an issue where the datagen for loot tables was broken. --- CHANGELOG.md | 1 + .../SecurityNetworkComponentImpl.java | 2 + .../blockstates/black_security_manager.json | 110 ++++++++++++++++++ .../blockstates/blue_security_manager.json | 110 ++++++++++++++++++ .../blockstates/brown_security_manager.json | 110 ++++++++++++++++++ .../blockstates/cyan_security_manager.json | 110 ++++++++++++++++++ .../blockstates/gray_security_manager.json | 110 ++++++++++++++++++ .../blockstates/green_security_manager.json | 110 ++++++++++++++++++ .../light_gray_security_manager.json | 110 ++++++++++++++++++ .../blockstates/lime_security_manager.json | 110 ++++++++++++++++++ .../blockstates/magenta_security_manager.json | 110 ++++++++++++++++++ .../blockstates/orange_security_manager.json | 110 ++++++++++++++++++ .../blockstates/pink_security_manager.json | 110 ++++++++++++++++++ .../blockstates/purple_security_manager.json | 110 ++++++++++++++++++ .../blockstates/red_security_manager.json | 110 ++++++++++++++++++ .../blockstates/security_manager.json | 110 ++++++++++++++++++ .../blockstates/white_security_manager.json | 110 ++++++++++++++++++ .../blockstates/yellow_security_manager.json | 110 ++++++++++++++++++ .../models/block/security_manager/black.json | 18 +++ .../models/block/security_manager/blue.json | 18 +++ .../models/block/security_manager/brown.json | 18 +++ .../models/block/security_manager/cyan.json | 18 +++ .../models/block/security_manager/gray.json | 18 +++ .../models/block/security_manager/green.json | 18 +++ .../block/security_manager/inactive.json | 18 +++ .../block/security_manager/light_blue.json | 18 +++ .../block/security_manager/light_gray.json | 18 +++ .../models/block/security_manager/lime.json | 18 +++ .../block/security_manager/magenta.json | 18 +++ .../models/block/security_manager/orange.json | 18 +++ .../models/block/security_manager/pink.json | 18 +++ .../models/block/security_manager/purple.json | 18 +++ .../models/block/security_manager/red.json | 18 +++ .../models/block/security_manager/white.json | 18 +++ .../models/block/security_manager/yellow.json | 18 +++ .../models/item/black_security_manager.json | 3 + .../models/item/blue_security_manager.json | 3 + .../models/item/brown_security_manager.json | 3 + .../models/item/cyan_security_manager.json | 3 + .../models/item/gray_security_manager.json | 3 + .../models/item/green_security_manager.json | 3 + .../item/light_gray_security_manager.json | 3 + .../models/item/lime_security_manager.json | 3 + .../models/item/magenta_security_manager.json | 3 + .../models/item/orange_security_manager.json | 3 + .../models/item/pink_security_manager.json | 3 + .../models/item/purple_security_manager.json | 3 + .../models/item/red_security_manager.json | 3 + .../models/item/security_manager.json | 3 + .../models/item/white_security_manager.json | 3 + .../models/item/yellow_security_manager.json | 3 + .../recipes/misc/coloring/black_cable.json | 7 +- .../misc/coloring/black_constructor.json | 7 +- .../misc/coloring/black_controller.json | 7 +- .../misc/coloring/black_crafting_grid.json | 7 +- .../misc/coloring/black_destructor.json | 7 +- .../recipes/misc/coloring/black_detector.json | 7 +- .../recipes/misc/coloring/black_exporter.json | 7 +- .../misc/coloring/black_external_storage.json | 7 +- .../recipes/misc/coloring/black_grid.json | 7 +- .../recipes/misc/coloring/black_importer.json | 7 +- .../misc/coloring/black_network_receiver.json | 7 +- .../coloring/black_network_transmitter.json | 7 +- .../misc/coloring/black_security_manager.json | 32 +++++ .../coloring/black_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/blue_cable.json | 7 +- .../misc/coloring/blue_constructor.json | 7 +- .../misc/coloring/blue_controller.json | 7 +- .../misc/coloring/blue_crafting_grid.json | 7 +- .../misc/coloring/blue_destructor.json | 7 +- .../recipes/misc/coloring/blue_detector.json | 7 +- .../recipes/misc/coloring/blue_exporter.json | 7 +- .../misc/coloring/blue_external_storage.json | 7 +- .../recipes/misc/coloring/blue_grid.json | 7 +- .../recipes/misc/coloring/blue_importer.json | 7 +- .../misc/coloring/blue_network_receiver.json | 7 +- .../coloring/blue_network_transmitter.json | 7 +- .../misc/coloring/blue_security_manager.json | 32 +++++ .../coloring/blue_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/brown_cable.json | 7 +- .../misc/coloring/brown_constructor.json | 7 +- .../misc/coloring/brown_controller.json | 7 +- .../misc/coloring/brown_crafting_grid.json | 7 +- .../misc/coloring/brown_destructor.json | 7 +- .../recipes/misc/coloring/brown_detector.json | 7 +- .../recipes/misc/coloring/brown_exporter.json | 7 +- .../misc/coloring/brown_external_storage.json | 7 +- .../recipes/misc/coloring/brown_grid.json | 7 +- .../recipes/misc/coloring/brown_importer.json | 7 +- .../misc/coloring/brown_network_receiver.json | 7 +- .../coloring/brown_network_transmitter.json | 7 +- .../misc/coloring/brown_security_manager.json | 32 +++++ .../coloring/brown_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/cyan_cable.json | 7 +- .../misc/coloring/cyan_constructor.json | 7 +- .../misc/coloring/cyan_controller.json | 7 +- .../misc/coloring/cyan_crafting_grid.json | 7 +- .../misc/coloring/cyan_destructor.json | 7 +- .../recipes/misc/coloring/cyan_detector.json | 7 +- .../recipes/misc/coloring/cyan_exporter.json | 7 +- .../misc/coloring/cyan_external_storage.json | 7 +- .../recipes/misc/coloring/cyan_grid.json | 7 +- .../recipes/misc/coloring/cyan_importer.json | 7 +- .../misc/coloring/cyan_network_receiver.json | 7 +- .../coloring/cyan_network_transmitter.json | 7 +- .../misc/coloring/cyan_security_manager.json | 32 +++++ .../coloring/cyan_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/gray_cable.json | 7 +- .../misc/coloring/gray_constructor.json | 7 +- .../misc/coloring/gray_controller.json | 7 +- .../misc/coloring/gray_crafting_grid.json | 7 +- .../misc/coloring/gray_destructor.json | 7 +- .../recipes/misc/coloring/gray_detector.json | 7 +- .../recipes/misc/coloring/gray_exporter.json | 7 +- .../misc/coloring/gray_external_storage.json | 7 +- .../recipes/misc/coloring/gray_grid.json | 7 +- .../recipes/misc/coloring/gray_importer.json | 7 +- .../misc/coloring/gray_network_receiver.json | 7 +- .../coloring/gray_network_transmitter.json | 7 +- .../misc/coloring/gray_security_manager.json | 32 +++++ .../coloring/gray_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/green_cable.json | 7 +- .../misc/coloring/green_constructor.json | 7 +- .../misc/coloring/green_controller.json | 7 +- .../misc/coloring/green_crafting_grid.json | 7 +- .../misc/coloring/green_destructor.json | 7 +- .../recipes/misc/coloring/green_detector.json | 7 +- .../recipes/misc/coloring/green_exporter.json | 7 +- .../misc/coloring/green_external_storage.json | 7 +- .../recipes/misc/coloring/green_grid.json | 7 +- .../recipes/misc/coloring/green_importer.json | 7 +- .../misc/coloring/green_network_receiver.json | 7 +- .../coloring/green_network_transmitter.json | 7 +- .../misc/coloring/green_security_manager.json | 32 +++++ .../coloring/green_wireless_transmitter.json | 7 +- .../misc/coloring/light_blue_cable.json | 7 +- .../misc/coloring/light_blue_constructor.json | 7 +- .../misc/coloring/light_blue_controller.json | 7 +- .../coloring/light_blue_crafting_grid.json | 7 +- .../misc/coloring/light_blue_destructor.json | 7 +- .../misc/coloring/light_blue_detector.json | 7 +- .../misc/coloring/light_blue_exporter.json | 7 +- .../coloring/light_blue_external_storage.json | 7 +- .../misc/coloring/light_blue_grid.json | 7 +- .../misc/coloring/light_blue_importer.json | 7 +- .../coloring/light_blue_network_receiver.json | 7 +- .../light_blue_network_transmitter.json | 7 +- .../coloring/light_blue_security_manager.json | 32 +++++ .../light_blue_wireless_transmitter.json | 7 +- .../misc/coloring/light_gray_cable.json | 7 +- .../misc/coloring/light_gray_constructor.json | 7 +- .../misc/coloring/light_gray_controller.json | 7 +- .../coloring/light_gray_crafting_grid.json | 7 +- .../misc/coloring/light_gray_destructor.json | 7 +- .../misc/coloring/light_gray_detector.json | 7 +- .../misc/coloring/light_gray_exporter.json | 7 +- .../coloring/light_gray_external_storage.json | 7 +- .../misc/coloring/light_gray_grid.json | 7 +- .../misc/coloring/light_gray_importer.json | 7 +- .../coloring/light_gray_network_receiver.json | 7 +- .../light_gray_network_transmitter.json | 7 +- .../coloring/light_gray_security_manager.json | 32 +++++ .../light_gray_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/lime_cable.json | 7 +- .../misc/coloring/lime_constructor.json | 7 +- .../misc/coloring/lime_controller.json | 7 +- .../misc/coloring/lime_crafting_grid.json | 7 +- .../misc/coloring/lime_destructor.json | 7 +- .../recipes/misc/coloring/lime_detector.json | 7 +- .../recipes/misc/coloring/lime_exporter.json | 7 +- .../misc/coloring/lime_external_storage.json | 7 +- .../recipes/misc/coloring/lime_grid.json | 7 +- .../recipes/misc/coloring/lime_importer.json | 7 +- .../misc/coloring/lime_network_receiver.json | 7 +- .../coloring/lime_network_transmitter.json | 7 +- .../misc/coloring/lime_security_manager.json | 32 +++++ .../coloring/lime_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/magenta_cable.json | 7 +- .../misc/coloring/magenta_constructor.json | 7 +- .../misc/coloring/magenta_controller.json | 7 +- .../misc/coloring/magenta_crafting_grid.json | 7 +- .../misc/coloring/magenta_destructor.json | 7 +- .../misc/coloring/magenta_detector.json | 7 +- .../misc/coloring/magenta_exporter.json | 7 +- .../coloring/magenta_external_storage.json | 7 +- .../recipes/misc/coloring/magenta_grid.json | 7 +- .../misc/coloring/magenta_importer.json | 7 +- .../coloring/magenta_network_receiver.json | 7 +- .../coloring/magenta_network_transmitter.json | 7 +- .../coloring/magenta_security_manager.json | 32 +++++ .../magenta_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/orange_cable.json | 7 +- .../misc/coloring/orange_constructor.json | 7 +- .../misc/coloring/orange_controller.json | 7 +- .../misc/coloring/orange_crafting_grid.json | 7 +- .../misc/coloring/orange_destructor.json | 7 +- .../misc/coloring/orange_detector.json | 7 +- .../misc/coloring/orange_exporter.json | 7 +- .../coloring/orange_external_storage.json | 7 +- .../recipes/misc/coloring/orange_grid.json | 7 +- .../misc/coloring/orange_importer.json | 7 +- .../coloring/orange_network_receiver.json | 7 +- .../coloring/orange_network_transmitter.json | 7 +- .../coloring/orange_security_manager.json | 32 +++++ .../coloring/orange_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/pink_cable.json | 7 +- .../misc/coloring/pink_constructor.json | 7 +- .../misc/coloring/pink_controller.json | 7 +- .../misc/coloring/pink_crafting_grid.json | 7 +- .../misc/coloring/pink_destructor.json | 7 +- .../recipes/misc/coloring/pink_detector.json | 7 +- .../recipes/misc/coloring/pink_exporter.json | 7 +- .../misc/coloring/pink_external_storage.json | 7 +- .../recipes/misc/coloring/pink_grid.json | 7 +- .../recipes/misc/coloring/pink_importer.json | 7 +- .../misc/coloring/pink_network_receiver.json | 7 +- .../coloring/pink_network_transmitter.json | 7 +- .../misc/coloring/pink_security_manager.json | 32 +++++ .../coloring/pink_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/purple_cable.json | 7 +- .../misc/coloring/purple_constructor.json | 7 +- .../misc/coloring/purple_controller.json | 7 +- .../misc/coloring/purple_crafting_grid.json | 7 +- .../misc/coloring/purple_destructor.json | 7 +- .../misc/coloring/purple_detector.json | 7 +- .../misc/coloring/purple_exporter.json | 7 +- .../coloring/purple_external_storage.json | 7 +- .../recipes/misc/coloring/purple_grid.json | 7 +- .../misc/coloring/purple_importer.json | 7 +- .../coloring/purple_network_receiver.json | 7 +- .../coloring/purple_network_transmitter.json | 7 +- .../coloring/purple_security_manager.json | 32 +++++ .../coloring/purple_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/red_cable.json | 7 +- .../misc/coloring/red_constructor.json | 7 +- .../recipes/misc/coloring/red_controller.json | 7 +- .../misc/coloring/red_crafting_grid.json | 7 +- .../recipes/misc/coloring/red_destructor.json | 7 +- .../recipes/misc/coloring/red_detector.json | 7 +- .../recipes/misc/coloring/red_exporter.json | 7 +- .../misc/coloring/red_external_storage.json | 7 +- .../recipes/misc/coloring/red_grid.json | 7 +- .../recipes/misc/coloring/red_importer.json | 7 +- .../misc/coloring/red_network_receiver.json | 7 +- .../coloring/red_network_transmitter.json | 7 +- .../misc/coloring/red_security_manager.json | 32 +++++ .../coloring/red_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/white_cable.json | 7 +- .../misc/coloring/white_constructor.json | 7 +- .../misc/coloring/white_controller.json | 7 +- .../misc/coloring/white_crafting_grid.json | 7 +- .../misc/coloring/white_destructor.json | 7 +- .../recipes/misc/coloring/white_detector.json | 7 +- .../recipes/misc/coloring/white_exporter.json | 7 +- .../misc/coloring/white_external_storage.json | 7 +- .../recipes/misc/coloring/white_grid.json | 7 +- .../recipes/misc/coloring/white_importer.json | 7 +- .../misc/coloring/white_network_receiver.json | 7 +- .../coloring/white_network_transmitter.json | 7 +- .../misc/coloring/white_security_manager.json | 32 +++++ .../coloring/white_wireless_transmitter.json | 7 +- .../recipes/misc/coloring/yellow_cable.json | 7 +- .../misc/coloring/yellow_constructor.json | 7 +- .../misc/coloring/yellow_controller.json | 7 +- .../misc/coloring/yellow_crafting_grid.json | 7 +- .../misc/coloring/yellow_destructor.json | 7 +- .../misc/coloring/yellow_detector.json | 7 +- .../misc/coloring/yellow_exporter.json | 7 +- .../coloring/yellow_external_storage.json | 7 +- .../recipes/misc/coloring/yellow_grid.json | 7 +- .../misc/coloring/yellow_importer.json | 7 +- .../coloring/yellow_network_receiver.json | 7 +- .../coloring/yellow_network_transmitter.json | 7 +- .../coloring/yellow_security_manager.json | 32 +++++ .../coloring/yellow_wireless_transmitter.json | 7 +- .../loot_tables/blocks/black_cable.json | 1 + .../loot_tables/blocks/black_constructor.json | 1 + .../loot_tables/blocks/black_controller.json | 1 + .../blocks/black_crafting_grid.json | 1 + .../blocks/black_creative_controller.json | 1 + .../loot_tables/blocks/black_destructor.json | 1 + .../loot_tables/blocks/black_detector.json | 1 + .../loot_tables/blocks/black_grid.json | 1 + .../blocks/black_network_receiver.json | 1 + .../blocks/black_network_transmitter.json | 1 + .../blocks/black_security_manager.json | 21 ++++ .../blocks/black_wireless_transmitter.json | 1 + .../loot_tables/blocks/blue_cable.json | 1 + .../loot_tables/blocks/blue_constructor.json | 1 + .../loot_tables/blocks/blue_controller.json | 1 + .../blocks/blue_crafting_grid.json | 1 + .../blocks/blue_creative_controller.json | 1 + .../loot_tables/blocks/blue_destructor.json | 1 + .../loot_tables/blocks/blue_detector.json | 1 + .../loot_tables/blocks/blue_grid.json | 1 + .../blocks/blue_network_receiver.json | 1 + .../blocks/blue_network_transmitter.json | 1 + .../blocks/blue_security_manager.json | 21 ++++ .../blocks/blue_wireless_transmitter.json | 1 + .../loot_tables/blocks/brown_cable.json | 1 + .../loot_tables/blocks/brown_constructor.json | 1 + .../loot_tables/blocks/brown_controller.json | 1 + .../blocks/brown_crafting_grid.json | 1 + .../blocks/brown_creative_controller.json | 1 + .../loot_tables/blocks/brown_destructor.json | 1 + .../loot_tables/blocks/brown_detector.json | 1 + .../loot_tables/blocks/brown_grid.json | 1 + .../blocks/brown_network_receiver.json | 1 + .../blocks/brown_network_transmitter.json | 1 + .../blocks/brown_security_manager.json | 21 ++++ .../blocks/brown_wireless_transmitter.json | 1 + .../loot_tables/blocks/cable.json | 1 + .../loot_tables/blocks/constructor.json | 1 + .../loot_tables/blocks/controller.json | 1 + .../loot_tables/blocks/crafting_grid.json | 1 + .../blocks/creative_controller.json | 1 + .../loot_tables/blocks/cyan_cable.json | 1 + .../loot_tables/blocks/cyan_constructor.json | 1 + .../loot_tables/blocks/cyan_controller.json | 1 + .../blocks/cyan_crafting_grid.json | 1 + .../blocks/cyan_creative_controller.json | 1 + .../loot_tables/blocks/cyan_destructor.json | 1 + .../loot_tables/blocks/cyan_detector.json | 1 + .../loot_tables/blocks/cyan_grid.json | 1 + .../blocks/cyan_network_receiver.json | 1 + .../blocks/cyan_network_transmitter.json | 1 + .../blocks/cyan_security_manager.json | 21 ++++ .../blocks/cyan_wireless_transmitter.json | 1 + .../loot_tables/blocks/destructor.json | 1 + .../loot_tables/blocks/detector.json | 1 + .../loot_tables/blocks/gray_controller.json | 1 + .../blocks/gray_crafting_grid.json | 1 + .../blocks/gray_creative_controller.json | 1 + .../loot_tables/blocks/gray_detector.json | 1 + .../loot_tables/blocks/gray_grid.json | 1 + .../blocks/gray_network_receiver.json | 1 + .../blocks/gray_network_transmitter.json | 1 + .../blocks/gray_security_manager.json | 21 ++++ .../blocks/gray_wireless_transmitter.json | 1 + .../loot_tables/blocks/green_cable.json | 1 + .../loot_tables/blocks/green_constructor.json | 1 + .../loot_tables/blocks/green_controller.json | 1 + .../blocks/green_crafting_grid.json | 1 + .../blocks/green_creative_controller.json | 1 + .../loot_tables/blocks/green_destructor.json | 1 + .../loot_tables/blocks/green_detector.json | 1 + .../loot_tables/blocks/green_grid.json | 1 + .../blocks/green_network_receiver.json | 1 + .../blocks/green_network_transmitter.json | 1 + .../blocks/green_security_manager.json | 21 ++++ .../blocks/green_wireless_transmitter.json | 1 + .../loot_tables/blocks/grid.json | 1 + .../loot_tables/blocks/light_blue_cable.json | 1 + .../blocks/light_blue_constructor.json | 1 + .../blocks/light_blue_destructor.json | 1 + .../loot_tables/blocks/light_gray_cable.json | 1 + .../blocks/light_gray_constructor.json | 1 + .../blocks/light_gray_controller.json | 1 + .../blocks/light_gray_crafting_grid.json | 1 + .../light_gray_creative_controller.json | 1 + .../blocks/light_gray_destructor.json | 1 + .../blocks/light_gray_detector.json | 1 + .../loot_tables/blocks/light_gray_grid.json | 1 + .../blocks/light_gray_network_receiver.json | 1 + .../light_gray_network_transmitter.json | 1 + .../blocks/light_gray_security_manager.json | 21 ++++ .../light_gray_wireless_transmitter.json | 1 + .../loot_tables/blocks/lime_cable.json | 1 + .../loot_tables/blocks/lime_constructor.json | 1 + .../loot_tables/blocks/lime_controller.json | 1 + .../blocks/lime_crafting_grid.json | 1 + .../blocks/lime_creative_controller.json | 1 + .../loot_tables/blocks/lime_destructor.json | 1 + .../loot_tables/blocks/lime_detector.json | 1 + .../loot_tables/blocks/lime_grid.json | 1 + .../blocks/lime_network_receiver.json | 1 + .../blocks/lime_network_transmitter.json | 1 + .../blocks/lime_security_manager.json | 21 ++++ .../blocks/lime_wireless_transmitter.json | 1 + .../loot_tables/blocks/magenta_cable.json | 1 + .../blocks/magenta_constructor.json | 1 + .../blocks/magenta_controller.json | 1 + .../blocks/magenta_crafting_grid.json | 1 + .../blocks/magenta_creative_controller.json | 1 + .../blocks/magenta_destructor.json | 1 + .../loot_tables/blocks/magenta_detector.json | 1 + .../loot_tables/blocks/magenta_grid.json | 1 + .../blocks/magenta_network_receiver.json | 1 + .../blocks/magenta_network_transmitter.json | 1 + .../blocks/magenta_security_manager.json | 21 ++++ .../blocks/magenta_wireless_transmitter.json | 1 + .../loot_tables/blocks/network_receiver.json | 1 + .../blocks/network_transmitter.json | 1 + .../loot_tables/blocks/orange_cable.json | 1 + .../blocks/orange_constructor.json | 1 + .../loot_tables/blocks/orange_controller.json | 1 + .../blocks/orange_crafting_grid.json | 1 + .../blocks/orange_creative_controller.json | 1 + .../loot_tables/blocks/orange_destructor.json | 1 + .../loot_tables/blocks/orange_detector.json | 1 + .../loot_tables/blocks/orange_grid.json | 1 + .../blocks/orange_network_receiver.json | 1 + .../blocks/orange_network_transmitter.json | 1 + .../blocks/orange_security_manager.json | 21 ++++ .../blocks/orange_wireless_transmitter.json | 1 + .../loot_tables/blocks/pink_cable.json | 1 + .../loot_tables/blocks/pink_constructor.json | 1 + .../loot_tables/blocks/pink_controller.json | 1 + .../blocks/pink_crafting_grid.json | 1 + .../blocks/pink_creative_controller.json | 1 + .../loot_tables/blocks/pink_destructor.json | 1 + .../loot_tables/blocks/pink_detector.json | 1 + .../loot_tables/blocks/pink_grid.json | 1 + .../blocks/pink_network_receiver.json | 1 + .../blocks/pink_network_transmitter.json | 1 + .../blocks/pink_security_manager.json | 21 ++++ .../blocks/pink_wireless_transmitter.json | 1 + .../loot_tables/blocks/purple_cable.json | 1 + .../blocks/purple_constructor.json | 1 + .../loot_tables/blocks/purple_controller.json | 1 + .../blocks/purple_crafting_grid.json | 1 + .../blocks/purple_creative_controller.json | 1 + .../loot_tables/blocks/purple_destructor.json | 1 + .../loot_tables/blocks/purple_detector.json | 1 + .../loot_tables/blocks/purple_grid.json | 1 + .../blocks/purple_network_receiver.json | 1 + .../blocks/purple_network_transmitter.json | 1 + .../blocks/purple_security_manager.json | 21 ++++ .../blocks/purple_wireless_transmitter.json | 1 + .../loot_tables/blocks/red_cable.json | 1 + .../loot_tables/blocks/red_constructor.json | 1 + .../loot_tables/blocks/red_controller.json | 1 + .../loot_tables/blocks/red_crafting_grid.json | 1 + .../blocks/red_creative_controller.json | 1 + .../loot_tables/blocks/red_destructor.json | 1 + .../loot_tables/blocks/red_detector.json | 1 + .../loot_tables/blocks/red_grid.json | 1 + .../blocks/red_network_receiver.json | 1 + .../blocks/red_network_transmitter.json | 1 + .../blocks/red_security_manager.json | 21 ++++ .../blocks/red_wireless_transmitter.json | 1 + .../loot_tables/blocks/security_manager.json | 21 ++++ .../loot_tables/blocks/white_cable.json | 1 + .../loot_tables/blocks/white_constructor.json | 1 + .../loot_tables/blocks/white_controller.json | 1 + .../blocks/white_crafting_grid.json | 1 + .../blocks/white_creative_controller.json | 1 + .../loot_tables/blocks/white_destructor.json | 1 + .../loot_tables/blocks/white_detector.json | 1 + .../loot_tables/blocks/white_grid.json | 1 + .../blocks/white_network_receiver.json | 1 + .../blocks/white_network_transmitter.json | 1 + .../blocks/white_security_manager.json | 21 ++++ .../blocks/white_wireless_transmitter.json | 1 + .../blocks/wireless_transmitter.json | 1 + .../loot_tables/blocks/yellow_cable.json | 1 + .../blocks/yellow_constructor.json | 1 + .../loot_tables/blocks/yellow_controller.json | 1 + .../blocks/yellow_crafting_grid.json | 1 + .../blocks/yellow_creative_controller.json | 1 + .../loot_tables/blocks/yellow_destructor.json | 1 + .../loot_tables/blocks/yellow_detector.json | 1 + .../loot_tables/blocks/yellow_grid.json | 1 + .../blocks/yellow_network_receiver.json | 1 + .../blocks/yellow_network_transmitter.json | 1 + .../blocks/yellow_security_manager.json | 21 ++++ .../blocks/yellow_wireless_transmitter.json | 1 + .../coloring/black_security_manager.json | 15 +++ .../coloring/blue_security_manager.json | 15 +++ .../coloring/brown_security_manager.json | 15 +++ .../coloring/cyan_security_manager.json | 15 +++ .../coloring/gray_security_manager.json | 15 +++ .../coloring/green_security_manager.json | 15 +++ .../coloring/light_blue_security_manager.json | 15 +++ .../coloring/light_gray_security_manager.json | 15 +++ .../coloring/lime_security_manager.json | 15 +++ .../coloring/magenta_security_manager.json | 15 +++ .../coloring/orange_security_manager.json | 15 +++ .../coloring/pink_security_manager.json | 15 +++ .../coloring/purple_security_manager.json | 15 +++ .../coloring/red_security_manager.json | 15 +++ .../coloring/white_security_manager.json | 15 +++ .../coloring/yellow_security_manager.json | 15 +++ .../tags/items/security_managers.json | 20 ++++ .../common/AbstractModInitializer.java | 11 ++ .../platform/common/Config.java | 16 +-- .../common/content/BlockEntities.java | 11 ++ .../platform/common/content/Blocks.java | 11 ++ .../platform/common/content/ContentIds.java | 1 + .../platform/common/content/ContentNames.java | 1 + .../common/content/CreativeModeTabItems.java | 1 + .../common/content/DefaultEnergyUsage.java | 1 + .../platform/common/content/Items.java | 9 ++ .../platform/common/content/Tags.java | 1 + .../CreativeControllerBlockItem.java | 5 +- .../platform/common/grid/GridBlock.java | 1 - .../common/networking/NetworkCardItem.java | 1 + .../common/security/SecurityManagerBlock.java | 101 ++++++++++++++++ .../security/SecurityManagerBlockEntity.java | 20 ++++ .../assets/refinedstorage2/lang/en_us.json | 16 ++- .../refinedstorage2/models/block/cutout.json | 82 +++++++++++++ .../models/block/emissive_cutout.json | 106 +++++++++++++++++ .../textures/block/security_manager/back.png | Bin 0 -> 540 bytes .../security_manager/cutouts/back/black.png | Bin 0 -> 3047 bytes .../security_manager/cutouts/back/blue.png | Bin 0 -> 3057 bytes .../security_manager/cutouts/back/brown.png | Bin 0 -> 3072 bytes .../security_manager/cutouts/back/cyan.png | Bin 0 -> 3088 bytes .../security_manager/cutouts/back/gray.png | Bin 0 -> 3062 bytes .../security_manager/cutouts/back/green.png | Bin 0 -> 3070 bytes .../cutouts/back/inactive.png | Bin 0 -> 242 bytes .../cutouts/back/light_blue.png | Bin 0 -> 380 bytes .../cutouts/back/light_gray.png | Bin 0 -> 3038 bytes .../security_manager/cutouts/back/lime.png | Bin 0 -> 3066 bytes .../security_manager/cutouts/back/magenta.png | Bin 0 -> 3047 bytes .../security_manager/cutouts/back/orange.png | Bin 0 -> 3023 bytes .../security_manager/cutouts/back/pink.png | Bin 0 -> 2994 bytes .../security_manager/cutouts/back/purple.png | Bin 0 -> 3069 bytes .../security_manager/cutouts/back/red.png | Bin 0 -> 3036 bytes .../security_manager/cutouts/back/white.png | Bin 0 -> 3008 bytes .../security_manager/cutouts/back/yellow.png | Bin 0 -> 3031 bytes .../security_manager/cutouts/front/black.png | Bin 0 -> 2975 bytes .../security_manager/cutouts/front/blue.png | Bin 0 -> 2985 bytes .../security_manager/cutouts/front/brown.png | Bin 0 -> 2996 bytes .../security_manager/cutouts/front/cyan.png | Bin 0 -> 3008 bytes .../security_manager/cutouts/front/gray.png | Bin 0 -> 2980 bytes .../security_manager/cutouts/front/green.png | Bin 0 -> 2997 bytes .../cutouts/front/inactive.png | Bin 0 -> 227 bytes .../cutouts/front/light_blue.png | Bin 0 -> 331 bytes .../cutouts/front/light_gray.png | Bin 0 -> 2961 bytes .../security_manager/cutouts/front/lime.png | Bin 0 -> 2990 bytes .../cutouts/front/magenta.png | Bin 0 -> 2975 bytes .../security_manager/cutouts/front/orange.png | Bin 0 -> 2962 bytes .../security_manager/cutouts/front/pink.png | Bin 0 -> 2940 bytes .../security_manager/cutouts/front/purple.png | Bin 0 -> 2992 bytes .../security_manager/cutouts/front/red.png | Bin 0 -> 2963 bytes .../security_manager/cutouts/front/white.png | Bin 0 -> 2948 bytes .../security_manager/cutouts/front/yellow.png | Bin 0 -> 2964 bytes .../security_manager/cutouts/left/black.png | Bin 0 -> 3043 bytes .../security_manager/cutouts/left/blue.png | Bin 0 -> 3058 bytes .../security_manager/cutouts/left/brown.png | Bin 0 -> 3064 bytes .../security_manager/cutouts/left/cyan.png | Bin 0 -> 3075 bytes .../security_manager/cutouts/left/gray.png | Bin 0 -> 3039 bytes .../security_manager/cutouts/left/green.png | Bin 0 -> 3052 bytes .../cutouts/left/inactive.png | Bin 0 -> 241 bytes .../cutouts/left/light_blue.png | Bin 0 -> 361 bytes .../cutouts/left/light_gray.png | Bin 0 -> 3026 bytes .../security_manager/cutouts/left/lime.png | Bin 0 -> 3057 bytes .../security_manager/cutouts/left/magenta.png | Bin 0 -> 3031 bytes .../security_manager/cutouts/left/orange.png | Bin 0 -> 3011 bytes .../security_manager/cutouts/left/pink.png | Bin 0 -> 2987 bytes .../security_manager/cutouts/left/purple.png | Bin 0 -> 3062 bytes .../security_manager/cutouts/left/red.png | Bin 0 -> 3037 bytes .../security_manager/cutouts/left/white.png | Bin 0 -> 3011 bytes .../security_manager/cutouts/left/yellow.png | Bin 0 -> 3035 bytes .../security_manager/cutouts/right/black.png | Bin 0 -> 3035 bytes .../security_manager/cutouts/right/blue.png | Bin 0 -> 3055 bytes .../security_manager/cutouts/right/brown.png | Bin 0 -> 3056 bytes .../security_manager/cutouts/right/cyan.png | Bin 0 -> 3069 bytes .../security_manager/cutouts/right/gray.png | Bin 0 -> 3041 bytes .../security_manager/cutouts/right/green.png | Bin 0 -> 3058 bytes .../cutouts/right/inactive.png | Bin 0 -> 239 bytes .../cutouts/right/light_blue.png | Bin 0 -> 354 bytes .../cutouts/right/light_gray.png | Bin 0 -> 3011 bytes .../security_manager/cutouts/right/lime.png | Bin 0 -> 3050 bytes .../cutouts/right/magenta.png | Bin 0 -> 3050 bytes .../security_manager/cutouts/right/orange.png | Bin 0 -> 3030 bytes .../security_manager/cutouts/right/pink.png | Bin 0 -> 3005 bytes .../security_manager/cutouts/right/purple.png | Bin 0 -> 3057 bytes .../security_manager/cutouts/right/red.png | Bin 0 -> 3040 bytes .../security_manager/cutouts/right/white.png | Bin 0 -> 3019 bytes .../security_manager/cutouts/right/yellow.png | Bin 0 -> 3041 bytes .../security_manager/cutouts/top/black.png | Bin 0 -> 3085 bytes .../security_manager/cutouts/top/blue.png | Bin 0 -> 3106 bytes .../security_manager/cutouts/top/brown.png | Bin 0 -> 3107 bytes .../security_manager/cutouts/top/cyan.png | Bin 0 -> 3142 bytes .../security_manager/cutouts/top/gray.png | Bin 0 -> 3112 bytes .../security_manager/cutouts/top/green.png | Bin 0 -> 3128 bytes .../security_manager/cutouts/top/inactive.png | Bin 0 -> 297 bytes .../cutouts/top/light_blue.png | Bin 0 -> 575 bytes .../cutouts/top/light_gray.png | Bin 0 -> 3057 bytes .../security_manager/cutouts/top/lime.png | Bin 0 -> 3122 bytes .../security_manager/cutouts/top/magenta.png | Bin 0 -> 3108 bytes .../security_manager/cutouts/top/orange.png | Bin 0 -> 3056 bytes .../security_manager/cutouts/top/pink.png | Bin 0 -> 3008 bytes .../security_manager/cutouts/top/purple.png | Bin 0 -> 3133 bytes .../security_manager/cutouts/top/red.png | Bin 0 -> 3074 bytes .../security_manager/cutouts/top/white.png | Bin 0 -> 3015 bytes .../security_manager/cutouts/top/yellow.png | Bin 0 -> 3080 bytes .../textures/block/security_manager/front.png | Bin 0 -> 498 bytes .../textures/block/security_manager/left.png | Bin 0 -> 551 bytes .../textures/block/security_manager/right.png | Bin 0 -> 574 bytes .../textures/block/security_manager/top.png | Bin 0 -> 495 bytes .../refinedstorage2/advancements/root.json | 2 +- .../advancements/security.json | 32 +++++ .../recipes/security_manager.json | 28 +++++ .../fabric/ClientModInitializerImpl.java | 28 +++++ .../platform/fabric/ConfigImpl.java | 26 +++-- .../rei/RefinedStorageREIClientPlugin.java | 6 + .../support/render/EmissiveBakedModel.java | 5 +- .../support/render/EmissiveModelRegistry.java | 8 +- .../support/render/EmissiveTransform.java | 10 +- .../platform/forge/ConfigImpl.java | 49 +++++--- .../forge/datagen/BlockModelProviderImpl.java | 69 ++++++++++- .../forge/datagen/BlockStateProviderImpl.java | 20 ++++ .../forge/datagen/ItemModelProviderImpl.java | 9 ++ .../forge/datagen/loot/BlockDropProvider.java | 2 + .../datagen/loot/LootTableProviderImpl.java | 8 +- .../recipe/RecoloringRecipeProvider.java | 3 + .../datagen/tag/ItemTagsProviderImpl.java | 5 + .../rei/RefinedStorageREIClientPlugin.java | 6 + 610 files changed, 4678 insertions(+), 890 deletions(-) create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/black_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/blue_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/brown_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/cyan_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/green_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/light_gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/lime_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/magenta_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/orange_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/pink_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/purple_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/red_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/white_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/yellow_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/black.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/blue.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/brown.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/cyan.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/gray.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/green.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/inactive.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/light_blue.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/light_gray.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/lime.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/magenta.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/orange.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/pink.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/purple.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/red.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/white.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/block/security_manager/yellow.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/black_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/blue_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/brown_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/cyan_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/green_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/light_gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/lime_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/magenta_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/orange_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/pink_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/purple_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/red_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/white_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/models/item/yellow_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/black_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/blue_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/brown_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/cyan_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/green_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_blue_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/light_gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/lime_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/magenta_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/orange_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/pink_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/purple_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/red_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/white_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/advancements/recipes/misc/coloring/yellow_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/black_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/blue_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/brown_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/cyan_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/green_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/light_gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/lime_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/magenta_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/orange_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/pink_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/purple_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/red_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/white_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/loot_tables/blocks/yellow_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/black_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/blue_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/brown_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/cyan_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/green_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/light_blue_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/light_gray_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/lime_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/magenta_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/orange_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/pink_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/purple_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/red_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/white_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/recipes/coloring/yellow_security_manager.json create mode 100644 refinedstorage2-platform-common/src/generated/resources/data/refinedstorage2/tags/items/security_managers.json create mode 100644 refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlock.java create mode 100644 refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlockEntity.java create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/block/cutout.json create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/models/block/emissive_cutout.json create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/back.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/black.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/brown.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/cyan.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/green.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/inactive.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/light_blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/light_gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/lime.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/magenta.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/orange.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/pink.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/purple.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/red.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/white.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/back/yellow.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/black.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/brown.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/cyan.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/green.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/inactive.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/light_blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/light_gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/lime.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/magenta.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/orange.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/pink.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/purple.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/red.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/white.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/front/yellow.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/black.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/brown.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/cyan.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/green.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/inactive.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/light_blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/light_gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/lime.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/magenta.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/orange.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/pink.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/purple.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/red.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/white.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/left/yellow.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/black.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/brown.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/cyan.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/green.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/inactive.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/light_blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/light_gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/lime.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/magenta.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/orange.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/pink.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/purple.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/red.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/white.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/right/yellow.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/black.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/brown.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/cyan.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/green.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/inactive.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/light_blue.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/light_gray.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/lime.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/magenta.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/orange.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/pink.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/purple.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/red.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/white.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/cutouts/top/yellow.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/front.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/left.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/right.png create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/block/security_manager/top.png create mode 100644 refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/advancements/security.json create mode 100644 refinedstorage2-platform-common/src/main/resources/data/refinedstorage2/recipes/security_manager.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c12c5019..51890fbfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Security Card - Fallback Security Card +- Security Manager ### Changed 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 index ea7f962e7..d5f915e16 100644 --- 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 @@ -15,6 +15,7 @@ public class SecurityNetworkComponentImpl implements SecurityNetworkComponent { @Override public void onContainerAdded(final NetworkNodeContainer container) { + // TODO: use getNode if (container instanceof SecurityDecisionProvider provider) { providers.add(provider); } @@ -22,6 +23,7 @@ public void onContainerAdded(final NetworkNodeContainer container) { @Override public void onContainerRemoved(final NetworkNodeContainer container) { + // TODO: use getNode if (container instanceof SecurityDecisionProvider provider) { providers.remove(provider); } 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..5a317adc1 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/black_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/black", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/black", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/black", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/black", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/black", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/black", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/black", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/black", + "x": -90, + "y": 90 + }, + "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..e097c4e27 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/blue_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/blue", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/blue", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/blue", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/blue", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/blue", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/blue", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/blue", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/blue", + "x": -90, + "y": 90 + }, + "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..782b43dfa --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/brown_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/brown", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/brown", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/brown", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/brown", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/brown", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/brown", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/brown", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/brown", + "x": -90, + "y": 90 + }, + "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..ccbab024f --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/cyan_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/cyan", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/cyan", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/cyan", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/cyan", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/cyan", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/cyan", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/cyan", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/cyan", + "x": -90, + "y": 90 + }, + "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..0bced5e96 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/gray_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/gray", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/gray", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/gray", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/gray", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/gray", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/gray", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/gray", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/gray", + "x": -90, + "y": 90 + }, + "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..c0c4b2ee3 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/green_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/green", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/green", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/green", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/green", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/green", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/green", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/green", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/green", + "x": -90, + "y": 90 + }, + "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..54b93ccf8 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/light_gray_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/light_gray", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/light_gray", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/light_gray", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/light_gray", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/light_gray", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/light_gray", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/light_gray", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/light_gray", + "x": -90, + "y": 90 + }, + "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..f65e5d902 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/lime_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/lime", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/lime", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/lime", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/lime", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/lime", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/lime", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/lime", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/lime", + "x": -90, + "y": 90 + }, + "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..92ad88871 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/magenta_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/magenta", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/magenta", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/magenta", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/magenta", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/magenta", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/magenta", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/magenta", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/magenta", + "x": -90, + "y": 90 + }, + "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..4450ef516 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/orange_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/orange", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/orange", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/orange", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/orange", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/orange", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/orange", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/orange", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/orange", + "x": -90, + "y": 90 + }, + "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..d33e77fec --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/pink_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/pink", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/pink", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/pink", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/pink", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/pink", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/pink", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/pink", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/pink", + "x": -90, + "y": 90 + }, + "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..bc0e84f00 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/purple_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/purple", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/purple", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/purple", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/purple", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/purple", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/purple", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/purple", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/purple", + "x": -90, + "y": 90 + }, + "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..724a669a7 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/red_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/red", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/red", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/red", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/red", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/red", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/red", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/red", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/red", + "x": -90, + "y": 90 + }, + "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..8f3d5a73a --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/light_blue", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/light_blue", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/light_blue", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/light_blue", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/light_blue", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/light_blue", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/light_blue", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/light_blue", + "x": -90, + "y": 90 + }, + "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..5c1131a54 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/white_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/white", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/white", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/white", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/white", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/white", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/white", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/white", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/white", + "x": -90, + "y": 90 + }, + "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..47fe1e882 --- /dev/null +++ b/refinedstorage2-platform-common/src/generated/resources/assets/refinedstorage2/blockstates/yellow_security_manager.json @@ -0,0 +1,110 @@ +{ + "variants": { + "active=false,direction=down_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": -90 + }, + "active=false,direction=down_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90 + }, + "active=false,direction=down_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=down_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": -90 + }, + "active=false,direction=up_north": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 180 + }, + "active=false,direction=up_south": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90 + }, + "active=false,direction=up_west": { + "model": "refinedstorage2:block/security_manager/inactive", + "x": -90, + "y": 90 + }, + "active=false,direction=west": { + "model": "refinedstorage2:block/security_manager/inactive", + "y": 270 + }, + "active=true,direction=down_east": { + "model": "refinedstorage2:block/security_manager/yellow", + "x": 90, + "y": -90 + }, + "active=true,direction=down_north": { + "model": "refinedstorage2:block/security_manager/yellow", + "x": 90 + }, + "active=true,direction=down_south": { + "model": "refinedstorage2:block/security_manager/yellow", + "x": 90, + "y": 180 + }, + "active=true,direction=down_west": { + "model": "refinedstorage2:block/security_manager/yellow", + "x": 90, + "y": 90 + }, + "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=up_east": { + "model": "refinedstorage2:block/security_manager/yellow", + "x": -90, + "y": -90 + }, + "active=true,direction=up_north": { + "model": "refinedstorage2:block/security_manager/yellow", + "x": -90, + "y": 180 + }, + "active=true,direction=up_south": { + "model": "refinedstorage2:block/security_manager/yellow", + "x": -90 + }, + "active=true,direction=up_west": { + "model": "refinedstorage2:block/security_manager/yellow", + "x": -90, + "y": 90 + }, + "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/AbstractModInitializer.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/AbstractModInitializer.java index b5b1db776..ddde33609 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 @@ -57,6 +57,7 @@ import com.refinedmods.refinedstorage2.platform.common.security.BuiltinPermission; import com.refinedmods.refinedstorage2.platform.common.security.FallbackSecurityCardContainerMenu; import com.refinedmods.refinedstorage2.platform.common.security.SecurityCardContainerMenu; +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.StorageTypes; @@ -154,6 +155,7 @@ 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; @@ -317,6 +319,7 @@ protected final void registerBlocks( PortableGridType.CREATIVE, creativePortableGridBlockEntityFactory ))); + Blocks.INSTANCE.getSecurityManager().registerBlocks(callback); } protected final void registerItems(final RegistryCallback callback) { @@ -335,6 +338,7 @@ protected final void registerItems(final RegistryCallback callback) { 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); } @@ -623,6 +627,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, diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/Config.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/Config.java index d8ddad985..1993d55b6 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/Config.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/Config.java @@ -10,6 +10,14 @@ import net.minecraft.resources.ResourceLocation; public interface Config { + ScreenSize getScreenSize(); + + void setScreenSize(ScreenSize size); + + boolean isSmoothScrolling(); + + int getMaxRowsStretch(); + GridEntry getGrid(); CraftingGridEntry getCraftingGrid(); @@ -52,13 +60,7 @@ public interface Config { PortableGridEntry getPortableGrid(); - boolean isSmoothScrolling(); - - ScreenSize getScreenSize(); - - void setScreenSize(ScreenSize size); - - int getMaxRowsStretch(); + SimpleEnergyUsageEntry getSecurityManager(); interface SimpleEnergyUsageEntry { long getEnergyUsage(); 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..e48858a26 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; @@ -137,6 +138,12 @@ public final class Blocks { ContentNames.NETWORK_TRANSMITTER, COLOR ); + private final BlockColorMap securityManager = new BlockColorMap<>( + SecurityManagerBlock::new, + ContentIds.SECURITY_MANAGER, + ContentNames.SECURITY_MANAGER, + COLOR + ); @Nullable private Supplier quartzEnrichedIronBlock; @@ -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 0955232ba..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 @@ -56,6 +56,7 @@ public final class ContentIds { 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 7cfa030b9..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 @@ -31,6 +31,7 @@ public final class ContentNames { 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 c5bb5336a..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) { 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..e0e9fbf16 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; 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 bd99e3a14..b95e19a91 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 @@ -47,6 +47,7 @@ public final class Items { 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 @@ -398,6 +399,14 @@ 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(); } 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/CreativeControllerBlockItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/controller/CreativeControllerBlockItem.java index 026576d86..7a8d67dce 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 @@ -3,13 +3,16 @@ import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; 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 { + private static final MutableComponent HELP = createTranslation("item", "creative_controller.help"); + CreativeControllerBlockItem(final Block block, final Component name) { - super(block, new Item.Properties().stacksTo(1), name, createTranslation("item", "creative_controller.help")); + super(block, new Item.Properties().stacksTo(1), name, HELP); } } 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..d928f622a 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 @@ -35,7 +35,6 @@ public GridBlock(final DyeColor color, final MutableComponent name) { super(name, color); } - @Override public BlockColorMap getBlockColorMap() { return Blocks.INSTANCE.getGrid(); diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkCardItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkCardItem.java index 880c9702f..d21515a49 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkCardItem.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkCardItem.java @@ -30,6 +30,7 @@ import static com.refinedmods.refinedstorage2.platform.common.networking.NetworkReceiverKey.getDimensionName; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; +// TODO: energy usage per card in the security manager. public class NetworkCardItem extends Item { private static final MutableComponent UNBOUND_HELP = createTranslation("item", "network_card.unbound_help"); private static final MutableComponent BOUND_HELP = createTranslation("item", "network_card.bound_help"); 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..7fd137575 --- /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.BlockItemProvider; +import com.refinedmods.refinedstorage2.platform.common.support.ColorableBlock; +import com.refinedmods.refinedstorage2.platform.common.support.NamedBlockItem; +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; +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.item.Item; +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 BiDirectionType.INSTANCE; + } + + @Override + public BlockColorMap getBlockColorMap() { + return Blocks.INSTANCE.getSecurityManager(); + } + + @Override + public DyeColor getColor() { + return color; + } + + @Override + public MutableComponent getName() { + return name; + } + + @Override + public NamedBlockItem createBlockItem() { + return new NamedBlockItem(this, new Item.Properties(), getName(), 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..f477aea81 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlockEntity.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage2.platform.common.Platform; +import com.refinedmods.refinedstorage2.platform.common.content.BlockEntities; +import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class SecurityManagerBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity { + public SecurityManagerBlockEntity(final BlockPos pos, final BlockState state) { + super( + BlockEntities.INSTANCE.getSecurityManager(), + pos, + state, + new SimpleNetworkNode(Platform.INSTANCE.getConfig().getSecurityManager().getEnergyUsage()) + ); + } +} 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 afc6b3d08..55292d942 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 @@ -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": "Used to store Security Cards and (optionally) a Fallback Security Card for a storage network.", "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.", @@ -349,7 +351,9 @@ "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.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", @@ -373,17 +377,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/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/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 0000000000000000000000000000000000000000..1b87bf05b477dc037fe36a9e87b7ff35c23db8b8 GIT binary patch literal 540 zcmV+%0^|LOP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00E3iL_t(IPnA;JssUjb{og{AT!=8DB&R6J zjOG-7rTwsAh6 zaXcPzI-PJh90YOz6PdPJtt5q&Fqu4^P6gxfSTLW@<^BCnyWNH=6bfjyS|G<_F=(3R zAel@GQmK@KXf!I`dcBTBA^}w@l_Z%Q2n6u^s5i>xG6=Uu551jEM?zGkQjv1W@p#-x z;>T~yD(M{#hw`p!wVL!s4uwLVG-`xf3kHLt@c_0bEwBQz-wNpEdeiCj>wxuoEn+wv z_M|nNO*9$}k46u@T%jCLtyX0%WWQUWmzOG&$-FAy%_B!55l@<77$DplJ@j_FU1YOa zZwvpK!Pgc(XTS@l>$*py=g$`W&VXL0g<`QNJ0*Y4z%)$|ZjBy#d3zb6^7%Y+xg5xT eXF%^u)9?dTNBDxm$Omiy0000D3d3{iB$OpjOcsB_`Hjj3mUw*nk*9n#dz4&fKf5w6wv;Ci|N2 zH{ato-}lXIsjYc@R@wYAhGAw^SH8KiY~kXFH4i0?y4Z?>E%F!T z+Je9}1R;~jgfeo-@md9->$)IHf+X<-!Ta5I0JFU9FDz<^Vc+yDH?SO=r5a(v=?tPA z@iZSo+AXQI{Q^ydFd++F0fa;vQVxjB63*@PQaR(u6mSZsu^spX3rbkRQaoOQkE%AE zE}{LPvWs|Bh;3A~-_Y%1p$_{_r)T2IE@E+E(J?=$!$Z_eU^;=9CcAA;;P`FM7$lU$ zBd7?h%%A?BfRl9~txa5z}!MZEz4gTN$l1lU1VvU^-8GL59; zr6E~3D-Bz*;M%P@Yw@^IZTkVVOUh;Wg!EbVMWx#IuE3<#3#dw&g(!&ya`lA z)kLUjrc|6CbIeYfRCIp6zK~-Q9i`PUA_z+w)MPSU2D}e`P7n@<>{d7_$BR3Na4vH! zU2TJ?C$2(TUr`Pe1{-OrraJS3VM!#H0O+$IZyHBFBwlS>gknMs%@-qQzn-)%;((^A zG6^y_UTbA>sxf8}*8IF9+HgtJND1v^v_g$4%O^S4UFbFSxTEluve;Zv8qmy#VAAZw zh${?Rqb%^msLZR)v|&QlO|mu*^POanfgUbzB@B;S6~b7~`>^Zgu7j`wM4(|lsmmI# zVnyT=vKr>Kh;AlCS;82Ei=p4>x@-W&kmOsh3EZs*laP=MbtLi# zVwE>lQfM$D>%1aiJpm#KNkk+|Z(N5_8^V7ajOo~2*c+BuF7zPTNU`TfxuoZ$S?Ibc z%gj}m&}E~-{!}VRHgMRX_A@4F2z%DB92jn;_1OVp_3L=$I2Tb+fVK; zZ|{5b?o9(Hrd2dne_y|U_MN>~m!A9P$n{0d2lYiKHa`7wXytcj(+9RIo7Z05@#&8} z7r?=tu{{@?kNr7!T4wp?AI|r5T-(4-f4BMA3}#VvU;lx=b9<4tO~owQPHHp!@u#-Y5F6?i(2F`TVuy*o&K%s>%k9uT9lPjm>pm2@2}cgSGMxN z{PL4*yne+~o1T5=CGqyD%)#E%7cMRN>MrK+gRdMpb7kh%bI*Od&v|b*J&IRX*2E4! H*0S+0^hNR? literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bbcc81641c5cebb911fd0e315acd23e34df2a1b3 GIT binary patch literal 3057 zcmcImdu-KI7%!8|jfX)t1rcK@1{CdWPha=8?n1^cxDoE0+XXg2<+MG$E4#Pt+HSj> zB49+KKq5f|QR9QiA4G(xF)C4`G0_NW$P|c3@DT`#5eWYoP*3k`n`~@BY0}sEe&>7q z&i8%iJk?Nt-}o_8#t;NCzOFXbh~E=}yQ~yHZ@=(2#IJIvw#6feu@%8RirDeuWP%ve zZYG-j=J-NIv(q7{+bRlW(hf!wMAe*(1GP5flPXG@R+Kus|6__Y^(eJOjI(j42DO^C zJuYhMsZVGcAk`9B&|N zY!{JIh@~}_<;buc0+Jv|>^&sMaxBA&4B%)WDXgG?Fqyw7Y|YgTr7<=?ZwvoLsaD^2 z6o%>Q>I!x7A=^zdK$c~Os7DeP%3 zgtSvsYk7H^FkwsvIt&Q0K}cDkt`%`khnvb8*EI&EP#Rgjhq0iD#Vp0+Mfjj<)9E7G z^XGM9kMgk%iuMxS4q_USXLq<7n%9XfPA@p-`HiTLnh{LL@Zw~r)%I<#)gFR`qIdum zzG)0$Fpvy@qKr8NG>{abj#A?y=-Y0>wo`@NX(;$cav;Q!cP=q4-R|=43IfkhKr!f} zC>10U%|>XRO>msT0!0LOv-pF}LE|_zb?C$XV3}s+1ON&vDu5jTwsq6!9u}%=iebBH zh!@UG!z5xHE19(xk1KVS=R-?Fb+IUgT@9J0uBb2~qA(w!BRW!Pof9A}vw}cJB!LH- zB#3&LE6k7CT1Svn!Tel(>9&S-6jwtr3?!*6h|ppr0%;>6$TY44gEmydFk}QZ9fE?k z`&|>4I861|8hE8+jRuNHyr!!(uZIzKO#rkE)ZiiNGA{r=tYQxP?AF*R+l|{g=A5U< zV6_#j9=i&I`ifH6Xm+qUNYzwFZZOQT_+mit%*$Jbk@txgSth0!QxoKilC|H2TNidf z5=CCjk2jbZlxmKdm^Clwh}2)wGEfq9vYwyPCkvaXP|Ihbb~eiw96brLf?Y*jErIq$*FE4vQD0$_oJXhY^D zT0{a%tGpPdrHHJlEYBeX!iCT;cb!*&pm2PlhOWl-Jgr(Qw2}yKLJW2F!LWkP835sa zz#9_Hh6SC5Dhp{H85$5}U1BwPuwVvl2-i3m&9*v`+b^*k=t8`aBG-#jhHIxu=r}1; z%T^cDY3cd>saTMtZL*9Mq> zcZl47EXU;hU~RG+uQFIK7-)ssW5~OW5H+f6o`L{=SXDXx^?j>asBJ>?k9**GwNd1iO8m} zwj8K0sjiHj`FcZX>8@6ie ztJ<{qiSw%-KK#RV`%abryyhpk<=#oxcSrYJSoLH&KGPYy^`^4z)eG&i-eoH<{c+|* z`Kgzmdu;N)L*^;-Sn`o^{<;>0nR#yaN6lM4-60$)Jz|#-^$i!_Dyg2hx?%aN-|snT z&f2|s!^XOc57fW%+6PYc9cO#(T}?M0S^M;FCr9txzy0vR)3fa7XRJ^bM7pOwTXFiA zT4KfKgWITSYZsTjGiyTSxId3iTD)}8=%t_7iP6OG`usMdc76Gp-mMEzZ^vIHlRoS@ Ve{#-kox!2JZeD%t&ABTc{|BWW@d5w< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bfb5241bae85183dc52a398eb6d7e09bb5456a16 GIT binary patch literal 3072 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a45937171aaafec603aff07bc0a8c0329844786e GIT binary patch literal 3062 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9327df7da204ef99c30934da740c6d995f17dd1a GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwr2>%=KS^ir#p-IEGmGC;#~W-`-VXwSp!bJ0D0tdF?-MyZoQ|r5`OPa0|ZP_v2ap z)6VPv=a$WB?mlS1)h^Sc_+Vqz`~SC$&;MV)mb`2X_AQeL1XFBxujt$qFPw0h{FqX`nN z&V0uNCX{{otv~tN$M|K*=0LX!zp?%mZ;*bjKJa@A*c6ZB|0Nl`R6ZWfDP>y*^f!a2 LtDnm{r-UW|PBEbT literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..66d439cb25507c96721f3bb9814fd37ef876cb09 GIT binary patch literal 3038 zcmcgu3v3ic7~UpYrKAan5`2YqF#_7XeckTuE73^B$KLsU?r1OZ7@)JP&BVAK%A2ay;g4WibWd$rY;Hu%_NU-N(S zzvlb@nf1+0^Qx=vsG=yUy0IbAg5TrFeRCy#PQKI!@N10Muq2?Uu@lH$LG5^c5=B+5 zv{P+iTXMc`x|s-ou7M)CjEB(_RXZ!^0doZkX#=&}PMo=T;2=ZWFwQKNlYG*vM;&%U zkB?e=no?%Z3R8p3teJFePR9x|Cmyo;@T|%6A|2Brf)b4?d<`w~BG2(MCy1<|=zLTcVs!Chur(iAdP`z%(H8!TGaX^* z=^U5MW+PcC;`;5JplKS%i<~I37{LbJP6%?W6HF;-NT9&)kltE4yV60Ha;w&YTW%!V4Gnq0v z2!wTGX)gIji$X-Cr!BS}=w^fIB=F({lmH=$ zGlWPiud))K5=EUCbXjs! z8KwCN*X$&uBJ&IN1zi*CD6fVNVu%-E6tIRYK$e%IkkwF3VAYr*S(bo!%Z!z@E%0qz z;vhXxEAa|qjTTZB$%FMFlBl;2iebt#{L|pL8M4xx~<9wRNl> zy9!8s#TlVE*hZ+D?ko((L>^z9K%PbUk`d(n;zf>)Q!Fwx;ftQP--=roc0iG3NiL2z z+c}hOOV~JTLBSDapk&El3F%~{LiGkaz?|zY_L^3-viOy@>3mV@z$}Dd5_TfU6o>60 z7I<{2EU3+PAe^jgu(kjTTr121AJw(v43Ah9+;GkZpzGSM3$duc3kqT_O~TwnQJys< zImRlgW*WRCA|zlo4d=R~3sGH^N;Pynt`~Ki9l&WvcoX87>kmdorUZbcu&O2_779^~ zRe42VE!i@n22=$(idpmbV1{f6|8X#;>vSQ10I@va1H6$UKZrAy?`CM=d1>3sR~Ogi zz~cT?E=W3b>HhXJY|QOM+6 zvNrjRS0AbujFy9VC)ROmAEDVpK{FL2CbK|O3>NbjmnV=l7D$#T$%-PI79fl!+T4HI z>~~4zB2XgHz=xNLSv#XrEWUD_0X$pn#Zl{ zTe$I-wc$2)*V^w|f4MMo-cz^MO{==^$oPd94j!oQop^Gr^Ha^NZ$Iv^Xqp#Q8(_hy|3-t`tI$UpRW06GkVrKcJ}9sm6_9@zm;*6J9kc8chB9& zz*oIzD>ojUy<>OXiRg}pY*njAp|5D3_OILoAH$8dmv3;jAXO{0fJ%$RG_HH=Zxpe=Y8IGsk vwf(%dtwm2xKe}t$_TAq literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..95b7f689227790df08cab56ef88eba4f712e99ec GIT binary patch literal 3066 zcmcImYitx%6yE+2d9+v~gqO%~F z6Oo{hAdg@w7(fU{QH;?aknl$%6%m36CW;UfO^li-sAw!kg+#owueQ?C24$0-xpU8V z&*Qu2oO?Id*DWa9frECqHredV00){u`uI6Z7uQ%6*Zeyl>FtLV4FsBDDMnNPuP_pk|B=|5s~bu~Y;oQe{)&<< zzV9eB-ObX&tZio2oc90Cy}VjVzIsffYLR7BM@%1~KDV1X*A5wW0c zg=^vxhpGNr1Fv+f(LfQA({z>MbO})roo6VSQGMKez`N?FEs;Rczq{IUJqnY5Dm#-d1-X~sZnV4dhB!YZVvi2Ks>%tC* zg1`y+`Fb;hQpuQ!S@Uv^;PA66vXa#UB|#?(DpaX4J)Co$`CikATJxinNo0#sfm$vE zEyzxUHz+r44zj@`qcXR?qXl8IZjrS)m}eV)2Xs+oGiG?$s-TB*-h=J8cAb%U1~4L` z44D%t0r7xRIYFYth^(oAV-aGcLg+WU&M6G9uw0?wZpZaJty&ATnh`#PX!7=hiRcl* zFhqQ$Fp#GtnU`>BKs^|VfYo?a=Z(RF8MGnX;b1h|YDaFr#B!hu@j;4QFG?D&ohG2; zq)aVaU39yp=g+5NK@z@A^tGQMNz;*Q_RE3(R*EhV|D(NOGj3$v@aAH*U#Tt#oGVBlj+SIXSLk z+^L@*TBF93?|%E@^(%i_*8UwQNHqWIwZ}`r(;JSQN?+KwGO}vw#eMrjJ@0ot|H`Ea z@r6B?>KfNg4=uWK_XqaZ7k=04W~`UzO)kGO@wbXMtjoRkH!b^;`fhjppgMcYl#dsg zSD)gqy=P3K_Z^#7dVcoB`CG16FL{0XPAU1=M_}t~r$=qyxodyJ51mVooM~?g^@xq9 zN4-V7I`{aRa~I4<&xoI=POd7SHSN56H1^<{%0pj#wq(vOcwpC&?lMbx;H%BwJZE0! zOa4^${CcjpyKMZj>XP+;%=vWd`o!TWiNm|~XL`Sv7L;!KY5UH)AGc53yRPTWqtmz@ d)yH}#WuAPN>b&QL-NEg=wz@9%_QOwX_y<<}_7(sD literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a6de6b0776fb707dd41be6f67ac8ddf8c186c174 GIT binary patch literal 3047 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 CaMqjv literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..41f2a7d49c25d6e08fc0ce325b6e41ee92f55287 GIT binary patch literal 3069 zcmcImYi!k29PdP655W;p5r}j}P+-07>FeG$yDVdOur1!XY!?{=jHm7CR(J1h*LHVz zAbwCZfyB4?L5;-t_#j5jc$thiR3IV>CO*(em}2517)U^kABcE*U)yA33rdr==kYuL z$M5|A|8urBH?5jcI=7S{h#3v_krwBz)kVmSh!%T*$a|44EY3gBWjTmL4b}i~O z>o+>6bz@UZ+t{VaI#s=#tV%0bKmvJ?Oef+=S4oGdj9dk`{b7b8GZ3#UOx5@b$+l=S zS!+3nlmaZRu`EXhU9$-6g)`xdkW! zJrt(=K%&_Y&9gC%Q&^ygU>S=WY!({Dp{YX;js(jzE5`s(*dWG_0$aLi^i2rWHN~); z1jHL>CSV6*>|{qqTQsUPBwY_CHPjFZQ`ppiY3hn-1bIOfIhxl%kOoi?X_Yqstx1N! z8&DTH4&~QJEUm{6Dt~=8zjRB(G77t)sG`8?JkR6hK&NF^z#k(d(FO!Or-nEl@M>P# zJ&uV}9L7gV^{vveL<5B+Uei^Y*Mo=-=>ni-p!y$Cmw5s3K^1d2thd&RTTax{G3Pu* z`n#=Q@z_-8=U12lxxqF+RO3C_!63)thXMXKH@|j*`Qho+NfT4dQKTO)N=APxE?w9F zNfdc8H{NWfQM@f;V%FTOA=1d1wWDYJO6F&%Qg6CA=K6BArWJMPT5*%iB&7nitP7eS zok*v0!{!(pJUJ?}VtYFgChH1On}xZS;q^iX)pTHnC(H_FJmX!My0YmYC;%2nh&E(i zqD3UII5x!~Ern!FWqA%E5X`%Nx#_$D1cl@CIdnCq=V;YBVX_0^Lx`cS-Wg301x+<% zS_>J1?~F!=I1#6Y${G-{8t%wrIWuNKxW>+CRx*X05rJhx2jYViIc}IT94kRW+m4%B zCcBtaQqP@Fg@hzMiySUL5vvN4EHVg;A>35vZAWKB|oA`N9pr2#Jevekt$t&w8X{$(=P* zisx?oYX8x}dDk!4aLcY~C*Jru*1l)=$ImQ3be3$ASia9ZG^@S)wQo+fZXn1VpDdpD z-qXi-cY2E}w@cRS+islhEv)|b0I2-cE#CLzved16?%4VI_jB&;{{UWi{-KjU=pnlTr|;s%9r1U;E|Mt!bJMn2u|+8Lse(1PprB@ eKY8wA$uGezb%RH?Kj&Z28|s=OZ?Cxj;eP-@ck&DX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b244f44e0ae096e26135a6bcf8264de0c43127a7 GIT binary patch literal 3036 zcmcImdu$X%7+*{zJO#AIVgsyeVxY3OJNvxd^g!qpTkvWr6-u?*x!Kuv?cMHmciX#S zLJUnb#SlzDBg6zXQIwdP7=<84qX0W%(=+uO1BRJ-7k#HNyI-wj zm>E4zOKaGgc*I0rIsz>(i6gmmhM*ayW_d0HQ8y0RB<^(F7ZsJ5EGeN z+~w47^6|P&jV)+XH!>`4`7*X9XA%Kv96~miPPu`Zi*b3mCh5~*fn)QKusg=BpbFX6 zL=#)<`IyxrB9BB-Vs#?|G)2+GrK}`Mq9CdQka(b(qGAG_Ej}F4=3BPe9A8z`MgC%3 zR~TkYLC9vak*pl?{7wNFh9QWOAW1wy@Ik*D!W{1g_m?EZae#a$6FQ#DQi(9>^@cHy zSXyu)ohgfTgCb3YFd+vs0*Hvzr999=Wn8A$Pvwr8EGT0MONm4oKBm}o zx{MCOx;|o2(YG4*hrf`q08LpTy_@S@QIfGI{zc{JFw9J_x)sD(`1 z^V5)QoRfx~Sjf1Yd2NY=+295tbP;Zd$2ekY#BnUs7G)J0BH#@RSUj*4n>Q3I%G**@ z(F_qqRVPTuQi`F}+AD>Vj@3CWnx~-MlllB1tw$3m#x4 z$*UG=4BbG)BR#64sG@4>n9ht@5N@$E$aDL!KO(R)(1+w8#eNXuY~M?>Fq26+D4$(I zpKBG*r*cBFp~nuFpK(dEuyumJ-Nw;93^Qe3LwrR`blX=uK3jeG zp^CaIYot38^;O5eUO)GqEt{X)^V9Q-E2^8F*I($^txQJ`9Q=8ua%9>!(G!PH9=g;s z|GvQ`U+((t+EcTxZr-x@%+?K`Y~OVW?!dP(Iz0AKy65fc8u!32ml@`L;e>adKlQ`O z7}L3a?!3srvvby-J`*ged*a%%moChzuBv=-XZzZYb4YNmWe4^-KR&bYy@A)(9D00d zW%ZF$`xof1930wt_Kgqrqstf8GUq>^|FXsof-qj${r#KmPbbz$!2XUs+tzmHAXxCH zxTHz@DS;4*l_D#f7N{;9{m@_gmZXP{qa7+p22zF8LiF-|=Dl ox5wKS?%R5KX;tO1(^vkweSYJ>oO8MMtMvZeP}dkATG_GXAN^+LLI3~& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7e600d051008368372a6dcabe0e19dd938ba7a3b GIT binary patch literal 3008 zcmcImTWl0n7#<`+L`iCVsh7mbU?K!&XU<%9XGRvR-C{Smr725jNf2hvIn$2aote%| zyITxM5EKPB5b%abzz1R?5);rwNi2ybJ`khE7)hGogAb4pE)l8^nACIj)~&R(LD^(y z&Yb@{|K&UX|DW?lXUFpk7d*CrVVH&K_EZ;nH_`w6dF1)zjd7E_9`M_HLWX(p5&ECQ z96H?0Fbf8pYupdXPg?k-0$z3}$!m$oYa_iNM znDJY2pVPi2z-za3WZ{;6s3UIW3U+zXAPVw0GTCB2=Y~cx$(8jQWK5?8jx9r?{v_8z z4YJ*tPPWwxFdL7FJQPKVP3SQYSCqK8jFm)56hu`35)a~rs2Cu@R(~9^79iW`O0BBe zB40_aFN%Ca5DJAttRTm{pjQC8t_z|hND@yFd^qezW|4QpMKuj69KyiyBgb=Ds?oH( z!6?ZQPb(qh{kmE=tkOgX6N;uUfS5=_DgzO$VC#adlassa}_WQiZ3;Voj zNT`b^Q4u-zGzO_;5)>DmX`ob6hx$fqfX&DYvYwZ#LrF{md&seeXM`eX z*j|t~$;LT(vlk1#+grAl$rx!jj7%5ebSlXaS7VNY3{BUu1+mVXmJE0xD;60ck++Z% zmt_DFmaW&;r#v`FlZvjd)EDv~(NW(G!_t5v=~$)OAg?79k=J#o@QS6$qNZs!(ojv? zn!q6?Zsr=bQm+uvXk#rdLuBzXN?=|?3gC5M(T9q3SpjmwA{~zwB$50CK%Z54&kXVj@jBNb6iXaS^TjCJUrSmSaUia$ zvRa+*bc#6FopK0kVa1VnqoilDgmyAop+>tClAIf^_L{YLpgPJqY`G{66IMciG&?b& zv@-2XvB9&Wva-I=hY4AC$l3}l^z5i$2Dqh{Fg#;b2-7(qnnQPX9V8SWf;i@FU5@iA zCfQ`kYJ!hzIC|dtLWa84_;%cUNGAnBqy;!TKf#m9swQ3tpsWIdfeiHO3Tw!$w?yHlB~w#Dzr_S z(NvrFUzi0`WUe0+HW!T{l*Eb#SAz_t@uuwy*yA;E{_1qhGu{7w$cA`OQ-HNAFh-?vKU{tu3)4|dJ}=K6)BC;PvCQF!UoADqJ%-_MU;c>Jj} z$9$F_eRR*YTi3UaUpTsK_0Y!ea8Kzp?m7Qg^22b`ygzO}GcsrU=qu0dKYR8QddE(; Lb)-%{w|U1ugb(F9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..631071c7d14603c31682bc40aef9fd01ae917125 GIT binary patch literal 3031 zcmcImdu-KI7%vzRH#RX~GUX4Nq6x(H_I2CaHeBZ19d5ci=eWpbd~n)xx;4AE?b_bm zJ0e0xq7pTcOhp#{0SqF_qDD!SKahxkAwY0Jd?iaHK8OU2L=hk0>3waJjV&lm+MdVn ze2?GxzVDp%EzS2;l-*HA5JW{|L#!45X9w@h8TdQ@{AGZDH#-gO9zm4P3EpYMz~(A~ zDC;&8ZGKz4N!9IC2tZpyp=`>*Xo6T=lXZaJg?v&&9i|nf&h6PtktU2%E5tY(cj{25 z*|5q*%T_ff^i^HD0;!rMack9Sk!RnS=OUQK~jjNVdgW z$U56aq!eOlon?74qJ%gp9G2K>l4p6AVMT`HX--nvu*yZq!b4$gE;Q8E*wTV7+>273 zzVE0ElgVU486jl59So-^3d8aY&(jz|d%czqvb5zbC`yPSPj^knH*JdyBm&J&`%wy8 zns*`Pl*C$IfhJ5ClLZdLh1kHQ91!XyoRfBwIpt7iP!gq(<$D;*m9Utlc)SE3S8OU( zLVJFF54Nb_+qh^i(d!_l6?t~r)lq#9*0`W(nCG{m5o)He9K%bCole`gy-s@q5=zr! zsPIi=0)@fM7%0k`6F`HR64X)aTm*dEP1ts_7&|RR+en@Z@#Ml4rUmVcw)idcH=h0oC_2g z?6!)hBRq>Ah6}!h`SwZXN2ZrsCZ?FD$RJ+Soc?9FbYTM| zQ53|&c#D}u$+nn@S@ZISVE1z?ax?8?XM#!=WT@I;dN}5K3$MpdBCYei073g^v z^dLGBqzc34I2$}QD)VA9od}b4m8i|bJlpUyz(utknBhsYf|OlAqVyJ6(hKG{O z;}eD!1X-iQ_@RM_SURF8hR8`8Gz4QjXT~iE*V!4}wtA2|DzF^j0(_7n*NakyYo|!y zI7w5_Wf#+9!NU1eN=VYT$&vCiA!!h~=BOALt)*lF`9JELG~%XK4X;d=>%2)!a6!nI z0p{NoBHxeYnOqv|P43`T$EyWXjX``8tGKjJQtTn8=#mz}M~5P5G$#h>2}Fekg24-- zB#F8Kf`|^J+5ffJ2QieRVbr~;ID{`_L9=uV#GTST5?MHJU3^Qtbck;!h-tGLW3>tS zg(LmPt-gC^*PkP%_r0<5#8;Qrp1!>1fv;F@2i(H@p|4}7+Nd^^YfJ{rptl>l?-X(-nUmpV|A)9OBjCqhDNzCYGP-{=0f_B|+Y_eDw{V z48Bypng|V&P5q1JKb-k(@r5_<>WBBAOdo6R*|+xHnuTY!RDTIC4p%&X@wIb*HVy6H zzU!6pr)xhN{OOsBC)eD0psGr*KK#orV(kwfd^{sP)EcWgxFP=Bwr3BX+K?WqoY(Yi zL&H|{k;4PKZ#&q{uHOdMr5%h8` wN9NtKbL-~^wwtLPI|tey-+cR__lGZ*e_z{I*0`zi<>2bwSl=8Qymw{aKaLXeNB{r; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4d55ab4fdc389edb36b79bb972e24301d3924101 GIT binary patch literal 2975 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bd17fda7e1faa7e55bfa25d7b8fd42988c3d1f5d GIT binary patch literal 3008 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..565c2f7c229dfc73a23ee3808b833638c4ca064c GIT binary patch literal 2997 zcmcImTWl0n7#`Frmw;Fx5lF=?kVa3^TK%-RdUq+4P=zJ9*ys+uxA9rUmUABZiqVhu%||J+IGa znCV-+Og7G@*O?A3C7_FKlqi=1f@YXy%gX_DdQi;TDDU|x?(+L5IM#Dh+y*r*rh_(A z@Y=V9X#KX%jI*uBFqwKP>NfeY&4B2w2=tpKb#Z~m0L#R9h-F z&{4dqk9bszZA^5O83>TjjUwC|I%riNvADSISQK}oVQMBZoxmHDg946mRKVkq&=8NJ zBKC6Q7^IR>P*nEDfl^5W8klV%f-w#=7#Hig(^dD4l|Vvbmu&ES7xzaG(ZFjHkOgCu z;%FlAqRz`=Mv_bsm?~%y$%j~lrb%kLFoq++1}_>J08Aj6iZKd|T`xBBxzsD9YqI0oyzC|sue;PMVAF@{8nOc9q)j*+w%dk_I80-ga4vH!U2T)7 zC$2(TUnvgM2D3C(i@nvsq$H9{0Q6atZ=66rEPlfG2*nb|(tI&1_ScivMI6vnRaR@` zU0xX#vzA9#i>i)jBPAP0OK2yf6>7G75y`oMTCZ7;w${Fi9$P6&6FSup9GacT)1ju?##q6O*${4WFb?+nP&gv70vJNFk)kk4ak&teSQrFF?G(C53g z{i#uqY>e6A_A@SNE(*O7IWW>n!v*$#v^QbKO|BbWTP!zukpy}`sI~#&-yNd*Z&jIG zP1mNf@tR}xg30C}*@;ck+9zoCE-)O;PO3aKG@A!1El;Q#Jd|^itZJI-0gdLc@r2Q+;o#<#=`<%6B?!o4}r!Flv?O3~W@vr-j+_F13|6tRm zokwy0*pZdZn;*XTNu{V3@o?i~XbH`_c zw|&5TefrX@r|ym3J9*@p1?Rr7K1^SD?UQqtW_^m!+`?RqHuT(YJ#bg1SzV+sAAjF+ zHZeET4E3L9FvaL>>1xxJ3(U74&D;OuBbTQfcp>}M;Grgt9;`c7by{z&-17WCU3k=A literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9538a69d36e3c3830b449323c90c871d1c2fa56d GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-Zih?~|978PppI)%!J7B=!5-8vD^xyJ19ZZ^hmwRHD{czgDwUHslHL!D$ zkgIB!m&jBNt-uhe2k$yKuH+aShvdKB_H+s3%+7b&rIFFwb=7%)+~waOm+W?Rvr9yl Q0?>E{Pgg&ebxsLQ0Gk0wWdHyG literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f69f2c2e0537a25ff05a389b70b997d3ccefe7a5 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwr2>%=KS^igtUtIEGmGC;#~W-`-VXwSp#2?0jHZ^~wJWbi@B&pIguS#OX-d{l7o# zGtU40FJ`>`(9r~mR%gCr0tT8df4txK;=%td&fgniIwIaoJpR8_Z0?`+amKuQY=<>u ziVWHsVp5LP-~D#=e{5JRbCF__mBY5A*Sr3I@|;>=DB<>SLbD;u64}51PA@6_GyUZa vkX0XimfErluIA$*%;b8Kde}M{?!_wHyAu!{an^LB{Ts5YZ`+Z literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3238c7e9f043a88a2cc5b80c549f3080ad0a6175 GIT binary patch literal 2961 zcmcgudx#ZP7{7wVx+(=>R1^(ksHx}9IrF-A25-9VUEKxmZCkIoD^#ADIkR{0-Z|sU z?B2UeNQjB~`X`85%ax#i3c@6b3^z;YpI%U4P+&!b5`=<*e?^^hUwb!q-NhaQ^E%(} ze2?GxzVDnD`}13ucRtveNFwQRx@HvugSjoup|mKNW3Q_c5#Ek zV6I>2rXdmZBm_2uvXC;8NLN)It`}q|LkVgUk^$09sG2AxG%k@@3mw-S$Zl!aVt*O2 z7{`GrNtH?^Sy7TS9F~w_7!s5vSq2ONqA@?lRp3V}n;NntvO_P3J?aZwBev*BoDrF) z^$^NIORXO@Xkvs(RUAkt33*60pkudi!AMxD8Fy@nlt`KQam28wg=H+|axM6*YRlyo zI*NNnnMaM-W<^JZv4BVeB%&jsO?pO|#g$FRqIiHzQ?r2S4Bna?6lqMOBAtVTmUspg zvFFZVkV|GjN!6PJ$|WsmV0MQD$22TZT59G_f73TXMoC#%v(xh(T8SRxfj1_QERIP= zk zSH{Cc3jE=kwOr2Z^P?F1HtEY|MCNMJ^Bhx6rBb@CV&E#o0z^>>u;jD>9ArDHoYpN_ zM$P$IYLD=w;`8hEX@iO^#u zj!W%YxmOO;=#sRq*p3AhCq+QoQ4uhZ#UGkuC@NA?7UOW*ZZ|E_Fh?E6In&Qq+hppQ ztC-hUMr0w>1_ybnmPYD>DH*a$Lj2i~56vT=7Vq#qMzJgkJYUS3{q3xEF$Z)_Q?$l- zzgH!t!K}wvi|UT(?UJFH65h#pg_^xy#By$|(QCGoy^XJuC)A44#CAOdn`b9+#Ky2U z%K|Tq%DUQ0kub7uleKkNMBTW8L((O=UZ*^TUk!s3Hvxe@(^#-kW5&Of0Z9SjDa2HmZa;I9=8({9%Yk+)Ef<7;(cZinx3F&bzb}%+4+!-(ApN~V)c><}Cb#gl zscpRGY`tKiImmWmlePAFn!SSzTenggz=m!Cr1A2^ngOul%8I7zn(bnq(Oet-r_G+{ zP>qJRb5nDO9me=)>lDa-TIWdOv$_r0DRJY_<^Al0`DtIatB^kS+e_~rKDcSwfz{)O zzxZTg_37(F&ymTV{?kw1cjW1=GcTO_Aipo4UV36(@|R8S)P)0u6?E0u*+1y@t;?qN zb(X(ht6bc5WbEXU#INU`y7JKGj^f0@ecGDC`>msg&@;P!xVbnn^m1nM$MfGl+V|f2 z&)$CH(yq+$?(;X_|L$_fE3bZeBir%Q*Ox}#RC6DH{?+22({CLrp1d;YohzTnfAjmc z{v9h8U6{HyDL-KEK03DQ>bd;u(OPlm#G$Ka)|<;N9((@s)Q!}`$Df_Nd&Tav{LtLj Mlh3}hdH4Rm0FUFyP5=M^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..caaa6c2abd3bc8eee447907b38493f3e4fd99383 GIT binary patch literal 2990 zcmcguUu+ab7+-w=gpepjsT#s&s{-oY?(E*~-EKIc+_kpI)!Lr4pfSwO%-wBzx4Z0a zd)KNFA;$0knlz@y5TicHiv*1(LKGT_Jg5%@6CWT-^uff2G_e}=1)RBmy-G_P{Iki< z&d&Fn@B8MP-}lWN>g{=a^~(EJavZn1yDQa4zjv~C#WLD%n7Iz==MJxHcffJ0TG)FV z_tw!?j$66U&J2cw>76EWixG%ji$uyrkD@tl%hs|7(GUrFi{xx4Axxh-E$}u@2m@ML zPJ2m`x4XuC(m&RdL1RP6z{1wY_$_6VDkzc=^5tT|3CwarsOU9mpAAa_Ux9=}389@C zeOf+Cp8F~_k$ZSa!AVv+GH|!TG#xaseffR`o1{4b#SQ@2tx&fb8 zZL!!u2Vutu^{BSCdC@^;)FVlW(V>8<<5DI6V+3f@&bP(xIB?Rhf#I~`iWMc>+*$@>?v&1Nls-mUKSX83W z!bs7Gj;r3%`6(9-Gg7hn)%?OPqB*A0y}MAza_wz9E? zwkLg?rZ_A#Yh_+xsxeFAx{9zRsyIef;3yCcV6jHSh8hKG%%XZ`?IzuV>!)2zW3CE3 z+ijDor>;VlUkL%!1_v2c3&YjHm?G0h0<5jccP}EJ6+i9RG{lO)GrpJ=`~9?ZQ3rHQ zQ?=T7uU#gE!IVv-7E~S4nV(cVX zs14imZ1B=TSyfxg6B?|Wu(k>d+-z8aK55U<2rrry(n8J$aOCE$gIE;EKqq3>P<2rw zQCYN9Ehg%516i`F5CUTLrQhhfYJ#Y#sP!DW71wKFMS1At2t9-(;no*JEP`V|H$+3G zY>pF_8VaGAl9h>p4a0(%vh>D%n71JO$BRL(GeZ0(VtLSq^dKdEkPx!ITjZhV6>L<= zE@{NUwezWwkbLO!v*l;OpkdCqXW5lq+T_I_$H!kd s7fvVloVblVv8P@a!UI{!tCzs-O{_AWp~@V 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 Ob7y;3=8gNe?)(dk)65D0 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..789bf613befae4def8545260e7bc89f4ddd92d2d GIT binary patch literal 2940 zcmcImZD<@t7(Uw~ZAu{0KPpI$g2OV57f(kAGoAw6x12%VdmP1f%1Y* z-j8RV_np~4JhY{|>-Mf(F4sLcP#j_ZJ^Z`$X7;=C(iO=5mPG?Ql3Z^23jVz*cjSdz zbGfeFet9$_QF}*WV+otGmoVm84LpSA#Hd>jkl4*JaOqSQdo_B;8dIH*$x< zXlYpJqcIW8ydoh*Q3cD%15?*cWv!qpsv;|f3{(l2uA;lZ5?UXTd5f{>Ole%EG-zvQxE-6Ig1joM-tLE(){?t;;;jXw2vbrJ zxsW8qmNccTs;&ZD1Kh2!2c-!uF==9$!cMRwDNY#x7ig|(&j3^GdsFj5F>*Z`S0URt zzY52Q9ED>IZ>5qu7$zwU5g9BNL>6k^_pz%RrcMCXB^wb#(y$IB$JAL(AcAbHTDGBU z?e#^9Cb+2h`euD$ikOXTH(XpH#5Mr4;b^9$I?NEXELAcsf>aMcPtonRwXLzwN*o5A zR(VvIS@ei)Y6w?YKo*hgMpU4}%mM>DnhrFp!Z@7v+eZT$mndeOvuOElyUaWb74rHj zh@dq%%B31iGzTqJVILXr-`4z&dFH35?+<-Ou__8&FK)yCHrBdW0H$GRMr(Z7uajW3 z=rh)mW*}zg%#N8eyp!O|3YqpWyt*5{j8b#?s)Jy?!brLMLhW%MKcwtmF z&DO>VBkLNfZNd`jr8O9njbn`Ad8j}L@D;kI47-5HyEM9*ykU&GXi76?HgC)yj$=If;NfD|Jv-ih8i?<+?(1% z>@vn5vs)m0$?lOPWOW;}TjG)Tx4zA8n8yZ-8_V`nKRyGxPHpJvzp{0a_<(svJ6{(+ z|L*bN&DW3jymI1}L#NLCaQw;2$NRecwO_~Qr`}ut>8)QJe75_---{nvGJJXYXYYKN ze4-s#e0Y`Iy`{L}_cgyg_~@N)J-q*q6FY;IN1y)l+b@?c8P1n4^gp*O+%WK!X{@dq zhc>-bKm5?>niYG`2^V|IM|Yq7VBhl7eSZZ9r8ms)PdtC`ujhWbeBidzrN??-{pk3~ kMMFKcm-jyL;-x!Q{k;9+v2)*?<@e*k{-NS)n|AK|2dR9%!vFvP literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6ceb953fd4d024aba056c17bf7ac2978abb55400 GIT binary patch literal 2992 zcmcImeTWrR6n~b4x+;ZYWs$>JnbdtVcRt@tJ{Nc2+HU%6+kN6L_{ZLvxwCKB_h!bK z*?n&pv@lkR{0b37q@Zj=qv(&IKMIXX#2`%!B8v>lzBaK4DQdy)eP8=FciqKuV7~78 z-E)5D+;h&o&$VxOY{9&x^J1~sg0|LF2YKI4?>V=T=d$0gBJ!H+w|0lISi>TE&x##9 zbXP1kZ;O-Zin`M4b<@kok>wdUUd;Oh9gD4MEc(do!x3ZPUdK(cm)||kGLDsGH_2%} z?Kk7B(>fI3&Y=w%bEwbMEVgkqv#O{Q1$i7HrkKyUpE~w@eP_a2~r+NU*SmB~ePJYw$_c z=JPdl7_|%#Mit*CMTeO|A9Ecz^!fu6w+s-A%d5n~r~{9OW(Ly>3xTy&;@Qb`T!>&*d1kr!k1~3Il0SU#Hfn^Db zh;1XGNr~$GlxOzSq@wf7^<{Y`(NS9sJ)y{wp&|tsq6Ps{B^zjp#RJvGqJj)T(#*2& zgv}FyLrNUw>a|i<7G;GKifCE}5G@shge5_sL4!VIOA{q1ss_TSCWO5!7iGrx&HE?D)8juAbnQk-P6d&#T#9Rgjir1nlF0EekW;Ngn%N; zqFfnocZxXIm2ybb!ZH!1UeY~LLOU6)P`%X&NzM&cdQB(ZQu)d`OsOb!WR_hpX?9|Z ztqePpE%1y&Syo%fViK(DWNjH1dUjMm0bbKfB0OzXa8r>F(ZKboLsf!2R4}kLQ2{cR zc#>DL3Y3Iq8oVfA4ArXZ*HR}1B3qVOwS#_L0w|`C_rQ*#X*>4?ZC@3$oF%OS*k8> zz_lv-Q>`GG$YaLa&y+#4aNyMCK)sb31?GRWH*LnvtQ%fiEH`yQe13;OUCz3UQL|Y)ciXxjfq8UxK zdH=Q9(;O;=q3+yN9U_M@`dK>#lAqc+61${s19D1y{-ZB8krU>{w$z$TV%Md8jeQ@q zFFtW**V&%MCuaZr*+|RS!riC0t!Ui;%DSJv%ih`WNqf_<0@}tFE&KDW7hRA4bbj}} zLnm+j)+9{_=4XHPqdba-qk-OUS literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4ed7617953c0f5c85b3f6e729dc841666abd5948 GIT binary patch literal 2963 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b9e5bd587285bd228dede4344ee87eabcad07ff1 GIT binary patch literal 2964 zcmcguS&S4#7#@@uz@QK{A!wv+Akj!oSM}WuBdj~XE@5!9JIbODQe9m=+cMMLbocJg z5~2oqP~$;{j{Ods`s z^&emT|6lb=*SgiSXU(6L$z*1CcI3O+a}NK{xP#pnTpYpdF*EAekYqA<-oyXXGVku3 zm&wf9>=%2}-ojd&gq19ILx*Oom58A;nPtnX5hj~xDmb*{2RZS=*WZbP@8-nyS^*ZK zcG~B6Y>8>lmUTt4WfQSnartAyvZ~D#RA`EYYNZ?`b~Pu~^xEv54@;s@gQS~sVjDLo z^cK2=_AsV`o`rxwC<}&_MY^i$aETy88A?!-kPMJ+L)Aux(6~fqEp|P-JHM)7i+$z9 zzBG+&Ng5m+%nmBqFfK{RvMdS8k}Ly;0Lf60;wlJ|g-s24nvmF!Qa=m?t`R$7f0`4S zr}YpjQA=%*G-zUkNmU$4C<}Q=HK0pcxTrra*NnSFqGej4L7FfuYGD~mg+dEHuG&ha zg-+6y1I(jFY~!Mn;!s4TZkmMsF`+95n8k%n$C9+0j#4v)=?vbQ9QB21nDm7ckkAre zLq+O)6By)@YoN61PXOhT7BsTkV~W!-E{0*bnLAxg-vk+DW#QrVe&B|K$s;`Q#sr$j zDb0yIkpMJ-0*kV2Lu6~{QOI6k9a>EaZR1zP}GMTBhjyAB+>zBe=})FrkT#udyK z&adDSm7<_jvsNhBok5b~fY8o-PGqiTec!cJ(|}mVCeU4z0<5YAFg<7i)6fu7AXH4O zHs|L<($ABM&#%{)8xp3YwHmewJKefW>4s_OO>IxaJ}Yrt z9;=mm$@=@`VfzK$GMSjDx zaTa)LRMyoF_EARGO|rHQOF}Ol#4&9vF@`6t3TYze6FhKp*O8$jh;#}(OVNQwRR|nK zGk|Vd#DR)TDKeU&-{`txBh{9bX2IQx>kV2-9}Y^CZ9%l-4gN{rD6cg#dq^b!l z=%~P>gqWU+bx&qlc;h;Z+YtWaU`QAY(0EK@ML5Q6Bc*YY6TLXB2snz$KB-lgG!VFr z{i#)uLK+IA?Po<pIgha$u~LmJ7naXm8Stn_4&g-xo>Z2ZVYXkgo3#_3wP0$yI!9 zY8$UTUN4wx4ziutX03gaX73`4=#HTQZ0Qa_8ZS?*SpX}ZtY|uG`5xvO&9#O9wAu3< zs?jj!+|(RmhcW)zIt8+i);W>}tZrj=O8ji!y~FH;`D16kt!Tdf`&)e zv@rcr2dw;_eHJFYe8sz5TcSyS`E9y}5et$6Y6%TKb-JTjuE2OS`-NS}}J| z^5rM{4!&JD@%bNndQRWfcK*PQ?U(nQ+&W`;(ai4B)tT8-_mkp$^5BUpmlq5jd-eHk zXPs=O>(r$WmK;1c{ouI|cW->bMADk0`zlYr_S4=2)n(5voi6{m>%#G$HxA#ucEsW5 O=FXMt@}EAwaogWsDay+L literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c2346502991ddae10d83d437ded9eac0bc63b5e4 GIT binary patch literal 3043 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bee22fd5604a28212321c6db62aee65976372662 GIT binary patch literal 3039 zcmcImTWl0n7@j6-yj%|37C(TkD1eb8nkVQPhH#=42Yb>&bodP562H=w*msbNuFxkfP=-B6l72#?Y-4 zHFv9>$wt}KeY)W}F=%=@6e~JDMpIP7nxYSl9u(0z)MdK~=KL35Gqi0cm`!quPx(!# z+io5RQ2Rh@#u(@^G?Q6#58Y7Iu>uE0kS;oTH`I#>rleQL-(;9$=n^FANidDXAe~LM z(M?`}XeGw82G0w$s>OgJNeaK37I=Z@c$otN3lyD~bfD6ei^0|c)6&z)^%YzAFTr$2 zk*{-Hp-_kw#F!U!aX`~Fju$vVU@?LX``ri@SvOo>)sRG?5!ilYdoE2h!kpI|B^c~! zIRwYAsdd8&O_(sQ2z?I3coI?xXc{$~-y7sh#!Z7mdE_8B3NaScu$ZM(ss^7@t>e_t zVYIFfdsK;SN_3d%_Ys#yq1PK2Xk8z+xV-9E7^TrTHM5wG;kC(rw-J$5HSr`W zBHNnAAdyUhqM|(wlt^k&UvCN!jJzP@dHHJYv{ikh1rQVHm78qW^a|lB5_n|-O2P;w z7?MaVA7@2ABM3SVbQ#>m;}5 zFP!bbF2wn6SIJr`rMI|Y1YHBQBohpFHD=qU4ou#VOjThmC@QSVOBM^`NMm!d2;!zB zN~$JQ=O;a*mn0RLU#>6HGq8@@YUn~-MV2g@EYGU~D*y?xnyln70j7eBOA}-yRkht8 z*to=Dexg?5m5DW4D6WWxi6@#WVzD29)j*CsWK$C*AgVdc;kexsBNeJQ+ab=m{z|WDM_Vgjd7Ca3r4Eg92nNYcWHOau zdx`~~9hGIZg>Hn&x=PlTVWDS51sI^lF3j+ZRl!Z?dhqsQCNw4|9RuqWieL@PBH=>O5)%o#VUZg^#}T<1mN$N{0;2DpEBi1L53 z%;b8qHl>YMpQ;zkHV5%etmD=`L$f!5W+*vTW}${#JdjCwLRn*>XbGaMD6(NelF>w) z_g|Ym$)OSr6V6T5A$%AkpS4pU{;8cKk&Ej#z^BA#l6P#OsJg{1$;M3lg%i8>K6m)u z`ll~<>^#h@d@bh;UYIkOx1BS0Uwrt(bpG7V70v0Vo^ThYcenKoKh$t!$sc*Q^G)x^ zZC^dPIcGhZ{`uWgm+?k+$k1|Q{_|j)_}kc9Kb({A+Vkb13q^C)oiF_o@0S*BKNGZk|6sN! zacp#m>fD<>zVu}8iN^Xr-23m`M+`wr%)jrU$?1PVv?t9N(IlpPQt$Xk6 zw|dwO8-IO&;lje^Z(coyPLKHUdTRcWktO1;mv2cQ-BEY&()vA%SF{YCu(rovoI|+> omTviE(`U}SkL804{&pU#`&}+vTz2TtNpb{lS=X8zUfVhN52p0&@Bjb+ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6e5e56050ea808658738bc34671c12225a16863e GIT binary patch literal 3052 zcmcguZEO@p7`_5QZLL5`072ujm;%AM{ocD>dSK}lTJ_peYPbqNn4O(#H@(|kcDKDN zMx_uEi6I0C*x*NqF(hcHiNRnjLK-ECQll6Zqw)h|)R=%M27XBD?0vPBmNxit$?eY0 z`^@|C%=^AGJDVETl$Xvg4Fm$^^>xu^@}BAc@0?Da5Bxp^$?Gn=uGI|$$}0SSN#Nj% z^8$g=%|=Vyi^m>Qk(CNU-O_L{ld=gq5U5(2u_5Zf9;M+n!;H|E`%lr7p-1TTQjCq+ zHMrfV+v4DLTN+x>mJX!o^vV@fRYoNWQrLr3CY3Z@H4~w;dQ~#^rx}{cLcER$UF{pB z;;|;G#&R$v2U&nvmZw5WkdsAGW*?$>mS-7OVmKafvdW4o7oze%npku6gxVZkowr54 zB6Pdw*($@N)9GMZ2wF}X!zqfwusp-_fFOX|ZF(>ROm|U1LlnEnF>KGUOv={?HLKH$ z(8SYR2r0X$)^zhU5yF@Zv>7hQ`XOb3Ix6DqPA8c)t|JB~aSEHBOR!uKOIV7(zDYwp!z0=vhvSWhD!_(^T+{;<+GCEm?1vx|Md9`hn*c z;3)KPg!U5&uwfvuEj+KXoGNk4STbO9&=^Tg9eQviSOKik!f`6W^U5f&r5lOv386Yt z6PA;LWaEq!Y{QIgwq>owVrsqVdeB6;J{qBkt3kuiRTk+Arztvsm=6I(7ZHF7Aq;dr z#LFzwB#q|_>!TLx^pnb8pQ|t3LPSS#H&j*=xkOmgfCME7G)~k&Se6xlc%A6MVT8D% zwnoPwB@UA#wfbJ^L}LPnWdZ3L5cCiRVO`_^@zQ@tx*~|25Yh;T!**+|q~*jcop3JD zl)u|5QBPcjetkt~E2y1T65qYGfb+p9qWPXLJb%slFt~=jr*5S?hQPQBYMX5rR3jz7r ziFGMx{WYAVO22WIq$-*Tf5GMM2_WT3=)bU z0||>P&;%(2$<_YeWDj0-tX?qL93&^PN?Q8_&0gmeBx@lFKt+y*_>RuFCV94vM>! z<7G#i`uRM12wV@q7Cxg?zUpS*7())7H^ZkuewtjqR|JlaM zeTk`ot5?`>dLO>GN4z-Dy1OxWkNm`pqi=BYW-KT>{MGKkY0r6QzC3y6;)%sC-Pp5f zLww^8D@*tPc1M3-b#3!2b&nj`aeP+E)(c;+eRlRX@ofC_o$sPGUG7sa{DKFK-nS~= zK3UUwx;N6c?67<8?()9N$0|-Vpy1xUgMGpNSv^0l9r*0V`sD-g)5U=$rpVHGM^FQfO>vzmp?%&7j MYa60{t2S->3oYdHcK`qY literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e8efb48af393a14bf002fd8a3a56ae863193698b GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-ZiV{6t978PppI&g}Vo>C0eVC`{`s}a&&o;Ie&HKlq&OLJebJvCSfT)yl z#+e0%$}ED7xAS>=B^9?^3&^g0YuKO;JG%ydU%~03WyTvo9%Arx^>bP0l+XkK;jmMU literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2716a62454935fd933c279ff7e01239b64ad4c4b GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwr2>%=KS^if($kIEGmGC;#~W-`-VXwSp!bJ0D0tdF?-MyZoQ|r5`OPbZfQqCX1@D zCUaD*x%Yejw=tBDTd%pgme|e+yiPjFz rZ?b>&XBa=ii%_6S8mnVp?&H{9)RclUZ% z3`#(a68L3|VhHFDH6cbLQAjWbBq02-L{d$S7#kB3Nr)m|!0-!a?yIe|v_aWqzvg}B z{dnem-M5{5Lg*-3PnjRBWSyuUGTI5BZ;}uR2SwS^;*$_0kaxvIiVA)1ja&5&H{!1`@ zQREvOm(S;8c`4=vy_}%yI>(EgD6$yAhJ$Vd3alG0t7=H15C)DPIi5=sjllGBQG&sq zmP5$;HMMS7p$QYl6@bqPF`k4}0$Q+!^K(I_WZZ%r%AhQAqYz_-8WyvZO4Z<#s?BC= z=rC#>z#dg%n-m?U2YtkKq0q|(5Va0qi_5Bxg;5t8qhKiQq0+AP_Jug$uozALnv?#Rcxr$y1=1w#=Y=kW($hNf_8S|9@B!8*(9X+baq#o*NmV9#>w!D*ouG;A-( z0=#fe7W5*{cY90LQYoX|4I|(})SgT**wvWhScYao7{`gv+KR5SCX(Z<$;aa?k_1VE z8m}mlRh^&oV2&genP09i%Y#@)Z8Z$hl5AB_1QsDxXDvn6SO8^(MUdAmSwnFR3RP|E z0tc5k$c)!Yyt1%H8^u)#S|%%58e-#?EU>y@l80jHl8jw5F^6MzTfB@Hq&y3AE-^G& zZ3C;vt^!hD2?iT24fc>!&E(31n#kje6Ueh7-#CqYOuXK8FvTK6lYB8s_PcTG!VajI zGNm%!=@d|=C+T3;!m=akc*(|z64J>?g&J*6h;weR(rda=f8{IV(50d@04#?9Np>Q< zK;>a)k_Da_mF4;QK7`4-P1crSp=U>V5TMn)nBi%wf}6_u5DeVjbwQH_UQiKh>ypYU zNak5nQZ!bL>(JyS5g|dVhJLH-k|D^3C{=6dPF%0h3j2WDi|{7IF?Sw}qKE>Bt8o_S z0I<9$o47O-k=60AqVSd!x6ow4Oxh6caxljg8-LA(@7ius;MbBqg9g?6jGi*(ODqbqNJ#*0&PGt znrQR>YqKXgRH9+rxv4sY4`bxBb_&ElwR0qLaoq;^lvw|K+ZKwdo7xNG~dpS3|>CvI$o+H`p^}@=txy@}& zBMpE2{lr7CaP-1gN3RxdTs+)7(hz%lLEQ;{;T56&5&D%L?d;(_myg+SPgeTIAC@;Y go<6zb$Vi!H_|cV_OiLw9GUGt=E| z0b?*~R8XSPL<-Twzz?J+Vy4A=T9dHqO7JmUXS0mhWFGd__?tEI>fJOZuMrLAZFYa-V=zu`{ohE z^foKm6f`C7QFSLBfrg`@NG|PSG(nWF$+=K(MFFXyX3LIIS9*_8q-DgYMlr!8+)C79 zRd;%*p|durced(^L9JO$mgiKgAdLb@=F%zKS938cuUEz2;V?~+c}UP2qbfp!WK*J! ztaLm?N)ZO=48xJK5@97lkeHPu$8ZeIh&0OqR#F*3Wo5E>QP`Sim}-4|UC|c)i%~5> z;Hos8&1NH6KH_-IG^;2I&2Tiw0gM2ChaJEiu>C~?8sf;;J9WJ8lk?*v7I;zTGi;D&v^MiUcn3{1+$MDi*x5Wt@zr`6P2_^Bc zR0NheiosAa42p8rD9}(+g1Ty@hhX4%NykYIaHnp-HGf9q98CDh96%77h3eW_mrU3&u6s!P7NwTbp@xpMhV_0U#m{3DkO~*?^ zyl_?;HY3`#oAcHZ3AM)d18D20CLW`(s}ajGRDm-&QQ>s}Wkm!K3KGybUIdb%Kt`5i z$g|48{J5jHholPU7wXG!bgZMa8Y*jQ3|1%s6Db;C4Iv7mX4C`_@tmT|jG(ddfVK^u zg-aZ!hH4GHGO$JyMI~N0G{74&0#QR?fx>FxLo^g#V0l@?IUKZG>7*Pl;TSmQJVl19 ztzz}qRT$P+jADy}O(9iN?S(;^WAH_@;j<{;JcfKwyveq3iaCl5`J(3SH{jNV9gswk z7mMR{Rt}|_;ug-DUvNYkD%m_-5_Yn%Le*-^$DHdZ_L>INR{Tm?WWFd>s24)eLv|vA zDh^vCEb#bJSx}p8K{#1AU~K{BJ7$oD9;#@@86LAL=+T__VdloJv$DW4tb~B6@DdP_ zzyOUGWgtZrU1N9-p^#0Zxz4MspmO{`!Tl50i@Nm|Xg4Fg3DML|1cMY2G8zXAi9vYF z5jdd9Py{+OOx=KzCX1N5e-CEFhVUN;qdRs6c|(ZhLJ#7N6nTD(GCe0vLf1`MdcL~o zjBOP6r&2+ZfkO_qpHY)$AkP}YfuUAPE|CACy)hX#zHa!xFA^Od5DIO8{%eOQ{KpHK zToILjLIf!>+6}R>=n!Uj)dPrLU6$v+cF)U9gDgg2(-a#Zu)J+&NI@IRe zY_ktJluyHubJM^OK8%H*rBfjODV-ycjqBFKr^E?AFP}{i6PDD(E0WROA3eKf!^DcY zCokM>>W7T9s()MG(#1!fKHT%b^{0qc>9>2^rQhdlU;6l~70ZZ+`x|zg-`exgEP{OJ zxxVbB?^74|%-&M*^|=T<4_@v+Cr|yfy63>LBj0vkCwe|VpR2z8ps;b_xwg9&ys%^c z_WS$Lfj!Opw$Hy?-*sV?GVS@b(RJfJRj1Ry!XVMd|UfglK>zdGYq2=|J#MQlv z&n_Z2$`ee!F@}D~77u%wZ@1~=TM_*cZ^vB&ZC+f5QI7Ab#WV+v2{o9%FP+n72 L8-H!>mYshBrhoE? literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..46a68819c0dd66018ed5f2bc92a1d3cdb0004002 GIT binary patch literal 3031 zcmcgud2AF_7+;9t6jOpE1%gZm6D2r1*UkxRE!|?PZYkRZT1?b8GjG}nyED_7X?NQo zQAtFD#4|`L1Y%MWMGeMyrI8AnMq>cc)IT)QY7Inb#N!_lQG9Q&Zl$FS9+S-VzTf+f z-}}Dry~mpx?_4l%>AX-Vw4k9rmO$?ce9xJMo-2O44A5(?Ti@!3Lh~2ldq${te`P2% zufs~V1TFD5&&h7M4Ipc;-!xT(IJMa;fEnyK$@puV7q1tr1 zg!Y5FF62=mwh7UGvfG7p0{Tv;r^C7~WN~HDF+WJaF>0nU9l=YJ-F7E%{B~y&5=!E6 zR0Nhei9swG2ZdQ{5-66Gpsrf$K@d1z(s5G7+-WNMMsRGHBW~Sd*@lzxSK+`56JQJk zFiPS?q8ORtnIy-l466$4Y6g8Ud1xG^rU3#_4pt~eNwTcU@hTS?2X+k0?4A;8=&I>> zX@C~aN`p2?yLMa7T0E{c*nR+P9X7nr#jp{X0*a|nG9!ta zEJQ?2GmGZKEm>nhBzFvTkE78FYXwKbDkvd zYO6>+auwkEijr($umz`Tsxv<*aSXa>7C#H})+yv;;!U=NDCS54=Zl)N-;7!pazGRW z9tD{jZ?dv5)e^H1YkuAlv0TzRUV=Lru28k!@=?xp7kW)I>?nMtEFxEwD$w&G=r}u} zK^BIs2^M&IROZ!Y+94wADp{L{`HmT6fCp>Z5W`be1wEPbKIpo->#P)E8CHapsqi8t zzz9QWydY7ctmqoUa}cspG4v~4=T$a>%BWaF*W!ACR=pkAZ4hljG2<^ZeUWHIKuyL9`RAsI^bg>of3boI`CmAG~@b)SWQyibMl$f zjVJD?7#vuYZf!a9R@Kt)KHfR|1O4Y4jx~O>D>Hm{b!B~|hkfab!wdGkI=Z#eS!OI+ zx^woqizg3Wke;nF2ib3z5B)*Uy7>Ev)Y@|!gGcYH82;fsBJ@uGfiJiB9J!c#SzLYg-P++x$DNU7?~^^vPxZe2G(LJa)HTLlTlc^te*vUZ>|p=^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..55b86c156af4ed0f7645bc39f7245051755b25a7 GIT binary patch literal 3011 zcmcguYit!o6uu-?p`@V^7224vT@)d9@6JB&-IYtNy~S3&wU#Ti{4mV!%xzch-C1_G zy|)d<*n}StA86tOBmPi~M${1SkFTInQxc)UA4C&l43Qsb0w%m9B|&HItF5-Q!N(>$ zJ3Hr_bIzRk&Y9WS-F1ImZDVaD5~=I#NcPZgJ$o14NZS?X|A6$f$m{3}B9X;Q*}EX} z>TAm*k=kuex;N}iJ!IM>7lnveI9kYg6dj4IZ7F!r-ikxc!u^h$;D7t%FwZ$C!Ee%1 zAmz2;0jFcc#~Vhv()P$!+dzEFI&N*jqzZC4gj^w)bpx}I;EQ@q+GoQe&lMrz)&$?m z4064xZmx~^nA4*`umO;{m=Tq9Rnlq9KU`+jqRsAuh)>LW>NB z37&ddT0+jNs&#{Mm}tPn0`x>F3fPj0Kx9{O-k_f?8b`K>vp9#{FrZkeiltFXrK<25 z)#h?lbP%==QIE=Nn-LwPhdnIz;D8MJHf|rH7FSjr3&I{e8Jc-ar|{}zZ-9g(7$CC* zp(>shiqOf-VvtFuL2<#E12}86OyfPr@P`CCreS8TfNC~5y=N@*uu*b za1w?%!80NWATB5%Ez2g5Oij8Q&<-d;QVR z@#SG>h7F!yC`)Sd1DFQu8mukB0+I>y(8sO)G{SRcg*cn@0UWxv>rzaWfTUv~V<@_y zVHF6LqQwL~ZrB!3WQ--srrBIqOi49mrIJI}<9b=QJpkQ)Ob;QEzy8G_MFSYcfDn(V zNU)KL1q)j-!B!2`pn0KUOj+~y#mra`{^P~i#2v!^6k>VMhx8!DevsfZKFM*=^RkXz z%r0@rMdkCUnvh&bxXJP}YtRt(ohclcYNhG|_b=L;lX3H_hX4B}iR^+gG_KZWtFig2ORfgzgjCHHGK>Aa?M`D-etxs=>O+)Z&dc(ZjnQTqRpE>qIqU+0h z>vtU9xpxIZZ#C7OThMd-5&zEdEoXPXzJFh9N5?M%t4}vK){Y&#xx+j9=7C%8daP!> z`^vd9KRof%(Pul~c<`e6=|8CXgalI`RBQjLoLt!eEA4D*0f5wB1s>w zyL3;@g>JCpi<+0tlZB0!#%spw^TxTc(-%fR3%2i==znMXSYPAYH?({;)bQTH&EK4T zcjKo^Up~_G{T)Zvs!#v=;Ynkn`S>cQ73=~p9!Nc&yE1xl0_@sce`;~M`T1qH?`xPS zwC^9gt>z>?K|WenzoTx|iSMpHuzUR5iAA?MdpGVoeWn5b9)0T2O;5frHq_bK&AIkA QcFpc=?@E4f-w7}J-oYJa4oZXqb+w^XC+1>W8 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 I*|2x$AC{%x8~^|S literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..442bca7262d5bdee8e2a2c500b3b2bbe571b75ec GIT binary patch literal 3035 zcmcguTWl3Y7(O+CfWg!NUI>wOF`#*PgSx-QBjQ zHTcj778OK`C>0VU5)%zIkw^>})Mzk<7#;{JFJMr3Fa{rp5`sZz&aJJqw86_Jdz<;@ z|Nr^s`~R68jSWxEnmKP~EEbzpUzcpc?@Dq{pN5|cuKfw|YldI9A&kZDn@#SD*x>$$ zW3ibXPD^Xlnp&fqUN#Ob&p`29*2m~rY)MVdhh{s9CH_pCySyCswp1ufCUoE@eC*HK-4*fDqb}97Ff34lw4Kxh5r(C zTNL>^%XW8n$Ge5N7o=HE(=-mA{L?Hbw&vq zM_QOd)-RiN!y-+XFg6E$mWu;2r999w%Q(L?$mE?{CW|sCi`*#0Sgwr4ETvLq_?Tw1 z*)lqeR(9ctigOzi9k%rNh;2fl*BO{-Wf%6iuoPGrHKAc@CNUht%Y*$kFY>}RZyXZJ z-J__89D5vxq-PWq<(zS#q^At^_1XZz$O~FLFH_P^V<|R@=i)q7wcc?puRDB#OuRS% zC1HdTG!YU5R7LCb zy&wzm!Z}%(My&6q^WIV^z1|HY=$fcLnV@l~amTTAO%XKJvTa5Ng2l*+s4-B~RK~D* z8Sy{_0%w-SCq1*1h>DCaI;|%hUEKLwOK`}6g!+vYMj2EOl3v({e z6j^N@o5!I-l3xj$D>k+gsb)G0jS3I&#d73X?B6g!|8VzO*TEF?G)45H=lwV1(uD(% zB}tHq?TtlsYsEQ!t4- zkwq7qoiP@8a#R+~cDEr+)*Vz^fQ6nNb;AHHPh*BB%nEkA;6vDT=g>JtfS=UXWy2GHpl{ zO{{tUwAd33{rfsrYl{xtdT5$aRlPUdb>`jOLoa=jTNukd*9&esgO4h)WhXw=E3aN%fUA$O zZ2yaY+ASaXr)oJvu5dB@8ao>zVnx-RxJCj^Cmy_QYOrbW^m|vT+3I`R@4vONX3n0TS3l+l(&YGEzp^1Yv|>x&U&it2I{*Lx literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2b2c707682f994387d0eb5f3a0c6485a4c270b5e GIT binary patch literal 3035 zcmcImZEO@p7~cNCV3DMV35}SrE|A#B-tO$@?aE0@uh2GLsijJ*pw7_ zwF!}6jGCy4F@XdL;Rlj{#2?0zs03^je_0?Q5s5JpO)Bw&Vo1ao4bI$GTWM*7vdPZQ z&OGyeJoCQq%xm3U8yD9W39kc&H zBg541bb9-uzSI*Y^71igdlrrr^FBc{%-VHDAEF&NVlA9;+ypoA$!U&t>;$((O^GSL z6=$9H;Q((Q?&?LuJCI>>>mFy<7EK}`k0Zzy^Eo#(iwUkI*Cc&9EO2ZI675KEEmR@f zm+EF)y#TXXOyrR$N~~_gfTk##xQ3NPNfbm?01^*0Q&dc#vz3P<+5$Um_9Qn{bdkRV zmyIId6of*d5G%+rFUSbMFbqMI1WDovf)9t>2o`xaTv?Tn#32eCKXN>mr4pg#4MYi! zSXy==@7Kh-VTC3_m{5ei0AeC_sRXo94d)L8xsq}l2{?!I*o{Jh1vM;TDV3_hXB3;y z*U(|qHb^Y0_%>cv4(1Sy7AV9cnkZ4?4H7tyJ@FX?!SWe)z#eUX{yfEv{LPBkN z8WoX~o<$*@nFhs0XBH@(sX=|SHNY_Pf?m(dRb!{SY8xwon8ZG^#c^$~5H?ZAD+_QE zMmWLIK;p$XFN?jBWQxF4!J{JSh-GMsgr*H6I2CO0qR|V0DXFHcOaptilOCEAY9ll4 z1$js|&dI|J7JN5T(w0h@9c~yw7vYX%f+MEJ9LF{_13?YO0dFaW%*SoT;tfa|MU~^& zN^2U{g9nmA%Pi3HlHwjnD()-A%}q~2C9=LIRxCY;M0OLyBO z;)$t{=2wCPmBBt5s=0ykpe~8z5ddu~^Zj$oPfkDOI)q}0V`;pYCH|J}ib-5q zva0i1+(4EnOBe&a>iVsw%O+4vNv`J5otR#s6=k8D!Q>DUxI1@76fL0Ya?k;hJ!pIJ$>ao|jefvH+*Cb0jbzBwaqe%0{SWVy?mB+v^&xeN&Zt`Oz_WSPkg zbZ<%ruQ^jKm~RY{lh`DseU4&p0|RN6PD0qwEFP#dJ)vswP)&8-Ya4D@J#zU-LESq3ZK3gMgN)uh z-hbgHcNu1rPugc+`Rp-Mj{aK3vzl?cx_GegFFAg@9{Z@cGU!TN*ySv8#A+BXekE{DU=b{b-0+ e>c;*)yRPeOanaSfgY^2&bhLFP-(Ua2o__#780x_Q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..98c4611b39cbeb73a8bc21f6d6f6433487c0d2a6 GIT binary patch literal 3055 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 H+g|tw?q}>< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f660428b6bc588de3681e6fecbe1554371326eb1 GIT binary patch literal 3069 zcmcguYitx%6ds<@k|q?8hrGsts0gz&cV4?YVZoLyw#02qSwdIEaA)RDJ9KwuIy3EV z3qes({Glc`F~NY(5CZXmN!9QQa(jZm`whos3&$z zr>L?vE7=q@C2m)BCli8(qoGhP<6<;LEnb>)q27uDT0_m29bmBb<4 zlxU!rIUb^w5YOs7FVNv=2q==I@QY}H7kG}BIUuk=QF%!PVY>KZus6>z)yDYpqA&aw zV_Jg1RXHx3&4#jK$nlyv5RFDTUf=|Q#R%5#v;&x9ZGT>`g*ftc&vFCHv1wuvYEF9) zV=&V~2pP9z*7l2O!U^MY(B(jgCn4p5hF-$C?OrO!%H8#El%M0EzS^0 zC`}JYMPQjjI3zOzpeSbz0VOjfsH-mX5DXkI={V_L?KJdqqXiHW=$qGAw&7&`1tjp| z2Ph5$6k~{xSU$pvd{Pip9;h-{$m0jT08LKsL1z)`Z63H+bFGusw=z}hLC5aum)K@BJnJgAz&diWI;ii z&I7rZO}%H~5{K#jRtYPEutE_<)D4XljWA*(h6LCs(8xtLqM`)Eu!dRn`CaCu9WUV+ zIOifmlhszSc}x|O`ie22IM_s_nr<%)h6Nt~I6$t&`P4A;ebcLL3#V9MXrdQ2?|&6; zU6_C(%OVakKi**FP`W8@;jH-uB1-?6)W8|i$w-B&HI|Px*IDc}t593JAPYTI*^DzhY*lbWk@sQ8m8pZU1bCnz z){Ke@D>FA4~OaBt|BQx{brse;&BLsvt+m{z?7+RX@WLL77T!AP2- z0TanA5^-q=rX*oqL);sHBq1Cmt~IQt%hzGhhVUN;qdRs7^7;wOg&xEkDf0XnV|q@8 zhOV2o^n7)39kx;2pGpNu2M*oWeuhk%fjq092Ksv`QK0`tf5R$nWZm$8UnGtk5DIO8 z`+J8dyvGZfTu#;|zwxSr^@5RV5bwk)ZtcS~djmvuMGMO;j4B!nWKy0`##@JI3Zkqi zvTj16XkyLzr_G*dD4&LY=ce8vd>A8-rBfh&DV-ycjqBFKr$qC&$XgUON~n!jCL<5O z-`%s~NW+x3d%BgQrygf&&(FQ(%&9bJ3M<*KPY=YMHCk=?XoLkNf;)vQ>3i5vaOdk?_rUvHe6q^Mno);_Xv z?u8?h)!oN_ZGH2N?`vk1op|lwbKh-PIA-dEb9-lBcs0EL=RZ!3ySJxe(cXL74n0OI zM?cuP@7e28trxb9+cRf>6Wcngb5q*V#(FQ`y7?Q%z3Xgw=<~7EjCOYWy3=CnT{F_N zcG?%-o$`}gZ>Zm33YCXf?*44e7VFa~Umo+Hnx9&JcxC;K`%WL26>%0#J6RoOG{?Bu zdTz<~r$1gliQ3X#e-?;)(Cqc8M=OqwzWew~kpro%cYOFv%gnLVX3;z|=g7<^s&3Qb d1-mXCKU1+iJHF!ET{bzO*H+iXU#wbp-(TtJ^t=E7 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..579398934d4b87bad17bb437d54b5698dc18e681 GIT binary patch literal 3041 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 N?XtQ^&(d|B{{TR3_~HNn literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8648202ac603e5c348c7944b9b091319206ea30d GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-ZisC(8978PppI)%$Vo>C1Nz4~yl6qf%DpH5dtp8Zf&ZF&T@|F1*=1=+P zCYcW+lm!`&TAN#)l31ywac}3viHD-N)7pwRowY37BMsu-lNPyMDG6r2|Htr{F(mzT Ve!14?A3&=ZJYD@<);T3K0RRe#Pq_d9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..88e6db32ce09a5a75fbbb8a63e6af3a5107e4b7c GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwr2>%=KS^iY|G&IEGmGC;#~W-`-VXwSp!RwtBbk$FusUo!9@*Et|t!6!!LD*nI!=$W+zh7xWM zCo~(f_;^|U+pTZ)!~X3BTLp0?vFaxu>*umdKI;Vst0INHVM*si- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f574a924ed4c323be2c7f21cd29943dcf05f0002 GIT binary patch literal 3011 zcmcImYiJxr9Nz|&npz3OO3@FlTj&G3x3lj@du@|kYJy%H($gkjp|iWQmnFB4>~3DQZzOc^6Ro4=$ys z#sN3ilk{XCHmtx)K|3%}s^oxc5 zN&67CsOsB{=r}hVBCZ?7!C+*e_93isSGna6SruP+Y!f+UFhf?0x4pPm+q z#C2v-NM@!%QOTVJN@nWN&}fSgOoAvE1ce%Rx@xx30-qA-m0Mlk4vO(A;&^od%D@Dr z8A2o$Xsifwf?xpNkogAy?tlt3i>YbD1WpC(EYNd2ZwQhh=+nS~?K;DALT$@%g2;n- z<6IBs5f}RTvbJp2==9?R`WEWUq#0~#%5`l+0-7S3DqvO97FeW8I%`4|6JNG%-I5(u z7Aw}`^_jpLB%~tiEBR#y7M4-p4MT$nD4GUYO~nloB*5yjCbNPhN{;LZ4pN+&HJc+B zr#LK3l}fC#u|x-HifGv;E7~ezHCy6Yoi|A%+qx+6qH1ERCiS)jg&@iXHjcT-&}6p_ zEFPN*Nq(gnzB<@Ls9G4T45|Xa566?XI^R3T{N(f_zKcUFFf`$dQP#f&mo998BFmy& z9q)2WsL+#fan$09Al93EGI@}m@Zn#=&wxEG(ui(<wsqzEI_lE)FAGb^~+jE~{a^-bqhi3hxbSVtEXRz{dj zrYNhdqUn|iL;)dQt+{@!>7v2o91?3ebR(u$!)oIxl=eWRZHCj`hV0nC*$T<4X;g>o4iRJxgb=^0Qc_-QTfkQ zBDs<5P5Iz8W~v4A%HY)XyUq1{J8Pkw}0+$UC5kmUiE^1 z^;zndlP`@OS-YaMfuc@bKHSvs=c%W)ediA?SbyYL|CRAehnKvy^6Z6+Bm2j;jb3W~ zb>#6!M<)(7zk6}-Yv|31;Sbn5+CK8`9clXgmNEBb)Vsa+?w^*lw@_5F?evPJyBFa8 zg+X-S2kn!~Ywr9k+-Js$0NR1wA^-pY literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f1fb7ea4b47621c8e73293d80ba1988a42f09b4a GIT binary patch literal 3050 zcmcImTWl0n7#^@OTtd=FLWoEh2DvEC&V6=gWQ))(w93|67HE|qXU{pa9lAR+%uKu6 z!h-=5pu_~V2|+Q zZ|D2}bM`dUubwgO!D$pl&8Vx5HIjE_a8J3PJm(GG0^~K-scrTsYWmFJotsm3j4 zZKsRZcGf3gXDieYv%HF4meYxX4E6z?%cLz&&qbNMUY&dg!yH5BA%1I=SrHhdo8k?0 zwe4bB4e>1Gd65olAwiX8m4A#Dd6DOMg%d*6G<4C0}dyI_#mV_5WzCeX>-$g;|Ov%jWgKtJ%Sa=Sdyi9ybK>zZ6;Gj zdwxwj@u(QvsAw)X}S541C*7*mk%GUu7*q#>5`h1B_3&P1Zq5+G-Q#Ds9J;-P()N! z1Rzig-jew-8@2_c3g#E;3)zt9D6fW|l!c@Mj4&%iNbw+5R#**dkc|*+ieeZ@j=+*P zPrD{5agZLaHSh`%jRuaW5=2Q>LSam1%L1zj$>5mm-Q ziXth+@dh)8(@imxWX&r$q7IidkCX(RET~Yu*7OMHI*Pq!E#6xEN}F`PD0Kh}A;5s0 z7%|0RbCd<1SSkx@vn`k;>kh0fz&zXVv%tkGQY6FURs}bf^B!owv+F`w7I;C$tf5IN zt6-TBR8qpM8qr{qmqd((a4GcLU6*u0)rU&C`Z^NAoUS3_@tp}0FhoXS}>zFgnJwew5@jR4kMNWTtGHb?0QkgaP15Y94BqU ze06c{7Ao#f<$|Prn;vREVoaTzzUZg_jK+~Y;!f&)UK4RHVN z5QYC(A(N|uwaIV1`e?miq8ubUu})h1IL#gj8dQ^Eg$0_LWCbNCPoQWlkPJ~$R8@fn z2pAn`v;S+e4>*)h!?1HxX^0%gg3t0Pko=U-k=P=2>ylIA;I}O*MNOJl7h92tymaZ+ zPwFo`QTbwOE`%^PrE+27^M!LCnEQ6mn>|0(93K>YfA{2X=If7kb5UIli@s;~S5R-9ShKC- z=+7S=@9aG=@W-z&hp$yVSKV{v+3Jg(-1V9xhZgK>K0CPd*z)W%N2>UEa2l_xsgL!p H+`Qu-7YOu; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fe70ad63c94f7639aacee241e6258ba73535009a GIT binary patch literal 3050 zcmcImYitx%6dqzUSW;7iKY#=n1{93U&fIzJ&V(&O7i^7N>e7bdFYe5}(@wfOGtA6x zw>6Lmgh0?hh(c;g2nLK%9w9OM0}T|78V!mi%EOS57>pu@M-lyD#XI|ID=lqMHrbgw z_k8y}zI)EOcWYDQbJbNdswj%8Zm3VB$h#)|Pkw|vXAj(g<>O32uSUkP|L@ zGsM$k2pPAc*7i#@5yH4UbU6^=!;lI2@Q`t9K01<&+u*$NL)9F7Q23}f# z6EMJWCQKxjkFg@(EC?D8G#Na@lL23ZCP``{7{K9RmF3lD05nn5BxMBHL6+GyE)*G> z>3A7PHqOexHq5zpTftf~sWsSs0Br*|B;pKlHDXyv6Qf8~kxGg{R(Mv`C4-FtSz>iT zfxM`SNaSI8eZn!aVN!+bi}i&ZgXpO2hNjCv1d55-7)FRirev})RaRIb1|&(1#dH}; zWo;`wiX3z;eyrhjVJZ@ERV>$1`+`U}~Q3>!s!K|r@ z3M*rYXLV7IvPw)fbY2uN2GMfpce^fXK+*)UTtoNcdWlw}9olV}96}s(|G}Ur5TIcS zY!t{cYY39U>M|LbSOh9EfFz*UXu*uy5FT(ahGXZjH!QJS=s|LjV$Y8=rsrg6=(=gk zC{!1hvr*}MsuUz0IP_5a8Iv@GJ!@DF47XBof&L%ujhk^3>xOq1%LCpdF1#QV+W`0P z4pID06q#He?oHv~)kfb3)vk!BqK*O+mQ+bM9#=>Fc7DzrS_egA$y7kB{@x>qUDTnF$+I<|9Z&X4IaUIH{z1>$zvT#>zdrM3ZP%WUHhx(93SCvjOzx|hI^+Dgi%(5o z5!rXNx__I0VenkfwW#>jmdQVCI@)sk_<}Wus^GLM11(QbRO4X$rSIjPZ=Lx4;_I1( zryKv;diK`F!P}3uo;kU23qOTfw|Cae{u^lNLualYeD%=b8@F%5J=3X6KmDzXeP>hO ze(}LCpJua{2R5#|klnoh%DZ)^d-}dUVID{=c%%QqnU_yeCzNAzf2~1Fcl1r`>g|Z` z-u{j~_kLTxciY1sU+!Am*KuA>-@R3e6Dx>hR_4uJt7&nRjf$)YI3dl??`kb@G3cz|RLiW*Xw%EeM^zG-RgsWlZ_^e@R~ z!qC$=u23k%3qsuWdpM-3DhGLv=K)24px+5`5jer(Q4J{)7{2X=w(BsFMy$K}Fv(I+ z%OT{vs#+(gq=_bsD`JmBaTtYE0-8n@=jHuu$+&57BujF{2?L5nRV>X?I$ecNsy3Ia zqJyxhk9t&zZBlg5+3yjqodj;)H%L<-wYYfHu^?9p431R-_|(vnKD)YZ6co0^O)T~u@xs64cQB#Rg%pp1ZJT9POz zvLs6S==_vxNFV}%o)Ao;NM-_w%BZ#n ze4Cay&W_g_d1X?K7D>p0Vd_9I6#^2bh=7Xp=pmV^ARVPas zf>arAvx_9#m9lBpg0ds>c*%x|lBknK6{D7%5_0QqQ+Ni=)bsL(QRa~(?jSc#IaWqjGWL_2qi#>VbO?0 z1?W0b0Mr#rA-n~38BZ3>qz&O32V=NSAMwW#%fmjV8!7RFBy0I@j=`RnwT)7Baea=xHamqg**>nEhG$L?IZEPr|PEa$;r2A@22Ja<0Puy%9(;lacwuUyQp+;`%Up9&|J zUVh^6EkA!e_k#WP$kAK34SsRDwmW!r$#TOx`0dTHbJmC7ANcBGY(EIS!v{Xd55F^V z_xA3=1-;kr8-8sqe2xbLU3l5!@{3J%Hy%msIZK>B=6}@OcKb_Arda&%!T%$9sPU1Qx^W1!jCQ7lfSR->GPT2H*JN%{j0^ZyU!fG f>;1nzf7FyM?=*Wp~@V z)N@7M`NNuqJj8_0sn%(c=!k!N#tRC#b^j(Oh|mq+^em$v_aWqU-SLu zd;I46zL}jJYgWyS&WlDOk(upnsZRQy#qOqQ^m*TvzY%@S@Y=eANaVJ=*nLanwS99V zk?3|O(-n55R~r^7#*j@+94i++ijG865&Q4m!DN&sqxs2DKL)h?b|^X;tBnOa%1MgNj~ zJ`6oW5K5&|tR%;XpA(?2>w+i=k_0FM1buFZ%D@d4)HS4VVEK+0I>hCeMr4wnFv(L- zt05GxeM&PZOJRPW7|ZHmG{) zDq{7O}l0s`pw<;k>>|Jv+X z4pnFvac-&)(Zd+~Y@7n=PvabkU0Sz3Jtf}RG-Ve(VgA~lTAoP^o!ouo;VF;K+Ht!3 zS)Si}{J^mX&Ndz0IYjoDUwwGFyKqR<=FC5HwrK|c!nxDt$^Mgbhu+%$?&Hs2z54x$ zxt|yt_P_F{5dCe=J?q!^T)Oya$L?>Rxj5C~XXkbdEO~k1siDXI*u3wM{akJcGJ7vWp~@V zA_*v%2nwQxAkr9;qJI#rQGya0BoRq4iZN*XN1}kyLexMI2m~X}+^em$w86(F`|L421GZ*)FH z5T$FaL}Snxe_Yj_R0tT321A*Yi_ioydv3-BdMgY_4K`bLl)Bh+lp-x7N-Y=TY}~Da zEmqAs4=!6*m(bU>>WV?lokPyfsK`JH27t_@lD4mAqEyzdioS6(Ly=iX&>E%YV~1p8 zyq>IbJV;6*meyI8CuJqXN#U@>&Lnx3XBk#xIG*Mtl?|($Oy(~NdGicYZHO(*`$B(F zswD_qm0{B9bSN!^9Iu(-6h&cJp5b{KA!xtD4nT&s{mO!c81!||as$h;No)~lPFoPA z5YyZgQf|?#?dQXU0>)&3%WxqUPbmvD^din}^O9NThR(nwOhG&F5tb`rQIz8GB79J@ zsZ>dz`z%qw$hI>XRo(u8hqsuMZaMJz^Jn{Sh z7y|)}Qdmed8=(a@!SgE1sUr6ni$2&KG>)WcfB^IdD>SPlI8GG=l~V?Q9m6s^hJ_ls zYC2vDpoOzipcyi*-JJCnkE^w|9{^j2wXrCLsD>=dP$h#CAT)GZlYvCbN|>b;nUBz# zu1T^CO$dw}TQolA=xtb3cziCu3`a*cimRbYVNF6qSXzd%NQdRHK}R%Gqy-(af+^~n zW=0BZp71P`;vm`IDrRLMizbXnf^KNEV91b;7-5c9I1N8ULlMH9AZv(KpWiAc>3DI+ zKrt6660f$3%p!xoqs+7DVmSQF_csmG-`D-5ZJ`kJ6p8hsX8kWi zr3(>|L{Sj)?e$g$CL3cGikhDzBK7ZS8rXv?8O~6(#`2NoI`Xw<8C;wHN?K$#DOI57 zrl4bWLW9aTTZ1g{$U>Pjn{I(9Sa(ou4(2;%kOm%{-;5$WY*sKsk@rFSovCwjm}5B! z(xxIvv@r8vD=~7PgpMS0NO~Q=SL~i zb5bO5-K3>wvx{lBjr{&pOh__t$iDJ3WY7%gS^YH7-%F7K`7in#R&gV%hX4B_G5COx zD+A2mD@5);mW$*bN*?u#~R9pq2IZw(1Z?S__KHlL_fuIB(zc9dgzo`U3+Q@L6l6djm=L) zww-+KXWy3i!GjaZ%N{vYcKU@L>d=KxcAc-fUe-}QZNU_3;-@<+HuUV+ zOD=u2CEhS=`jPIb`<7N3Kdw5t{);2M_a7@0x)#sadHB|GA|<)2mUma&oJDNx{^`=n zH_xiq-cNtuwR-IO)F1DB{Z-e+FH7b={qThcc3c_j9c^_knXS8fzgcniv(hmK0wQwd zy+7?sm*@Qap?&$=b6fXaRew3nP0n<_=xuuH-MUw5CTvNVi(al8wej%&T@@MYMEQ(g z!!v7Fir>wATY1K6w9mXg8P0xw*Ji$FN#&_YleSwsD?0D_XzJF@y<*j=aceg4=MMDV z^fvwWmN;r-WY3A0N

&J=xV{yJuEkK7Rh$(G!-eAhnM>uHLwAHL`p6|8Qe;r`<8{ U^W9so;X`?CbzQ7`!J6m(0v#~=Q~&?~ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..754efbd8afcbfd1f97be50cf43205051c8fb1282 GIT binary patch literal 3040 zcmcImYitx%6dpo?1wtTz2K9&IfJ&9wnLDrD8M_JABjH%)C2`Z5)n*_kMM{O{%ECXny4|xpixPP;=TK7k(M?plg#U$ z@1DnZ&pG$@H8!lCGwZfl6h+OcuS+!H_dIe}%)rk(e!T+mYo=GXA)u()3&=f@*&M|GZARII*Q~n9!67C)ry=4jdm2$I%>6@IP>$d;|y(^ab~@o-2yxSy`dX;?u9g^~4Vk*pYT{Z<;KCkQM?utB#I!W`=ai%S|3C@_563vJh-iAJcqonf58 zo)$vLcxAOtP^1YH#^s>Lfe24R$^%WKjPpAEbl$jWa43y3$O!|C1!XK|DVZ$8$5orj zl+i(0+l4(U#x^cGNOgONYeIqB=^LoF3tL=Vax4g&&?q%in2zD)$zGcqxeMuciRdL{XE~tH7>lTiugFO+&L> zKLhc?*%{c1IL~R#TT3RjdM5~>W1#v(oWZU}Y}?dg0)SD|ge-(oltoBFtg0&_t3!cD zNR$*M8Y|6DxJD;QDl)%NU#4qd9p%-~RXjs#S;` zd$ZQJaf!q9Sgph>6Kk|kOc4!JXGJrL*qA8+Rs}kF$fhbvK#b~GuRH|_dK*TkHQ z3{6&>sK>5CQeSZf6bGA0s-`;&gHeIU7YE3*DBm!Nd{q3fV`GX1h9>!<VjDaJ7VVGE$*hogLtu>n`@1b*Q8GmA2`8QEJdAgkX^D zL?%-lw#QlEsZm)_n{7jwtm|ZL0T#Gcn1w#7Zp92wS{2+x&IhpT`mTeh1bCnz)>1`< zm661=x+q6kC8ioWFA4~OXesn-T^BVVX@Xd)p?~9gkyfJ(I;{wALLBq&gAr93nUZL- zGA{zWuSk%MNs`VADwK6WhZ2r)ykN#{2sbzw!*#llKPIs}=tI1bB0q>TmhWb0=y_?| z$X6HF<(S3&sa%kB=+dL@XF}3UQDAZvS)2UEtBuzSrkaCzC)RLlpQPEFKs6LSDzi{kbQZ{@JfW*G`6+>hV5Oi|Nru1{2_Vo#rL z0u3KMFt7jc=6-Kv$)En+FPFK z1A{YHwLF+)z(B{QfjWBIp7VnTB*<%a7sog_ud42!g?B>_b zt>3@=#E(6v&%QczzU8|khxZ*gG*Xp3cICvTi_?WQj}PzNE#=SP^|cL&H&;Hk?Qczq B_2d8m literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7929cbddc8fe61d9ca49e89834b48914bdf52e94 GIT binary patch literal 3019 zcmcguZEO@p7+yjp2sR;s9|Rg%7orfmw_mrrw;K*pdXyG>P}^c#`Eqt3z%-iKOw??h$dJ}rt7(kwdW4WwP&yE~!5bh-qe z)ND3eLWj}%Zo;TIw@J}qbFYtuMjU!w0mSROiO1!m#KNc%kA-Fi!wI}J*zfQnFYNH9 z2tuiQLMS4~p28vRnE=H(X9_6oDM5X+I=~?Ef@aUljB2N0lp8BcF_~T2;<(7`30KjH z7YE=Jh;WjlLgK{)uZYdEY>JYpN{@@=Lo7hkM4AXhU_991MWb1gOqr-onE>{XWA{!A zMbNapAPdOCIa$z-1>bGYdrPOyIya1f3vpd4$q}kC$3dowU?OfP5)UOJRj9>9-U7PL zBVAX3C}T;K3T(;vln1-0sOb1YejyJM8>Q7SH48%}9#?oem{;w1g1023@|tFAdV<)q zL^#T3bKsB^2bu9!DJw)Q+Bl&p5Lvu}bj&AET;dJMq7M}rN?cNOi?AB=TkU1MAnhR% zbA@B+YMaD7p$cezB{`|s*h;0E=_)kpvPdpLqR(P~+cf=S-CJCTgjnWSsuwfwzloGC zLO@ehMJ={BI60hYO*tfLVS$J?zNc+s53OW0L(N(zB%13j)|w`~tN4|1*nCo&02ZbI zsX8&@ip|a>3p}$>7R>f^U=pl*sI~wLJv-_F0j_E%5uP?HgsI4fp!?p`B|T2$r(xbU z6pdFg)uy8Ayp}MaB`Pw;l0G{1yQwRt6gTBk4&4v+Vpw4ZaN9B2gaq#XCzFtnh3q)u zMQF*qMRpqAg0jKOBFPMdG&x}r)!e-flNN;kcrws)yKyj1SUv~<*+_8^COJFsvMliZ zj05x8C3L%}xIdK=l8roeto%$FG=u|ZoCd~wDN$hmMSs&OZf4c+e_tel9uNv;K=^xw zDEy}ik*uL>lizsF$!ft&HAr@1la%&pianAHs9Czo14FZTNzHE^s=))rmK9agRA>XL zXll*-r^TLXC?AG#=cdsnau}nZrBfjJDV-y+OY$}#r^M4sTh}qnET%41)tu%%+F9&5Sw=#GoCYk%AM{pO2r?adA!dQES7`-ek)BTqDb{Q1p+&ZpT^D7VBT)nyet9_N94Y%xVY1*=-=IY?VUw>M&WZTl6FAuEhJSn9Y zGG~u|d3)*A!9N$xVLrWaE9)h%oExd!_nr7qe|UJs&%F;X8v^D1T@O4`_RAj!!Qz(& zj&O{>{W5oE?vK4TcZHo>|MY^gXHPu##f@9_?3*j>PtH`a#n7H3*N?uM-TLi& z{o5~pIB;$7)HlE1R;nt7%9x>D+wk?>%g&9gT^LVaxFEiB>FYO~lf4xip4!+}cB$gl byU#Io=XVdE&y{ba$L+fHn^LFNJ@dj};z;9F literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e1d4a4539e45a226d0e52165d526a4369f32039d GIT binary patch literal 3041 zcmcguYitx%6dp)@fHu((Xi<>K@CO33Gk0d^3CqK7VN2Lr$^tEjcz5PbJ9g*6%(T0U z5fc=m5D02Sp(KJtV`8Wz!Y?IgW9koSj6oqrgdfFVLevt1i3y5#_SIHe+W4AeUiWmRyD_pK;22BNX~LGnjjW0&ACwPKmnOXZKfTge);GOMVfky+8`v^q+5sD z&BQhjt=-m`(zbPIicT$ELN3m!Sb>ECNan1J?W?&MRnV*A?{Ju*$O0tjh*8T!gJesx ziL7%xM2ZoX)>xJ!B_#sHXjEhuk{rvi3@b2zqk*WhQ58sJ>7uYTPdC)&_==J({1>Cz zgTPf8CY#MhvV6qx+8CfH3d3>?$I%!;`*}NnIokH;mNmqYuX&~$n2t?`8e!V$3}O`a zv>1ZrR@B;li6%@KlY=e;B5W8^0jO&goZIPT3dVJfK^bHrJMb|URIr$(WU>MuRjp-J z(0)+gg*__8HY(ar}td`byb%o9cogPjsl*i`E*pLp)3PhOiRFk z2Fn31U7jCzw9YW8!uiGe(j5)!sH}#{axyRKib2b~fa^+$^0WdaiI$O+mK9!6AmYl} zp72au;xIE@Yv`4ZH5y13c}-8#ye=VH)}w${KstN~y24{ur8MSn$ZnmJalE9XW6pVs z3|Cvl>anXZtgjdaN`oz7s%AQigA&K$ivi)YBySx@J|tdeo0wu8Oqeff!Tws@y08PH zAn-zIyvfX=OiSFvtocPp#Nm?Gk&>{Jg%zqMOdsc5zSL{hqOGN`j7b)XQiWPE1TD-? zq*J9~bCd<17?nk}*>;4%0o0D#w>==?p%ja8^V7ajON%~$QzbeF7zPYNRj8qD8q9s61r~2 z)C$$bblG}of2tHD893xn`x%oo9eL)k92jn;;sW_E+8a0HCe{uA_eEmD146M4Fn{e3 z#s7Gb$ra(+6gFOUv|cdL9K<`Zid*|Q&0YtJhPMfUhKiV`fe@A_6cifr2FDAcC};)@ zGdk4f{L^M1=1_r#Vdtju5I&5BpOsS}{;8ZJk&Wxt!>7djq(%6sI%!5je0fUV+yCnF z#@=PMJ1=kP*tBuRj%9;YFXmAH@#0=uK{j|8V&0-YJ^iV;V$-=fVI5+BYQ`0BM=&z!IhEx9<8{v&Z^ z@Zy>mzVEX(SKs&K@#zP?m__`0_R8R+bKY9{c`rd+76M_*s=YC1w_-jZ+aFU|77KY!R{$f yUB2|&>qcr-cl4d;xrJ9Vk8P?tKkL@1?Zm;=+xI1E`(FtU;SKeT@t((@-ti~i2JZL( literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8289cb44c09f15a7491d8a407c8602bdfb057a3f GIT binary patch literal 3085 zcmcguZEO@p7(NIrS=2bLf)Fs8R1-oQe@WzzL8%0cXoUnZ5d#S+2`Y#YVoLl2(J20*ID2=!w%XDLKQ`H~ znP=YjnRlM|o!Q^m@Z5s3Wo3atU_q=t+C<(9{kx=?JXijDACgz8UEl5o0*@~C?|Fg2 zca{bMWjl?QHm@!If{LtE5NcKe2Qw*~paX%b4H+Av9oVB1xWh0b^zBbi)0Ck_=&e$m zi`zB0)2Q!taC2`%3+mm06ph~SELD|JiGdXMAeBiaO;^oC=&W6peEZETO=Th8jtE`t zJEYp;jZ}^0U`h^h4B|MR3MoM#i=xauL-8EXv7E#Lo&mDTi7E(D`HLpr98Fi7qIG#+ z?Iw)!bDI|Jw)EJTZNjeAS= z;`sqM3OyX5eIYSim=U-Zo>w`bN?;vFKDZn-PNbsH1GBc-k@Xgjt1;8{powrS8lef*pkZjL&glw7a+r~1CBf)OD8UIl#(-#ZChCF;M3pb((8EyA+eV$x?7(CbV(EvUOc)~| zaR4y@=?O;RMS)2mIl+h=7Y1Q56qZGj8h@Y6v<2Zmo(!_gZtP4FmJJ<9Hd5@k5n6Yw z6a{TNX`pO&vE8PY-=7KzNqH7EQGR9&nuZ-?k_IMwDNvyPMSrs@Zf@1^e_tflKOp4F z0Q=Vpk^7J4B3b9JO?Kl|r>g~X)gal4RZ`k#DfSvrh=4;90~MlUAo=MDC53^4&I^(( zOUN(wIX2cmE%v^KvSFBXZW?bQhcW-Na0(xh}N!~i-l(_E`?uS5N-lkZzx+VO^ zxwnTK&Td?|=k$r8_s%p|RL7R}shu15qZ{8m_F-|+YipL=d4A~T`tn+irW*r`DqkLY z|LUcWE04x*gv$D)dyf~dU-|mT2vSCG{nmRs5(|&^M_XG1*REgxc1uy|FP~9wqP=G; zUR+X93u6451N3>P?&`_q^M40l96!D|mPn_|7cR=&zH@!#By+Ln;Mc3~-YvgcI{0P( zk;SWa_Vrb_GVMpVytHlGkHZ~RD{c-D>3f>oXMcij^!R+JEC zr^eK(eFMWkT|U-Ul`01%Mf&mOtNL;CN6GWvVDrJ%Z>>F0G3E$EFyZ`_I literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d932cea43e05503908bce32710c815db1a5118b9 GIT binary patch literal 3106 zcmcImYitx%6ka05wg@!JD+F;I5`&i6dC%;OETwi^T6CedtF#8OcV_PHj@_LZW~S|y zR}6@u5dJ_EDM})U;14y1L;@;M0mXy`7s0b3!3f|clMOxaRY_c5jEAJI`l5_{)NNP^S<*}0eTf#)s2qNH~b#&Kg8Gh%6Olz zc!3^ia2vvp$*P(31I<*RKb5o)+UJ{Ama>4_3|<G2IB_zrMd0$8;@-&*j5Z*s6eW zy?UVy>le$_>HR=GNgis+6*dH}X-7;mk;|RhoNpLI`x$J?T;0&jHs?Vv@azH@ z0xk^VULp}xfMBTz!^jjZ^K>bN22=(bMyaU*7xV^81SLgiO6ED4eqEmW}^XGpaMJrqAEwQ0Zt$SDx?WX zV>y~tctsV3-1?BIws=Y9tem7(Z2td!$Ejv^G67YQLCsS3q15Yl2U^c!7gWtx*2HdjNp;(C@=H4cmzM28TG-+C}A zN2>~;(P;xziBLooOaQQe;6=!(q9}5_qVyF^pAF$Q2cw!sE3|thmIZ8p4pL}4K|E@k zNeoz4LRZt(MYbAR_I%10B<7mfwf565X&SWkUOCX)O5O$Rf3!DX#tp6;-dHTRd6P)* zf{n@1G-d_(5e zgvujxWODX^M^96&Ihqw7q#=!&d^ ahkdvFEoO4_fiCYBUsE|d^!6i7%l-jZf)X$Q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b7a8d1560e175189f0a1a16fb37dd536e4db1d20 GIT binary patch literal 3107 zcmcgud2AF_7+(+#EvX0mgNB63U=%`U=bqUaSZdpCX_YN)S!jz&dHd#Vcj)fSGBa(r zHC`AwL^O&aCm@R($-_x;{? z{NDF{?`^8CT3nESL%zr3DX6Rn)Z+KG?mhJ?{G2^_0pM3&qN2g}c&5#8?@6AgcFy#8 z^4IF2dZ#|PM1^MD3p6u~yvcY1qdlI5Macw!&B!6bs7W{cLNJ7{AWStmff{9WT z)hjwIw5+2l1Us6cqLD?5h=oZND~KZp5XpGVu+^lWOzBnew>wOeL<-_G`^jS0AWT5G1CM;24gf8Ifi=ij`DGP+6JCTqL$;X%V$HP@b`c|NLas zaS|#`x3#r-+jy^OHPNi1C^W;-97kaUWw#p+NK%G9C#xZVY-s5TM>h?^)d<37i{mG; zr|A&liJV%)&d`Jjqmv*(vtGsxDFxJE4wq=LVkzSqq)`mTk>S`F%jU3{rC=}zA60EU zoAB0HbKA50n=#HpzP2Mh-*6r+S#1|wBL904{pJ<>idRD){7 zwBi6SoE`^Fh)x(yDQm%?T4~r0Fd(W7_(|-lSJyRF=0pv!EKkW2@=*d57z#)LQJhbb zBSKh$3L|9a2Ta)FCY3usU0<3Bv5wqos6Gk$c#dT#g$whP=EK^;G7BgOL4*-}VMT)= zt8J;J;}Qq4;aXjnB%<#BXL67CU4O%blIx7n-!%B#X zD7-|8$jv5Rlqt!lz%ave2(fZD^ow2RRaQ_rK3hYV<9dcx7zIWX!kZ9HUVbp50-*#& zh7$Qm1V-JT8rk*J0F#@E->QO`{cA!xAe2EPyvsWZ8Z)VwrIQ zBoZ+lrmBl>HMGqBlq*QWF^Qq}GbU*ovh-m&Fx*Pc1>#?{H*UsFtQ-FCi$uEzgmfFA z|K1_e|A91<63>oc%@Kp+SFUJY^kfY%4ppi1I=5auh#oz*vAW+3?=AkM^P6`&lmjb3_~_}D z4R6l{oq?JqKOH+Pc+ae#;gq1Blh5Sy56;;2)pe)4Q0uc*GmG!}@Q+;s`+P5U&A)M0 z@swHj8~e7eI;WLHTMD1AJJ*=pvzn@3zOnA$FRce)-bchc17dz*XyL(z>% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ddee835b76fe22bcaf33f38374418682184f08d7 GIT binary patch literal 3142 zcmcImYitx%6kbZ@QKTV=U>kzNKtzMH^Pb%qyVlYLT6Ced3vC6G-krJAj_l4%XQu5I z6=MS?Z3GQQNI|J4njkSGqBJcAFbF^VqlKWzqhJEs#F&x*Vu(V$v#++&(gtOcdEN8f z^Z4#L=ib(`mCL8+;1<( zo}79uT;)`SUXWxX<^_rof!=t`L}-tvpfGL%c>{E?2&~og0DkqWqd2B10lbnAQ6aM! z)@dahEm*N}Wmw+0K^7If@L8-NE+GXm=m0Dpi|V!%58w&C68d(BNgPW+oDBiI$Tf&n zh03sE!-AOLr3jg#7|bVnX@TPe>S>Ij7>cBLl4b~6kSI=~eOT(kku^(ErSjmilr8iZ z!0Q~xlt{9vsma^KdJU_Vq(xCADTZVi0wD;yS$9C3(Cr0j4MAwjmS#Gdp<}K_5HT8@ z0FFFOh7dC|YIQqB6C#X^1Cyk^lp9h4sK^Z6Mnv1;W)qU-&^8(@87^%^78j%)vz>A{NX@H5K51p%w7O;aRFi1<{$AQR9ZQ3y`u{6s`x zB7`FP{5}DQ48w5g`9VW&aFfcNpR6y%kdcneYDhekDUo9Qgc{)h0R;{cq6kGo_A3nS zhdiyyYFgVWOG70NqC>U1UMWbU3jG2rD-nWKe30-f98HLH#C`CJ$Z|C6iy#gM?G_tR z!wMM+;+(}XceN#?9=QtK`U>E5YOu;p)o4R<(8o~dB5C)Tl2?x*9~7_FHAFFkV{X1k z3HueObs+}?o@e>gc$pT5(W;<^ShJIk2ty^+!zFGfb1PIT(QK4+&8c2f0qav=Q4LEJ zr3B<;2(p`mFH~gxQAbGyw}1)gp$+tO{~8=WWn?MsJ#x9hA#a}vX*Yv_JlPthvZ0lgNYO^C$r zKNwk&*<@8vfFl%&lLoW!B>#g+CYQNulh}Brk$S;+a}e#s5^C*ZG<$^>Wwd+n1Q3M?LGx~T0$wBl zt1>Jv2)wK>PN<{MTmh=1_u$A?K#_5IT&xpP5r2`pKLlp^oa-LZ`&Tk9Kx=JQH3i z4Hkv{TTi@uc*Qy}8aMhgX zsS^Eb>B_v8pQd!b6+H8M|E=%Z+hxvPzWw9M zFDEO{G=50k{CQv9wl_WM=IfKNS1(oXyqMj8y7KuOTOa;>ZT_OXd@OI?#|O$5&YN3v z^>)FIzV(FFd;Ho?qhGyIICo-`*~8V$|7P_`ZpNlPcKPj|-I#Ik(<6Jb?9M#}_}_=H zfnKHWgv=@7*&X04k^M!-w)NYyOCt;0-YMx>(+0)-too0h`?2ea^ZI47XlJXQyRT#+ zmX+JTZTA~_)t6^Z>&@)&8nyw(MmW8=d~Yy3U>tmPT%#nN6>Lc`jk@<}yL@$hUgal8UOIMa?Uc5I z-{-a*uRJuHxp26GU1W6Ls_!BK5B1L+7-+xavCnst+ZVhYc2D}HOIHT>FR5wy2e~UD Aj{pDw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9acbaaf814af9f2957d4bed064e9ca7352f9f1b8 GIT binary patch literal 3112 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c2e32a0a53d0fff1b62cf554bffa5ac1a05fae12 GIT binary patch literal 575 zcmV-F0>J%=P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00FN_L_t(IPo}0k6vUwrKd2S8RM4UBE)EJ+6kNO2$)PohC>3IYqKQrK)rjq&L#c?>_>tTs_p6C* zjmhxycsC(8GR1U zdF_wVvJ=9w8WB+&K&O;o#k^)}UuRcMF}bJl_N$36dd1+kByK&$v-MLEwE^_W20aHR zW8afZ?CI9 z=U7DT0H4okmle9?7`<}b8gAQ+&@3rD^{LjG6Y$)3hBFZ6g%qP_J4Uyp;}nZ^1R~UJ zsMc`Br?80H0305bB{NM&Kw&MBX4%Lf|IQ#?rm0@Jz@`1AWIo3Z9xwl-X8nxDRgDI( zMx$4u+LPds`+};)umvgpn4>}El4doi7fsy1(#YcF+w<0|T|DAL{0~LbhazeNC|@|C zO#HEYKFUK^oYFaiVwb{$S%sn*gTnVJh3|fds14vg%4+7LtmeOqf*ZD~108!0HE#d_ N002ovPDHLkV1m=@13Ul# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7604f549e114447bbd3b31d453771039e3a54526 GIT binary patch literal 3057 zcmcguZEO@p7(NX0QA!}i#9~C3EioYM?f35Oh6AxzXqBtAw4n{6&hF0k*52(dyW8Hi z_yfsBAyzbypd}#k2ecss;Rgyfs2EYH0#RZx62lKPMw5mZg25kk=Dyl$OB?*S$zCM)aPG|1+kc=Yziu0rZ;b*0%bg(5!j*KP9wh zZ)GS{w#jO030mT7RozL2f#GN{oJqL|9SSX9nQ?*M4g*4iZI&G+2Tz?Q3CoC*>%}+| zcdKE-s_pjRy6*ZWy}Mmk407cPVtGbI22wBpL?)HAeKiv$b9PnK#@#eY2x}r=EIKHMze~d&|GM{1Q@b$*k=cXhMY18Q{`vn88cR0S&!`b343b&bgt}FbPx84t#`VOIXBGJYIs2 zX*QKAq5Yty6Gc>5+n8v-smq0QBlMjPPlq*~$YWJ8Fh6L7!_-V-I)axby9p<7{DdZQZ}GTVXZr!LbyydRk|@-$Wf`i>83NB3JSB>ZLMe(MQ5vs9 z3K*=+09K9wQ7X=lIeG^c6`r5ZFT>H1jnZzYEEG&xkBF4QOB|&@fun#4AjJb7aiQ_D z$;m})Pk0teagZEo6-Q+tizbXnyl!X|Z^)2}7y?TvtcD+=q3{CB%NpWv*l)FybiBA@ zAkKM`z`Ly?^C(n+^D9cSh0Yc%)nrG$Q|1`-qgnhcjJHlOK0MrPTZm$gB(Pr8od0#G zbfEwwQRKx!e}k2Q$(ERfSo8CNATo0^awDyyM{p&>8LHM=KGIxQq1LQ}n+mO@MdXrF z1$ur7I#wq%$U?U@#s*K0%DmZh0wS_*quM;ocg!FSJh-Y2F+5>b(BlQ~gU;KB&dLJI zuo9$9BqvIQ0)wASx8#O^z2O zNz_e%6^*Sq|Fqa+4drMUac?Siq01O%Ct8`-y`?+DB)`s$((Z$I37wf~T{=XL(%(9qib-#mWw VskyV8Q}|L|S5qH5^60Z${{-P-`gZ^T literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6b34177e7a9b6ea0d0af5a4a88fad8f3b68546a8 GIT binary patch literal 3122 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 VZ6`kd5#Pz18kR=iy8Dqee*y3W@Lm7_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b5d2dbde8c4cd5e79a3b6c0d7f63ac1fbacd2552 GIT binary patch literal 3008 zcmcImZEO@p7(PNuS`Z~-2%0FH2}u(YA&U5;5;6G0)C5fwi8ym#ZMCHh$|n0Y z?=$b$JnuX6O1AT{rHda}9E-)4cC@Fv*n1hj8yB(Xs%tk9do}s(Tf>=ojOcs7lf3O+-}V(ZqIe1r#RB-pgiaZ}>Nr>8{0At`Z-o{=+t z3+;E>M*`YC(%FMY2CzxQ^^XecN)}U4pb-*Eg}fVDrIc9KYq4)WEQvxH5)GupW^PdE z&18iZFQ9@EmjRY#MM#)&XlR-tKO!iyB1^I^K?Oj=k~Iq^gz6|#*1p)3;HBznx-TxlA-{H0O7D3p%QSz)in)i8sfn5Bgb zrOO*L67II|8?18eS8RV(+3FpW8yG*nD%rYAu`l4uZ^(B==Fn5qVuPL{(-yDeVc3o;&IIafu2ueQb1 zGglF>uapR@gT0)p`N7IyLXp`eLH?}Dx6UD-6mNDNmSRN|IA5%?{chH}m;;8ct9o@j z>y&7|H|?;jg%wAPsgkYJCA^dI3bopuka2Ff+H1P$_Uc#O5z0krAzTRob9Pc9R)?J# z7I=QCtf(#aQ?0f|;=)+~Hub=MK?e3bA|?AhwaxAWVt5z$*yI_wx=eSC=&8lIs3c zFGwNsgvs_ZYtje}oGBcbYNhUi@ITs{lX3IwhW}>V9bP1f9}p^SK>BBgsQjlZnQY^0 zQ{H&3nR>x|ImmWmi?#MSnmvIgHtd8BkZG{}L+9m*bQ2&or>MGN=s1Tsqq#Qkzczc$ zp>i6goSSMx>@dbZ>!(2WQ$I&im(^{+PKlSUEc$|-Fn{YvH}@o8y|91m@rBLHcAYx7 zd;R#r(y!z9H0{}Yx#jn7-#Wi{_YXggB^uk#U)(r+bwP2t@zCWnJCFQiA36HTo39rP z(|P;r7n?u40L~WR{ohRNSQLz1J36voyDI2SKktd&IQN>^*>LIb+EIJklBTmC?fT{Y z(eeBZyMOen(=Ruj6f*bTHy&G;cz(y-4dDBCwy6uBTC=I4?etyQeb+DU8+gV&vE@Kk zy3srM?hAcqM$azOSFDW0=n-v&wVY&EANn(X9elQPV(D|^Uyf{VKK8_e`E#R<5m<9L zY<;?M+mpxspu7LlzH9hk)rPSX$K#ue^t~%LZyq?gVB#45`19@+!~Bfh(b}0lzTw%I F{sv}O;0gc$ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b5c6b313af92b70cc16ee7c7d2b99d3eefc4012f GIT binary patch literal 3133 zcmcImYitx%6kZ5WC=XE}L4#p3fE00d-m^Oc3zlwa8`#pc1&V_9&dlBJ*xi|7X4-Bm zktmN)O_7bF)DR^^Q(^>un1B(KpeSe%f2f!M!6HbFMiB@pL<-*7S6gXmgEHBj$35RY zkMEvy?rknBEgGBqNUq1@8Cy~uEJx4r?tkP6bf0?lHb9S2X7LK!;~71{{SWcHwSBV3 zle=20ta7SCizUT~d4X!k&>N4L2<`FAogX)WQVShShBcZVz%Ly*gkzc-z?btODr6SG zh*sQW!HTBRN~Nh*5mkKtJZx@ULJDHg0a!d1)om#rz>|6<^zIImIF^JswE;ZeHHcM( z%CG{%f|%f?2!)~;%qMzjf#U?~35=l_illgwW(Zo4C{Ch%So*?|HA@Xk<-vt%Tj(o* zM;ynLNV1`!!P~%k4XcKvMNuRvhGZB5AqcxscR-xb?P(beL1-(MW;&XoW3EOZ8+A?q zN1moah?!Znx}By85k|&=Nzz`*4Jip!l`PJzv!Y4kszSmjj6vP85thzk5lf*^7T%}Y zSS*XSox*zLQ98Ch(RO8{3CVJ38+Dcf3+s`^X&J|CryO=uGl=O3o}Fw)49Bn|Mn5EE z#l5I-v~WKLT}dw}jBEWsT}c*dN(B}Kj$u_AMl_QjRt#`8+dvG z3<3uRa5s?%%1^LVCBsM*E%Eeh3cXM%Xb7dI3LMZAEE1GhNmCLpNL+8Qp=#mA0imiQ zg$*kP(86gkPyJ3m!ls-Ykq+0~E)4nW?|KmtM_6Jf|P1n?o{VO~}k6;gtq z6*AhESQ;vE5bdee^-4t=!_Y6ViYgPV>Vt$|$H!f zDO!L;SY!o)ha5%7Ebk)(zo^I*%Ror`GNIq;IxEqf#ITuyyBF8fv?>vx*Fdxhk@&p_ z;}e0bgjGO5KgSc4jDi6a6bONlDL{(~WFgmAFnuFJQH@vf0?(-s% z?g1gy2FQPRh}3s5#pFVFZITNkK=hG4M?xLdt%XjB-`Zb|^mv9? zCBghkf6EuI(X|y|;>LIEOR)vVac9E&E#Hs-ZAT>d%KE1YSKXXc>fJo}ULsHGh{kXKCl5$z@Z>`n_w* zeo1_|Xm@MJrY#R`_U~FW=KSThu}>Fc)wOMl4n(YLH*$9$JluLPe{KBjWuG4DDtUDm zS5$qpV9k%W^WLn|_a&a()ZW~lnBI2fSZCRl3sc{SR)?&Ax2%T}J9 zSM=ABmUE9^D;Z|&J-9ppFT9axO@PG}A!26y-Nd9RU(Q-`=uGQ_$2a`CY5GxW%$A3T zuKaAqxbv@{>KJvglxjb@Yu)&+bHn$1Qg!ZPWb0{?EN@h6&%Af#ddGybA6y!}V- yM~7^kx&9dO`HZh8Zd>!bIy&cO%dOjN*RY@V?^_$&(RRu`;FlDZ2KOwee(4_>{Upr* literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..541da8dedeba6a1ad24a6837174e381621de3fb1 GIT binary patch literal 3074 zcmcImYitxn9A7}Nw30v}74QS=QUQg%eed2b98K+&_6%2!at*DYnBAT2t-ae_cDHv| zObnoihJX+J0EmVJi9uB2`#}@MXs`*$2aO3v1vE%vVh{--_`=zHwUw4OD4Xo;?96Ze zkKg?N|CuKfZ7tKP=T>7FHZ9f~ZAahf!CN&2wev1r1L!l=Y3=ebtY&8LPQdo;osD7D z>&;}R-x*)2Xm%z9bX$d?e8xd&3|rQacYxLdeO!gzrWGMB9QlaAO+7-a72~eDftLdkgK46Fia760pj;Wh{ix6-WgBe zO|}bhF+`IZO|!TphZvFPMS2O&(kxBU0>!W-BPuknFcMyR2&B!`4W&K0qNEG`MTnH| zI|@bRa=B2B3)yZr#mKTu(JaNXBtnp0pXGx*X?gR@5~9%4T+{JQ+rk5hK(%}Q2!Sju zx{z@yVlA&k6C#Yt1BYTlbl_3}sB0CR)9a=S%5{x`X_$eQ?;$Kx!6KI8@d|uIv6)N- z?fK1FWKqet5z$_<&w*4s^z2?&gUwl_aemn_&u@o=)Qn>}f>#zhDciTblsyUwmFZzr z_@*(6!eC|?6z0uQputQ9>L^Vv1itMiZ983#okZC-oMl2RzG$s!>2}V$H*mbP07iii zBSa8LBpoI>I?1vM%_su1m_{AC2#urA)PWC%f@PAHlMJm0lETx&z_xB0ePcp(O)+dY z1JK5q8PE+W$LcOX2Rj|I8U%IU!8I|2oB$-zk0|FALxT)VGFoJb0g zM`6hc5-EmdO{F;&LPjdPe!c0O!te^qm2>E3OfS)@rGV89(IG?;H}4F~s=8|EC^f<& zLjr*hlPWDqq@i-MEON9i8(<`7Ml1-o*cr{Xvd|q8SPpOjI!K}GMF_*SGdOUZw5b)c zi^^Jh>3pgrB<|bzVEGx9G#$F;kQf-MrD6j9Kk6GZ;>K4EuTPd+yh&7WK`531>faTj z_#Z7Yxgyw`!ojPIR13x%gXknyP-!2d*z1g}iK--!Ko(V!5rXstf=mL=U^zh)1+5s- zfi(NS7W*KE3N#G4H;RGQ9n>oo}>F zTs^({WdA)+r_64AV%MyzlWS%!y{qB&>bbR@*{k(6Jxk*&U!7e0$-Jsf?{VU`&G?pG z`6JT65!rio2KVFB??3v;wdO|auZy!De>Zt<(G@}D`sYkJ-rutE(Ah+`c6MS_ZS@zc zf4=_y|b{i%kd+5xrgwuPG~MIVDJ&U6gO$CkxEnDbP_RI&cS1t+kX zr}muq(%-gjKeq3i3zxpOyt?M9eW(6D{94`R`m+a4{n@u=Yx@9J-T3iCFB-(!<24=D z!kypMzEHLOC?@Q$JNDHNyDo))Vq=LjMC{i;>c78p+k)Nw9qk=U7E4^+E8oUne)Fv} e($#C)@7ST1!|mrb{k9{xrN^4vqOae-Zu39Tg83Ez literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4d070a9bf209b2021a11e93d1537db19cf0a6cd1 GIT binary patch literal 3015 zcmcguYitx%6drsa4-pX)5J()SApvxD?!0#2<^B9I%(44kf$@^Y<&zVi04_>DS}WJ zPY6ZqI#U>=k_k{;a;Jb&NgW!PjUk4yA7*{OP~%QZ%{NvO6B4^>o9o$rZ?u{&ygC6} zFvcm45{U;%UItl7GJ$BS;=_P^fC@B2sAr70pzV6TrUhI(^eZZDcxr zScGKb+#<|lA@K5LYnhDM>_sv35N@_o9C0<_y0)q5iY7wI;1xqvcrm9)JXB?wSFs}* zj-(s9tk>pSKI*2VqVp^HW&4QesPBfEOiD=&B9Yg1sPKla=zLDL0q^L#;UHCmKvrtn z9uHlT;;=AYEA`4I8XcU}WMt=f+14?iv=xyz#2kI7wjnE`tmjA!$Lu!x1wYLAHi@~+ zv2?dhqMo=4X?~?Ru{zj6saoi+4C)dfmmtz-Rla>1`Ixxfb4iFLj-`At%l6wy=^_qj zsw%71@fNp)3mukAq83#g(Z)-*Pn6I~Ml;k*yAk1BU$xe>;hoj5g3FeZ(uAn81Vq`1 zZLT`(PO`x>3uQ%ZZzm?fx(RD5u*i4fUKrwyc@p7ivqG54`3Uyh+;ve`L?CLIcMMr0 zj8p(&ldAJt(m**NOBjoUn^U2+2W;!zjf$pT6HsV9KCUJXz!eXpZ9+DcKiH+HtmeVH9fK7*XzHnStO4hIk&6*k0rZ5y#!Zm zX=}gd<^1_G!_RazSsy%|xO)6Hx#8H0(Y~`kS>JXiFa9zzdK4|4o$Y@9jzt%qJ9#_! zT4n~nR5Al=PJCCCPc7fjKKG#=&Win8o_%j%&8{DibLsn`yPVCd?_6}@N{Qv(A6|9r zoxww`>yBK1bjg9tiQ)74h0LZoOzHBKk;R+X)2|F3Y(3A6-2cs!Ul^lDNBch+8hrEJ zl_!pGu$I0wOKv!we(k`a`z~I4Kz?d;XwUF6Bfncs>`z;t8$NUO#`?1h;ai74UjD*J QBW<;to3>g*n|AE^6A;+k7ytkO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..76db07352bfed0ed1582a51b94ae5875ca3b8b10 GIT binary patch literal 3080 zcmcImeQXp(6u%;n79qA^qA?iPg+D;p+u7aQz1yV+w7r%Vxl-DbmKddTv$O5W-R`ox zZLdHShzca40`UVPB+4IPG=@Y=1x!GLC>Bsq@jJpFM${mQtwKT~&fZsBX=#J9$$riI z&3nK1=DjzwsjhaxqzU&-@cDd`YN{jkCt)e0o5^t`!LX-XjqlGue*Dw!}GB^9RAdKL2R4YM?rhPW%jbeU(6 zYKqoT6{d|T$qyI=08a&FKPLqO5|~Z#fCnrPS&nBoNdWCajGJw4 zm?lg!E+nnITEoePi3E&IL5t=5z;h`LR8byhwb_ZZaTT#Rfs@#99fIZZSQ4dZG!GwA zZ8DihJ8oq=VU+c4NVF5{v@lzb9kb0wxU!vCoR%Zzxb?U{G^3bK;Q7f`tLd6ft2s;% z^5Q|EaCL1MgPvp%6sPoIpq?ZTwUi1QL)WxprkTj)PF;>0#dCh1n$f5ms@dVp^c>Gl zz!B);FzqE0144`dVmz+^P7%3TfP8=qG)huag)STjmKh+&IG~7v0z!kprmAb5BSKZA zXr`TnWa0EAY{9H$w4|*?qe_k8xX?hjCK9FzRllyQip&Wi9>pP{DM2QH1DFZP05DkQ zWhnBz3Zx8MGCyLXHZQ5X`I-7sO+<9$S3{B2kjhI)W~2~S8Gr(DMwUg6!J#0C<9HlF zEaliNwslhCFfmZ8$4Vs{H5`%zq{bOR4H80XfMaAX?ma|R76P0Qj1yMmmdsQ53}Nc%7cYiKd87qUL0X5cktF(voF^C0-}1u;mHOGa@Z@ECK!oa@(97Zfg_@ItPJZiad`tf&k02!zv$Y{h3O_DJXg7Q$#4A~HFu`|dt+Oa(#u`FmqvXNrj3DcTw zCMjrH2_2=Yi)}a5?EaK5NXj*-{`NC$&{S;e19D)Xl{^LNf3!DZ#*MBUUSBM?c#&A| zfRJee?7uri=0B2&WR5W$zsuzql2gy#Xkk&pzvsXD8N%5e_Kv{}2oamJ&6lDeq z8ZU^FBq9xZ8SQB^|7)}Nawr{!0q3UN5IKx_pZQZD`N^Lnu|ewACa1)W&Ve&NUqQGg zQWgts{%~7Q?U=IS%EgzT+4tGF4<_ExeXJM-jy)$VDR^pmY!i1n(sbp@liPne=&vfd z^O234x_(>u>)8X{hjvb1I`i48mygv@N6L>Zs;&aldhCO9zUnC| z2WQ;1Yd8Oi{+PXc#+a^ei!@sA+h;;e&SNQ2G8G{x^&^44W)-C>f)zAj$OFrqdf&X|Jr!GuW$AGH&!;D x;=UXI)5-bYtllG+zUw?V?(v3e*S0@e(DVN5$6hVE&GydfHI=oIx5}H>{{y^)2mk;8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..019b77189478c9ba7aef91d2f2a30be1c244c0aa GIT binary patch literal 498 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00Cl2L_t(IPu)_@s)Aq?^hKgYB$=TQVI>6- zR`d!{3jNxTM)WR0yV|yiYSRPwUUTo9C^Wjz`U=C~IG<7%jJU8>4f9) zi2Z(#!{LD4ZYPi*a3ZIzRx6ppB%Dm1&1QnhWFnZ)=koqM)9dx16pKaF>vfP-RYg9Z zf5EnGL0rpbv*N8*tH|YY_zxXemW58I12Xs1b^QfR(**GjGMS8c8;!=JgG!}>AP7KC zrBe8PlqVd=L9^LRX!Ov__=Q3NO08CtNaSx5(91#%!+0cM>*RDgotV~cw?V`;dg$%< z`!G#2xkCINFu^BgN_s!8@ZJH-ZM9knjh;VO__hOjUn`W$WsF86kl#D#cDo?r8a?## o&TxoQDwX7JlfUhN-iM~+2SFbVtlnvJEdT%j07*qoM6N<$f=C0~ng9R* literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6cc4717362b7512ad4bff3c5d58aaf7196dbb5a0 GIT binary patch literal 551 zcmV+?0@(eDP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00EatL_t(IPmNMZs=`nZe76t;aUqHtQ4n!L zL4pHbK^(w&7V$0tce*s2IBYzC_bPw27!&bB0!5L2mDkmkR_pZ|o6QE(=@jGf7>mUM ztZlbj%;$3qheP!HeK{j{IvsSoT|uwcgWBzOxL&Wg-|x8HZo-epL)fw`TrL-writV6 zi2Z(#!{GqKFa&Y|JF?qyxs)z+!p`K$WFi=iMuORFChzZWTCEmTHk(DG(EvFd4nxy4 z8?jhS5Rb=gP?JulQ79A;jYgsJ`Mh){`+Pq9J?agLQmK?=^3I7)Xx+}BSS-o`ITDH3 zo#=qfnlq>K`Ha))^vR%HF3W6Wzu)h2z#8p3b7BT`Y-d30bU^;);G09CkmOaVR6ZH3 zRx7z65D2&&RI63!y6&n`LoMwm5(%hMsU#N3Uj70dP|KxCCX+7*Oqm=E23_6i^*RV= zjT&m(?Y8_O*9cxRpi63hj_{oU7pzvRxoXt>JA&5?sI^DP<#HGd1|WZD&}=qAIBV2U p%Uxg-mC0meS;$^9p!QYM@C5Eh|E?oOCXE09002ovPDHLkV1lj+>8k($ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ec8e1f3be055b75f74023870b9b5f44054367999 GIT binary patch literal 574 zcmV-E0>S->P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00FK^L_t(IPmNOBszFf{U4J1D@*u(%CAmdO zF8PJ+R_>R*N&ZE7J0w1;Lf04ucKP6I(p=M zweV{OPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00Cb~L_t(IPo0uo%KT2u&!sW-Z_b{X{mpq3rBVr%N(I$w70qT7 ztyT-|b{m~ehwVnAfqK2pwq;qYTCK)=E|-JocDuOW@2uzZ$s+rDy&?z#TrL-!PA41= z2i9`A#B4UhVzH2bUa!YLL?RI+5{a)wcRkNTKA)En(5rOtx5PK1yYu-Rg+c*>a{UD` z8jU2twr#v#FJ*x5`!WTp?&Iku?N z$Kz2M(C_z=&1Pi^=kxg|Kq{4jD3{ATVXA=fc#L>F4pA%?v0ks00h`SRu~-a(D(Ske z@+j|iI~f60(s3LNheHmFW}L>9`b;+YNR!EgA6l(e*zfn)Znua=qYzYxbUMu~`N%K~ l7Wp+z blockMap) { @@ -160,6 +161,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) { @@ -269,6 +276,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()); 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 fa56b64fa..9866edefb 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 @@ -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,12 +95,10 @@ public class ConfigImpl implements ConfigData, com.refinedmods.refinedstorage2.p @ConfigEntry.Gui.CollapsibleObject private PortableGridEntryImpl portableGrid = new PortableGridEntryImpl(); - private boolean smoothScrolling = true; - - private ScreenSize screenSize = ScreenSize.STRETCH; - - @ConfigEntry.BoundedDiscrete(min = 3L, max = 256) - private int maxRowsStretch = 256; + @ConfigEntry.Gui.CollapsibleObject + private SimpleEnergyUsageEntryImpl securityManager = new SimpleEnergyUsageEntryImpl( + DefaultEnergyUsage.SECURITY_MANAGER + ); public static ConfigImpl get() { return AutoConfig.getConfigHolder(ConfigImpl.class).getConfig(); @@ -110,6 +115,11 @@ public void setScreenSize(final ScreenSize screenSize) { AutoConfig.getConfigHolder(ConfigImpl.class).save(); } + @Override + public boolean isSmoothScrolling() { + return smoothScrolling; + } + @Override public int getMaxRowsStretch() { return maxRowsStretch; @@ -221,8 +231,8 @@ public PortableGridEntry getPortableGrid() { } @Override - public boolean isSmoothScrolling() { - return smoothScrolling; + public SimpleEnergyUsageEntry getSecurityManager() { + return securityManager; } private static class GridEntryImpl implements GridEntry { 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/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/ConfigImpl.java b/refinedstorage2-platform-forge/src/main/java/com/refinedmods/refinedstorage2/platform/forge/ConfigImpl.java index 202a56c63..d653f97af 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 @@ -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,11 +43,18 @@ public class ConfigImpl implements Config { private final SimpleEnergyUsageEntry networkReceiver; private final SimpleEnergyUsageEntry networkTransmitter; private final PortableGridEntry portableGrid; - private final ModConfigSpec.BooleanValue smoothScrolling; - private final ModConfigSpec.EnumValue screenSize; - private final ModConfigSpec.IntValue maxRowsStretch; + 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(); @@ -82,15 +92,11 @@ public ConfigImpl() { DefaultEnergyUsage.NETWORK_TRANSMITTER ); portableGrid = new PortableGridEntryImpl(); - smoothScrolling = builder - .comment("Whether scrollbars should use smooth scrolling") - .define("smoothScrolling", true); - screenSize = builder - .comment("The screen size") - .defineEnum("screenSize", ScreenSize.STRETCH); - maxRowsStretch = builder - .comment("The maximum amount of rows that can be displayed when the screen size is stretched") - .defineInRange("maxRowsStretch", 256, 3, 256); + securityManager = new SimpleEnergyUsageEntryImpl( + "securityManager", + "Security Manager", + DefaultEnergyUsage.SECURITY_MANAGER + ); spec = builder.build(); } @@ -103,6 +109,16 @@ 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); @@ -214,13 +230,8 @@ public PortableGridEntry getPortableGrid() { } @Override - public boolean isSmoothScrolling() { - return smoothScrolling.get(); - } - - @Override - public int getMaxRowsStretch() { - return maxRowsStretch.get(); + public SimpleEnergyUsageEntry getSecurityManager() { + return securityManager; } private class SimpleEnergyUsageEntryImpl implements SimpleEnergyUsageEntry { 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..fbea17c15 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,15 @@ 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 ResourceLocation BOTTOM_TEXTURE = createIdentifier("block/bottom"); public BlockModelProviderImpl(final PackOutput output, final ExistingFileHelper existingFileHelper) { super(output, MOD_ID, existingFileHelper); @@ -36,6 +41,7 @@ protected void registerModels() { registerWirelessTransmitters(); registerNetworkReceivers(); registerNetworkTransmitters(); + registerSecurityManagers(); } private void registerCables() { @@ -82,7 +88,6 @@ 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) @@ -90,7 +95,7 @@ private void registerGrids(final String name, .texture("south", back) .texture("west", left) .texture("up", top) - .texture("down", bottom) + .texture("down", BOTTOM_TEXTURE) .texture(CUTOUT_TEXTURE, cutout); } @@ -155,4 +160,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..f9ed517ce 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,6 +9,7 @@ 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; @@ -68,6 +69,7 @@ protected void registerStatesAndModels() { registerConstructorDestructors(Blocks.INSTANCE.getDestructor(), "destructor"); registerNetworkReceivers(); registerNetworkTransmitters(); + registerSecurityManagers(); } private void registerCables() { @@ -301,6 +303,24 @@ 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); + } + addRotation(model, blockState.getValue(BiDirectionType.INSTANCE.getProperty())); + 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..d3df12ac6 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 @@ -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,6 +111,10 @@ 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) { 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 From 96f67d13c75ac375655a96defba61c6b029e9ea0 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 2 Apr 2024 11:40:26 +0200 Subject: [PATCH 3/7] feat: security network component logic and security card api --- CHANGELOG.md | 2 +- .../security/SecurityDecisionProvider.java | 9 ++ .../security/SecurityNetworkComponent.java | 5 + .../api/network/security/SecurityPolicy.java | 15 +++ ...urityDecisionProviderProxyNetworkNode.java | 27 ++++ .../impl/node/security/package-info.java | 7 + .../SecurityDecisionProviderImpl.java | 28 ++++ .../SecurityNetworkComponentImpl.java | 24 ++-- .../SecurityNetworkComponentImplTest.java | 105 ++++++++++++--- .../platform/api/PlatformApi.java | 7 + .../platform/api/PlatformApiProxy.java | 13 ++ .../api/security/PlatformPermission.java | 15 +++ .../security/SecurityPolicyContainerItem.java | 31 +++++ .../platform/common/PlatformApiImpl.java | 18 +++ .../AbstractSecurityCardContainerMenu.java | 18 ++- ...tractSecurityCardExtendedMenuProvider.java | 18 ++- .../security/AbstractSecurityCardItem.java | 123 ++++++++++++++---- ...lbackSecurityCardExtendedMenuProvider.java | 12 +- .../security/FallbackSecurityCardItem.java | 28 ++-- .../common/security/PlayerSecurityActor.java | 13 ++ .../security/PlayerSecurityCardModel.java | 53 -------- .../security/SecurityCardContainerMenu.java | 27 ++-- .../SecurityCardExtendedMenuProvider.java | 26 ++-- .../common/security/SecurityCardItem.java | 106 ++++++++++----- .../SecurityCardItemPropertyFunction.java | 2 +- .../common/security/SecurityCardModel.java | 63 --------- .../common/security/SecurityCardScreen.java | 33 +---- .../support/ClientToServerCommunications.java | 3 +- .../assets/refinedstorage2/lang/en_us.json | 3 +- .../c2s/ClientToServerCommunicationsImpl.java | 10 +- .../c2s/SecurityCardBoundPlayerPacket.java | 3 +- .../c2s/ClientToServerCommunicationsImpl.java | 3 +- .../c2s/SecurityCardBoundPlayerPacket.java | 10 +- 33 files changed, 547 insertions(+), 313 deletions(-) create mode 100644 refinedstorage2-network-api/src/main/java/com/refinedmods/refinedstorage2/api/network/security/SecurityPolicy.java create mode 100644 refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/security/SecurityDecisionProviderProxyNetworkNode.java create mode 100644 refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/security/package-info.java create mode 100644 refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityDecisionProviderImpl.java create mode 100644 refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/SecurityPolicyContainerItem.java create mode 100644 refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlayerSecurityActor.java delete mode 100644 refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlayerSecurityCardModel.java delete mode 100644 refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardModel.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 51890fbfb..865f5c5cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - 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. -- A global (fallback) permission set for a network can be defined using the Fallback Security Card instead of using an "unbound" Security Card. +- A global (fallback) permission set for a network can be defined using the Fallback Security Card (instead of using an "unbound" Security Card). - Smooth scrolling, screen size and max row stretch are no longer Grid-specific settings, but are now global settings. ### Fixed 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 index effdbe7cc..cf1ae3957 100644 --- 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 @@ -5,5 +5,14 @@ @API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") @FunctionalInterface public interface SecurityDecisionProvider { + /** + * Returns the {@link SecurityDecision} for the given {@link Permission} and {@link SecurityActor}. + * If there is no {@link SecurityPolicy} for the given {@link SecurityActor}, the decision should + * be {@link SecurityDecision#PASS}. + * + * @param permission the permission + * @param actor the actor + * @return the security decision + */ SecurityDecision isAllowed(Permission permission, SecurityActor actor); } 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 index fcda6ad8c..2b518334c 100644 --- 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 @@ -7,5 +7,10 @@ @API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") @FunctionalInterface public interface SecurityNetworkComponent extends NetworkComponent { + /** + * @param permission the permission + * @param actor the actor + * @return true if the actor is allowed to perform the action, false otherwise + */ 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/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..8db409f9f --- /dev/null +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/node/security/SecurityDecisionProviderProxyNetworkNode.java @@ -0,0 +1,27 @@ +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; + +public class SecurityDecisionProviderProxyNetworkNode extends AbstractNetworkNode implements SecurityDecisionProvider { + private final long energyUsage; + private final SecurityDecisionProvider delegate; + + public SecurityDecisionProviderProxyNetworkNode(final long energyUsage, final SecurityDecisionProvider delegate) { + this.energyUsage = energyUsage; + this.delegate = delegate; + } + + @Override + public long getEnergyUsage() { + return energyUsage; + } + + @Override + public SecurityDecision isAllowed(final Permission permission, final SecurityActor actor) { + return delegate.isAllowed(permission, actor); + } +} 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/security/SecurityDecisionProviderImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityDecisionProviderImpl.java new file mode 100644 index 000000000..ae3ee988a --- /dev/null +++ b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityDecisionProviderImpl.java @@ -0,0 +1,28 @@ +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; + +public class SecurityDecisionProviderImpl implements SecurityDecisionProvider { + private final Map policyByActor = new HashMap<>(); + + public SecurityDecisionProviderImpl setPolicy(final SecurityActor actor, final SecurityPolicy policy) { + policyByActor.put(actor, policy); + return this; + } + + @Override + public SecurityDecision isAllowed(final Permission permission, final SecurityActor actor) { + final SecurityPolicy policy = policyByActor.get(actor); + if (policy == null) { + return SecurityDecision.PASS; + } + return policy.isAllowed(permission) ? 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 index d5f915e16..3a935dacd 100644 --- 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 @@ -1,30 +1,35 @@ 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.HashSet; +import java.util.LinkedHashSet; import java.util.Set; public class SecurityNetworkComponentImpl implements SecurityNetworkComponent { - private final Set providers = new HashSet<>(); + 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) { - // TODO: use getNode - if (container instanceof SecurityDecisionProvider provider) { + if (container.getNode() instanceof SecurityDecisionProvider provider) { providers.add(provider); } } @Override public void onContainerRemoved(final NetworkNodeContainer container) { - // TODO: use getNode - if (container instanceof SecurityDecisionProvider provider) { + if (container.getNode() instanceof SecurityDecisionProvider provider) { providers.remove(provider); } } @@ -32,13 +37,16 @@ public void onContainerRemoved(final NetworkNodeContainer container) { @Override public boolean isAllowed(final Permission permission, final SecurityActor actor) { for (final SecurityDecisionProvider provider : providers) { - final SecurityDecision decision = provider.isAllowed(permission, actor); + final SecurityDecision decision = CoreValidations.validateNotNull( + provider.isAllowed(permission, actor), + "Security decision provider must not return null" + ); if (decision == SecurityDecision.DENY) { return false; } else if (decision == SecurityDecision.ALLOW) { return true; } } - return true; + return defaultPolicy.isAllowed(permission); } } 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 index 198fa3115..0cbfe99da 100644 --- 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 @@ -1,12 +1,13 @@ package com.refinedmods.refinedstorage2.api.network.impl.security; +import com.refinedmods.refinedstorage2.api.network.impl.node.security.SecurityDecisionProviderProxyNetworkNode; import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; -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.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -15,38 +16,100 @@ class SecurityNetworkComponentImplTest { SecurityNetworkComponent sut; + SecurityDecisionProviderImpl securityDecisionProvider; @BeforeEach void setUp() { - sut = new SecurityNetworkComponentImpl(); + sut = new SecurityNetworkComponentImpl(policy(TestPermissions.ALLOW_BY_DEFAULT)); + securityDecisionProvider = new SecurityDecisionProviderImpl(); + } + + @Test + void shouldUseDefaultPolicyIfNoSecurityDecisionProvidersArePresent() { + // Act & assert + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isFalse(); + } + + @Test + void shouldUseDefaultPolicyIfANotConfiguredSecurityDecisionProviderIsPresent() { + // Arrange + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider)); + + // Act & assert + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isFalse(); + } + + @Test + void shouldUseDefaultPolicyIfAConfiguredSecurityDecisionProviderIsPresentForAnotherActor() { + // Arrange + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider)); + securityDecisionProvider.setPolicy(TestActors.B, policy(TestPermissions.OTHER)); + + // Act & assert + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isFalse(); } @Test - void everythingIsAllowedByDefault() { + void shouldDenyPermissionIfAConfiguredSecurityDecisionProviderIsPresentForTheActor() { + // Arrange + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider)); + securityDecisionProvider.setPolicy(TestActors.B, policy(TestPermissions.OTHER)); + // Act & assert - sut.onContainerAdded(new TestContainer()); - assertThat(sut.isAllowed(TestPermissions.A, TestActors.X)).isTrue(); - assertThat(sut.isAllowed(TestPermissions.B, TestActors.Y)).isFalse(); - sut.onContainerRemoved(new TestContainer()); + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.B)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.B)).isTrue(); + } + + @Test + void shouldUseFirstSecurityDecisionProviderThatIsConfiguredForActor() { + // Arrange + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() + .setPolicy(TestActors.A, policy(TestPermissions.OTHER2)))); + + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider)); + securityDecisionProvider.setPolicy(TestActors.A, policy(TestPermissions.ALLOW_BY_DEFAULT)); // will be ignored + securityDecisionProvider.setPolicy(TestActors.B, policy(TestPermissions.OTHER)); + + // 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)).isTrue(); + + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.B)).isFalse(); + assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.B)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.B)).isFalse(); + } + + @Test + void shouldRemoveSecurityDecisionProvider() { + // Arrange + final NetworkNode node = new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider); + sut.onContainerAdded(() -> node); + securityDecisionProvider.setPolicy(TestActors.B, policy(TestPermissions.OTHER)); + + // Act + sut.onContainerRemoved(() -> node); + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() + .setPolicy(TestActors.B, policy(TestPermissions.OTHER2)))); + + // Assert + 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)).isTrue(); } enum TestPermissions implements Permission { - A, B + ALLOW_BY_DEFAULT, OTHER, OTHER2 } enum TestActors implements SecurityActor { - X, Y + A, B } - private static class TestContainer implements SecurityDecisionProvider, NetworkNodeContainer { - @Override - public SecurityDecision isAllowed(final Permission permission, final SecurityActor actor) { - return permission == TestPermissions.A ? SecurityDecision.ALLOW : SecurityDecision.DENY; - } - - @Override - public NetworkNode getNode() { - throw new RuntimeException(); - } + private SecurityPolicy policy(final Permission... permissions) { + return new SecurityPolicy(Set.of(permissions)); } } 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 f75dbef1d..36c2fce65 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 @@ -4,6 +4,8 @@ import com.refinedmods.refinedstorage2.api.network.Network; import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import com.refinedmods.refinedstorage2.api.network.energy.EnergyStorage; +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; +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; @@ -47,6 +49,7 @@ import java.util.Set; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -183,4 +186,8 @@ EnergyStorage asBlockItemEnergyStorage( BuiltinPermissions getBuiltinPermissions(); PlatformRegistry getPermissionRegistry(); + + SecurityPolicy createDefaultSecurityPolicy(); + + SecurityActor createPlayerSecurityActor(ServerPlayer player); } 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 59603d009..f4efc398f 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 @@ -4,6 +4,8 @@ import com.refinedmods.refinedstorage2.api.network.Network; import com.refinedmods.refinedstorage2.api.network.NetworkComponent; import com.refinedmods.refinedstorage2.api.network.energy.EnergyStorage; +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; +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; @@ -48,6 +50,7 @@ import javax.annotation.Nullable; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -363,6 +366,16 @@ public PlatformRegistry getPermissionRegistry() { return ensureLoaded().getPermissionRegistry(); } + @Override + public SecurityPolicy createDefaultSecurityPolicy() { + return ensureLoaded().createDefaultSecurityPolicy(); + } + + @Override + public SecurityActor createPlayerSecurityActor(final ServerPlayer player) { + return ensureLoaded().createPlayerSecurityActor(player); + } + 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/security/PlatformPermission.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/PlatformPermission.java index d93d77ef0..1f505b106 100644 --- 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 @@ -7,11 +7,26 @@ @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/SecurityPolicyContainerItem.java b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/SecurityPolicyContainerItem.java new file mode 100644 index 000000000..1a6aff87e --- /dev/null +++ b/refinedstorage2-platform-api/src/main/java/com/refinedmods/refinedstorage2/platform/api/security/SecurityPolicyContainerItem.java @@ -0,0 +1,31 @@ +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); +} 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 b0e3a5477..5dabb004e 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 @@ -7,6 +7,8 @@ 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.SecurityActor; +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; @@ -54,6 +56,7 @@ 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.security.PlayerSecurityActor; import com.refinedmods.refinedstorage2.platform.common.storage.ClientStorageRepository; import com.refinedmods.refinedstorage2.platform.common.storage.StorageContainerItemHelperImpl; import com.refinedmods.refinedstorage2.platform.common.storage.StorageRepositoryImpl; @@ -88,11 +91,13 @@ import java.util.PriorityQueue; import java.util.Queue; import java.util.Set; +import java.util.stream.Collectors; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; 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; @@ -519,4 +524,17 @@ public BuiltinPermissions getBuiltinPermissions() { public PlatformRegistry getPermissionRegistry() { return permissionRegistry; } + + @Override + public SecurityPolicy createDefaultSecurityPolicy() { + return new SecurityPolicy(permissionRegistry.getAll() + .stream() + .filter(PlatformPermission::isAllowedByDefault) + .collect(Collectors.toSet())); + } + + @Override + public SecurityActor createPlayerSecurityActor(final ServerPlayer player) { + return PlayerSecurityActor.of(player); + } } 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 index 9f1507add..a99097ed2 100644 --- 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 @@ -65,13 +65,12 @@ public void setPermission(final ResourceLocation permissionId, final boolean all if (disabledSlot == null) { return; } - disabledSlot.resolve(playerInventory.player).ifPresent(stack -> setPermission(permissionId, allowed, stack)); + disabledSlot.resolve(playerInventory.player).ifPresent(stack -> setPermission(stack, permissionId, allowed)); } - private void setPermission(final ResourceLocation permissionId, final boolean allowed, final ItemStack stack) { - if (stack.getItem() instanceof AbstractSecurityCardItem securityCardItem) { - final SecurityCardModel model = securityCardItem.createModel(stack); - model.setPermission(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); } } @@ -79,13 +78,12 @@ public void resetPermission(final ResourceLocation permissionId) { if (disabledSlot == null) { return; } - disabledSlot.resolve(playerInventory.player).ifPresent(stack -> resetPermission(permissionId, stack)); + disabledSlot.resolve(playerInventory.player).ifPresent(stack -> resetPermission(stack, permissionId)); } - private void resetPermission(final ResourceLocation permissionId, final ItemStack stack) { - if (stack.getItem() instanceof AbstractSecurityCardItem securityCardItem) { - final SecurityCardModel model = securityCardItem.createModel(stack); - model.resetPermission(permissionId); + private void resetPermission(final ItemStack stack, final ResourceLocation permissionId) { + if (stack.getItem() instanceof AbstractSecurityCardItem securityCardItem) { + securityCardItem.resetPermission(stack, permissionId); } } 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 index 6b0540a82..92247cfc1 100644 --- 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 @@ -1,11 +1,13 @@ 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; @@ -13,24 +15,28 @@ abstract class AbstractSecurityCardExtendedMenuProvider implements ExtendedMenuProvider { private final SlotReference slotReference; - private final SecurityCardModel model; + private final SecurityPolicy securityPolicy; + private final Set dirtyPermissions; - AbstractSecurityCardExtendedMenuProvider(final SlotReference slotReference, final SecurityCardModel model) { + AbstractSecurityCardExtendedMenuProvider(final SlotReference slotReference, + final SecurityPolicy securityPolicy, + final Set dirtyPermissions) { this.slotReference = slotReference; - this.model = model; + 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(model.isAllowed(permission)); - buf.writeBoolean(model.isDirty(permission)); + 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 index 509c158b1..beef7bf88 100644 --- 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 @@ -1,15 +1,26 @@ 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; @@ -21,7 +32,9 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; -abstract class AbstractSecurityCardItem extends Item { +abstract class AbstractSecurityCardItem extends Item implements SecurityPolicyContainerItem { + private static final String TAG_PERMISSIONS = "permissions"; + protected AbstractSecurityCardItem(final Properties properties) { super(properties); } @@ -32,19 +45,16 @@ public void appendHoverText(final ItemStack stack, final List lines, final TooltipFlag flag) { super.appendHoverText(stack, level, lines, flag); - final T model = createModel(stack); - addTooltip(lines, model); - if (model.isActive()) { - addPermissions(lines, model); - } + getPolicy(stack).ifPresent(policy -> appendHoverText(lines, policy, getDirtyPermissions(stack))); } - abstract void addTooltip(List lines, T model); - - private void addPermissions(final List lines, final SecurityCardModel model) { - PlatformApi.INSTANCE.getPermissionRegistry().getAll().forEach(permission -> { - final boolean allowed = model.isAllowed(permission); - final boolean dirty = model.isDirty(permission); + 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); @@ -60,32 +70,89 @@ private void addPermissions(final List lines, final SecurityCardModel public InteractionResultHolder use(final Level level, final Player player, final InteractionHand hand) { final ItemStack stack = player.getItemInHand(hand); if (player instanceof ServerPlayer serverPlayer) { - final T model = createModel(stack); - use(hand, serverPlayer, model); + doUse(hand, serverPlayer, stack); } return InteractionResultHolder.consume(stack); } - private void use(final InteractionHand hand, final ServerPlayer player, final T model) { + private void doUse(final InteractionHand hand, final ServerPlayer player, final ItemStack stack) { if (player.isCrouching()) { - tryClear(player, model); + clearConfiguration(player, stack); return; } - Platform.INSTANCE.getMenuOpener().openMenu(player, createMenuProvider( - PlatformApi.INSTANCE.createInventorySlotReference(player, hand), - model - )); + getPolicy(stack).ifPresent(policy -> { + final Set dirtyPermissions = getDirtyPermissions(stack); + Platform.INSTANCE.getMenuOpener().openMenu(player, createMenuProvider( + PlatformApi.INSTANCE.createInventorySlotReference(player, hand), + policy, + dirtyPermissions, + stack + )); + }); } - void tryClear(final ServerPlayer player, final T model) { - model.clear(); - player.sendSystemMessage(createTranslation("item", "security_card.cleared")); + private void clearConfiguration(final ServerPlayer player, final ItemStack stack) { + stack.setTag(null); + player.sendSystemMessage(createTranslation("item", "security_card.cleared_configuration")); } - abstract T createModel(ItemStack stack); + abstract AbstractSecurityCardExtendedMenuProvider createMenuProvider(SlotReference slotReference, + SecurityPolicy policy, + Set dirtyPermissions, + ItemStack stack); - abstract AbstractSecurityCardExtendedMenuProvider createMenuProvider( - SlotReference slotReference, - T model - ); + @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/FallbackSecurityCardExtendedMenuProvider.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/FallbackSecurityCardExtendedMenuProvider.java index f631beb08..4d7914689 100644 --- 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 @@ -1,8 +1,11 @@ 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; @@ -13,9 +16,12 @@ class FallbackSecurityCardExtendedMenuProvider extends AbstractSecurityCardExtendedMenuProvider { private final SlotReference slotReference; - FallbackSecurityCardExtendedMenuProvider(final SlotReference slotReference, final SecurityCardModel model) { - super(slotReference, model); - this.slotReference = slotReference; + FallbackSecurityCardExtendedMenuProvider(final SlotReference slotReference, + final SecurityPolicy securityPolicy, + final Set dirtyPermissions, + final SlotReference slotReference1) { + super(slotReference, securityPolicy, dirtyPermissions); + this.slotReference = slotReference1; } @Override 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 index 4bdd4a680..cb7f3771a 100644 --- 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 @@ -1,10 +1,13 @@ 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 java.util.List; import java.util.Optional; +import java.util.Set; import net.minecraft.network.chat.Component; import net.minecraft.world.inventory.tooltip.TooltipComponent; @@ -13,31 +16,28 @@ import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; -public class FallbackSecurityCardItem extends AbstractSecurityCardItem { +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 - void addTooltip(final List lines, final SecurityCardModel model) { - // no op - } - - @Override - SecurityCardModel createModel(final ItemStack stack) { - return new SecurityCardModel(stack); - } - @Override AbstractSecurityCardExtendedMenuProvider createMenuProvider(final SlotReference slotReference, - final SecurityCardModel model) { - return new FallbackSecurityCardExtendedMenuProvider(slotReference, model); + 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(); + } } 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..6afe9c920 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlayerSecurityActor.java @@ -0,0 +1,13 @@ +package com.refinedmods.refinedstorage2.platform.common.security; + +import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; + +import java.util.UUID; + +import net.minecraft.server.level.ServerPlayer; + +public record PlayerSecurityActor(UUID playerId) implements SecurityActor { + public static PlayerSecurityActor of(final ServerPlayer player) { + return new PlayerSecurityActor(player.getGameProfile().getId()); + } +} diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlayerSecurityCardModel.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlayerSecurityCardModel.java deleted file mode 100644 index 606b3ab7b..000000000 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/PlayerSecurityCardModel.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.refinedmods.refinedstorage2.platform.common.security; - -import java.util.UUID; -import javax.annotation.Nullable; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; - -class PlayerSecurityCardModel extends SecurityCardModel { - private static final String TAG_BOUND_PLAYER_ID = "bid"; - private static final String TAG_BOUND_PLAYER_NAME = "bname"; - - PlayerSecurityCardModel(final ItemStack stack) { - super(stack); - } - - @Nullable - UUID getBoundPlayerId() { - return (stack.getTag() == null || !stack.getTag().contains(TAG_BOUND_PLAYER_ID)) - ? null - : stack.getTag().getUUID(TAG_BOUND_PLAYER_ID); - } - - @Nullable - String getBoundPlayerName() { - return (stack.getTag() == null || !stack.getTag().contains(TAG_BOUND_PLAYER_NAME)) - ? null - : stack.getTag().getString(TAG_BOUND_PLAYER_NAME); - } - - void setBoundPlayer(@Nullable final ServerPlayer player) { - final CompoundTag tag = stack.getOrCreateTag(); - if (player == null) { - tag.remove(TAG_BOUND_PLAYER_ID); - tag.remove(TAG_BOUND_PLAYER_NAME); - return; - } - tag.putUUID(TAG_BOUND_PLAYER_ID, player.getGameProfile().getId()); - tag.putString(TAG_BOUND_PLAYER_NAME, player.getGameProfile().getName()); - } - - @Override - boolean isActive() { - return isActive(stack); - } - - static boolean isActive(final ItemStack stack) { - return stack.getTag() != null - && stack.getTag().contains(TAG_BOUND_PLAYER_ID) - && stack.getTag().contains(TAG_BOUND_PLAYER_NAME); - } -} 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 index 9e5177c04..6118bc260 100644 --- 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 @@ -8,7 +8,6 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; -import javax.annotation.Nullable; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.MinecraftServer; @@ -18,17 +17,13 @@ public class SecurityCardContainerMenu extends AbstractSecurityCardContainerMenu implements ScreenSizeListener { private final List players = new ArrayList<>(); - - @Nullable private Player boundTo; public SecurityCardContainerMenu(final int syncId, final Inventory playerInventory, final FriendlyByteBuf buf) { super(Menus.INSTANCE.getSecurityCard(), syncId, playerInventory, buf); - if (buf.readBoolean()) { - this.boundTo = new Player(buf.readUUID(), buf.readUtf()); - } + 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(); @@ -39,36 +34,36 @@ public SecurityCardContainerMenu(final int syncId, 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; } - @Nullable Player getBoundTo() { return boundTo; } - public void setBoundPlayer(final MinecraftServer server, @Nullable final UUID playerId) { + 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, @Nullable final UUID playerId, final ItemStack stack) { + private void setBoundPlayer(final MinecraftServer server, final UUID playerId, final ItemStack stack) { if (stack.getItem() instanceof SecurityCardItem securityCardItem) { - final ServerPlayer player = playerId == null ? null : server.getPlayerList().getPlayer(playerId); - final PlayerSecurityCardModel model = securityCardItem.createModel(stack); - model.setBoundPlayer(player); + final ServerPlayer player = server.getPlayerList().getPlayer(playerId); + if (player == null) { + return; + } + securityCardItem.setBoundPlayer(player, stack); } } - void changeBoundPlayer(@Nullable final Player player) { - Platform.INSTANCE.getClientToServerCommunications().sendSecurityCardBoundPlayer( - player == null ? null : player.id() - ); + void changeBoundPlayer(final Player player) { + Platform.INSTANCE.getClientToServerCommunications().sendSecurityCardBoundPlayer(player.id()); this.boundTo = player; } 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 index 2c60c85b1..4f5cbc6c2 100644 --- 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 @@ -1,10 +1,14 @@ 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; @@ -16,24 +20,26 @@ class SecurityCardExtendedMenuProvider extends AbstractSecurityCardExtendedMenuProvider { private final SlotReference slotReference; - private final PlayerSecurityCardModel playerModel; + private final UUID boundPlayerId; + private final String boundPlayerName; - SecurityCardExtendedMenuProvider(final SlotReference slotReference, final PlayerSecurityCardModel model) { - super(slotReference, model); + SecurityCardExtendedMenuProvider(final SlotReference slotReference, + final SecurityPolicy securityPolicy, + final Set dirtyPermissions, + final UUID boundPlayerId, + final String boundPlayerName) { + super(slotReference, securityPolicy, dirtyPermissions); this.slotReference = slotReference; - this.playerModel = model; + this.boundPlayerId = boundPlayerId; + this.boundPlayerName = boundPlayerName; } @Override public void writeScreenOpeningData(final ServerPlayer player, final FriendlyByteBuf buf) { super.writeScreenOpeningData(player, buf); - final boolean bound = playerModel.getBoundPlayerId() != null && playerModel.getBoundPlayerName() != null; - buf.writeBoolean(bound); - if (bound) { - buf.writeUUID(playerModel.getBoundPlayerId()); - buf.writeUtf(playerModel.getBoundPlayerName()); - } + buf.writeUUID(boundPlayerId); + buf.writeUtf(boundPlayerName); final List players = player.getServer() == null ? Collections.emptyList() 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 index 3347e5c5a..5d568feae 100644 --- 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 @@ -1,21 +1,37 @@ 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 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"; -public class SecurityCardItem extends AbstractSecurityCardItem { private static final Component UNBOUND_HELP = createTranslation("item", "security_card.unbound.help"); private static final Component BOUND_HELP = createTranslation("item", "security_card.bound.help"); @@ -24,54 +40,84 @@ public SecurityCardItem() { } @Override - void addTooltip(final List lines, final PlayerSecurityCardModel model) { - final String boundPlayerName = model.getBoundPlayerName(); + 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)); - return; + } else { + lines.add(createTranslation( + "item", + "security_card.bound", + Component.literal(boundPlayerName).withStyle(ChatFormatting.YELLOW) + ).withStyle(ChatFormatting.GRAY)); } - lines.add(createTranslation( - "item", - "security_card.bound", - Component.literal(boundPlayerName).withStyle(ChatFormatting.YELLOW) - ).withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, level, lines, flag); } @Override - void tryClear(final ServerPlayer player, final PlayerSecurityCardModel model) { - if (model.isCleared()) { - bind(player, model); - return; + 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); } - super.tryClear(player, model); + return super.use(level, player, hand); } - private void bind(final ServerPlayer player, final PlayerSecurityCardModel model) { - model.setBoundPlayer(player); - player.sendSystemMessage(createTranslation( - "item", - "security_card.bound", - Component.literal(player.getGameProfile().getName()).withStyle(ChatFormatting.YELLOW) - )); + @Override + public Optional getTooltipImage(final ItemStack stack) { + return Optional.of(new HelpTooltipComponent(isValid(stack) ? BOUND_HELP : UNBOUND_HELP)); } @Override - public Optional getTooltipImage(final ItemStack stack) { - return Optional.of(new HelpTooltipComponent(isActive(stack) ? BOUND_HELP : UNBOUND_HELP)); + 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 - PlayerSecurityCardModel createModel(final ItemStack stack) { - return new PlayerSecurityCardModel(stack); + 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 - AbstractSecurityCardExtendedMenuProvider createMenuProvider(final SlotReference slotReference, - final PlayerSecurityCardModel model) { - return new SecurityCardExtendedMenuProvider(slotReference, model); + public Optional getActor(final ItemStack stack) { + final UUID playerId = getBoundPlayerId(stack); + if (playerId == null) { + return Optional.empty(); + } + return Optional.of(new PlayerSecurityActor(playerId)); + } + + @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); } - boolean isActive(final ItemStack stack) { - return PlayerSecurityCardModel.isActive(stack); + 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 index 1d36f5a53..1583c2f80 100644 --- 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 @@ -17,7 +17,7 @@ public float unclampedCall(final ItemStack itemStack, @Nullable final LivingEntity livingEntity, final int i) { if (itemStack.getItem() instanceof SecurityCardItem cardItem) { - return cardItem.isActive(itemStack) ? 1 : 0; + return cardItem.isValid(itemStack) ? 1 : 0; } return 0; } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardModel.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardModel.java deleted file mode 100644 index 37d24223d..000000000 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardModel.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.refinedmods.refinedstorage2.platform.common.security; - -import com.refinedmods.refinedstorage2.platform.api.PlatformApi; -import com.refinedmods.refinedstorage2.platform.api.security.PlatformPermission; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; - -class SecurityCardModel { - private static final String TAG_PERMISSIONS = "permissions"; - - protected final ItemStack stack; - - SecurityCardModel(final ItemStack stack) { - this.stack = stack; - } - - boolean isAllowed(final PlatformPermission permission) { - if (stack.getTag() != null && stack.getTag().contains(TAG_PERMISSIONS)) { - final ResourceLocation permissionId = PlatformApi.INSTANCE.getPermissionRegistry() - .getId(permission) - .orElseThrow(); - final CompoundTag permissionsTag = stack.getTag().getCompound(TAG_PERMISSIONS); - final boolean dirty = permissionsTag.contains(permissionId.toString()); - if (dirty) { - return permissionsTag.getBoolean(permissionId.toString()); - } - } - return permission.isAllowedByDefault(); - } - - boolean isDirty(final PlatformPermission permission) { - final ResourceLocation permissionId = PlatformApi.INSTANCE.getPermissionRegistry() - .getId(permission) - .orElseThrow(); - return stack.getTag() != null - && stack.getTag().contains(TAG_PERMISSIONS) - && stack.getTag().getCompound(TAG_PERMISSIONS).contains(permissionId.toString()); - } - - void setPermission(final ResourceLocation permissionId, final boolean allowed) { - final CompoundTag permissionsTag = stack.getOrCreateTagElement(TAG_PERMISSIONS); - permissionsTag.putBoolean(permissionId.toString(), allowed); - } - - void resetPermission(final ResourceLocation permissionId) { - final CompoundTag permissionsTag = stack.getOrCreateTagElement(TAG_PERMISSIONS); - permissionsTag.remove(permissionId.toString()); - } - - boolean isActive() { - return true; - } - - boolean isCleared() { - return stack.getTag() == null; - } - - public void clear() { - stack.setTag(null); - } -} 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 index a0b900925..c44596498 100644 --- 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 @@ -1,20 +1,12 @@ package com.refinedmods.refinedstorage2.platform.common.security; -import javax.annotation.Nullable; - import net.minecraft.client.gui.components.Button; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.entity.player.Inventory; -import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; - public class SecurityCardScreen extends AbstractSecurityCardScreen { private static final int BOUND_PLAYER_BUTTON_RIGHT_PADDING = 6; private static final int BOUND_PLAYER_BUTTON_WIDTH = 80; - private static final MutableComponent UNBOUND_TITLE = Component.literal("<") - .append(createTranslation("gui", "security_card.unbound")) - .append(">"); public SecurityCardScreen(final SecurityCardContainerMenu menu, final Inventory playerInventory, @@ -25,9 +17,7 @@ public SecurityCardScreen(final SecurityCardContainerMenu menu, @Override protected void init(final int rows) { super.init(rows); - final Component boundToText = menu.getBoundTo() == null - ? UNBOUND_TITLE - : Component.literal(menu.getBoundTo().name()); + 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) @@ -39,20 +29,11 @@ private void toggleBoundPlayer(final Button button) { if (menu.getPlayers().isEmpty()) { return; } - if (menu.getBoundTo() == null) { - setBoundPlayer(button, menu.getPlayers().get(0)); - return; - } - final int nextIndex = menu.getPlayers().indexOf(menu.getBoundTo()) + 1; - if (nextIndex >= menu.getPlayers().size()) { - setBoundPlayer(button, null); - } else { - setBoundPlayer(button, menu.getPlayers().get(nextIndex)); - } - } - - private void setBoundPlayer(final Button button, @Nullable final SecurityCardContainerMenu.Player player) { - menu.changeBoundPlayer(player); - button.setMessage(player == null ? UNBOUND_TITLE : Component.literal(player.name())); + 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/support/ClientToServerCommunications.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/ClientToServerCommunications.java index fd6489b7e..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 @@ -11,7 +11,6 @@ import java.util.List; import java.util.UUID; -import javax.annotation.Nullable; public interface ClientToServerCommunications { void sendGridExtract(PlatformResourceKey resource, GridExtractMode mode, boolean cursor); @@ -42,5 +41,5 @@ public interface ClientToServerCommunications { void sendSecurityCardResetPermission(PlatformPermission permission); - void sendSecurityCardBoundPlayer(@Nullable UUID playerId); + void sendSecurityCardBoundPlayer(UUID playerId); } 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 55292d942..99c616827 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 @@ -144,7 +144,6 @@ "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.unbound": "Unbound", "gui.refinedstorage2.security_card.permission.reset": "Reset", "gui.refinedstorage2.security_card.permission.modified": "Modified", "item.refinedstorage2.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", @@ -225,7 +224,7 @@ "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": "Cleared binding.", + "item.refinedstorage2.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage2.security_card.unbound": "Unbound.", "item.refinedstorage2.security_card.unbound.help": "Right click to configure. Use while crouching to bind to the current player.", "item.refinedstorage2.security_card.bound": "Bound to %s.", 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 3ba6c6123..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 @@ -16,7 +16,6 @@ import java.util.List; import java.util.UUID; import java.util.function.Consumer; -import javax.annotation.Nullable; import io.netty.buffer.Unpooled; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; @@ -151,13 +150,8 @@ public void sendSecurityCardResetPermission(final PlatformPermission permission) } @Override - public void sendSecurityCardBoundPlayer(@Nullable final UUID playerId) { - sendToServer(PacketIds.SECURITY_CARD_BOUND_PLAYER, buf -> { - buf.writeBoolean(playerId != null); - if (playerId != null) { - buf.writeUUID(playerId); - } - }); + 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) { 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 index ccca1783c..42540536c 100644 --- 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 @@ -18,8 +18,7 @@ public void receive(final MinecraftServer server, final ServerGamePacketListenerImpl handler, final FriendlyByteBuf buf, final PacketSender responseSender) { - final boolean hasPlayer = buf.readBoolean(); - final UUID playerId = hasPlayer ? buf.readUUID() : null; + final UUID playerId = buf.readUUID(); if (player.containerMenu instanceof SecurityCardContainerMenu securityCardContainerMenu) { server.execute(() -> securityCardContainerMenu.setBoundPlayer(server, playerId)); } 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 35b2f8b7c..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 @@ -14,7 +14,6 @@ import java.util.List; import java.util.UUID; -import javax.annotation.Nullable; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.neoforged.neoforge.network.PacketDistributor; @@ -112,7 +111,7 @@ public void sendSecurityCardResetPermission(final PlatformPermission permission) } @Override - public void sendSecurityCardBoundPlayer(@Nullable final UUID playerId) { + 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 index 465576003..686cec4c5 100644 --- 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 @@ -4,16 +4,15 @@ import com.refinedmods.refinedstorage2.platform.common.support.packet.PacketIds; import java.util.UUID; -import javax.annotation.Nullable; 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(@Nullable UUID playerId) implements CustomPacketPayload { +public record SecurityCardBoundPlayerPacket(UUID playerId) implements CustomPacketPayload { public static SecurityCardBoundPlayerPacket decode(final FriendlyByteBuf buf) { - return new SecurityCardBoundPlayerPacket(buf.readBoolean() ? buf.readUUID() : null); + return new SecurityCardBoundPlayerPacket(buf.readUUID()); } public static void handle(final SecurityCardBoundPlayerPacket packet, final PlayPayloadContext ctx) { @@ -29,10 +28,7 @@ public static void handle(final SecurityCardBoundPlayerPacket packet, final Play @Override public void write(final FriendlyByteBuf buf) { - buf.writeBoolean(playerId != null); - if (playerId != null) { - buf.writeUUID(playerId); - } + buf.writeUUID(playerId); } @Override From 8f18bd56cbc4a22f081231b81bc3a2a6acc440f7 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 2 Apr 2024 17:43:01 +0200 Subject: [PATCH 4/7] feat: security manager screen --- .../common/AbstractClientModInitializer.java | 2 + .../common/AbstractModInitializer.java | 5 + .../platform/common/content/Menus.java | 11 ++ .../security/SecurityManagerBlockEntity.java | 104 +++++++++++++++++- .../SecurityManagerContainerMenu.java | 72 ++++++++++++ .../security/SecurityManagerScreen.java | 61 ++++++++++ .../assets/refinedstorage2/lang/en_us.json | 3 + .../textures/gui/security_manager.png | Bin 0 -> 1088 bytes 8 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerContainerMenu.java create mode 100644 refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerScreen.java create mode 100644 refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/textures/gui/security_manager.png 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 b708c7a0b..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 @@ -20,6 +20,7 @@ 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; @@ -79,6 +80,7 @@ protected static void registerScreens(final ScreenRegistration registration) { 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 ddde33609..ec59e5ae6 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 @@ -58,6 +58,7 @@ import com.refinedmods.refinedstorage2.platform.common.security.FallbackSecurityCardContainerMenu; 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; @@ -726,6 +727,10 @@ protected final void registerMenus(final RegistryCallback> callback, FALLBACK_SECURITY_CARD, () -> menuTypeFactory.create(FallbackSecurityCardContainerMenu::new) )); + Menus.INSTANCE.setSecurityManager(callback.register( + SECURITY_MANAGER, + () -> menuTypeFactory.create(SecurityManagerContainerMenu::new) + )); } protected final void registerLootFunctions(final RegistryCallback callback) { 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 45433d8f0..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 @@ -13,6 +13,7 @@ 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; @@ -77,6 +78,8 @@ public final class Menus { private Supplier> securityCard; @Nullable private Supplier> fallbackSecurityCard; + @Nullable + private Supplier> securityManager; private Menus() { } @@ -258,4 +261,12 @@ public void setFallbackSecurityCard( ) { 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/security/SecurityManagerBlockEntity.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerBlockEntity.java index f477aea81..87be3a0e8 100644 --- 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 @@ -1,14 +1,52 @@ package com.refinedmods.refinedstorage2.platform.common.security; import com.refinedmods.refinedstorage2.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage2.platform.api.security.SecurityPolicyContainerItem; 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.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage2.platform.common.util.ContainerUtil; + +import javax.annotation.Nullable; import net.minecraft.core.BlockPos; +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 { +public class SecurityManagerBlockEntity + extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + implements BlockEntityWithDrops, ExtendedMenuProvider { + 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 SimpleContainer(CARD_AMOUNT) { + @Override + public boolean canPlaceItem(final int slot, final ItemStack stack) { + return isValidSecurityCard(stack); + } + }; + + private final SimpleContainer fallbackSecurityCard = new SimpleContainer(1) { + @Override + public boolean canPlaceItem(final int slot, final ItemStack stack) { + return isValidFallbackSecurityCard(stack); + } + }; + public SecurityManagerBlockEntity(final BlockPos pos, final BlockState state) { super( BlockEntities.INSTANCE.getSecurityManager(), @@ -16,5 +54,69 @@ public SecurityManagerBlockEntity(final BlockPos pos, final BlockState state) { state, new SimpleNetworkNode(Platform.INSTANCE.getConfig().getSecurityManager().getEnergyUsage()) ); + securityCards.addListener(c -> setChanged()); + fallbackSecurityCard.addListener(c -> setChanged()); + } + + @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); } } 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..6fb7bf048 --- /dev/null +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityManagerContainerMenu.java @@ -0,0 +1,72 @@ +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.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.network.FriendlyByteBuf; +import net.minecraft.world.Container; +import net.minecraft.world.SimpleContainer; +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, + final FriendlyByteBuf buf) { + super(Menus.INSTANCE.getSecurityManager(), syncId); + addSlots(playerInventory, new SimpleContainer(CARD_AMOUNT), new SimpleContainer(1)); + 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/resources/assets/refinedstorage2/lang/en_us.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/en_us.json index 99c616827..78bb3e19f 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 @@ -146,6 +146,9 @@ "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 Security Cards and Fallback Security Card in this device will be ignored and 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": "If no Fallback Security Card is present, the network will be unprotected for players that don't have a corresponding Security Card.", "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.", 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 0000000000000000000000000000000000000000..67eb6b9703c4452ffe27e5e7b36d487ef0768699 GIT binary patch literal 1088 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIE+9%-=m- z978JRyuEw3aCU%5>&50{p^>>4I?`S=J1yYbsq;ypdeR9wOF@Cy)b(Gd&9^)u_nGzG zVb5@TUDlnu-0K_MfBaZ9J+<)vapKGk&R!KWwmOUx($hoXqt*J9n*$nwGk9)vqlI2i+8kqh@^8 zH~Zf6I3hIkvPo#{yKW9MrkR)j$jq+(_L!%kLjM0R^5YL%UC+y=oDbHtv-+rjf4I^%GMmkb3 zYy_J6?D-9jE%KC_1P;&?O(2cDVOxBtDtb>{L$(F$u=d_7oMWAkrw@AOrx*1djJWB2=+(+uZWzQA4AuU~hs z7yFU?p1omBNo~_EnmdKI;Vst0EBsI A%>V!Z literal 0 HcmV?d00001 From 0278b41df452a7e7c37aa7fe74bfbb98aff83076 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 2 Apr 2024 17:54:02 +0200 Subject: [PATCH 5/7] feat: security card energy usage --- .../security/SecurityPolicyContainerItem.java | 2 ++ .../platform/common/Config.java | 6 ++++- .../common/content/DefaultEnergyUsage.java | 2 ++ .../common/networking/NetworkCardItem.java | 1 - .../security/FallbackSecurityCardItem.java | 6 +++++ .../common/security/SecurityCardItem.java | 6 +++++ .../security/SecurityManagerBlockEntity.java | 23 +++++++++++++++++-- .../assets/refinedstorage2/lang/en_us.json | 4 ++++ .../platform/fabric/ConfigImpl.java | 20 +++++++++++++++- .../platform/forge/ConfigImpl.java | 22 ++++++++++++++++++ 10 files changed, 87 insertions(+), 5 deletions(-) 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 index 1a6aff87e..d7d417076 100644 --- 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 @@ -28,4 +28,6 @@ public interface SecurityPolicyContainerItem { * @return the policy, if present */ Optional getPolicy(ItemStack stack); + + long getEnergyUsage(); } diff --git a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/Config.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/Config.java index 1993d55b6..0e9068ecf 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/Config.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/Config.java @@ -17,7 +17,7 @@ public interface Config { boolean isSmoothScrolling(); int getMaxRowsStretch(); - + GridEntry getGrid(); CraftingGridEntry getCraftingGrid(); @@ -60,6 +60,10 @@ public interface Config { PortableGridEntry getPortableGrid(); + SimpleEnergyUsageEntry getSecurityCard(); + + SimpleEnergyUsageEntry getFallbackSecurityCard(); + SimpleEnergyUsageEntry getSecurityManager(); interface SimpleEnergyUsageEntry { 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 e0e9fbf16..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 @@ -42,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/networking/NetworkCardItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkCardItem.java index d21515a49..880c9702f 100644 --- a/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkCardItem.java +++ b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/networking/NetworkCardItem.java @@ -30,7 +30,6 @@ import static com.refinedmods.refinedstorage2.platform.common.networking.NetworkReceiverKey.getDimensionName; import static com.refinedmods.refinedstorage2.platform.common.util.IdentifierUtil.createTranslation; -// TODO: energy usage per card in the security manager. public class NetworkCardItem extends Item { private static final MutableComponent UNBOUND_HELP = createTranslation("item", "network_card.unbound_help"); private static final MutableComponent BOUND_HELP = createTranslation("item", "network_card.bound_help"); 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 index cb7f3771a..85e94b6d0 100644 --- 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 @@ -5,6 +5,7 @@ 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; @@ -40,4 +41,9 @@ public Optional getTooltipImage(final ItemStack stack) { 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/SecurityCardItem.java b/refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/security/SecurityCardItem.java index 5d568feae..b3040bb60 100644 --- 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 @@ -5,6 +5,7 @@ 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; @@ -101,6 +102,11 @@ public Optional getActor(final ItemStack stack) { 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)) 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 index 87be3a0e8..f94a3e87f 100644 --- 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 @@ -54,8 +54,27 @@ public SecurityManagerBlockEntity(final BlockPos pos, final BlockState state) { state, new SimpleNetworkNode(Platform.INSTANCE.getConfig().getSecurityManager().getEnergyUsage()) ); - securityCards.addListener(c -> setChanged()); - fallbackSecurityCard.addListener(c -> setChanged()); + securityCards.addListener(c -> invalidate()); + fallbackSecurityCard.addListener(c -> invalidate()); + } + + private void invalidate() { + if (level != null) { + setChanged(); + } + 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(); + } + final ItemStack fallbackSecurityCardStack = fallbackSecurityCard.getItem(0); + if (fallbackSecurityCardStack.getItem() instanceof SecurityPolicyContainerItem securityPolicyContainerItem) { + energyUsage += securityPolicyContainerItem.getEnergyUsage(); + } + getNode().setEnergyUsage(energyUsage); } @Override 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 78bb3e19f..9fd677663 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 @@ -353,6 +353,10 @@ "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", + "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", 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 9866edefb..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 @@ -23,7 +23,7 @@ public class ConfigImpl implements ConfigData, com.refinedmods.refinedstorage2.p @ConfigEntry.BoundedDiscrete(min = 3L, max = 256) private int maxRowsStretch = 256; - + @ConfigEntry.Gui.CollapsibleObject private GridEntryImpl grid = new GridEntryImpl(); @@ -95,6 +95,14 @@ 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 @@ -230,6 +238,16 @@ public PortableGridEntry getPortableGrid() { return portableGrid; } + @Override + public SimpleEnergyUsageEntry getSecurityCard() { + return securityCard; + } + + @Override + public SimpleEnergyUsageEntry getFallbackSecurityCard() { + return fallbackSecurityCard; + } + @Override public SimpleEnergyUsageEntry getSecurityManager() { return securityManager; 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 d653f97af..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 @@ -43,6 +43,8 @@ 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() { @@ -92,6 +94,16 @@ 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", @@ -229,6 +241,16 @@ public PortableGridEntry getPortableGrid() { return portableGrid; } + @Override + public SimpleEnergyUsageEntry getSecurityCard() { + return securityCard; + } + + @Override + public SimpleEnergyUsageEntry getFallbackSecurityCard() { + return fallbackSecurityCard; + } + @Override public SimpleEnergyUsageEntry getSecurityManager() { return securityManager; From 981dd66ecb1e3220f7910a35bcab1fceacd1e4b6 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 2 Apr 2024 20:30:32 +0200 Subject: [PATCH 6/7] feat: security network component logic pt 2 * If there are no decision providers, always allow * If at least one decision provider denies, fail * If at least one decision provider allows, accept * If all decision providers pass, use fallback policy * If no fallback policy is present, fail * If at least one fallback policy denies, fail * If at least one fallback policy allows, accept * If all fallback policies pass, fail This is a 2-pass check to ensure regular policies get prioritized over default policies. --- CHANGELOG.md | 3 +- .../security/SecurityDecisionProvider.java | 13 +- .../security/SecurityNetworkComponent.java | 5 - ...urityDecisionProviderProxyNetworkNode.java | 32 ++++- .../SecurityDecisionProviderImpl.java | 26 +++- .../SecurityNetworkComponentImpl.java | 39 ++++-- .../SecurityNetworkComponentImplTest.java | 117 +++++++++++++----- .../security/SecurityManagerBlockEntity.java | 50 +++++--- .../AbstractPortableGridBlockEntity.java | 9 +- .../portablegrid/InWorldPortableGrid.java | 29 +++++ .../support/SimpleFilteredContainer.java | 20 +++ .../assets/refinedstorage2/lang/en_us.json | 8 +- 12 files changed, 261 insertions(+), 90 deletions(-) create mode 100644 refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/storage/portablegrid/InWorldPortableGrid.java create mode 100644 refinedstorage2-platform-common/src/main/java/com/refinedmods/refinedstorage2/platform/common/support/SimpleFilteredContainer.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 865f5c5cf..25bf7d0a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,8 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - 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. -- A global (fallback) permission set for a network can be defined using the Fallback Security Card (instead of using an "unbound" Security Card). +- 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 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 index cf1ae3957..68add781d 100644 --- 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 @@ -5,14 +5,9 @@ @API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") @FunctionalInterface public interface SecurityDecisionProvider { - /** - * Returns the {@link SecurityDecision} for the given {@link Permission} and {@link SecurityActor}. - * If there is no {@link SecurityPolicy} for the given {@link SecurityActor}, the decision should - * be {@link SecurityDecision#PASS}. - * - * @param permission the permission - * @param actor the actor - * @return the security decision - */ SecurityDecision isAllowed(Permission permission, SecurityActor actor); + + default SecurityDecision isAllowed(Permission permission) { + return SecurityDecision.PASS; + } } 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 index 2b518334c..fcda6ad8c 100644 --- 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 @@ -7,10 +7,5 @@ @API(status = API.Status.STABLE, since = "2.0.0-milestone.3.5") @FunctionalInterface public interface SecurityNetworkComponent extends NetworkComponent { - /** - * @param permission the permission - * @param actor the actor - * @return true if the actor is allowed to perform the action, false otherwise - */ boolean isAllowed(Permission permission, SecurityActor actor); } 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 index 8db409f9f..1ab5c878d 100644 --- 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 @@ -6,15 +6,30 @@ 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 final long energyUsage; - private final SecurityDecisionProvider delegate; + private long energyUsage; + @Nullable + private SecurityDecisionProvider delegate; - public SecurityDecisionProviderProxyNetworkNode(final long energyUsage, final 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; @@ -22,6 +37,17 @@ public long getEnergyUsage() { @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/security/SecurityDecisionProviderImpl.java b/refinedstorage2-network/src/main/java/com/refinedmods/refinedstorage2/api/network/impl/security/SecurityDecisionProviderImpl.java index ae3ee988a..006dc6e91 100644 --- 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 @@ -8,21 +8,45 @@ 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 policy.isAllowed(permission) ? SecurityDecision.ALLOW : SecurityDecision.DENY; + 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 index 3a935dacd..614ce6b9e 100644 --- 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 @@ -11,6 +11,7 @@ import java.util.LinkedHashSet; import java.util.Set; +import java.util.stream.Collectors; public class SecurityNetworkComponentImpl implements SecurityNetworkComponent { private final Set providers = new LinkedHashSet<>(); @@ -36,17 +37,33 @@ public void onContainerRemoved(final NetworkNodeContainer container) { @Override public boolean isAllowed(final Permission permission, final SecurityActor actor) { - for (final SecurityDecisionProvider provider : providers) { - final SecurityDecision decision = CoreValidations.validateNotNull( - provider.isAllowed(permission, actor), - "Security decision provider must not return null" - ); - if (decision == SecurityDecision.DENY) { - return false; - } else if (decision == SecurityDecision.ALLOW) { - return true; - } + if (providers.isEmpty()) { + return defaultPolicy.isAllowed(permission); } - return defaultPolicy.isAllowed(permission); + final Set decisions = providers.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); + } + + private boolean tryFallback(final Permission permission) { + final Set decisions = providers.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/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 index 0cbfe99da..519a8f182 100644 --- 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 @@ -1,7 +1,6 @@ package com.refinedmods.refinedstorage2.api.network.impl.security; import com.refinedmods.refinedstorage2.api.network.impl.node.security.SecurityDecisionProviderProxyNetworkNode; -import com.refinedmods.refinedstorage2.api.network.node.NetworkNode; import com.refinedmods.refinedstorage2.api.network.security.Permission; import com.refinedmods.refinedstorage2.api.network.security.SecurityActor; import com.refinedmods.refinedstorage2.api.network.security.SecurityNetworkComponent; @@ -29,76 +28,132 @@ 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 shouldUseDefaultPolicyIfANotConfiguredSecurityDecisionProviderIsPresent() { + void shouldDenyAllIfAtLeastOneSecurityDecisionProviderIsPresent() { // Arrange sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider)); // Act & assert - assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isTrue(); + 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 shouldUseDefaultPolicyIfAConfiguredSecurityDecisionProviderIsPresentForAnotherActor() { + void shouldAllowOrDeny() { // Arrange + securityDecisionProvider.setPolicy(TestActors.A, policy(TestPermissions.OTHER)); sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider)); - securityDecisionProvider.setPolicy(TestActors.B, policy(TestPermissions.OTHER)); // Act & assert - assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isTrue(); - assertThat(sut.isAllowed(TestPermissions.OTHER, TestActors.A)).isFalse(); + 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 shouldDenyPermissionIfAConfiguredSecurityDecisionProviderIsPresentForTheActor() { + void shouldOnlyAllowIfAllSecurityDecisionProvidersAllow() { // Arrange - sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider)); - securityDecisionProvider.setPolicy(TestActors.B, policy(TestPermissions.OTHER)); + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() + .setPolicy(TestActors.A, policy(TestPermissions.OTHER)) + )); + + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() + .setPolicy(TestActors.A, policy(TestPermissions.OTHER2)) + )); + + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() + .setPolicy(TestActors.B, policy(TestPermissions.OTHER)) + )); // Act & assert - assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.B)).isFalse(); + 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 shouldUseFirstSecurityDecisionProviderThatIsConfiguredForActor() { + void shouldUseDefaultPolicyOfSecurityDecisionProviderIfAllProvidersPassDecision() { // Arrange sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() - .setPolicy(TestActors.A, policy(TestPermissions.OTHER2)))); + .setPolicy(TestActors.A, policy(TestPermissions.OTHER)) + .setDefaultPolicy(policy(TestPermissions.ALLOW_BY_DEFAULT)) + )); - sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider)); - securityDecisionProvider.setPolicy(TestActors.A, policy(TestPermissions.ALLOW_BY_DEFAULT)); // will be ignored - securityDecisionProvider.setPolicy(TestActors.B, policy(TestPermissions.OTHER)); + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() + .setPolicy(TestActors.A, policy(TestPermissions.OTHER)) + .setDefaultPolicy(policy(TestPermissions.ALLOW_BY_DEFAULT, TestPermissions.OTHER2)) + )); + + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, 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)).isFalse(); - assertThat(sut.isAllowed(TestPermissions.OTHER2, TestActors.A)).isTrue(); + 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)).isTrue(); + 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 shouldRemoveSecurityDecisionProvider() { + void shouldRemoveContainer() { // Arrange - final NetworkNode node = new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider); - sut.onContainerAdded(() -> node); - securityDecisionProvider.setPolicy(TestActors.B, policy(TestPermissions.OTHER)); + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() + .setDefaultPolicy(policy(TestPermissions.ALLOW_BY_DEFAULT)) + )); + + final var removedNode = new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() + .setDefaultPolicy(policy(TestPermissions.OTHER))); + sut.onContainerAdded(() -> removedNode); // Act - sut.onContainerRemoved(() -> node); - sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() - .setPolicy(TestActors.B, policy(TestPermissions.OTHER2)))); + sut.onContainerRemoved(() -> removedNode); // Assert - 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)).isTrue(); + assertThat(sut.isAllowed(TestPermissions.ALLOW_BY_DEFAULT, TestActors.A)).isTrue(); + } + + @Test + void shouldClearPolicies() { + // Arrange + sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, securityDecisionProvider)); + 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(); } enum TestPermissions implements Permission { @@ -106,7 +161,7 @@ enum TestPermissions implements Permission { } enum TestActors implements SecurityActor { - A, B + A, B, C } private SecurityPolicy policy(final Permission... permissions) { 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 index f94a3e87f..d55590a8b 100644 --- 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 @@ -1,11 +1,13 @@ package com.refinedmods.refinedstorage2.platform.common.security; -import com.refinedmods.refinedstorage2.api.network.impl.node.SimpleNetworkNode; +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.SecurityPolicyContainerItem; 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.ExtendedMenuProvider; import com.refinedmods.refinedstorage2.platform.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage2.platform.common.util.ContainerUtil; @@ -26,42 +28,43 @@ import net.minecraft.world.level.block.state.BlockState; public class SecurityManagerBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends AbstractRedstoneModeNetworkNodeContainerBlockEntity implements BlockEntityWithDrops, ExtendedMenuProvider { 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 SimpleContainer(CARD_AMOUNT) { - @Override - public boolean canPlaceItem(final int slot, final ItemStack stack) { - return isValidSecurityCard(stack); - } - }; + private final SimpleContainer securityCards = new SimpleFilteredContainer( + CARD_AMOUNT, + SecurityManagerBlockEntity::isValidSecurityCard + ); + private final SimpleContainer fallbackSecurityCard = new SimpleFilteredContainer( + 1, + SecurityManagerBlockEntity::isValidFallbackSecurityCard + ); - private final SimpleContainer fallbackSecurityCard = new SimpleContainer(1) { - @Override - public boolean canPlaceItem(final int slot, final ItemStack stack) { - return isValidFallbackSecurityCard(stack); - } - }; + private final SecurityDecisionProviderImpl securityDecisionProvider = new SecurityDecisionProviderImpl(); public SecurityManagerBlockEntity(final BlockPos pos, final BlockState state) { super( BlockEntities.INSTANCE.getSecurityManager(), pos, state, - new SimpleNetworkNode(Platform.INSTANCE.getConfig().getSecurityManager().getEnergyUsage()) + 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); @@ -69,12 +72,25 @@ private void invalidate() { 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) { - energyUsage += securityPolicyContainerItem.getEnergyUsage(); + securityPolicyContainerItem.getPolicy(fallbackSecurityCardStack).ifPresentOrElse( + securityDecisionProvider::setDefaultPolicy, + () -> securityDecisionProvider.setDefaultPolicy(null) + ); + return securityPolicyContainerItem.getEnergyUsage(); } - getNode().setEnergyUsage(energyUsage); + securityDecisionProvider.setDefaultPolicy(null); + return 0; } @Override 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/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/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/resources/assets/refinedstorage2/lang/en_us.json b/refinedstorage2-platform-common/src/main/resources/assets/refinedstorage2/lang/en_us.json index 9fd677663..590ded8d0 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 @@ -33,7 +33,7 @@ "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": "Used to store Security Cards and (optionally) a Fallback Security Card for a storage network.", + "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.", @@ -146,9 +146,9 @@ "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 Security Cards and Fallback Security Card in this device will be ignored and the network will not be protected.", + "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": "If no Fallback Security Card is present, the network will be unprotected for players that don't have a corresponding 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.", @@ -229,7 +229,7 @@ "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. Use while crouching to bind to the current player.", + "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", From 31566d39db3989252933c42d8ee64a44d205484c Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 3 Apr 2024 14:26:59 +0200 Subject: [PATCH 7/7] ci: exclude rei properly from sonar duplication checking --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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/*" } }