From 4e7f7f8dea1f3dc57fb46a36f857c6eafae6699b Mon Sep 17 00:00:00 2001 From: pedroksl Date: Thu, 9 Jan 2025 23:58:38 -0300 Subject: [PATCH] Added the ME Import Export bus --- .../89b86ab0e66f527166d98df92ddbcf5416ed58f6 | 4 +- .../9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e | 4 +- .../cc4b70e39bb0fb6efac7e3196e5bd714468e6114 | 4 +- .../assets/advanced_ae/lang/en_us.json | 6 +- .../models/item/import_export_bus_part.json | 8 ++ .../models/part/import_export_bus_part.json | 10 ++ .../recipes/misc/import_export_bus.json | 32 +++++ .../advanced_ae/recipe/import_export_bus.json | 24 ++++ .../net/pedroksl/advanced_ae/AdvancedAE.java | 4 + .../advanced_ae/client/AAEClient.java | 2 + .../client/gui/ImportExportBusScreen.java | 61 +++++++++ .../common/definitions/AAEItems.java | 9 +- .../common/definitions/AAEMenus.java | 3 + .../common/definitions/AAEText.java | 3 +- .../FilteredImportStackTransferContext.java | 113 +++++++++++++++++ .../common/parts/ImportExportBusPart.java | 118 ++++++++++++++++++ .../advanced_ae/datagen/AAEModelProvider.java | 1 + .../datagen/AAERecipeProvider.java | 9 ++ .../advanced_ae/gui/ImportExportBusMenu.java | 32 +++++ .../ae2guide/aae_intro/import_export_bus.md | 19 +++ .../structure/cable_import_export_bus.snbt | 11 ++ .../textures/part/import_export_bus.png | Bin 0 -> 288 bytes .../textures/part/import_export_bus_back.png | Bin 0 -> 952 bytes .../textures/part/import_export_bus_sides.png | Bin 0 -> 1011 bytes .../assets/ae2/screens/import_export_bus.json | 15 +++ 25 files changed, 480 insertions(+), 12 deletions(-) create mode 100644 src/generated/resources/assets/advanced_ae/models/item/import_export_bus_part.json create mode 100644 src/generated/resources/assets/advanced_ae/models/part/import_export_bus_part.json create mode 100644 src/generated/resources/data/advanced_ae/advancement/recipes/misc/import_export_bus.json create mode 100644 src/generated/resources/data/advanced_ae/recipe/import_export_bus.json create mode 100644 src/main/java/net/pedroksl/advanced_ae/client/gui/ImportExportBusScreen.java create mode 100644 src/main/java/net/pedroksl/advanced_ae/common/helpers/FilteredImportStackTransferContext.java create mode 100644 src/main/java/net/pedroksl/advanced_ae/common/parts/ImportExportBusPart.java create mode 100644 src/main/java/net/pedroksl/advanced_ae/gui/ImportExportBusMenu.java create mode 100644 src/main/resources/assets/advanced_ae/ae2guide/aae_intro/import_export_bus.md create mode 100644 src/main/resources/assets/advanced_ae/ae2guide/structure/cable_import_export_bus.snbt create mode 100644 src/main/resources/assets/advanced_ae/textures/part/import_export_bus.png create mode 100644 src/main/resources/assets/advanced_ae/textures/part/import_export_bus_back.png create mode 100644 src/main/resources/assets/advanced_ae/textures/part/import_export_bus_sides.png create mode 100644 src/main/resources/assets/ae2/screens/import_export_bus.json diff --git a/src/generated/resources/.cache/89b86ab0e66f527166d98df92ddbcf5416ed58f6 b/src/generated/resources/.cache/89b86ab0e66f527166d98df92ddbcf5416ed58f6 index 5415f0ae..98b02b62 100644 --- a/src/generated/resources/.cache/89b86ab0e66f527166d98df92ddbcf5416ed58f6 +++ b/src/generated/resources/.cache/89b86ab0e66f527166d98df92ddbcf5416ed58f6 @@ -1,2 +1,2 @@ -// 1.21.1 2024-11-04T02:02:08.7664527 Language -4f31a9937280c90098f9339e53be7c7a50080aec assets/advanced_ae/lang/en_us.json +// 1.21.1 2025-01-09T23:32:54.3395719 Language +d8bb9a481806f65ecb6ce44314910d4e7ff780eb assets/advanced_ae/lang/en_us.json diff --git a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index 4f382d73..14f57823 100644 --- a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,4 +1,4 @@ -// 1.21.1 2025-01-01T18:36:48.3227721 Recipes +// 1.21.1 2025-01-09T22:40:32.7837891 Recipes 2cc379f3eeb84b4d9eeb014db2854841c785f472 data/advanced_ae/advancement/recipes/misc/advpartenc.json 828b1236efbaa89691afb2969beabb8ba02286c5 data/advanced_ae/advancement/recipes/misc/advpatpro2.json 183306c693387e207e828284e1b68df9f2472ce4 data/advanced_ae/advancement/recipes/misc/advpatpropart.json @@ -12,6 +12,7 @@ cbeac061335514038278213fe2d2808770a9c70d data/advanced_ae/advancement/recipes/misc/flight_card.json d7ce17fdd3a979b80c2336360df0656c386a64cb data/advanced_ae/advancement/recipes/misc/flight_drift_card.json 32f77e1a4e8a78933fe7e026ab072d9db4f3ef86 data/advanced_ae/advancement/recipes/misc/hp_buffer_card.json +5c9699003633e9e02a3591654e4aaec96503a86b data/advanced_ae/advancement/recipes/misc/import_export_bus.json 094e6815779f1c104fbf6d33856ec78b8e00ce1f data/advanced_ae/advancement/recipes/misc/jump_height_card.json 261c6982fc5f0d439120e223437e6ad54b0980e0 data/advanced_ae/advancement/recipes/misc/largeappupgrade.json 9d796f27ce53a128f90fd7bd4792958c4a920b51 data/advanced_ae/advancement/recipes/misc/lava_immunity_card.json @@ -89,6 +90,7 @@ ae0a82a8cdb61065098b90ec37bd9d6ec38996a8 data/advanced_ae/recipe/eaequantumunit. 185d7ef3b2bb6d1de241fe96aa67db6a466c4ae8 data/advanced_ae/recipe/fluixcrystalfromdust.json 0dbc6125ab90ff0f8cf56e06abda958e47d30681 data/advanced_ae/recipe/fluixcrystals.json 64182b02288c01dfdbb66a2fee5ba31c70e65443 data/advanced_ae/recipe/hp_buffer_card.json +12948b53681a116100085408a69c49ac862278a8 data/advanced_ae/recipe/import_export_bus.json 86156fb7648c2fd29c09901049d93bbfc6c6725b data/advanced_ae/recipe/jump_height_card.json 95082831618d16d2b33e0b3d1f91cb14fcdf381d data/advanced_ae/recipe/largeappupgrade.json ed946a4c79b9d94fd8009edbfc022f907b0b52b5 data/advanced_ae/recipe/lava_immunity_card.json diff --git a/src/generated/resources/.cache/cc4b70e39bb0fb6efac7e3196e5bd714468e6114 b/src/generated/resources/.cache/cc4b70e39bb0fb6efac7e3196e5bd714468e6114 index e94cd97b..8603b04e 100644 --- a/src/generated/resources/.cache/cc4b70e39bb0fb6efac7e3196e5bd714468e6114 +++ b/src/generated/resources/.cache/cc4b70e39bb0fb6efac7e3196e5bd714468e6114 @@ -1,4 +1,4 @@ -// 1.21.1 2024-11-03T21:53:31.8265319 Block States / Models +// 1.21.1 2025-01-09T22:40:32.7867923 Block States / Models 95a299ecaf1f57e89c3507297d4be2fc99a2749c assets/advanced_ae/blockstates/adv_pattern_provider.json fef5598f6fe49cc3150d9233ce01bc5a7136fcf9 assets/advanced_ae/blockstates/data_entangler.json 9f77870684c7b9108903c29765927a81ea7d4cfd assets/advanced_ae/blockstates/quantum_accelerator.json @@ -50,6 +50,7 @@ e35a61f186f90f6dd0480f8de0e005464ac09ccf assets/advanced_ae/models/block/small_a 18bc3382d92249c7a25ec5a0f3d2b13d29bbbf1b assets/advanced_ae/models/item/flight_card.json f35c490f4bbe7a90e37e79eb1c5e4a483f0dc173 assets/advanced_ae/models/item/flight_drift_card.json 4b807cc954db0ab98470a3a9916958c24145ae07 assets/advanced_ae/models/item/hp_buffer_card.json +ee4ba8be893b32cc3e2111d6d4d4d0459424bf95 assets/advanced_ae/models/item/import_export_bus_part.json 80a84c314c1c8a52aee00e41de53d76aa6426017 assets/advanced_ae/models/item/jump_height_card.json 4baa96609f9c01bfe753d9314ed45d1f129c7cc3 assets/advanced_ae/models/item/lava_immunity_card.json cc11a19eaad2f958156a078c5584029b442ecbb7 assets/advanced_ae/models/item/luck_card.json @@ -95,5 +96,6 @@ bb7474d30fbe3abc133ca72263ceb2b52b582167 assets/advanced_ae/models/item/throughp 0290e8691b2f37c73875043ccc90bce56b0a31b9 assets/advanced_ae/models/item/walk_speed_card.json bff85a3e62c8e237eb7ea9df55f40d89765b4988 assets/advanced_ae/models/item/water_breathing_card.json bc562a06060cc38c38d195c0f1bbc6dbc29aed97 assets/advanced_ae/models/part/adv_pattern_provider_part.json +6209b845229ce1d1ca9afb308004d3ada5e232d4 assets/advanced_ae/models/part/import_export_bus_part.json b2db4877af0be594a4a1851ef4d5e28b28a9e46d assets/advanced_ae/models/part/small_adv_pattern_provider_part.json c5876573d553e04010c9d84c69a2247261b4db74 assets/advanced_ae/models/part/stock_export_bus_part.json diff --git a/src/generated/resources/assets/advanced_ae/lang/en_us.json b/src/generated/resources/assets/advanced_ae/lang/en_us.json index 6b135942..c1852cea 100644 --- a/src/generated/resources/assets/advanced_ae/lang/en_us.json +++ b/src/generated/resources/assets/advanced_ae/lang/en_us.json @@ -26,6 +26,7 @@ "fluid_type.advanced_ae.quantum_infusion_type": "Quantum Infusion", "gui.advanced_ae.AdvPatternEncoder": "Advanced Pattern Encoder", "gui.advanced_ae.AdvPatternProvider": "ME Adv. Pattern Provider", + "gui.advanced_ae.ImportExportBus": "ME Import Export Bus", "gui.advanced_ae.ItemNotCraftable": "No patterns available for Pick-Crafting the current target.", "gui.advanced_ae.MagnetRangeSlider": "Pickup Range", "gui.advanced_ae.ModName": "Advanced AE", @@ -41,7 +42,7 @@ "gui.advanced_ae.SetAmount": "Set Stock Amount", "gui.advanced_ae.SetAmountButtonHint": "Middle click to set the amount to keep in stock", "gui.advanced_ae.SlowThroughputMonitorValue": "%s%s/m", - "gui.advanced_ae.StockExportBus": "Stock Export Bus", + "gui.advanced_ae.StockExportBus": "ME Stock Export Bus", "gui.advanced_ae.ThroughputMonitorValue": "%s%s/s", "gui.advanced_ae.UpgradeNotEnabledMessage": "%s is not enabled.", "gui.advanced_ae.UpgradeNotInstalledMessage": "%s is not installed.", @@ -119,6 +120,7 @@ "item.advanced_ae.flight_card": "Flight Card", "item.advanced_ae.flight_drift_card": "Flight Drift Card", "item.advanced_ae.hp_buffer_card": "HP Buffer Card", + "item.advanced_ae.import_export_bus_part": "ME Import Export Bus", "item.advanced_ae.jump_height_card": "Jump Height Card", "item.advanced_ae.lava_immunity_card": "Lava Immunity Card", "item.advanced_ae.luck_card": "Luck Card", @@ -146,7 +148,7 @@ "item.advanced_ae.small_adv_pattern_provider_part": "Advanced Pattern Provider", "item.advanced_ae.sprint_speed_card": "Sprint Speed Card", "item.advanced_ae.step_assist_card": "Step Assist Card", - "item.advanced_ae.stock_export_bus_part": "Stock Export Bus", + "item.advanced_ae.stock_export_bus_part": "ME Stock Export Bus", "item.advanced_ae.strength_card": "Strength Card", "item.advanced_ae.swim_speed_card": "Swim Speed Card", "item.advanced_ae.throughput_monitor": "ME Throughput Monitor", diff --git a/src/generated/resources/assets/advanced_ae/models/item/import_export_bus_part.json b/src/generated/resources/assets/advanced_ae/models/item/import_export_bus_part.json new file mode 100644 index 00000000..ad9e0bfb --- /dev/null +++ b/src/generated/resources/assets/advanced_ae/models/item/import_export_bus_part.json @@ -0,0 +1,8 @@ +{ + "parent": "ae2:item/export_bus", + "textures": { + "back": "advanced_ae:part/import_export_bus_back", + "front": "advanced_ae:part/import_export_bus", + "sides": "advanced_ae:part/import_export_bus_sides" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/advanced_ae/models/part/import_export_bus_part.json b/src/generated/resources/assets/advanced_ae/models/part/import_export_bus_part.json new file mode 100644 index 00000000..54b78dc1 --- /dev/null +++ b/src/generated/resources/assets/advanced_ae/models/part/import_export_bus_part.json @@ -0,0 +1,10 @@ +{ + "parent": "ae2:part/export_bus_base", + "textures": { + "back": "advanced_ae:part/import_export_bus_back", + "front": "advanced_ae:part/import_export_bus", + "particle": "advanced_ae:part/import_export_bus_back", + "sides": "advanced_ae:part/import_export_bus_sides", + "sidesStatus": "ae2:part/monitor_sides_status" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/advanced_ae/advancement/recipes/misc/import_export_bus.json b/src/generated/resources/data/advanced_ae/advancement/recipes/misc/import_export_bus.json new file mode 100644 index 00000000..95eae5c4 --- /dev/null +++ b/src/generated/resources/data/advanced_ae/advancement/recipes/misc/import_export_bus.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "hasItem": { + "conditions": { + "items": [ + { + "items": "ae2:export_bus" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "advanced_ae:import_export_bus" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "hasItem" + ] + ], + "rewards": { + "recipes": [ + "advanced_ae:import_export_bus" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/advanced_ae/recipe/import_export_bus.json b/src/generated/resources/data/advanced_ae/recipe/import_export_bus.json new file mode 100644 index 00000000..de4bc09a --- /dev/null +++ b/src/generated/resources/data/advanced_ae/recipe/import_export_bus.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "E": { + "item": "ae2:export_bus" + }, + "I": { + "item": "ae2:export_bus" + }, + "L": { + "item": "ae2:logic_processor" + } + }, + "pattern": [ + " ", + "ILE", + " " + ], + "result": { + "count": 1, + "id": "advanced_ae:import_export_bus_part" + } +} \ No newline at end of file diff --git a/src/main/java/net/pedroksl/advanced_ae/AdvancedAE.java b/src/main/java/net/pedroksl/advanced_ae/AdvancedAE.java index 2f121160..5c61ce34 100644 --- a/src/main/java/net/pedroksl/advanced_ae/AdvancedAE.java +++ b/src/main/java/net/pedroksl/advanced_ae/AdvancedAE.java @@ -113,6 +113,10 @@ private static void initUpgrades(FMLCommonSetupEvent event) { Upgrades.add(AEItems.CAPACITY_CARD, AAEItems.STOCK_EXPORT_BUS, 5); Upgrades.add(AEItems.REDSTONE_CARD, AAEItems.STOCK_EXPORT_BUS, 1); Upgrades.add(AEItems.CRAFTING_CARD, AAEItems.STOCK_EXPORT_BUS, 1); + Upgrades.add(AEItems.SPEED_CARD, AAEItems.IMPORT_EXPORT_BUS, 4); + Upgrades.add(AEItems.CAPACITY_CARD, AAEItems.IMPORT_EXPORT_BUS, 5); + Upgrades.add(AEItems.REDSTONE_CARD, AAEItems.IMPORT_EXPORT_BUS, 1); + Upgrades.add(AEItems.CRAFTING_CARD, AAEItems.IMPORT_EXPORT_BUS, 1); if (Addons.APPFLUX.isLoaded()) { AppliedFluxPlugin.init(); diff --git a/src/main/java/net/pedroksl/advanced_ae/client/AAEClient.java b/src/main/java/net/pedroksl/advanced_ae/client/AAEClient.java index b7ad4ed8..c9652c8c 100644 --- a/src/main/java/net/pedroksl/advanced_ae/client/AAEClient.java +++ b/src/main/java/net/pedroksl/advanced_ae/client/AAEClient.java @@ -92,6 +92,8 @@ private static void initScreens(RegisterMenuScreensEvent event) { InitScreens.register( event, AAEMenus.STOCK_EXPORT_BUS.get(), StockExportBusScreen::new, "/screens/stock_export_bus.json"); + InitScreens.register( + event, AAEMenus.IMPORT_EXPORT_BUS.get(), ImportExportBusScreen::new, "/screens/import_export_bus.json"); InitScreens.register( event, AAEMenus.OUTPUT_DIRECTION.get(), OutputDirectionScreen::new, "/screens/output_direction.json"); diff --git a/src/main/java/net/pedroksl/advanced_ae/client/gui/ImportExportBusScreen.java b/src/main/java/net/pedroksl/advanced_ae/client/gui/ImportExportBusScreen.java new file mode 100644 index 00000000..32cc87c6 --- /dev/null +++ b/src/main/java/net/pedroksl/advanced_ae/client/gui/ImportExportBusScreen.java @@ -0,0 +1,61 @@ +package net.pedroksl.advanced_ae.client.gui; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; +import net.pedroksl.advanced_ae.gui.ImportExportBusMenu; + +import appeng.api.config.RedstoneMode; +import appeng.api.config.SchedulingMode; +import appeng.api.config.Settings; +import appeng.api.config.YesNo; +import appeng.client.gui.implementations.UpgradeableScreen; +import appeng.client.gui.style.ScreenStyle; +import appeng.client.gui.widgets.ServerSettingToggleButton; +import appeng.client.gui.widgets.SettingToggleButton; +import appeng.core.definitions.AEItems; + +public class ImportExportBusScreen extends UpgradeableScreen { + + private final SettingToggleButton redstoneMode; + private final SettingToggleButton craftMode; + private final SettingToggleButton schedulingMode; + + public ImportExportBusScreen( + ImportExportBusMenu menu, Inventory playerInventory, Component title, ScreenStyle style) { + super(menu, playerInventory, title, style); + + this.redstoneMode = new ServerSettingToggleButton<>(Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE); + this.addToLeftToolbar(this.redstoneMode); + + if ((menu.getHost()).getConfigManager().hasSetting(Settings.CRAFT_ONLY)) { + this.craftMode = new ServerSettingToggleButton<>(Settings.CRAFT_ONLY, YesNo.NO); + this.addToLeftToolbar(this.craftMode); + } else { + this.craftMode = null; + } + + if ((menu.getHost()).getConfigManager().hasSetting(Settings.SCHEDULING_MODE)) { + this.schedulingMode = new ServerSettingToggleButton<>(Settings.SCHEDULING_MODE, SchedulingMode.DEFAULT); + this.addToLeftToolbar(this.schedulingMode); + } else { + this.schedulingMode = null; + } + } + + @Override + protected void updateBeforeRender() { + super.updateBeforeRender(); + + this.redstoneMode.set((this.menu).getRedStoneMode()); + this.redstoneMode.setVisibility(this.menu.hasUpgrade(AEItems.REDSTONE_CARD)); + + if (this.craftMode != null) { + this.craftMode.set(this.menu.getCraftingMode()); + this.craftMode.setVisibility(this.menu.hasUpgrade(AEItems.CRAFTING_CARD)); + } + + if (this.schedulingMode != null) { + this.schedulingMode.set(this.menu.getSchedulingMode()); + } + } +} diff --git a/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEItems.java b/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEItems.java index 5b2e345d..2d56b82c 100644 --- a/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEItems.java +++ b/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEItems.java @@ -14,10 +14,7 @@ import net.pedroksl.advanced_ae.common.items.armors.*; import net.pedroksl.advanced_ae.common.items.upgrades.QuantumUpgradeBaseItem; import net.pedroksl.advanced_ae.common.items.upgrades.UpgradeType; -import net.pedroksl.advanced_ae.common.parts.AdvPatternProviderPart; -import net.pedroksl.advanced_ae.common.parts.SmallAdvPatternProviderPart; -import net.pedroksl.advanced_ae.common.parts.StockExportBusPart; -import net.pedroksl.advanced_ae.common.parts.ThroughputMonitorPart; +import net.pedroksl.advanced_ae.common.parts.*; import net.pedroksl.advanced_ae.common.patterns.AdvProcessingPattern; import appeng.api.crafting.PatternDetailsHelper; @@ -61,7 +58,9 @@ public static List> getQuantumCards() { SmallAdvPatternProviderPart.class, SmallAdvPatternProviderPart::new); public static final ItemDefinition> STOCK_EXPORT_BUS = - part("Stock Export Bus", "stock_export_bus_part", StockExportBusPart.class, StockExportBusPart::new); + part("ME Stock Export Bus", "stock_export_bus_part", StockExportBusPart.class, StockExportBusPart::new); + public static final ItemDefinition> IMPORT_EXPORT_BUS = + part("ME Import Export Bus", "import_export_bus_part", ImportExportBusPart.class, ImportExportBusPart::new); public static final ItemDefinition> THROUGHPUT_MONITOR = part( "ME Throughput Monitor", "throughput_monitor", ThroughputMonitorPart.class, ThroughputMonitorPart::new); diff --git a/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEMenus.java b/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEMenus.java index d5518b43..dd9002c2 100644 --- a/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEMenus.java +++ b/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEMenus.java @@ -14,6 +14,7 @@ import net.pedroksl.advanced_ae.common.inventory.AdvPatternEncoderHost; import net.pedroksl.advanced_ae.common.inventory.QuantumArmorMenuHost; import net.pedroksl.advanced_ae.common.logic.AdvPatternProviderLogicHost; +import net.pedroksl.advanced_ae.common.parts.ImportExportBusPart; import net.pedroksl.advanced_ae.common.parts.StockExportBusPart; import net.pedroksl.advanced_ae.gui.*; import net.pedroksl.advanced_ae.gui.advpatternprovider.AdvPatternProviderMenu; @@ -43,6 +44,8 @@ public class AAEMenus { public static final Supplier> STOCK_EXPORT_BUS = create("stock_export_bus", StockExportBusMenu::new, StockExportBusPart.class); + public static final Supplier> IMPORT_EXPORT_BUS = + create("import_export_bus", ImportExportBusMenu::new, ImportExportBusPart.class); public static final Supplier> OUTPUT_DIRECTION = create("output_direction", OutputDirectionMenu::new, IDirectionalOutputHost.class); diff --git a/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEText.java b/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEText.java index 1a707357..ced7f1cc 100644 --- a/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEText.java +++ b/src/main/java/net/pedroksl/advanced_ae/common/definitions/AAEText.java @@ -23,7 +23,8 @@ public enum AAEText implements LocalizationEnum { AdvPatternEncoder("Advanced Pattern Encoder", Type.GUI), ReactionChamber("Reaction Chamber", Type.GUI), QuantumCrafter("Quantum Crafter", Type.GUI), - StockExportBus("Stock Export Bus", Type.GUI), + StockExportBus("ME Stock Export Bus", Type.GUI), + ImportExportBus("ME Import Export Bus", Type.GUI), EmiReactionChamber("Reaction Chamber", Type.EMI_CATEGORY), AnyButton("Target the face adjacent to the adv. pattern provider", Type.TOOLTIP), NorthButton("Target the NORTH face of the machine.", Type.TOOLTIP), diff --git a/src/main/java/net/pedroksl/advanced_ae/common/helpers/FilteredImportStackTransferContext.java b/src/main/java/net/pedroksl/advanced_ae/common/helpers/FilteredImportStackTransferContext.java new file mode 100644 index 00000000..a0001ad2 --- /dev/null +++ b/src/main/java/net/pedroksl/advanced_ae/common/helpers/FilteredImportStackTransferContext.java @@ -0,0 +1,113 @@ +package net.pedroksl.advanced_ae.common.helpers; + +import java.util.HashSet; +import java.util.Set; + +import appeng.api.behaviors.StackTransferContext; +import appeng.api.config.Actionable; +import appeng.api.networking.energy.IEnergySource; +import appeng.api.networking.security.IActionSource; +import appeng.api.networking.storage.IStorageService; +import appeng.api.stacks.AEItemKey; +import appeng.api.stacks.AEKey; +import appeng.api.stacks.AEKeyType; +import appeng.util.prioritylist.IPartitionList; + +public class FilteredImportStackTransferContext implements StackTransferContext { + private final IStorageService internalStorage; + private final IEnergySource energySource; + private final IActionSource actionSource; + private final IPartitionList filter; + private final Set keyTypes; + private final int initialOperations; + private int operationsRemaining; + private boolean isInverted; + + public FilteredImportStackTransferContext( + IStorageService internalStorage, + IEnergySource energySource, + IActionSource actionSource, + int operationsRemaining, + IPartitionList filter) { + this.internalStorage = internalStorage; + this.energySource = energySource; + this.actionSource = actionSource; + this.filter = filter; + this.initialOperations = operationsRemaining; + this.operationsRemaining = operationsRemaining; + this.keyTypes = new HashSet<>(); + for (AEKey item : filter.getItems()) { + this.keyTypes.add(item.getType()); + } + } + + @Override + public IStorageService getInternalStorage() { + return internalStorage; + } + + @Override + public IEnergySource getEnergySource() { + return energySource; + } + + @Override + public IActionSource getActionSource() { + return actionSource; + } + + @Override + public int getOperationsRemaining() { + return operationsRemaining; + } + + @Override + public void setOperationsRemaining(int operationsRemaining) { + this.operationsRemaining = operationsRemaining; + } + + @Override + public boolean hasOperationsLeft() { + return operationsRemaining > 0; + } + + @Override + public boolean hasDoneWork() { + return initialOperations > operationsRemaining; + } + + @Override + public boolean isKeyTypeEnabled(AEKeyType space) { + return keyTypes.isEmpty() || keyTypes.contains(space); + } + + @Override + public boolean isInFilter(AEKey key) { + return filter.isEmpty() || filter.isListed(key); + } + + @Override + public IPartitionList getFilter() { + return filter; + } + + @Override + public void setInverted(boolean inverted) { + isInverted = !inverted; + } + + @Override + public boolean isInverted() { + return !filter.isEmpty() && isInverted; + } + + @Override + public boolean canInsert(AEItemKey what, long amount) { + return internalStorage.getInventory().insert(what, amount, Actionable.SIMULATE, actionSource) > 0; + } + + @Override + public void reduceOperationsRemaining(long inserted) { + operationsRemaining -= inserted; + } +} diff --git a/src/main/java/net/pedroksl/advanced_ae/common/parts/ImportExportBusPart.java b/src/main/java/net/pedroksl/advanced_ae/common/parts/ImportExportBusPart.java new file mode 100644 index 00000000..1a6b7b23 --- /dev/null +++ b/src/main/java/net/pedroksl/advanced_ae/common/parts/ImportExportBusPart.java @@ -0,0 +1,118 @@ +package net.pedroksl.advanced_ae.common.parts; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import net.pedroksl.advanced_ae.AdvancedAE; +import net.pedroksl.advanced_ae.common.definitions.AAEMenus; +import net.pedroksl.advanced_ae.common.helpers.FilteredImportStackTransferContext; + +import appeng.api.behaviors.StackImportStrategy; +import appeng.api.networking.IGrid; +import appeng.api.networking.crafting.ICraftingService; +import appeng.api.networking.storage.IStorageService; +import appeng.api.parts.IPartItem; +import appeng.api.parts.IPartModel; +import appeng.api.util.KeyTypeSelection; +import appeng.core.AppEng; +import appeng.core.definitions.AEItems; +import appeng.items.parts.PartModels; +import appeng.menu.ISubMenu; +import appeng.menu.MenuOpener; +import appeng.menu.locator.MenuLocators; +import appeng.parts.PartModel; +import appeng.parts.automation.ExportBusPart; +import appeng.parts.automation.StackWorldBehaviors; + +public class ImportExportBusPart extends ExportBusPart { + + public static final ResourceLocation MODEL_BASE = AdvancedAE.makeId("part/import_export_bus_part"); + + @PartModels + public static final IPartModel MODELS_OFF = new PartModel(MODEL_BASE, AppEng.makeId("part/export_bus_off")); + + @PartModels + public static final IPartModel MODELS_ON = new PartModel(MODEL_BASE, AppEng.makeId("part/export_bus_on")); + + @PartModels + public static final IPartModel MODELS_HAS_CHANNEL = + new PartModel(MODEL_BASE, AppEng.makeId("part/export_bus_has_channel")); + + @Nullable + private StackImportStrategy importStrategy; + + private final KeyTypeSelection keyTypeSelection; + + public ImportExportBusPart(IPartItem partItem) { + super(partItem); + + this.keyTypeSelection = new KeyTypeSelection( + () -> { + getHost().markForSave(); + // Reset strategies + importStrategy = null; + // We can potentially wake up now + getMainNode() + .ifPresent((grid, node) -> grid.getTickManager().alertDevice(node)); + }, + StackWorldBehaviors.hasImportStrategyTypeFilter()); + } + + public StackImportStrategy getImportStrategy() { + if (this.importStrategy == null) { + var self = this.getHost().getBlockEntity(); + var fromPos = self.getBlockPos().relative(this.getSide()); + var fromSide = getSide().getOpposite(); + importStrategy = StackWorldBehaviors.createImportFacade( + (ServerLevel) getLevel(), fromPos, fromSide, keyTypeSelection.enabledPredicate()); + } + return this.importStrategy; + } + + @Override + protected boolean doBusWork(IGrid grid) { + var exportWork = super.doBusWork(grid); + + IStorageService storageService = grid.getStorageService(); + ICraftingService cg = grid.getCraftingService(); + + var strategy = getImportStrategy(); + + var context = new FilteredImportStackTransferContext( + grid.getStorageService(), grid.getEnergyService(), this.source, getOperationsPerTick(), getFilter()); + + context.setInverted(this.isUpgradedWith(AEItems.INVERTER_CARD)); + strategy.transfer(context); + + var importWork = context.hasDoneWork(); + + return exportWork || importWork; + } + + protected MenuType getMenuType() { + return AAEMenus.IMPORT_EXPORT_BUS.get(); + } + + public void returnToMainMenu(Player player, ISubMenu subMenu) { + MenuOpener.open(AAEMenus.IMPORT_EXPORT_BUS.get(), player, MenuLocators.forPart(this)); + } + + public ItemStack getMainMenuIcon() { + return this.getPartItem().asItem().getDefaultInstance(); + } + + @Override + public IPartModel getStaticModels() { + if (this.isActive() && this.isPowered()) { + return MODELS_HAS_CHANNEL; + } else if (this.isPowered()) { + return MODELS_ON; + } else { + return MODELS_OFF; + } + } +} diff --git a/src/main/java/net/pedroksl/advanced_ae/datagen/AAEModelProvider.java b/src/main/java/net/pedroksl/advanced_ae/datagen/AAEModelProvider.java index f1449fee..f7e00557 100644 --- a/src/main/java/net/pedroksl/advanced_ae/datagen/AAEModelProvider.java +++ b/src/main/java/net/pedroksl/advanced_ae/datagen/AAEModelProvider.java @@ -90,6 +90,7 @@ protected void registerStatesAndModels() { interfaceOrProviderPart(AAEItems.ADV_PATTERN_PROVIDER); interfaceOrProviderPart(AAEItems.SMALL_ADV_PATTERN_PROVIDER); interfaceOrProviderPart(AAEItems.STOCK_EXPORT_BUS, true); + interfaceOrProviderPart(AAEItems.IMPORT_EXPORT_BUS, true); // PATTERN PROVIDER patternProvider(AAEBlocks.ADV_PATTERN_PROVIDER); diff --git a/src/main/java/net/pedroksl/advanced_ae/datagen/AAERecipeProvider.java b/src/main/java/net/pedroksl/advanced_ae/datagen/AAERecipeProvider.java index b064cd76..2ec38c00 100644 --- a/src/main/java/net/pedroksl/advanced_ae/datagen/AAERecipeProvider.java +++ b/src/main/java/net/pedroksl/advanced_ae/datagen/AAERecipeProvider.java @@ -129,6 +129,15 @@ protected void buildRecipes(@NotNull RecipeOutput c) { .define('L', AEItems.LOGIC_PROCESSOR) .unlockedBy("hasItem", has(AEParts.EXPORT_BUS)) .save(c, AdvancedAE.makeId("stock_export_bus")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, AAEItems.IMPORT_EXPORT_BUS) + .pattern(" ") + .pattern("ILE") + .pattern(" ") + .define('I', AEParts.EXPORT_BUS) + .define('L', AEItems.LOGIC_PROCESSOR) + .define('E', AEParts.EXPORT_BUS) + .unlockedBy("hasItem", has(AEParts.EXPORT_BUS)) + .save(c, AdvancedAE.makeId("import_export_bus")); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, AAEItems.ADV_PATTERN_ENCODER) .pattern("QRQ") .pattern("RER") diff --git a/src/main/java/net/pedroksl/advanced_ae/gui/ImportExportBusMenu.java b/src/main/java/net/pedroksl/advanced_ae/gui/ImportExportBusMenu.java new file mode 100644 index 00000000..bf8adb2b --- /dev/null +++ b/src/main/java/net/pedroksl/advanced_ae/gui/ImportExportBusMenu.java @@ -0,0 +1,32 @@ +package net.pedroksl.advanced_ae.gui; + +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.MenuType; +import net.pedroksl.advanced_ae.common.definitions.AAEMenus; +import net.pedroksl.advanced_ae.common.parts.ImportExportBusPart; + +import appeng.core.definitions.AEItems; +import appeng.menu.implementations.UpgradeableMenu; + +public class ImportExportBusMenu extends UpgradeableMenu { + + public ImportExportBusMenu(int id, Inventory ip, ImportExportBusPart host) { + this(AAEMenus.IMPORT_EXPORT_BUS.get(), id, ip, host); + } + + public ImportExportBusMenu( + MenuType menuType, int id, Inventory ip, ImportExportBusPart host) { + super(menuType, id, ip, host); + } + + @Override + protected void setupConfig() { + this.addExpandableConfigSlots((this.getHost()).getConfig(), 2, 9, 5); + } + + @Override + public boolean isSlotEnabled(int idx) { + int upgrades = this.getUpgrades().getInstalledUpgrades(AEItems.CAPACITY_CARD); + return upgrades > idx; + } +} diff --git a/src/main/resources/assets/advanced_ae/ae2guide/aae_intro/import_export_bus.md b/src/main/resources/assets/advanced_ae/ae2guide/aae_intro/import_export_bus.md new file mode 100644 index 00000000..de0949eb --- /dev/null +++ b/src/main/resources/assets/advanced_ae/ae2guide/aae_intro/import_export_bus.md @@ -0,0 +1,19 @@ +--- +navigation: + parent: aae_intro/aae_intro-index.md + title: Import Export Bus + icon: advanced_ae:import_export_bus_part +categories: + - advanced items +item_ids: + - advanced_ae:import_export_bus_part +--- + +# Import Export Bus + + + + + +The Import Export bus is a mixture of an and an . The +filter can be set to configure the exported stacks. Anything that is not on the filter is a valid stack to be imported. \ No newline at end of file diff --git a/src/main/resources/assets/advanced_ae/ae2guide/structure/cable_import_export_bus.snbt b/src/main/resources/assets/advanced_ae/ae2guide/structure/cable_import_export_bus.snbt new file mode 100644 index 00000000..ccd064dd --- /dev/null +++ b/src/main/resources/assets/advanced_ae/ae2guide/structure/cable_import_export_bus.snbt @@ -0,0 +1,11 @@ +{ + DataVersion: 3337, + size: [1, 1, 1], + data: [ + {pos: [0, 0, 0], state: "ae2:cable_bus{light_level:0,waterlogged:false}", nbt: {cable: {gn: {g: 27333L, k: -1L, p: 0}, id: "ae2:fluix_glass_cable", visual: {channelsDown: 1, connections: ["down"], missingChannel: 0b, powered: 1b}}, hasRedstone: 1, id: "ae2:cable_bus", up: {craft_only: "NO", fuzzy_mode: "IGNORE_ALL", gn: {g: 27333L, k: -1L, p: 0}, id: "advanced_ae:import_export_bus_part", nextSlot: 0, redstone_controlled: "IGNORE", scheduling_mode: "DEFAULT", visual: {missingChannel: 0b, powered: 1b}}, visual: {}}} + ], + entities: [], + palette: [ + "ae2:cable_bus{light_level:0,waterlogged:false}" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/advanced_ae/textures/part/import_export_bus.png b/src/main/resources/assets/advanced_ae/textures/part/import_export_bus.png new file mode 100644 index 0000000000000000000000000000000000000000..e69d341ad57ee29b2ba8721f94c47b71b2655f4b GIT binary patch literal 288 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2/screens/import_export_bus.json b/src/main/resources/assets/ae2/screens/import_export_bus.json new file mode 100644 index 00000000..5e5a3a25 --- /dev/null +++ b/src/main/resources/assets/ae2/screens/import_export_bus.json @@ -0,0 +1,15 @@ +{ + "$schema": "schema.json", + "includes": ["io_bus.json"], + "text": { + "dialog_title": { + "text": { + "translate": "gui.advanced_ae.ImportExportBus" + }, + "position": { + "left": 8, + "top": 6 + } + } + } +}