From 841bc6e356aca0c3a8f687feac53d332ee7ec56d Mon Sep 17 00:00:00 2001 From: fscan Date: Sun, 24 Jun 2018 17:20:29 +0200 Subject: [PATCH] Rework custom recipe system (#3232) --- .../client/render/cablebus/CubeBuilder.java | 2 +- src/main/java/appeng/core/AppEng.java | 18 +- src/main/java/appeng/core/RecipeLoader.java | 118 --- src/main/java/appeng/core/Registration.java | 73 +- .../core/api/definitions/ApiBlocks.java | 6 +- .../integration/modules/jei/JEIPlugin.java | 5 - .../modules/jei/ShapedRecipeHandler.java | 35 - .../modules/jei/ShapedRecipeWrapper.java | 102 --- .../modules/jei/ShapelessRecipeHandler.java | 35 - .../modules/jei/ShapelessRecipeWrapper.java | 73 -- .../appeng/items/materials/MaterialType.java | 9 +- .../java/appeng/items/parts/ItemPart.java | 18 + .../java/appeng/items/parts/PartType.java | 26 +- .../java/appeng/recipes/AERecipeLoader.java | 121 +++ .../appeng/recipes/CustomRecipeConfig.java | 30 - .../CustomRecipeForgeConfiguration.java | 50 -- .../java/appeng/recipes/GroupIngredient.java | 162 ---- .../java/appeng/recipes/IAERecipeFactory.java | 13 + src/main/java/appeng/recipes/Ingredient.java | 276 ------- .../java/appeng/recipes/IngredientSet.java | 128 --- .../appeng/recipes/MissedIngredientSet.java | 40 - src/main/java/appeng/recipes/RecipeData.java | 43 -- .../java/appeng/recipes/RecipeHandler.java | 728 +----------------- .../factories/recipes/PartRecipeFactory.java | 7 +- .../appeng/recipes/game/IRecipeBakeable.java | 28 - .../appeng/recipes/game/ShapedRecipe.java | 336 -------- .../appeng/recipes/game/ShapelessRecipe.java | 191 ----- .../java/appeng/recipes/handlers/Crusher.java | 88 --- .../java/appeng/recipes/handlers/Grind.java | 88 --- .../recipes/handlers/GrinderHandler.java | 49 ++ .../appeng/recipes/handlers/HCCrusher.java | 101 --- .../appeng/recipes/handlers/Inscribe.java | 79 -- .../recipes/handlers/InscriberHandler.java | 71 ++ .../recipes/handlers/InscriberProcess.java | 146 ---- .../appeng/recipes/handlers/Macerator.java | 88 --- .../appeng/recipes/handlers/MekCrusher.java | 89 --- .../recipes/handlers/MekEnrichment.java | 88 --- .../recipes/handlers/OreRegistration.java | 63 -- .../java/appeng/recipes/handlers/Press.java | 76 -- .../appeng/recipes/handlers/Pulverizer.java | 87 --- .../java/appeng/recipes/handlers/Shaped.java | 175 ----- .../appeng/recipes/handlers/Shapeless.java | 141 ---- .../java/appeng/recipes/handlers/Smelt.java | 87 --- .../recipes/handlers/SmeltingHandler.java | 36 + .../appeng/recipes/loader/ConfigLoader.java | 61 -- .../java/appeng/recipes/loader/JarLoader.java | 50 -- .../recipes/loader/RecipeResourceCopier.java | 265 ------- .../recipes/ores/OreDictionaryHandler.java | 31 - .../appliedenergistics2/aerecipes/README.html | 348 --------- .../aerecipes/aliases.recipe | 2 - .../aerecipes/decorative/certus.recipe | 8 - .../aerecipes/decorative/crystals.recipe | 30 - .../aerecipes/decorative/fixtures.recipe | 7 - .../aerecipes/decorative/index.recipe | 7 - .../aerecipes/decorative/quartzglass.recipe | 9 - .../aerecipes/decorative/skystone.recipe | 11 - .../aerecipes/decorative/slabs.recipe | 31 - .../aerecipes/decorative/stairs.recipe | 47 -- .../aerecipes/grinder/bonemeal.json | 14 + .../aerecipes/grinder/flint.json | 12 + .../aerecipes/grinder/fluix_dust.json | 13 + .../aerecipes/grinder/sky_dust.json | 12 + .../aerecipes/groups.recipe | 21 - .../aerecipes/index.recipe | 37 - .../inscriber/calculation_processor.json | 21 + .../calculation_processor_press.json | 17 + .../calculation_processor_print.json | 17 + .../inscriber/engineering_processor.json | 21 + .../engineering_processor_press.json | 17 + .../engineering_processor_print.json | 17 + .../aerecipes/inscriber/logic_processor.json | 21 + .../inscriber/logic_processor_press.json | 17 + .../inscriber/logic_processor_print.json | 17 + .../aerecipes/inscriber/silicon_press.json | 17 + .../aerecipes/inscriber/silicon_print.json | 17 + .../aerecipes/materials/cards.recipe | 35 - .../aerecipes/materials/circuits.recipe | 15 - .../aerecipes/materials/cores.recipe | 7 - .../aerecipes/materials/index.recipe | 5 - .../aerecipes/materials/presses.recipe | 15 - .../aerecipes/materials/processors.recipe | 11 - .../aerecipes/misc/chests.recipe | 11 - .../aerecipes/misc/deconstruction.recipe | 15 - .../aerecipes/misc/fluixpearl.recipe | 5 - .../aerecipes/misc/grindstone.recipe | 17 - .../aerecipes/misc/index.recipe | 8 - .../aerecipes/misc/meteors.recipe | 5 - .../aerecipes/misc/seeds.recipe | 3 - .../aerecipes/misc/tinytnt.recipe | 4 - .../aerecipes/misc/vanilla.recipe | 11 - .../network/blocks/cellworkbench.recipe | 5 - .../network/blocks/controller.recipe | 5 - .../network/blocks/crystal_processing.recipe | 11 - .../aerecipes/network/blocks/energy.recipe | 23 - .../aerecipes/network/blocks/index.recipe | 11 - .../network/blocks/inscribers.recipe | 5 - .../network/blocks/interfaces.recipe | 13 - .../aerecipes/network/blocks/io.recipe | 11 - .../aerecipes/network/blocks/quantum.recipe | 13 - .../network/blocks/security_station.recipe | 5 - .../network/blocks/spatial_io.recipe | 11 - .../aerecipes/network/blocks/storage.recipe | 11 - .../aerecipes/network/cables/covered.recipe | 104 --- .../aerecipes/network/cables/dense.recipe | 104 --- .../aerecipes/network/cables/glass.recipe | 103 --- .../aerecipes/network/cables/index.recipe | 4 - .../aerecipes/network/cables/smart.recipe | 104 --- .../aerecipes/network/cells/empty.recipe | 5 - .../aerecipes/network/cells/index.recipe | 6 - .../aerecipes/network/cells/spatial.recipe | 26 - .../network/cells/spatial_components.recipe | 17 - .../aerecipes/network/cells/storage.recipe | 35 - .../network/cells/storage_components.recipe | 23 - .../aerecipes/network/cells/view.recipe | 8 - .../network/crafting/assembler.recipe | 5 - .../aerecipes/network/crafting/cpu.recipe | 37 - .../aerecipes/network/crafting/index.recipe | 3 - .../network/crafting/patterns.recipe | 5 - .../aerecipes/network/index.recipe | 6 - .../network/parts/cable_anchor.recipe | 3 - .../aerecipes/network/parts/emitters.recipe | 3 - .../aerecipes/network/parts/index.recipe | 10 - .../aerecipes/network/parts/io_buses.recipe | 13 - .../aerecipes/network/parts/monitors.recipe | 7 - .../aerecipes/network/parts/panels.recipe | 17 - .../aerecipes/network/parts/planes.recipe | 25 - .../network/parts/quartz_fiber.recipe | 5 - .../aerecipes/network/parts/terminals.recipe | 15 - .../network/parts/toggle_buses.recipe | 13 - .../aerecipes/network/parts/tunnels.recipe | 5 - .../aerecipes/network/wireless.recipe | 22 - .../aerecipes/oredict.recipe | 37 - .../aerecipes/processing/factorization.recipe | 9 - .../aerecipes/processing/grind.recipe | 4 - .../aerecipes/processing/hydraulicraft.recipe | 9 - .../aerecipes/processing/ic2.recipe | 9 - .../aerecipes/processing/index.recipe | 8 - .../aerecipes/processing/mekanism.recipe | 9 - .../aerecipes/processing/rotarycraft.recipe | 9 - .../aerecipes/processing/te.recipe | 9 - .../aerecipes/processing/vanilla.recipe | 8 - .../aerecipes/smelting/bread.json | 11 + .../aerecipes/smelting/gold_ingot.json | 11 + .../aerecipes/smelting/iron_ingot.json | 11 + .../aerecipes/smelting/silicon.json | 18 + .../aerecipes/smelting/smelting.recipe | 2 - .../smelting/smooth_sky_stone_block.json | 10 + .../aerecipes/tools/certus_quartz.recipe | 41 - .../aerecipes/tools/index.recipe | 6 - .../aerecipes/tools/matter_cannon.recipe | 5 - .../aerecipes/tools/misctools.recipe | 11 - .../aerecipes/tools/nether_quartz.recipe | 41 - .../aerecipes/tools/network.recipe | 23 - .../aerecipes/tools/paintballs.recipe | 191 ----- .../recipes/_constants.json | 4 +- .../recipes/materials/cardcrafting.json | 2 +- .../network/crafting/molecular_assembler.json | 2 +- .../network/parts/terminals_crafting.json | 2 +- .../recipes/tools/nether_quartz_axe.json | 2 +- .../tools/nether_quartz_cutting_knife.json | 2 +- .../recipes/tools/nether_quartz_hoe.json | 2 +- .../recipes/tools/nether_quartz_pickaxe.json | 2 +- .../recipes/tools/nether_quartz_spade.json | 2 +- .../recipes/tools/nether_quartz_sword.json | 2 +- .../recipes/tools/nether_quartz_wrench.json | 2 +- 165 files changed, 680 insertions(+), 6300 deletions(-) delete mode 100644 src/main/java/appeng/core/RecipeLoader.java delete mode 100644 src/main/java/appeng/integration/modules/jei/ShapedRecipeHandler.java delete mode 100644 src/main/java/appeng/integration/modules/jei/ShapedRecipeWrapper.java delete mode 100644 src/main/java/appeng/integration/modules/jei/ShapelessRecipeHandler.java delete mode 100644 src/main/java/appeng/integration/modules/jei/ShapelessRecipeWrapper.java create mode 100644 src/main/java/appeng/recipes/AERecipeLoader.java delete mode 100644 src/main/java/appeng/recipes/CustomRecipeConfig.java delete mode 100644 src/main/java/appeng/recipes/CustomRecipeForgeConfiguration.java delete mode 100644 src/main/java/appeng/recipes/GroupIngredient.java create mode 100644 src/main/java/appeng/recipes/IAERecipeFactory.java delete mode 100644 src/main/java/appeng/recipes/Ingredient.java delete mode 100644 src/main/java/appeng/recipes/IngredientSet.java delete mode 100644 src/main/java/appeng/recipes/MissedIngredientSet.java delete mode 100644 src/main/java/appeng/recipes/RecipeData.java delete mode 100644 src/main/java/appeng/recipes/game/IRecipeBakeable.java delete mode 100644 src/main/java/appeng/recipes/game/ShapedRecipe.java delete mode 100644 src/main/java/appeng/recipes/game/ShapelessRecipe.java delete mode 100644 src/main/java/appeng/recipes/handlers/Crusher.java delete mode 100644 src/main/java/appeng/recipes/handlers/Grind.java create mode 100644 src/main/java/appeng/recipes/handlers/GrinderHandler.java delete mode 100644 src/main/java/appeng/recipes/handlers/HCCrusher.java delete mode 100644 src/main/java/appeng/recipes/handlers/Inscribe.java create mode 100644 src/main/java/appeng/recipes/handlers/InscriberHandler.java delete mode 100644 src/main/java/appeng/recipes/handlers/InscriberProcess.java delete mode 100644 src/main/java/appeng/recipes/handlers/Macerator.java delete mode 100644 src/main/java/appeng/recipes/handlers/MekCrusher.java delete mode 100644 src/main/java/appeng/recipes/handlers/MekEnrichment.java delete mode 100644 src/main/java/appeng/recipes/handlers/OreRegistration.java delete mode 100644 src/main/java/appeng/recipes/handlers/Press.java delete mode 100644 src/main/java/appeng/recipes/handlers/Pulverizer.java delete mode 100644 src/main/java/appeng/recipes/handlers/Shaped.java delete mode 100644 src/main/java/appeng/recipes/handlers/Shapeless.java delete mode 100644 src/main/java/appeng/recipes/handlers/Smelt.java create mode 100644 src/main/java/appeng/recipes/handlers/SmeltingHandler.java delete mode 100644 src/main/java/appeng/recipes/loader/ConfigLoader.java delete mode 100644 src/main/java/appeng/recipes/loader/JarLoader.java delete mode 100644 src/main/java/appeng/recipes/loader/RecipeResourceCopier.java delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/README.html delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/aliases.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/decorative/certus.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/decorative/crystals.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/decorative/fixtures.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/decorative/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/decorative/quartzglass.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/decorative/skystone.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/decorative/slabs.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/decorative/stairs.recipe create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/grinder/bonemeal.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/grinder/flint.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/grinder/fluix_dust.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/grinder/sky_dust.json delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/groups.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/index.recipe create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor_press.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor_print.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor_press.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor_print.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor_press.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor_print.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/silicon_press.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/silicon_print.json delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/materials/cards.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/materials/circuits.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/materials/cores.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/materials/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/materials/presses.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/materials/processors.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/misc/chests.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/misc/deconstruction.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/misc/fluixpearl.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/misc/grindstone.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/misc/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/misc/meteors.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/misc/seeds.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/misc/tinytnt.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/misc/vanilla.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/cellworkbench.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/controller.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/crystal_processing.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/energy.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/inscribers.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/interfaces.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/io.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/quantum.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/security_station.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/spatial_io.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/storage.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/covered.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/dense.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/glass.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/smart.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/empty.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/spatial.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/spatial_components.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/storage.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/storage_components.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/view.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/assembler.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/cpu.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/patterns.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/cable_anchor.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/emitters.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/io_buses.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/monitors.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/panels.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/planes.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/quartz_fiber.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/terminals.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/toggle_buses.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/tunnels.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/network/wireless.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/oredict.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/processing/factorization.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/processing/grind.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/processing/hydraulicraft.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/processing/ic2.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/processing/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/processing/mekanism.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/processing/rotarycraft.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/processing/te.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/processing/vanilla.recipe create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/smelting/bread.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/smelting/gold_ingot.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/smelting/iron_ingot.json create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/smelting/silicon.json delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/smelting/smelting.recipe create mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/smelting/smooth_sky_stone_block.json delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/tools/certus_quartz.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/tools/index.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/tools/matter_cannon.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/tools/misctools.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/tools/nether_quartz.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/tools/network.recipe delete mode 100644 src/main/resources/assets/appliedenergistics2/aerecipes/tools/paintballs.recipe diff --git a/src/main/java/appeng/client/render/cablebus/CubeBuilder.java b/src/main/java/appeng/client/render/cablebus/CubeBuilder.java index c85f1826e..3d229dcc9 100644 --- a/src/main/java/appeng/client/render/cablebus/CubeBuilder.java +++ b/src/main/java/appeng/client/render/cablebus/CubeBuilder.java @@ -146,7 +146,7 @@ public class CubeBuilder builder.setQuadOrientation( face ); builder.setQuadTint( -1 ); builder.setApplyDiffuseLighting( true ); - + UvVector uv = new UvVector(); // The user might have set specific UV coordinates for this face diff --git a/src/main/java/appeng/core/AppEng.java b/src/main/java/appeng/core/AppEng.java index a1938a4e2..25532ae1e 100644 --- a/src/main/java/appeng/core/AppEng.java +++ b/src/main/java/appeng/core/AppEng.java @@ -58,8 +58,6 @@ import appeng.core.worlddata.WorldData; import appeng.hooks.TickHandler; import appeng.integration.IntegrationRegistry; import appeng.integration.IntegrationType; -import appeng.recipes.CustomRecipeConfig; -import appeng.recipes.CustomRecipeForgeConfiguration; import appeng.server.AECommand; import appeng.services.VersionChecker; import appeng.services.export.ExportConfig; @@ -98,14 +96,6 @@ public final class AppEng private final Registration registration; private File configDirectory; - private CustomRecipeConfig customRecipeConfig; - - /** - * Folder for recipes - * - * used for CSV item names and the recipes - */ - private File recipeDirectory; /** * determined in pre-init but used in init @@ -152,7 +142,6 @@ public final class AppEng { final Stopwatch watch = Stopwatch.createStarted(); this.configDirectory = new File( event.getModConfigurationDirectory().getPath(), "AppliedEnergistics2" ); - this.recipeDirectory = new File( this.configDirectory, "aerecipes" ); final File configFile = new File( this.configDirectory, "AppliedEnergistics2.cfg" ); final File facadeFile = new File( this.configDirectory, "Facades.cfg" ); @@ -164,11 +153,8 @@ public final class AppEng FacadeConfig.init( facadeFile ); final VersionCheckerConfig versionCheckerConfig = new VersionCheckerConfig( versionFile ); - this.customRecipeConfig = new CustomRecipeForgeConfiguration( recipeConfiguration ); this.exportConfig = new ForgeExportConfig( recipeConfiguration ); - this.registration.setRecipeInformation( this.recipeDirectory, this.customRecipeConfig ); - AELog.info( "Pre Initialization ( started )" ); CreativeTab.init(); @@ -226,7 +212,7 @@ public final class AppEng { if( FMLCommonHandler.instance().getSide().isClient() ) { - final ExportProcess process = new ExportProcess( this.recipeDirectory, this.exportConfig ); + final ExportProcess process = new ExportProcess( this.configDirectory, this.exportConfig ); final Thread exportProcessThread = new Thread( process ); this.startService( "AE2 CSV Export", exportProcessThread ); @@ -237,7 +223,7 @@ public final class AppEng } } - this.registration.initialize( event, this.recipeDirectory, this.customRecipeConfig ); + this.registration.initialize( event, this.configDirectory ); IntegrationRegistry.INSTANCE.init(); AELog.info( "Initialization ( ended after " + start.elapsed( TimeUnit.MILLISECONDS ) + "ms )" ); diff --git a/src/main/java/appeng/core/RecipeLoader.java b/src/main/java/appeng/core/RecipeLoader.java deleted file mode 100644 index 3330bc76e..000000000 --- a/src/main/java/appeng/core/RecipeLoader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.core; - - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; - -import javax.annotation.Nonnull; - -import com.google.common.base.Preconditions; - -import org.apache.commons.io.FileUtils; - -import appeng.api.recipes.IRecipeHandler; -import appeng.recipes.CustomRecipeConfig; -import appeng.recipes.loader.ConfigLoader; -import appeng.recipes.loader.JarLoader; -import appeng.recipes.loader.RecipeResourceCopier; - - -/** - * handles the decision if recipes should be loaded from jar, loaded from file system or force copied from jar - * - * @author thatsIch - * @version rv3 - 12.05.2015 - * @since rv3 12.05.2015 - */ -public class RecipeLoader implements Runnable -{ - /** - * recipe path in the jar - */ - private static final String ASSETS_RECIPE_PATH = "/assets/appliedenergistics2/recipes/"; - - @Nonnull - private final IRecipeHandler handler; - @Nonnull - private final CustomRecipeConfig config; - @Nonnull - private final File recipeDirectory; - - /** - * @param config configuration for the knowledge how to handle the loading process - * @param handler handler to load the recipes - * - * @throws NullPointerException if handler is null - */ - public RecipeLoader( @Nonnull final File recipeDirectory, @Nonnull final CustomRecipeConfig config, @Nonnull final IRecipeHandler handler ) - { - this.recipeDirectory = Preconditions.checkNotNull( recipeDirectory ); - Preconditions.checkArgument( !recipeDirectory.isFile() ); - this.config = Preconditions.checkNotNull( config ); - this.handler = Preconditions.checkNotNull( handler ); - } - - @Override - public final void run() - { - if( this.config.isEnabled() ) - { - // setup copying - final RecipeResourceCopier copier = new RecipeResourceCopier( "assets/appliedenergistics2/aerecipes/" ); - - final File generatedRecipesDir = new File( this.recipeDirectory, "generated" ); - final File userRecipesDir = new File( this.recipeDirectory, "user" ); - - // generates generated and user recipes dir - // will clean the generated every time to keep it up to date - // copies over the recipes in the jar over to the generated folder - // copies over the readmes - try - { - FileUtils.forceMkdir( generatedRecipesDir ); - FileUtils.forceMkdir( userRecipesDir ); - FileUtils.cleanDirectory( generatedRecipesDir ); - - copier.copyTo( ".recipe", generatedRecipesDir ); - copier.copyTo( ".html", this.recipeDirectory ); - - // parse recipes prioritising the user scripts by using the generated as template - this.handler.parseRecipes( new ConfigLoader( generatedRecipesDir, userRecipesDir ), "index.recipe" ); - } - // on failure use jar parsing - catch( final IOException e ) - { - AELog.debug( e ); - this.handler.parseRecipes( new JarLoader( ASSETS_RECIPE_PATH ), "index.recipe" ); - } - catch( final URISyntaxException e ) - { - AELog.debug( e ); - this.handler.parseRecipes( new JarLoader( ASSETS_RECIPE_PATH ), "index.recipe" ); - } - } - else - { - this.handler.parseRecipes( new JarLoader( ASSETS_RECIPE_PATH ), "index.recipe" ); - } - } -} diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index 2f95163ca..1e5a0fd6a 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -77,7 +77,6 @@ import appeng.api.networking.spatial.ISpatialCache; import appeng.api.networking.storage.IStorageGrid; import appeng.api.networking.ticking.ITickManager; import appeng.api.parts.IPartHelper; -import appeng.api.recipes.IRecipeHandler; import appeng.bootstrap.ICriterionTriggerRegistry; import appeng.bootstrap.IModelRegistry; import appeng.bootstrap.components.IBlockRegistrationComponent; @@ -103,6 +102,7 @@ import appeng.fluids.registries.BasicFluidCellHandler; import appeng.hooks.TickHandler; import appeng.items.materials.ItemMaterial; import appeng.items.parts.ItemFacade; +import appeng.items.parts.ItemPart; import appeng.loot.ChestLoot; import appeng.me.cache.CraftingGridCache; import appeng.me.cache.EnergyGridCache; @@ -114,20 +114,9 @@ import appeng.me.cache.SpatialPylonCache; import appeng.me.cache.TickManagerCache; import appeng.parts.PartPlacement; import appeng.recipes.AEItemResolver; -import appeng.recipes.CustomRecipeConfig; -import appeng.recipes.RecipeHandler; +import appeng.recipes.AERecipeLoader; import appeng.recipes.game.DisassembleRecipe; import appeng.recipes.game.FacadeRecipe; -import appeng.recipes.handlers.Crusher; -import appeng.recipes.handlers.Grind; -import appeng.recipes.handlers.HCCrusher; -import appeng.recipes.handlers.Inscribe; -import appeng.recipes.handlers.Macerator; -import appeng.recipes.handlers.MekCrusher; -import appeng.recipes.handlers.MekEnrichment; -import appeng.recipes.handlers.Press; -import appeng.recipes.handlers.Pulverizer; -import appeng.recipes.handlers.Smelt; import appeng.recipes.ores.OreDictionaryHandler; import appeng.spatial.BiomeGenStorage; import appeng.spatial.StorageWorldProvider; @@ -143,15 +132,6 @@ final class Registration Biome storageBiome; AdvancementTriggers advancementTriggers; - private File recipeDirectory; - private CustomRecipeConfig customRecipeConfig; - - public void setRecipeInformation( File f, CustomRecipeConfig f2 ) - { - this.recipeDirectory = f; - this.customRecipeConfig = f2; - } - void preInitialize( final FMLPreInitializationEvent event ) { Capabilities.register(); @@ -160,10 +140,6 @@ final class Registration final IRecipeHandlerRegistry recipeRegistry = api.registries().recipes(); this.registerCraftHandlers( recipeRegistry ); - // RecipeSorter.register( "AE2-Facade", FacadeRecipe.class, Category.SHAPED, "" ); - // RecipeSorter.register( "AE2-Shaped", ShapedRecipe.class, Category.SHAPED, "" ); - // RecipeSorter.register( "AE2-Shapeless", ShapelessRecipe.class, Category.SHAPELESS, "" ); - MinecraftForge.EVENT_BUS.register( OreDictionaryHandler.INSTANCE ); ApiDefinitions definitions = api.definitions(); @@ -226,26 +202,13 @@ final class Registration private void registerCraftHandlers( final IRecipeHandlerRegistry registry ) { registry.addNewSubItemResolver( new AEItemResolver() ); - - registry.addNewCraftHandler( "hccrusher", HCCrusher.class ); - registry.addNewCraftHandler( "mekcrusher", MekCrusher.class ); - registry.addNewCraftHandler( "mekechamber", MekEnrichment.class ); - registry.addNewCraftHandler( "grind", Grind.class ); - registry.addNewCraftHandler( "crusher", Crusher.class ); - registry.addNewCraftHandler( "pulverizer", Pulverizer.class ); - registry.addNewCraftHandler( "macerator", Macerator.class ); - - registry.addNewCraftHandler( "smelt", Smelt.class ); - registry.addNewCraftHandler( "inscribe", Inscribe.class ); - registry.addNewCraftHandler( "press", Press.class ); } - public void initialize( @Nonnull final FMLInitializationEvent event, @Nonnull final File recipeDirectory, @Nonnull final CustomRecipeConfig customRecipeConfig ) + public void initialize( @Nonnull final FMLInitializationEvent event, @Nonnull final File recipeDirectory ) { Preconditions.checkNotNull( event ); Preconditions.checkNotNull( recipeDirectory ); Preconditions.checkArgument( !recipeDirectory.isFile() ); - Preconditions.checkNotNull( customRecipeConfig ); final Api api = Api.INSTANCE; final IPartHelper partHelper = api.partHelper(); @@ -255,19 +218,6 @@ final class Registration definitions.getRegistry().getBootstrapComponents( IOreDictComponent.class ).forEachRemaining( b -> b.oreRegistration( event.getSide() ) ); definitions.getRegistry().getBootstrapComponents( IInitComponent.class ).forEachRemaining( b -> b.initialize( event.getSide() ) ); - // - // // Perform ore camouflage! - // ItemMaterial.instance.makeUnique(); - - // final Runnable recipeLoader = new RecipeLoader( recipeDirectory, customRecipeConfig, this.recipeHandler ); - // recipeLoader.run(); - - // if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.OpenComputers ) ) - // { - // partHelper.registerNewLayer( "appeng.parts.layers.LayerSidedEnvironment", - // "li.cil.oc.api.network.SidedEnvironment" ); - // } - MinecraftForge.EVENT_BUS.register( TickHandler.INSTANCE ); MinecraftForge.EVENT_BUS.register( new PartPlacement() ); @@ -349,13 +299,12 @@ final class Registration // Perform ore camouflage! ItemMaterial.instance.makeUnique(); + ItemPart.instance.registerOreDicts(); if( AEConfig.instance().isFeatureEnabled( AEFeature.ENABLE_DISASSEMBLY_CRAFTING ) ) { DisassembleRecipe r = new DisassembleRecipe(); registry.register( r.setRegistryName( AppEng.MOD_ID.toLowerCase(), "disassemble" ) ); - // RecipeSorter.register( "appliedenergistics2:disassemble", DisassembleRecipe.class, Category.SHAPELESS, - // "after:minecraft:shapeless" ); } if( AEConfig.instance().isFeatureEnabled( AEFeature.ENABLE_FACADE_CRAFTING ) ) @@ -364,18 +313,13 @@ final class Registration { FacadeRecipe f = new FacadeRecipe( (ItemFacade) facadeItem ); registry.register( f.setRegistryName( AppEng.MOD_ID.toLowerCase(), "facade" ) ); - // RecipeSorter.register( "appliedenergistics2:facade", FacadeRecipe.class, Category.SHAPED, - // "after:minecraft:shaped" ); } ); } definitions.getRegistry().getBootstrapComponents( IRecipeRegistrationComponent.class ).forEachRemaining( b -> b.recipeRegistration( side, registry ) ); - // load machine recipes - final IRecipeHandler recipeHandler = new RecipeHandler(); - final Runnable recipeLoader = new RecipeLoader( this.recipeDirectory, this.customRecipeConfig, recipeHandler ); - recipeLoader.run(); - recipeHandler.injectRecipes(); + final AERecipeLoader ldr = new AERecipeLoader(); + ldr.loadProcessingRecipes(); } @SubscribeEvent @@ -572,11 +516,6 @@ final class Registration { registries.worldgen().enableWorldGenForDimension( WorldGenType.METEORITES, dimension ); } - - /* - * initial recipe bake, if ore dictionary changes after this it re-bakes. - */ - OreDictionaryHandler.INSTANCE.bakeRecipes(); } private static class ModelLoaderWrapper implements IModelRegistry diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index 953bf3d47..55a07c2b9 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -250,7 +250,11 @@ public final class ApiBlocks implements IBlocks this.quartzOreCharged = registry.block( "charged_quartz_ore", BlockChargedQuartzOre::new ) .features( AEFeature.CERTUS_ORE, AEFeature.CHARGED_CERTUS_ORE ) .useCustomItemModel() - .bootstrap( ( block, item ) -> (IOreDictComponent) side -> OreDictionary.registerOre( "oreCertusQuartz", new ItemStack( block ) ) ) + .bootstrap( ( block, item ) -> (IOreDictComponent) side -> + { + OreDictionary.registerOre( "oreCertusQuartz", new ItemStack( block ) ); + OreDictionary.registerOre( "oreChargedCertusQuartz", new ItemStack( block ) ); + } ) .build(); this.matrixFrame = registry.block( "matrix_frame", BlockMatrixFrame::new ).features( AEFeature.SPATIAL_IO ).build(); diff --git a/src/main/java/appeng/integration/modules/jei/JEIPlugin.java b/src/main/java/appeng/integration/modules/jei/JEIPlugin.java index c2a5e7cd0..09d1b1dfd 100644 --- a/src/main/java/appeng/integration/modules/jei/JEIPlugin.java +++ b/src/main/java/appeng/integration/modules/jei/JEIPlugin.java @@ -49,8 +49,6 @@ import appeng.core.features.AEFeature; import appeng.core.localization.GuiText; import appeng.integration.Integrations; import appeng.items.parts.ItemFacade; -import appeng.recipes.game.ShapedRecipe; -import appeng.recipes.game.ShapelessRecipe; @mezz.jei.api.JEIPlugin @@ -68,9 +66,6 @@ public class JEIPlugin implements IModPlugin @Override public void register( IModRegistry registry ) { - registry.handleRecipes( ShapedRecipe.class, new ShapedRecipeHandler(), VanillaRecipeCategoryUid.CRAFTING ); - registry.handleRecipes( ShapelessRecipe.class, new ShapelessRecipeHandler(), VanillaRecipeCategoryUid.CRAFTING ); - IDefinitions definitions = AEApi.instance().definitions(); this.registerFacadeRecipe( definitions, registry ); diff --git a/src/main/java/appeng/integration/modules/jei/ShapedRecipeHandler.java b/src/main/java/appeng/integration/modules/jei/ShapedRecipeHandler.java deleted file mode 100644 index 5b97b8cf2..000000000 --- a/src/main/java/appeng/integration/modules/jei/ShapedRecipeHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.integration.modules.jei; - - -import mezz.jei.api.recipe.IRecipeWrapper; -import mezz.jei.api.recipe.IRecipeWrapperFactory; - -import appeng.recipes.game.ShapedRecipe; - - -class ShapedRecipeHandler implements IRecipeWrapperFactory -{ - @Override - public IRecipeWrapper getRecipeWrapper( ShapedRecipe recipe ) - { - return new ShapedRecipeWrapper( recipe ); - } -} diff --git a/src/main/java/appeng/integration/modules/jei/ShapedRecipeWrapper.java b/src/main/java/appeng/integration/modules/jei/ShapedRecipeWrapper.java deleted file mode 100644 index cb6b459f0..000000000 --- a/src/main/java/appeng/integration/modules/jei/ShapedRecipeWrapper.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.integration.modules.jei; - - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import net.minecraft.item.ItemStack; - -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.IIngredient; -import appeng.core.AEConfig; -import appeng.recipes.game.ShapedRecipe; -import appeng.util.Platform; - - -class ShapedRecipeWrapper implements IShapedCraftingRecipeWrapper -{ - - private final ShapedRecipe recipe; - - public ShapedRecipeWrapper( ShapedRecipe recipe ) - { - this.recipe = recipe; - } - - @Override - public void getIngredients( IIngredients ingredients ) - { - final boolean useSingleItems = AEConfig.instance().disableColoredCableRecipesInJEI(); - - Object[] items = this.recipe.getIIngredients(); - int width = this.recipe.getWidth(); - int height = this.recipe.getHeight(); - - List> in = new ArrayList<>( width * height ); - - for( int x = 0; x < width; x++ ) - { - for( int y = 0; y < height; y++ ) - { - if( items[( x * height + y )] != null ) - { - final IIngredient ing = (IIngredient) items[( x * height + y )]; - - List slotList = Collections.emptyList(); - try - { - ItemStack[] is = ing.getItemStackSet(); - slotList = useSingleItems ? Platform.findPreferred( is ) : Arrays.asList( is ); - } - catch( final RegistrationException | MissingIngredientException ignored ) - { - } - in.add( slotList ); - } - else - { - in.add( Collections.emptyList() ); - } - } - } - - ingredients.setInputLists( ItemStack.class, in ); - ingredients.setOutput( ItemStack.class, this.recipe.getRecipeOutput() ); - } - - @Override - public int getWidth() - { - return this.recipe.getWidth(); - } - - @Override - public int getHeight() - { - return this.recipe.getHeight(); - } -} diff --git a/src/main/java/appeng/integration/modules/jei/ShapelessRecipeHandler.java b/src/main/java/appeng/integration/modules/jei/ShapelessRecipeHandler.java deleted file mode 100644 index e6f03efce..000000000 --- a/src/main/java/appeng/integration/modules/jei/ShapelessRecipeHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.integration.modules.jei; - - -import mezz.jei.api.recipe.IRecipeWrapper; -import mezz.jei.api.recipe.IRecipeWrapperFactory; - -import appeng.recipes.game.ShapelessRecipe; - - -class ShapelessRecipeHandler implements IRecipeWrapperFactory -{ - @Override - public IRecipeWrapper getRecipeWrapper( ShapelessRecipe recipe ) - { - return new ShapelessRecipeWrapper( recipe ); - } -} diff --git a/src/main/java/appeng/integration/modules/jei/ShapelessRecipeWrapper.java b/src/main/java/appeng/integration/modules/jei/ShapelessRecipeWrapper.java deleted file mode 100644 index e9b31a7e6..000000000 --- a/src/main/java/appeng/integration/modules/jei/ShapelessRecipeWrapper.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.integration.modules.jei; - - -import java.util.ArrayList; -import java.util.List; - -import com.google.common.collect.Lists; - -import net.minecraft.item.ItemStack; - -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeWrapper; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.IIngredient; -import appeng.recipes.game.ShapelessRecipe; - - -class ShapelessRecipeWrapper implements IRecipeWrapper -{ - - private final ShapelessRecipe recipe; - - public ShapelessRecipeWrapper( ShapelessRecipe recipe ) - { - this.recipe = recipe; - } - - @Override - public void getIngredients( IIngredients ingredients ) - { - List recipeInput = this.recipe.getInput(); - List> inputs = new ArrayList<>( recipeInput.size() ); - - for( Object inputObj : recipeInput ) - { - if( inputObj instanceof IIngredient ) - { - IIngredient ingredient = (IIngredient) inputObj; - try - { - inputs.add( Lists.newArrayList( ingredient.getItemStackSet() ) ); - } - catch( RegistrationException | MissingIngredientException registrationError ) - { - throw new RuntimeException( "Unable to register recipe with JEI" ); - } - } - } - - ingredients.setInputLists( ItemStack.class, inputs ); - ingredients.setOutput( ItemStack.class, this.recipe.getRecipeOutput() ); - } -} diff --git a/src/main/java/appeng/items/materials/MaterialType.java b/src/main/java/appeng/items/materials/MaterialType.java index 314493874..d154d09a2 100644 --- a/src/main/java/appeng/items/materials/MaterialType.java +++ b/src/main/java/appeng/items/materials/MaterialType.java @@ -45,7 +45,7 @@ public enum MaterialType CERTUS_QUARTZ_CRYSTAL_CHARGED( 1, "material_certus_quartz_crystal_charged", EnumSet.of( AEFeature.CERTUS ), EntityChargedQuartz.class ), CERTUS_QUARTZ_DUST( 2, "material_certus_quartz_dust", EnumSet.of( AEFeature.DUSTS, AEFeature.CERTUS ), "dustCertusQuartz" ), - NETHER_QUARTZ_DUST( 3, "material_nether_quartz_dust", EnumSet.of( AEFeature.DUSTS ), "dustNetherQuartz" ), + NETHER_QUARTZ_DUST( 3, "material_nether_quartz_dust", EnumSet.of( AEFeature.DUSTS ), "dustNetherQuartz,dustQuartz" ), FLOUR( 4, "material_flour", EnumSet.of( AEFeature.FLOUR ), "dustWheat" ), GOLD_DUST( 51, "material_gold_dust", EnumSet.of( AEFeature.DUSTS ), "dustGold" ), IRON_DUST( 49, "material_iron_dust", EnumSet.of( AEFeature.DUSTS ), "dustIron" ), @@ -57,9 +57,10 @@ public enum MaterialType FLUIX_DUST( 8, "material_fluix_dust", EnumSet.of( AEFeature.FLUIX, AEFeature.DUSTS ), "dustFluix" ), FLUIX_PEARL( 9, "material_fluix_pearl", EnumSet.of( AEFeature.FLUIX ), "pearlFluix" ), - PURIFIED_CERTUS_QUARTZ_CRYSTAL( 10, "material_purified_certus_quartz_crystal", EnumSet.of( AEFeature.CERTUS, AEFeature.PURE_CRYSTALS ) ), - PURIFIED_NETHER_QUARTZ_CRYSTAL( 11, "material_purified_nether_quartz_crystal", EnumSet.of( AEFeature.PURE_CRYSTALS ) ), - PURIFIED_FLUIX_CRYSTAL( 12, "material_purified_fluix_crystal", EnumSet.of( AEFeature.FLUIX, AEFeature.PURE_CRYSTALS ) ), + PURIFIED_CERTUS_QUARTZ_CRYSTAL( 10, "material_purified_certus_quartz_crystal", EnumSet.of( AEFeature.CERTUS, + AEFeature.PURE_CRYSTALS ), "crystalPureCertusQuartz" ), + PURIFIED_NETHER_QUARTZ_CRYSTAL( 11, "material_purified_nether_quartz_crystal", EnumSet.of( AEFeature.PURE_CRYSTALS ), "crystalPureNetherQuartz" ), + PURIFIED_FLUIX_CRYSTAL( 12, "material_purified_fluix_crystal", EnumSet.of( AEFeature.FLUIX, AEFeature.PURE_CRYSTALS ), "crystalPureFluix" ), CALCULATION_PROCESSOR_PRESS( 13, "material_calculation_processor_press", EnumSet.of( AEFeature.PRESSES ) ), ENGINEERING_PROCESSOR_PRESS( 14, "material_engineering_processor_press", EnumSet.of( AEFeature.PRESSES ) ), diff --git a/src/main/java/appeng/items/parts/ItemPart.java b/src/main/java/appeng/items/parts/ItemPart.java index de214ecbf..0024dd2a9 100644 --- a/src/main/java/appeng/items/parts/ItemPart.java +++ b/src/main/java/appeng/items/parts/ItemPart.java @@ -33,6 +33,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; @@ -43,6 +44,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; import appeng.api.AEApi; import appeng.api.implementations.items.IItemGroup; @@ -376,4 +378,20 @@ public final class ItemPart extends AEBaseItem implements IPartItem, IItemGroup } } + public void registerOreDicts() + { + for( final PartTypeWithVariant mt : ImmutableSet.copyOf( this.registered.values() ) ) + { + if( mt.part.getOreName() != null ) + { + final String[] names = mt.part.getOreName().split( "," ); + + for( final String name : names ) + { + OreDictionary.registerOre( name, new ItemStack( this, 1, mt.part.getBaseDamage() + mt.variant ) ); + } + } + } + } + } diff --git a/src/main/java/appeng/items/parts/PartType.java b/src/main/java/appeng/items/parts/PartType.java index 235b47ebe..1fbae9b74 100644 --- a/src/main/java/appeng/items/parts/PartType.java +++ b/src/main/java/appeng/items/parts/PartType.java @@ -187,11 +187,12 @@ public enum PartType QUARTZ_FIBER( 140, "quartz_fiber", EnumSet.of( AEFeature.QUARTZ_FIBER ), EnumSet.noneOf( IntegrationType.class ), PartQuartzFiber.class ), - MONITOR( 160, "monitor", EnumSet.of( AEFeature.PANELS ), EnumSet.noneOf( IntegrationType.class ), PartPanel.class ), + MONITOR( 160, "monitor", EnumSet.of( AEFeature.PANELS ), EnumSet.noneOf( IntegrationType.class ), PartPanel.class, "itemIlluminatedPanel" ), - SEMI_DARK_MONITOR( 180, "semi_dark_monitor", EnumSet.of( AEFeature.PANELS ), EnumSet.noneOf( IntegrationType.class ), PartSemiDarkPanel.class ), + SEMI_DARK_MONITOR( 180, "semi_dark_monitor", EnumSet.of( AEFeature.PANELS ), EnumSet + .noneOf( IntegrationType.class ), PartSemiDarkPanel.class, "itemIlluminatedPanel" ), - DARK_MONITOR( 200, "dark_monitor", EnumSet.of( AEFeature.PANELS ), EnumSet.noneOf( IntegrationType.class ), PartDarkPanel.class ), + DARK_MONITOR( 200, "dark_monitor", EnumSet.of( AEFeature.PANELS ), EnumSet.noneOf( IntegrationType.class ), PartDarkPanel.class, "itemIlluminatedPanel" ), STORAGE_BUS( 220, "storage_bus", EnumSet.of( AEFeature.STORAGE_BUS ), EnumSet.noneOf( IntegrationType.class ), PartStorageBus.class ), FLUID_STORAGE_BUS( 221, "fluid_storage_bus", EnumSet.of( AEFeature.FLUID_STORAGE_BUS ), EnumSet.noneOf( IntegrationType.class ), PartFluidStorageBus.class ), @@ -316,19 +317,31 @@ public enum PartType private final Set models; private final boolean enabled; private Constructor constructor; + private final String oreName; PartType( final int baseMetaValue, final String itemModel, final Set features, final Set integrations, final Class c ) { - this( baseMetaValue, itemModel, features, integrations, c, null ); + this( baseMetaValue, itemModel, features, integrations, c, null, null ); + } + + PartType( final int baseMetaValue, final String itemModel, final Set features, final Set integrations, final Class c, final String oreDict ) + { + this( baseMetaValue, itemModel, features, integrations, c, null, oreDict ); } PartType( final int baseMetaValue, final String itemModel, final Set features, final Set integrations, final Class c, final GuiText en ) + { + this( baseMetaValue, itemModel, features, integrations, c, en, null ); + } + + PartType( final int baseMetaValue, final String itemModel, final Set features, final Set integrations, final Class c, final GuiText en, final String oreDict ) { this.baseDamage = baseMetaValue; this.features = Collections.unmodifiableSet( features ); this.integrations = Collections.unmodifiableSet( integrations ); this.myPart = c; this.extraName = en; + this.oreName = oreDict; // The part is enabled if all features + integrations it needs are enabled this.enabled = features.stream().allMatch( AEConfig.instance()::isFeatureEnabled ) && integrations.stream() @@ -423,6 +436,11 @@ public enum PartType this.constructor = constructor; } + public String getOreName() + { + return this.oreName; + } + @SideOnly( Side.CLIENT ) public List getItemModels() { diff --git a/src/main/java/appeng/recipes/AERecipeLoader.java b/src/main/java/appeng/recipes/AERecipeLoader.java new file mode 100644 index 000000000..b3d19079d --- /dev/null +++ b/src/main/java/appeng/recipes/AERecipeLoader.java @@ -0,0 +1,121 @@ + +package appeng.recipes; + + +import java.io.BufferedReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; + +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; + +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.JsonContext; +import net.minecraftforge.fml.common.FMLLog; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; + +import appeng.core.AppEng; +import appeng.recipes.handlers.GrinderHandler; +import appeng.recipes.handlers.InscriberHandler; +import appeng.recipes.handlers.SmeltingHandler; + + +public class AERecipeLoader +{ + private static final String AERECIPE_BASE = "/aerecipes"; + private static Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); + private final Map factories = new HashMap<>(); + + private final ModContainer mod; + private final JsonContext ctx; + + public AERecipeLoader() + { + mod = Loader.instance().getIndexedModList().get( AppEng.MOD_ID ); + ctx = new JsonContext( AppEng.MOD_ID ); + + initFactories(); + } + + public boolean loadProcessingRecipes() + { + return CraftingHelper.findFiles( this.mod, "assets/" + AppEng.MOD_ID + AERECIPE_BASE, this::preprocess, this::process, true, true ); + } + + private boolean preprocess( final Path root ) + { + return true; + } + + private boolean process( final Path root, final Path file ) + { + String relative = root.relativize( file ).toString(); + if( !"json".equals( FilenameUtils.getExtension( file.toString() ) ) || relative.startsWith( "_" ) ) + return true; + + String name = FilenameUtils.removeExtension( relative ).replaceAll( "\\\\", "/" ); + ResourceLocation key = new ResourceLocation( this.ctx.getModId(), name ); + + BufferedReader reader = null; + try + { + reader = Files.newBufferedReader( file ); + JsonObject json = JsonUtils.fromJson( GSON, reader, JsonObject.class ); + if( json.has( "conditions" ) && !CraftingHelper.processConditions( JsonUtils.getJsonArray( json, "conditions" ), this.ctx ) ) + return true; + + register( json ); + } + catch( JsonParseException e ) + { + FMLLog.log.error( "Parsing error loading recipe {}", key, e ); + return false; + } + catch( IOException e ) + { + FMLLog.log.error( "Couldn't read recipe {} from {}", key, file, e ); + return false; + } + finally + { + IOUtils.closeQuietly( reader ); + } + + return true; + } + + private void register( JsonObject json ) + { + if( json == null || json.isJsonNull() ) + throw new JsonSyntaxException( "Json cannot be null" ); + + String type = this.ctx.appendModId( JsonUtils.getString( json, "type" ) ); + if( type.isEmpty() ) + throw new JsonSyntaxException( "Recipe type can not be an empty string" ); + + IAERecipeFactory factory = factories.get( new ResourceLocation( type ) ); + if( factory == null ) + throw new JsonSyntaxException( "Unknown recipe type: " + type ); + + factory.register( json, this.ctx ); + } + + private void initFactories() + { + this.factories.put( new ResourceLocation( AppEng.MOD_ID, "inscriber" ), new InscriberHandler() ); + this.factories.put( new ResourceLocation( AppEng.MOD_ID, "smelt" ), new SmeltingHandler() ); + this.factories.put( new ResourceLocation( AppEng.MOD_ID, "grinder" ), new GrinderHandler() ); + } +} diff --git a/src/main/java/appeng/recipes/CustomRecipeConfig.java b/src/main/java/appeng/recipes/CustomRecipeConfig.java deleted file mode 100644 index 08829ca9e..000000000 --- a/src/main/java/appeng/recipes/CustomRecipeConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes; - - -/** - * @author thatsIch - * @version rv3 - 22.08.2015 - * @since rv3 22.08.2015 - */ -public interface CustomRecipeConfig -{ - boolean isEnabled(); -} diff --git a/src/main/java/appeng/recipes/CustomRecipeForgeConfiguration.java b/src/main/java/appeng/recipes/CustomRecipeForgeConfiguration.java deleted file mode 100644 index db9980a07..000000000 --- a/src/main/java/appeng/recipes/CustomRecipeForgeConfiguration.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes; - - -import javax.annotation.Nonnull; - -import com.google.common.base.Preconditions; - -import net.minecraftforge.common.config.Configuration; - - -/** - * @author thatsIch - * @version rv3 - 23.08.2015 - * @since rv3 23.08.2015 - */ -public class CustomRecipeForgeConfiguration implements CustomRecipeConfig -{ - private final boolean isEnabled; - - public CustomRecipeForgeConfiguration( @Nonnull final Configuration config ) - { - Preconditions.checkNotNull( config ); - - this.isEnabled = config.getBoolean( "enabled", "general", true, "If true, the custom recipes are enabled. Acts as a master switch." ); - } - - @Override - public final boolean isEnabled() - { - return this.isEnabled; - } -} diff --git a/src/main/java/appeng/recipes/GroupIngredient.java b/src/main/java/appeng/recipes/GroupIngredient.java deleted file mode 100644 index b13c68a16..000000000 --- a/src/main/java/appeng/recipes/GroupIngredient.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes; - - -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - -import com.google.common.base.Preconditions; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.IIngredient; - - -public class GroupIngredient implements IIngredient -{ - - private final String name; - private final List ingredients; - private final int qty; - private ItemStack[] baked; - private boolean isInside = false; - - public GroupIngredient( final String myName, final List ingredients, final int qty ) throws RecipeException - { - Preconditions.checkNotNull( myName ); - Preconditions.checkNotNull( ingredients ); - Preconditions.checkState( !ingredients.isEmpty() ); - Preconditions.checkState( qty > 0 ); - - this.name = myName; - this.qty = qty; - - for( final IIngredient ingredient : ingredients ) - { - if( ingredient.isAir() ) - { - throw new RecipeException( "Cannot include air in a group." ); - } - } - - this.ingredients = ingredients; - } - - IIngredient copy( final int qty ) throws RecipeException - { - Preconditions.checkState( qty > 0 ); - return new GroupIngredient( this.name, this.ingredients, qty ); - } - - @Override - public ItemStack getItemStack() throws RegistrationException, MissingIngredientException - { - throw new RegistrationException( "Cannot pass group of items to a recipe which desires a single recipe item." ); - } - - @Override - public ItemStack[] getItemStackSet() throws RegistrationException, MissingIngredientException - { - if( this.baked != null ) - { - return this.baked; - } - - if( this.isInside ) - { - return new ItemStack[0]; - } - - final List out = new LinkedList<>(); - this.isInside = true; - try - { - for( final IIngredient i : this.ingredients ) - { - try - { - out.addAll( Arrays.asList( i.getItemStackSet() ) ); - } - catch( final MissingIngredientException mir ) - { - // oh well this is a group! - } - } - } - finally - { - this.isInside = false; - } - - if( out.isEmpty() ) - { - throw new MissingIngredientException( this.toString() + " - group could not be resolved to any items." ); - } - - for( final ItemStack is : out ) - { - is.setCount( this.qty ); - } - - return out.toArray( new ItemStack[out.size()] ); - } - - @Override - public boolean isAir() - { - return false; - } - - @Override - public String getNameSpace() - { - return ""; - } - - @Override - public String getItemName() - { - return this.name; - } - - @Override - public int getDamageValue() - { - return OreDictionary.WILDCARD_VALUE; - } - - @Override - public int getQty() - { - return this.qty; - } - - @Override - public void bake() throws RegistrationException, MissingIngredientException - { - this.baked = null; - this.baked = this.getItemStackSet(); - } -} diff --git a/src/main/java/appeng/recipes/IAERecipeFactory.java b/src/main/java/appeng/recipes/IAERecipeFactory.java new file mode 100644 index 000000000..091ddff9f --- /dev/null +++ b/src/main/java/appeng/recipes/IAERecipeFactory.java @@ -0,0 +1,13 @@ + +package appeng.recipes; + + +import com.google.gson.JsonObject; + +import net.minecraftforge.common.crafting.JsonContext; + + +public interface IAERecipeFactory +{ + void register( JsonObject json, JsonContext ctx ); +} diff --git a/src/main/java/appeng/recipes/Ingredient.java b/src/main/java/appeng/recipes/Ingredient.java deleted file mode 100644 index 9d5ee2d38..000000000 --- a/src/main/java/appeng/recipes/Ingredient.java +++ /dev/null @@ -1,276 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes; - - -import java.util.List; - -import com.google.common.base.Preconditions; - -import net.minecraft.block.Block; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.oredict.OreDictionary; - -import appeng.api.AEApi; -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.IIngredient; -import appeng.api.recipes.ResolverResult; -import appeng.api.recipes.ResolverResultSet; - - -public class Ingredient implements IIngredient -{ - - private final boolean isAir; - private final String nameSpace; - private final String itemName; - private final int meta; - private final int qty; - private NBTTagCompound nbt = null; - private ItemStack[] baked; - - public Ingredient( final RecipeHandler handler, final String input, final int qty ) throws RecipeException, MissedIngredientSet - { - Preconditions.checkNotNull( handler ); - Preconditions.checkNotNull( input ); - Preconditions.checkState( qty > 0 ); - - // works no matter wat! - this.qty = qty; - - if( input.equals( "_" ) ) - { - this.isAir = true; - this.nameSpace = ""; - this.itemName = ""; - this.meta = OreDictionary.WILDCARD_VALUE; - return; - } - - this.isAir = false; - final String[] parts = input.split( ":" ); - if( parts.length >= 2 ) - { - this.nameSpace = handler.alias( parts[0] ); - String tmpName = handler.alias( parts[1] ); - - if( parts.length != 3 ) - { - int sel = 0; - - if( this.nameSpace.equalsIgnoreCase( "oreDictionary" ) ) - { - if( parts.length == 3 ) - { - throw new RecipeException( "Cannot specify meta when using ore dictionary." ); - } - sel = OreDictionary.WILDCARD_VALUE; - } - else - { - try - { - final Object ro = AEApi.instance().registries().recipes().resolveItem( this.nameSpace, tmpName ); - if( ro instanceof ResolverResult ) - { - final ResolverResult rr = (ResolverResult) ro; - tmpName = rr.itemName; - sel = rr.damageValue; - this.nbt = rr.compound; - } - else if( ro instanceof ResolverResultSet ) - { - throw new MissedIngredientSet( (ResolverResultSet) ro ); - } - } - catch( final IllegalArgumentException e ) - { - throw new RecipeException( tmpName + " is not a valid ae2 item definition." ); - } - } - - this.meta = sel; - } - else - { - if( parts[2].equals( "*" ) ) - { - this.meta = OreDictionary.WILDCARD_VALUE; - } - else - { - try - { - this.meta = Integer.parseInt( parts[2] ); - } - catch( final NumberFormatException e ) - { - throw new RecipeException( "Invalid Metadata." ); - } - } - } - this.itemName = tmpName; - } - else - { - throw new RecipeException( input + " : Needs at least Namespace and Name." ); - } - - handler.getData().knownItem.add( this.toString() ); - } - - @Override - public String toString() - { - return this.nameSpace + ':' + this.itemName + ':' + this.meta; - } - - @Override - public ItemStack getItemStack() throws RegistrationException, MissingIngredientException - { - if( this.isAir ) - { - throw new RegistrationException( "Found blank item and expected a real item." ); - } - - if( this.nameSpace.equalsIgnoreCase( "oreDictionary" ) ) - { - throw new RegistrationException( "Recipe format expected a single item, but got a set of items." ); - } - - Block blk = Block.getBlockFromName( this.nameSpace + ":" + this.itemName ); - if( blk == null ) - { - blk = Block.getBlockFromName( this.nameSpace + ":" + "tile." + this.itemName ); - } - - if( blk != null ) - { - final Item it = Item.getItemFromBlock( blk ); - if( it != Items.AIR ) - { - return this.makeItemStack( it, this.qty, this.meta, this.nbt ); - } - } - - Item it = Item.getByNameOrId( this.nameSpace + ":" + this.itemName ); - if( it == null ) - { - it = Item.getByNameOrId( this.nameSpace + ":" + "item." + this.itemName ); - } - - if( it != null ) - { - return this.makeItemStack( it, this.qty, this.meta, this.nbt ); - } - - /* - * Object o = Item.itemRegistry.getObject( nameSpace + ":" + itemName ); if ( o instanceof Item ) return new - * ItemStack( (Item) o, qty, meta ); - * if ( o instanceof Block ) return new ItemStack( (Block) o, qty, meta ); - * o = Item.itemRegistry.getObject( nameSpace + ":item." + itemName ); if ( o instanceof Item ) return new - * ItemStack( (Item) o, qty, meta ); - * o = Block.blockRegistry.getObject( nameSpace + ":tile." + itemName ); if ( o instanceof Block && (!(o - * instanceof BlockAir)) ) return new ItemStack( (Block) o, qty, meta ); - */ - - throw new MissingIngredientException( "Unable to find item: " + this.toString() ); - } - - private ItemStack makeItemStack( final Item it, final int quantity, final int damageValue, final NBTTagCompound compound ) - { - final ItemStack is = new ItemStack( it, quantity, damageValue ); - is.setTagCompound( compound ); - return is; - } - - @Override - public ItemStack[] getItemStackSet() throws RegistrationException, MissingIngredientException - { - if( this.baked != null ) - { - return this.baked; - } - - if( this.nameSpace.equalsIgnoreCase( "oreDictionary" ) ) - { - final List ores = OreDictionary.getOres( this.itemName ); - final ItemStack[] set = ores.toArray( new ItemStack[ores.size()] ); - - // clone and set qty. - for( int x = 0; x < set.length; x++ ) - { - final ItemStack is = set[x].copy(); - is.setCount( this.qty ); - set[x] = is; - } - - if( set.length == 0 ) - { - throw new MissingIngredientException( this.itemName + " - ore dictionary could not be resolved to any items." ); - } - - return set; - } - - return new ItemStack[] { this.getItemStack() }; - } - - @Override - public String getNameSpace() - { - return this.nameSpace; - } - - @Override - public String getItemName() - { - return this.itemName; - } - - @Override - public int getDamageValue() - { - return this.meta; - } - - @Override - public int getQty() - { - return this.qty; - } - - @Override - public boolean isAir() - { - return this.isAir; - } - - @Override - public void bake() throws RegistrationException, MissingIngredientException - { - this.baked = null; - this.baked = this.getItemStackSet(); - } -} diff --git a/src/main/java/appeng/recipes/IngredientSet.java b/src/main/java/appeng/recipes/IngredientSet.java deleted file mode 100644 index 570330b5b..000000000 --- a/src/main/java/appeng/recipes/IngredientSet.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes; - - -import java.util.LinkedList; -import java.util.List; - -import com.google.common.base.Preconditions; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.IIngredient; -import appeng.api.recipes.ResolverResultSet; - - -public class IngredientSet implements IIngredient -{ - - private final int qty; - private final String name; - private final List items; - private final boolean isInside = false; - private ItemStack[] baked; - - public IngredientSet( final ResolverResultSet rr, final int qty ) - { - Preconditions.checkNotNull( rr ); - Preconditions.checkNotNull( rr.name ); - Preconditions.checkNotNull( rr.results ); - Preconditions.checkState( qty > 0 ); - - this.name = rr.name; - this.items = rr.results; - this.qty = qty; - } - - @Override - public ItemStack getItemStack() throws RegistrationException, MissingIngredientException - { - throw new RegistrationException( "Cannot pass group of items to a recipe which desires a single recipe item." ); - } - - @Override - public ItemStack[] getItemStackSet() throws RegistrationException, MissingIngredientException - { - if( this.baked != null ) - { - return this.baked; - } - - if( this.isInside ) - { - return new ItemStack[0]; - } - - final List out = new LinkedList<>(); - out.addAll( this.items ); - - if( out.isEmpty() ) - { - throw new MissingIngredientException( this.toString() + " - group could not be resolved to any items." ); - } - - for( final ItemStack is : out ) - { - is.setCount( this.qty ); - } - - return out.toArray( new ItemStack[out.size()] ); - } - - @Override - public boolean isAir() - { - return false; - } - - @Override - public String getNameSpace() - { - return ""; - } - - @Override - public String getItemName() - { - return this.name; - } - - @Override - public int getDamageValue() - { - return OreDictionary.WILDCARD_VALUE; - } - - @Override - public int getQty() - { - return this.qty; - } - - @Override - public void bake() throws RegistrationException, MissingIngredientException - { - this.baked = null; - this.baked = this.getItemStackSet(); - } -} diff --git a/src/main/java/appeng/recipes/MissedIngredientSet.java b/src/main/java/appeng/recipes/MissedIngredientSet.java deleted file mode 100644 index 41f398e26..000000000 --- a/src/main/java/appeng/recipes/MissedIngredientSet.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes; - - -import appeng.api.recipes.ResolverResultSet; - - -public class MissedIngredientSet extends Throwable -{ - - private static final long serialVersionUID = 2672951714376345807L; - private final ResolverResultSet resolverResultSet; - - public MissedIngredientSet( final ResolverResultSet ro ) - { - this.resolverResultSet = ro; - } - - ResolverResultSet getResolverResultSet() - { - return this.resolverResultSet; - } -} diff --git a/src/main/java/appeng/recipes/RecipeData.java b/src/main/java/appeng/recipes/RecipeData.java deleted file mode 100644 index 06542e207..000000000 --- a/src/main/java/appeng/recipes/RecipeData.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes; - - -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import appeng.api.recipes.ICraftHandler; - - -public class RecipeData -{ - - final Map aliases = new HashMap<>(); - final Map groups = new HashMap<>(); - - final List handlers = new LinkedList<>(); - final Set knownItem = new HashSet<>(); - boolean crash = true; - boolean exceptions = true; - boolean errorOnMissing = true; -} diff --git a/src/main/java/appeng/recipes/RecipeHandler.java b/src/main/java/appeng/recipes/RecipeHandler.java index 602e20c12..f578e9965 100644 --- a/src/main/java/appeng/recipes/RecipeHandler.java +++ b/src/main/java/appeng/recipes/RecipeHandler.java @@ -19,51 +19,8 @@ package appeng.recipes; -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Optional; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import javax.annotation.Nonnull; - -import com.google.common.base.Preconditions; -import com.google.common.collect.HashMultimap; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.LoaderState; - -import appeng.api.AEApi; -import appeng.api.definitions.IBlocks; -import appeng.api.definitions.IDefinitions; -import appeng.api.definitions.IItems; -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.features.IRecipeHandlerRegistry; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; import appeng.api.recipes.IRecipeHandler; import appeng.api.recipes.IRecipeLoader; -import appeng.core.AEConfig; -import appeng.core.AELog; -import appeng.core.AppEng; -import appeng.core.features.AEFeature; -import appeng.items.materials.ItemMaterial; -import appeng.items.misc.ItemCrystalSeed; -import appeng.items.parts.ItemPart; -import appeng.recipes.handlers.IWebsiteSerializer; -import appeng.recipes.handlers.OreRegistration; /** @@ -74,696 +31,15 @@ import appeng.recipes.handlers.OreRegistration; */ public class RecipeHandler implements IRecipeHandler { - private final RecipeData data; - private final List tokens = new LinkedList<>(); - - public RecipeHandler() - { - this.data = new RecipeData(); - } - - RecipeHandler( final RecipeHandler parent ) - { - Preconditions.checkNotNull( parent ); - this.data = parent.data; - } - - private void addCrafting( final ICraftHandler ch ) - { - this.data.handlers.add( ch ); - } - - public String getName( @Nonnull final IIngredient i ) - { - try - { - for( final ItemStack is : i.getItemStackSet() ) - { - return this.getName( is ); - } - } - catch( final RecipeException ignored ) - { - } - catch( final Throwable t ) - { - t.printStackTrace(); - // :P - } - - return i.getNameSpace() + ':' + i.getItemName(); - } - - private String getName( final ItemStack is ) throws RecipeException - { - Preconditions.checkNotNull( is ); - - final ResourceLocation id = Item.REGISTRY.getNameForObject( is.getItem() ); - String realName = id.toString(); - - if( !id.getResourceDomain().equals( AppEng.MOD_ID ) && !id.getResourceDomain().equals( "minecraft" ) ) - { - throw new RecipeException( "Not applicable for website" ); - } - - final IDefinitions definitions = AEApi.instance().definitions(); - final IItems items = definitions.items(); - final IBlocks blocks = definitions.blocks(); - - final Optional maybeCrystalSeedItem = items.crystalSeed().maybeItem(); - final Optional maybeSkyStoneItem = blocks.skyStoneBlock().maybeItem(); - final Optional maybeCStorageItem = blocks.craftingStorage1k().maybeItem(); - final Optional maybeCUnitItem = blocks.craftingUnit().maybeItem(); - final Optional maybeSkyChestItem = blocks.skyStoneChest().maybeItem(); - - if( maybeCrystalSeedItem.isPresent() && is.getItem() == maybeCrystalSeedItem.get() ) - { - final int dmg = is.getItemDamage(); - if( dmg < ItemCrystalSeed.NETHER ) - { - realName += ".Certus"; - } - else if( dmg < ItemCrystalSeed.FLUIX ) - { - realName += ".Nether"; - } - else if( dmg < ItemCrystalSeed.FINAL_STAGE ) - { - realName += ".Fluix"; - } - } - else if( maybeSkyStoneItem.isPresent() && is.getItem() == maybeSkyStoneItem.get() ) - { - switch( is.getItemDamage() ) - { - case 1: - realName += ".Block"; - break; - case 2: - realName += ".Brick"; - break; - case 3: - realName += ".SmallBrick"; - break; - default: - } - } - else if( maybeCStorageItem.isPresent() && is.getItem() == maybeCStorageItem.get() ) - { - switch( is.getItemDamage() ) - { - case 1: - realName += "4k"; - break; - case 2: - realName += "16k"; - break; - case 3: - realName += "64k"; - break; - default: - } - } - else if( maybeCUnitItem.isPresent() && is.getItem() == maybeCUnitItem.get() ) - { - switch( is.getItemDamage() ) - { - case 1: - realName = realName.replace( "Unit", "Accelerator" ); - break; - default: - } - } - else if( maybeSkyChestItem.isPresent() && is.getItem() == maybeSkyChestItem.get() ) - { - switch( is.getItemDamage() ) - { - case 1: - realName += ".Block"; - break; - default: - } - } - else if( is.getItem() instanceof ItemMaterial ) - { - realName = realName.replace( "ItemMultiMaterial", "ItemMaterial" ); - realName += '.' + ( (ItemMaterial) is.getItem() ).getTypeByStack( is ).name(); - } - else if( is.getItem() instanceof ItemPart ) - { - realName = realName.replace( "ItemPart", "ItemPart" ); - realName += '.' + ( (ItemPart) is.getItem() ).getTypeByStack( is ).name(); - } - else if( is.getItemDamage() > 0 ) - { - realName += "." + is.getItemDamage(); - } - - return realName; - } - - String alias( final String in ) - { - Preconditions.checkNotNull( in ); - - final String out = this.data.aliases.get( in ); - - if( out != null ) - { - return out; - } - - return in; - } - @Override public void parseRecipes( final IRecipeLoader loader, final String path ) { - Preconditions.checkNotNull( loader ); - Preconditions.checkNotNull( path ); - - try - { - BufferedReader reader = null; - try - { - reader = loader.getFile( path ); - } - catch( final Exception err ) - { - AELog.warn( "Error Loading Recipe File:" + path ); - if( this.data.exceptions ) - { - AELog.debug( err ); - } - return; - } - - boolean inQuote = false; - boolean inComment = false; - - String token = ""; - int line = 0; - - int val = -1; - while( ( val = reader.read() ) != -1 ) - { - final char c = (char) val; - - if( c == '\n' ) - { - line++; - } - - if( inComment ) - { - if( c == '\n' || c == '\r' ) - { - inComment = false; - } - } - else if( inQuote ) - { - switch( c ) - { - case '"': - inQuote = !inQuote; - break; - default: - token += c; - } - } - else - { - switch( c ) - { - case '"': - inQuote = !inQuote; - break; - case ',': - - if( token.length() > 0 ) - { - this.tokens.add( token ); - this.tokens.add( "," ); - } - token = ""; - break; - - case '=': - - this.processTokens( loader, path, line ); - - if( token.length() > 0 ) - { - this.tokens.add( token ); - } - token = ""; - - break; - - case '#': - inComment = true; - // then add a token if you can... - - case '\n': - case '\t': - case '\r': - case ' ': - - if( token.length() > 0 ) - { - this.tokens.add( token ); - } - token = ""; - - break; - default: - token += c; - } - } - } - - if( token.length() > 0 ) - { - this.tokens.add( token ); - } - - reader.close(); - this.processTokens( loader, path, line ); - } - catch( final Throwable e ) - { - AELog.debug( e ); - if( this.data.crash ) - { - throw new IllegalStateException( e ); - } - } + // dummy } @Override public void injectRecipes() { - if( net.minecraftforge.fml.common.Loader.instance().hasReachedState( LoaderState.POSTINITIALIZATION ) ) - { - throw new IllegalStateException( "Recipes must now be loaded in Init." ); - } - - final Map processed = new HashMap<>(); - for( final ICraftHandler ch : this.data.handlers ) - { - try - { - ch.register(); - - final Class clz = ch.getClass(); - final Integer i = processed.get( clz ); - if( i == null ) - { - processed.put( clz, 1 ); - } - else - { - processed.put( clz, i + 1 ); - } - } - catch( final MissingIngredientException e ) - { - if( this.data.errorOnMissing ) - { - AELog.warn( "Unable to register a recipe:" + e.getMessage() ); - if( this.data.exceptions ) - { - AELog.debug( e ); - } - if( this.data.crash ) - { - throw new IllegalStateException( e ); - } - } - } - catch( final RegistrationException e ) - { - AELog.warn( "Unable to register a recipe: " + e.getMessage() ); - if( this.data.exceptions ) - { - AELog.debug( e ); - } - if( this.data.crash ) - { - throw new IllegalStateException( e ); - } - } - } - - for( final Entry e : processed.entrySet() ) - { - AELog.info( "Recipes Loading: " + e.getKey().getSimpleName() + ": " + e.getValue() + " loaded." ); - } - - if( AEConfig.instance().isFeatureEnabled( AEFeature.WEBSITE_RECIPES ) ) - { - try - { - final ZipOutputStream out = new ZipOutputStream( new FileOutputStream( "recipes.zip" ) ); - - final HashMultimap combined = HashMultimap.create(); - - for( final String s : this.data.knownItem ) - { - try - { - - final IIngredient i = new Ingredient( this, s, 1 ); - - for( final ItemStack is : i.getItemStackSet() ) - { - final String realName = this.getName( is ); - final List recipes = this.findRecipe( is ); - if( !recipes.isEmpty() ) - { - combined.putAll( realName, recipes ); - } - } - } - catch( final RecipeException ignored ) - { - - } - catch( final MissedIngredientSet ignored ) - { - - } - catch( final RegistrationException ignored ) - { - - } - catch( final MissingIngredientException ignored ) - { - - } - } - - for( final String realName : combined.keySet() ) - { - int offset = 0; - - for( final IWebsiteSerializer ws : combined.get( realName ) ) - { - final String rew = ws.getPattern( this ); - if( rew != null && rew.length() > 0 ) - { - out.putNextEntry( new ZipEntry( realName + '_' + offset + ".txt" ) ); - offset++; - out.write( rew.getBytes() ); - } - } - } - - out.close(); - } - catch( final FileNotFoundException e1 ) - { - AELog.debug( e1 ); - } - catch( final IOException e1 ) - { - AELog.debug( e1 ); - } - } + // dummy } - - private List findRecipe( final ItemStack output ) - { - final List out = new LinkedList<>(); - - for( final ICraftHandler ch : this.data.handlers ) - { - try - { - if( ch instanceof IWebsiteSerializer && ( (IWebsiteSerializer) ch ).canCraft( output ) ) - { - out.add( (IWebsiteSerializer) ch ); - } - } - catch( final Throwable t ) - { - AELog.debug( t ); - } - } - - return out; - } - - RecipeData getData() - { - return this.data; - } - - private void processTokens( final IRecipeLoader loader, final String file, final int line ) throws RecipeException - { - try - { - final IRecipeHandlerRegistry cr = AEApi.instance().registries().recipes(); - - if( this.tokens.isEmpty() ) - { - return; - } - - final int split = this.tokens.indexOf( "->" ); - if( split != -1 ) - { - final String operation = this.tokens.remove( 0 ).toLowerCase( Locale.ENGLISH ); - - if( operation.equals( "alias" ) ) - { - if( this.tokens.size() == 3 && this.tokens.indexOf( "->" ) == 1 ) - { - this.data.aliases.put( this.tokens.get( 0 ), this.tokens.get( 2 ) ); - } - else - { - throw new RecipeException( "Alias must have exactly 1 input and 1 output." ); - } - } - else if( operation.equals( "group" ) ) - { - final List pre = this.tokens.subList( 0, split - 1 ); - final List post = this.tokens.subList( split, this.tokens.size() ); - - final List> inputs = this.parseLines( pre ); - - if( inputs.size() == 1 && inputs.get( 0 ).size() > 0 && post.size() == 1 ) - { - this.data.groups.put( post.get( 0 ), new GroupIngredient( post.get( 0 ), inputs.get( 0 ), 1 ) ); - } - else - { - throw new RecipeException( "Group must have exactly 1 output, and 1 or more inputs." ); - } - } - else if( operation.equals( "ore" ) ) - { - final List pre = this.tokens.subList( 0, split - 1 ); - final List post = this.tokens.subList( split, this.tokens.size() ); - - final List> inputs = this.parseLines( pre ); - - if( inputs.size() == 1 && inputs.get( 0 ).size() > 0 && post.size() == 1 ) - { - final ICraftHandler ch = new OreRegistration( inputs.get( 0 ), post.get( 0 ) ); - this.addCrafting( ch ); - } - else - { - throw new RecipeException( "Group must have exactly 1 output, and 1 or more inputs in a single row." ); - } - } - else - { - final List pre = this.tokens.subList( 0, split - 1 ); - final List post = this.tokens.subList( split, this.tokens.size() ); - - final List> inputs = this.parseLines( pre ); - final List> outputs = this.parseLines( post ); - - final ICraftHandler ch = cr.getCraftHandlerFor( operation ); - - if( ch != null ) - { - ch.setup( inputs, outputs ); - this.addCrafting( ch ); - } - else - { - throw new RecipeException( "Invalid crafting type: " + operation ); - } - } - } - else - { - final String operation = this.tokens.remove( 0 ).toLowerCase(); - - if( operation.equals( "exceptions" ) && ( this.tokens.get( 0 ).equals( "true" ) || this.tokens.get( 0 ).equals( "false" ) ) ) - { - if( this.tokens.size() == 1 ) - { - this.data.exceptions = this.tokens.get( 0 ).equals( "true" ); - } - else - { - throw new RecipeException( "exceptions must be true or false explicitly." ); - } - } - else if( operation.equals( "crash" ) && ( this.tokens.get( 0 ).equals( "true" ) || this.tokens.get( 0 ).equals( "false" ) ) ) - { - if( this.tokens.size() == 1 ) - { - this.data.crash = this.tokens.get( 0 ).equals( "true" ); - } - else - { - throw new RecipeException( "crash must be true or false explicitly." ); - } - } - else if( operation.equals( "erroronmissing" ) ) - { - if( this.tokens.size() == 1 && ( this.tokens.get( 0 ).equals( "true" ) || this.tokens.get( 0 ).equals( "false" ) ) ) - { - this.data.errorOnMissing = this.tokens.get( 0 ).equals( "true" ); - } - else - { - throw new RecipeException( "erroronmissing must be true or false explicitly." ); - } - } - else if( operation.equals( "import" ) ) - { - if( this.tokens.size() == 1 ) - { - ( new RecipeHandler( this ) ).parseRecipes( loader, this.tokens.get( 0 ) ); - } - else - { - throw new RecipeException( "Import must have exactly 1 input." ); - } - } - else - { - throw new RecipeException( operation + ": " + this.tokens.toString() + "; recipe without an output." ); - } - } - } - catch( final RecipeException e ) - { - AELog.warn( "Recipe Error '" + e.getMessage() + "' near line:" + line + " in " + file + " with: " + this.tokens.toString() ); - if( this.data.exceptions ) - { - AELog.debug( e ); - } - if( this.data.crash ) - { - throw e; - } - } - - this.tokens.clear(); - } - - private List> parseLines( final Iterable subList ) throws RecipeException - { - final List> out = new LinkedList<>(); - List cList = new LinkedList<>(); - - boolean hasQty = false; - int qty = 1; - - for( final String v : subList ) - { - if( v.equals( "," ) ) - { - if( hasQty ) - { - throw new RecipeException( "Qty found with no item." ); - } - if( !cList.isEmpty() ) - { - out.add( cList ); - } - cList = new LinkedList<>(); - } - else - { - if( this.isNumber( v ) ) - { - if( hasQty ) - { - throw new RecipeException( "Qty found with no item." ); - } - hasQty = true; - qty = Integer.parseInt( v ); - } - else - { - if( hasQty ) - { - cList.add( this.findIngredient( v, qty ) ); - hasQty = false; - } - else - { - cList.add( this.findIngredient( v, 1 ) ); - } - } - } - } - - if( !cList.isEmpty() ) - { - out.add( cList ); - } - - return out; - } - - private IIngredient findIngredient( final String v, final int qty ) throws RecipeException - { - final GroupIngredient gi = this.data.groups.get( v ); - - if( gi != null ) - { - return gi.copy( qty ); - } - - try - { - return new Ingredient( this, v, qty ); - } - catch( final MissedIngredientSet grp ) - { - return new IngredientSet( grp.getResolverResultSet(), qty ); - } - } - - private boolean isNumber( final CharSequence v ) - { - if( v.length() <= 0 ) - { - return false; - } - - final int l = v.length(); - for( int x = 0; x < l; x++ ) - { - if( !Character.isDigit( v.charAt( x ) ) ) - { - return false; - } - } - - return true; - } - } diff --git a/src/main/java/appeng/recipes/factories/recipes/PartRecipeFactory.java b/src/main/java/appeng/recipes/factories/recipes/PartRecipeFactory.java index 496ba4355..f4b536cbd 100644 --- a/src/main/java/appeng/recipes/factories/recipes/PartRecipeFactory.java +++ b/src/main/java/appeng/recipes/factories/recipes/PartRecipeFactory.java @@ -74,7 +74,12 @@ public class PartRecipeFactory implements IRecipeFactory public static ItemStack getResult( JsonObject json, JsonContext context ) { - JsonObject resultObject = JsonUtils.getJsonObject( json, "result" ); + return getResult( json, context, "result" ); + } + + public static ItemStack getResult( JsonObject json, JsonContext context, String name ) + { + JsonObject resultObject = JsonUtils.getJsonObject( json, name ); if( resultObject.has( "part" ) ) { diff --git a/src/main/java/appeng/recipes/game/IRecipeBakeable.java b/src/main/java/appeng/recipes/game/IRecipeBakeable.java deleted file mode 100644 index 6635af2ac..000000000 --- a/src/main/java/appeng/recipes/game/IRecipeBakeable.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.game; - - -import appeng.api.exceptions.RegistrationException; - - -public interface IRecipeBakeable -{ - void bake() throws RegistrationException; -} diff --git a/src/main/java/appeng/recipes/game/ShapedRecipe.java b/src/main/java/appeng/recipes/game/ShapedRecipe.java deleted file mode 100644 index 7be4c7af2..000000000 --- a/src/main/java/appeng/recipes/game/ShapedRecipe.java +++ /dev/null @@ -1,336 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.game; - - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.NonNullList; -import net.minecraft.world.World; -import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.oredict.OreDictionary; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.IIngredient; - - -public class ShapedRecipe extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe, IRecipeBakeable -{ - // Added in for future ease of change, but hard coded for now. - private static final int MAX_CRAFT_GRID_WIDTH = 3; - private static final int MAX_CRAFT_GRID_HEIGHT = 3; - - private ItemStack output = ItemStack.EMPTY; - private Object[] input = null; - private int width = 0; - private int height = 0; - private boolean mirrored = true; - private boolean disable = false; - - public ShapedRecipe( final ItemStack result, Object... recipe ) - { - this.output = result.copy(); - - final StringBuilder shape = new StringBuilder(); - int idx = 0; - - if( recipe[idx] instanceof Boolean ) - { - this.mirrored = (Boolean) recipe[idx]; - if( recipe[idx + 1] instanceof Object[] ) - { - recipe = (Object[]) recipe[idx + 1]; - } - else - { - idx = 1; - } - } - - if( recipe[idx] instanceof String[] ) - { - final String[] parts = ( (String[]) recipe[idx] ); - idx++; - - for( final String s : parts ) - { - this.width = s.length(); - shape.append( s ); - } - - this.height = parts.length; - } - else - { - while( recipe[idx] instanceof String ) - { - final String s = (String) recipe[idx]; - idx++; - shape.append( s ); - this.width = s.length(); - this.height++; - } - } - - if( this.width * this.height != shape.length() ) - { - final StringBuilder ret = new StringBuilder( "Invalid shaped ore recipe: " ); - for( final Object tmp : recipe ) - { - ret.append( tmp ).append( ", " ); - } - ret.append( this.output ); - throw new IllegalStateException( ret.toString() ); - } - - final Map itemMap = new HashMap<>(); - - for( ; idx < recipe.length; idx += 2 ) - { - final Character chr = (Character) recipe[idx]; - final Object in = recipe[idx + 1]; - - if( in instanceof IIngredient ) - { - itemMap.put( chr, (IIngredient) in ); - } - else - { - final StringBuilder ret = new StringBuilder( "Invalid shaped ore recipe: " ); - for( final Object tmp : recipe ) - { - ret.append( tmp ).append( ", " ); - } - ret.append( this.output ); - throw new IllegalStateException( ret.toString() ); - } - } - - this.input = new Object[this.width * this.height]; - int x = 0; - for( final char chr : shape.toString().toCharArray() ) - { - this.input[x] = itemMap.get( chr ); - x++; - } - } - - public boolean isEnabled() - { - return !this.disable; - } - - @Override - public boolean matches( final InventoryCrafting inv, final World world ) - { - if( this.disable ) - { - return false; - } - - for( int x = 0; x <= MAX_CRAFT_GRID_WIDTH - this.width; x++ ) - { - for( int y = 0; y <= MAX_CRAFT_GRID_HEIGHT - this.height; ++y ) - { - if( this.checkMatch( inv, x, y, false ) ) - { - return true; - } - - if( this.mirrored && this.checkMatch( inv, x, y, true ) ) - { - return true; - } - } - } - - return false; - } - - @Override - public ItemStack getCraftingResult( final InventoryCrafting var1 ) - { - return this.output.copy(); - } - - @Override - public boolean canFit( int i, int i1 ) - { - return false; - } - - @Override - public ItemStack getRecipeOutput() - { - return this.output; - } - - @SuppressWarnings( "unchecked" ) - private boolean checkMatch( final InventoryCrafting inv, final int startX, final int startY, final boolean mirror ) - { - if( this.disable ) - { - return false; - } - - for( int x = 0; x < MAX_CRAFT_GRID_WIDTH; x++ ) - { - for( int y = 0; y < MAX_CRAFT_GRID_HEIGHT; y++ ) - { - final int subX = x - startX; - final int subY = y - startY; - Object target = null; - - if( subX >= 0 && subY >= 0 && subX < this.width && subY < this.height ) - { - if( mirror ) - { - target = this.input[this.width - subX - 1 + subY * this.width]; - } - else - { - target = this.input[subX + subY * this.width]; - } - } - - final ItemStack slot = inv.getStackInRowAndColumn( x, y ); - - if( target instanceof IIngredient ) - { - boolean matched = false; - - try - { - for( final ItemStack item : ( (IIngredient) target ).getItemStackSet() ) - { - matched = matched || this.checkItemEquals( item, slot ); - } - } - catch( final RegistrationException e ) - { - // :P - } - catch( final MissingIngredientException e ) - { - // :P - } - - if( !matched ) - { - return false; - } - } - else if( target instanceof ArrayList ) - { - boolean matched = false; - - for( final ItemStack item : (Iterable) target ) - { - matched = matched || this.checkItemEquals( item, slot ); - } - - if( !matched ) - { - return false; - } - } - else if( target == null && !slot.isEmpty() ) - { - return false; - } - } - } - - return true; - } - - private boolean checkItemEquals( final ItemStack target, final ItemStack input ) - { - if( input.isEmpty() && !target.isEmpty() || !input.isEmpty() && target.isEmpty() ) - { - return false; - } - return( target.getItem() == input - .getItem() && ( target.getItemDamage() == OreDictionary.WILDCARD_VALUE || target.getItemDamage() == input.getItemDamage() ) ); - } - - public ShapedRecipe setMirrored( final boolean mirror ) - { - this.mirrored = mirror; - return this; - } - - /** - * Returns the input for this recipe, any mod accessing this value should never manipulate the values in this array - * as it will effect the recipe itself. - * - * @return The recipes input vales. - */ - public Object[] getInput() - { - return this.input; - } - - public int getWidth() - { - return this.width; - } - - public int getHeight() - { - return this.height; - } - - public Object[] getIIngredients() - { - return this.input; - } - - @Override - public void bake() throws RegistrationException - { - try - { - this.disable = false; - for( final Object o : this.input ) - { - if( o instanceof IIngredient ) - { - ( (IIngredient) o ).bake(); - } - } - } - catch( final MissingIngredientException err ) - { - this.disable = true; - } - } - - @Override - public NonNullList getRemainingItems( final InventoryCrafting inv ) - { - return ForgeHooks.defaultRecipeGetRemainingItems( inv ); - } -} \ No newline at end of file diff --git a/src/main/java/appeng/recipes/game/ShapelessRecipe.java b/src/main/java/appeng/recipes/game/ShapelessRecipe.java deleted file mode 100644 index 82e6921cd..000000000 --- a/src/main/java/appeng/recipes/game/ShapelessRecipe.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.game; - - -import java.util.ArrayList; - -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.NonNullList; -import net.minecraft.world.World; -import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.oredict.OreDictionary; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.IIngredient; - - -public class ShapelessRecipe extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe, IRecipeBakeable -{ - - private final ArrayList input = new ArrayList<>(); - private ItemStack output = ItemStack.EMPTY; - private boolean disable = false; - - public ShapelessRecipe( final ItemStack result, final Object... recipe ) - { - this.output = result.copy(); - for( final Object in : recipe ) - { - if( in instanceof IIngredient ) - { - this.input.add( in ); - } - else - { - final StringBuilder ret = new StringBuilder( "Invalid shapeless ore recipe: " ); - for( final Object tmp : recipe ) - { - ret.append( tmp ).append( ", " ); - } - ret.append( this.output ); - throw new IllegalArgumentException( ret.toString() ); - } - } - } - - public boolean isEnabled() - { - return !this.disable; - } - - @SuppressWarnings( "unchecked" ) - @Override - public boolean matches( final InventoryCrafting var1, final World world ) - { - if( this.disable ) - { - return false; - } - - final ArrayList required = new ArrayList<>( this.input ); - - for( int x = 0; x < var1.getSizeInventory(); x++ ) - { - final ItemStack slot = var1.getStackInSlot( x ); - - if( !slot.isEmpty() ) - { - boolean inRecipe = false; - - for( final Object next : required ) - { - boolean match = false; - - if( next instanceof IIngredient ) - { - try - { - for( final ItemStack item : ( (IIngredient) next ).getItemStackSet() ) - { - match = match || this.checkItemEquals( item, slot ); - } - } - catch( final RegistrationException e ) - { - // :P - } - catch( final MissingIngredientException e ) - { - // :P - } - } - - if( match ) - { - inRecipe = true; - required.remove( next ); - break; - } - } - - if( !inRecipe ) - { - return false; - } - } - } - - return required.isEmpty(); - } - - @Override - public ItemStack getCraftingResult( final InventoryCrafting var1 ) - { - return this.output.copy(); - } - - @Override - public boolean canFit( int i, int i1 ) - { - return false; - } - - @Override - public ItemStack getRecipeOutput() - { - return this.output; - } - - private boolean checkItemEquals( final ItemStack target, final ItemStack input ) - { - return( target.getItem() == input - .getItem() && ( target.getItemDamage() == OreDictionary.WILDCARD_VALUE || target.getItemDamage() == input.getItemDamage() ) ); - } - - /** - * Returns the input for this recipe, any mod accessing this value should never manipulate the values in this array - * as it will effect the recipe itself. - * - * @return The recipes input vales. - */ - public ArrayList getInput() - { - return this.input; - } - - @Override - public void bake() throws RegistrationException - { - try - { - this.disable = false; - for( final Object o : this.input ) - { - if( o instanceof IIngredient ) - { - ( (IIngredient) o ).bake(); - } - } - } - catch( final MissingIngredientException e ) - { - this.disable = true; - } - } - - @Override - public NonNullList getRemainingItems( final InventoryCrafting inv ) - { - return ForgeHooks.defaultRecipeGetRemainingItems( inv ); - } -} \ No newline at end of file diff --git a/src/main/java/appeng/recipes/handlers/Crusher.java b/src/main/java/appeng/recipes/handlers/Crusher.java deleted file mode 100644 index 490f5d64d..000000000 --- a/src/main/java/appeng/recipes/handlers/Crusher.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import net.minecraft.item.ItemStack; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.core.AELog; -import appeng.integration.Integrations; -import appeng.integration.abstraction.IRC; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class Crusher implements ICraftHandler, IWebsiteSerializer -{ - - private IIngredient pro_input; - private IIngredient[] pro_output; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( input.size() == 1 && output.size() == 1 ) - { - final int outs = output.get( 0 ).size(); - if( input.get( 0 ).size() == 1 && outs == 1 ) - { - this.pro_input = input.get( 0 ).get( 0 ); - this.pro_output = output.get( 0 ).toArray( new IIngredient[outs] ); - return; - } - } - throw new RecipeException( "Crusher must have a single input, and single output." ); - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - final IRC rc = Integrations.rc(); - for( final ItemStack is : this.pro_input.getItemStackSet() ) - { - try - { - rc.rockCrusher( is, this.pro_output[0].getItemStack() ); - } - catch( final java.lang.RuntimeException err ) - { - AELog.info( "RC not happy - " + err.getMessage() ); - } - } - } - - @Override - public String getPattern( final RecipeHandler h ) - { - return null; - } - - @Override - public boolean canCraft( final ItemStack output ) throws RegistrationException, MissingIngredientException - { - return Platform.itemComparisons().isSameItem( this.pro_output[0].getItemStack(), output ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/Grind.java b/src/main/java/appeng/recipes/handlers/Grind.java deleted file mode 100644 index dd6c9fe35..000000000 --- a/src/main/java/appeng/recipes/handlers/Grind.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import net.minecraft.item.ItemStack; - -import appeng.api.AEApi; -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.features.IGrinderRecipe; -import appeng.api.features.IGrinderRecipeBuilder; -import appeng.api.features.IGrinderRegistry; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class Grind implements ICraftHandler, IWebsiteSerializer -{ - - private IIngredient pro_input; - private IIngredient[] pro_output; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( input.size() == 1 && output.size() == 1 ) - { - final int outs = output.get( 0 ).size(); - if( input.get( 0 ).size() == 1 && outs == 1 ) - { - this.pro_input = input.get( 0 ).get( 0 ); - this.pro_output = output.get( 0 ).toArray( new IIngredient[outs] ); - return; - } - } - throw new RecipeException( "Grind must have a single input, and single output." ); - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - for( final ItemStack is : this.pro_input.getItemStackSet() ) - { - final IGrinderRegistry grinderRegistry = AEApi.instance().registries().grinder(); - final IGrinderRecipeBuilder builder = grinderRegistry.builder(); - final IGrinderRecipe grinderRecipe = builder.withInput( is ) - .withOutput( this.pro_output[0].getItemStack() ) - .withTurns( 8 ) - .build(); - - grinderRegistry.addRecipe( grinderRecipe ); - } - } - - @Override - public String getPattern( final RecipeHandler h ) - { - return "grind\n" + h.getName( this.pro_input ) + '\n' + h.getName( this.pro_output[0] ); - } - - @Override - public boolean canCraft( final ItemStack output ) throws RegistrationException, MissingIngredientException - { - return Platform.itemComparisons().isSameItem( this.pro_output[0].getItemStack(), output ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/GrinderHandler.java b/src/main/java/appeng/recipes/handlers/GrinderHandler.java new file mode 100644 index 000000000..d734c8ce6 --- /dev/null +++ b/src/main/java/appeng/recipes/handlers/GrinderHandler.java @@ -0,0 +1,49 @@ + +package appeng.recipes.handlers; + + +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.JsonContext; + +import appeng.api.AEApi; +import appeng.api.features.IGrinderRecipeBuilder; +import appeng.api.features.IGrinderRegistry; +import appeng.recipes.IAERecipeFactory; +import appeng.recipes.factories.recipes.PartRecipeFactory; + + +public class GrinderHandler implements IAERecipeFactory +{ + + @Override + public void register( JsonObject json, JsonContext ctx ) + { + // TODO only primary for now + + JsonObject result = JsonUtils.getJsonObject( json, "result" ); + ItemStack primary = PartRecipeFactory.getResult( result, ctx, "primary" ); + ItemStack[] input = CraftingHelper.getIngredient( json.get( "input" ), ctx ).getMatchingStacks(); + + int turns = 5; + if( json.has( "turns" ) ) + { + turns = JsonUtils.getInt( json, "turns" ); + } + + final IGrinderRegistry reg = AEApi.instance().registries().grinder(); + for( int i = 0; i < input.length; ++i ) + { + final IGrinderRecipeBuilder builder = reg.builder(); + + builder.withOutput( primary ); + builder.withInput( input[i] ); + builder.withTurns( turns ); + + reg.addRecipe( builder.build() ); + } + } +} diff --git a/src/main/java/appeng/recipes/handlers/HCCrusher.java b/src/main/java/appeng/recipes/handlers/HCCrusher.java deleted file mode 100644 index e7aa3af5b..000000000 --- a/src/main/java/appeng/recipes/handlers/HCCrusher.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fml.common.event.FMLInterModComms; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.core.AELog; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class HCCrusher implements ICraftHandler, IWebsiteSerializer -{ - - private IIngredient pro_input; - private IIngredient[] pro_output; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( input.size() == 1 && output.size() == 1 ) - { - final int outs = output.get( 0 ).size(); - if( input.get( 0 ).size() == 1 && outs == 1 ) - { - this.pro_input = input.get( 0 ).get( 0 ); - this.pro_output = output.get( 0 ).toArray( new IIngredient[outs] ); - return; - } - } - throw new RecipeException( "Crusher must have a single input, and single output." ); - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - for( final ItemStack beginStack : this.pro_input.getItemStackSet() ) - { - try - { - final NBTTagCompound toRegister = new NBTTagCompound(); - - final ItemStack endStack = this.pro_output[0].getItemStack(); - - final NBTTagCompound itemFrom = new NBTTagCompound(); - final NBTTagCompound itemTo = new NBTTagCompound(); - - beginStack.writeToNBT( itemFrom ); - endStack.writeToNBT( itemTo ); - - toRegister.setTag( "itemFrom", itemFrom ); - toRegister.setTag( "itemTo", itemTo ); - toRegister.setFloat( "pressureRatio", 1.0F ); - - FMLInterModComms.sendMessage( "HydCraft", "registerCrushingRecipe", toRegister ); - } - catch( final java.lang.RuntimeException err ) - { - AELog.info( "Hydraulicraft not happy - " + err.getMessage() ); - } - } - } - - @Override - public String getPattern( final RecipeHandler h ) - { - return null; - } - - @Override - public boolean canCraft( final ItemStack output ) throws RegistrationException, MissingIngredientException - { - return Platform.itemComparisons().isSameItem( this.pro_output[0].getItemStack(), output ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/Inscribe.java b/src/main/java/appeng/recipes/handlers/Inscribe.java deleted file mode 100644 index 3af0095be..000000000 --- a/src/main/java/appeng/recipes/handlers/Inscribe.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import net.minecraft.item.ItemStack; - -import appeng.api.AEApi; -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.features.IInscriberRecipeBuilder; -import appeng.api.features.InscriberProcessType; - - -/** - * recipe translation for inscribe process - * - * @author AlgorithmX2 - * @author thatsIch - * @version rv2 - * @since rv0 - */ -public final class Inscribe extends InscriberProcess -{ - @Override - public void register() throws RegistrationException, MissingIngredientException - { - if( this.getImprintable() == null ) - { - return; - } - if( this.getOutput() == null ) - { - return; - } - - final IInscriberRecipeBuilder builder = AEApi.instance().registries().inscriber().builder(); - final ItemStack[] realInput = this.getImprintable().getItemStackSet(); - final List inputs = new ArrayList<>( realInput.length ); - Collections.addAll( inputs, realInput ); - final ItemStack output = this.getOutput().getItemStack(); - final InscriberProcessType type = InscriberProcessType.INSCRIBE; - - builder.withInputs( inputs ) - .withOutput( output ) - .withProcessType( type ); - - if( this.getTopOptional() != null && !this.getTopOptional().getItemStack().isEmpty() ) - { - builder.withTopOptional( this.getTopOptional().getItemStack() ); - } - if( this.getBotOptional() != null && !this.getBotOptional().getItemStack().isEmpty() ) - { - builder.withBottomOptional( this.getBotOptional().getItemStack() ); - } - - AEApi.instance().registries().inscriber().addRecipe( builder.build() ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/InscriberHandler.java b/src/main/java/appeng/recipes/handlers/InscriberHandler.java new file mode 100644 index 000000000..dd6962f2d --- /dev/null +++ b/src/main/java/appeng/recipes/handlers/InscriberHandler.java @@ -0,0 +1,71 @@ + +package appeng.recipes.handlers; + + +import java.util.Arrays; +import java.util.List; + +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.JsonContext; + +import appeng.api.AEApi; +import appeng.api.features.IInscriberRecipeBuilder; +import appeng.api.features.IInscriberRegistry; +import appeng.api.features.InscriberProcessType; +import appeng.recipes.IAERecipeFactory; +import appeng.recipes.factories.recipes.PartRecipeFactory; + + +public class InscriberHandler implements IAERecipeFactory +{ + + @Override + public void register( JsonObject json, JsonContext ctx ) + { + ItemStack result = PartRecipeFactory.getResult( json, ctx ); + String mode = JsonUtils.getString( json, "mode" ); + + JsonObject ingredients = JsonUtils.getJsonObject( json, "ingredients" ); + + List middle = Arrays.asList( CraftingHelper.getIngredient( ingredients.get( "middle" ), ctx ).getMatchingStacks() ); + ItemStack[] top = new ItemStack[] { null }; + if( ingredients.has( "top" ) ) + { + top = CraftingHelper.getIngredient( JsonUtils.getJsonObject( ingredients, "top" ), ctx ).getMatchingStacks(); + } + + ItemStack[] bottom = new ItemStack[] { null }; + if( ingredients.has( "bottom" ) ) + { + bottom = CraftingHelper.getIngredient( JsonUtils.getJsonObject( ingredients, "bottom" ), ctx ).getMatchingStacks(); + } + + final IInscriberRegistry reg = AEApi.instance().registries().inscriber(); + for( int i = 0; i < top.length; ++i ) + { + for( int j = 0; j < bottom.length; ++j ) + { + final IInscriberRecipeBuilder builder = reg.builder(); + builder.withOutput( result ); + builder.withProcessType( "press".equals( mode ) ? InscriberProcessType.PRESS : InscriberProcessType.INSCRIBE ); + builder.withInputs( middle ); + + if( top[i] != null ) + { + builder.withTopOptional( top[i] ); + } + if( bottom[j] != null ) + { + builder.withBottomOptional( bottom[j] ); + } + + reg.addRecipe( builder.build() ); + } + } + } + +} diff --git a/src/main/java/appeng/recipes/handlers/InscriberProcess.java b/src/main/java/appeng/recipes/handlers/InscriberProcess.java deleted file mode 100644 index c32724961..000000000 --- a/src/main/java/appeng/recipes/handlers/InscriberProcess.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import javax.annotation.Nullable; - -import net.minecraft.item.ItemStack; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -/** - * basic inscriber process for recipes - * - * @author AlgorithmX2 - * @author thatsIch - * @version rv2 - * @since rv0 - */ -public abstract class InscriberProcess implements ICraftHandler, IWebsiteSerializer -{ - @Nullable - private IIngredient imprintable; - - @Nullable - private IIngredient topOptional; - - @Nullable - private IIngredient botOptional; - - @Nullable - private IIngredient output; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( output.size() == 1 && output.get( 0 ).size() == 1 ) - { - if( input.size() == 1 && input.get( 0 ).size() > 1 ) - { - this.imprintable = input.get( 0 ).get( 0 ); - - this.topOptional = input.get( 0 ).get( 1 ); - - if( input.get( 0 ).size() > 2 ) - { - this.botOptional = input.get( 0 ).get( 2 ); - } - - this.output = output.get( 0 ).get( 0 ); - } - else - { - throw new RecipeException( "Inscriber recipes cannot have rows, and must have more then one input." ); - } - } - else - { - throw new RecipeException( "Inscriber recipes must produce a single output." ); - } - } - - @Override - public boolean canCraft( final ItemStack reqOutput ) throws RegistrationException, MissingIngredientException - { - return this.output != null && Platform.itemComparisons().isSameItem( this.output.getItemStack(), reqOutput ); - } - - @Override - public String getPattern( final RecipeHandler handler ) - { - String pattern = "inscriber "; - - if( this.output != null ) - { - pattern += this.output.getQty() + '\n'; - pattern += handler.getName( this.output ) + '\n'; - } - - if( this.topOptional != null ) - { - pattern += handler.getName( this.topOptional ) + '\n'; - } - - if( this.imprintable != null ) - { - pattern += handler.getName( this.imprintable ); - } - - if( this.botOptional != null ) - { - pattern += '\n' + handler.getName( this.botOptional ); - } - - return pattern; - } - - @Nullable - protected IIngredient getImprintable() - { - return this.imprintable; - } - - @Nullable - protected IIngredient getTopOptional() - { - return this.topOptional; - } - - @Nullable - protected IIngredient getBotOptional() - { - return this.botOptional; - } - - @Nullable - protected IIngredient getOutput() - { - return this.output; - } -} diff --git a/src/main/java/appeng/recipes/handlers/Macerator.java b/src/main/java/appeng/recipes/handlers/Macerator.java deleted file mode 100644 index ff65c429c..000000000 --- a/src/main/java/appeng/recipes/handlers/Macerator.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import net.minecraft.item.ItemStack; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.core.AELog; -import appeng.integration.Integrations; -import appeng.integration.abstraction.IIC2; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class Macerator implements ICraftHandler, IWebsiteSerializer -{ - - private IIngredient pro_input; - private IIngredient[] pro_output; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( input.size() == 1 && output.size() == 1 ) - { - final int outs = output.get( 0 ).size(); - if( input.get( 0 ).size() == 1 && outs == 1 ) - { - this.pro_input = input.get( 0 ).get( 0 ); - this.pro_output = output.get( 0 ).toArray( new IIngredient[outs] ); - return; - } - } - throw new RecipeException( "Grind must have a single input, and single output." ); - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - IIC2 ic2 = Integrations.ic2(); - for( final ItemStack is : this.pro_input.getItemStackSet() ) - { - try - { - ic2.maceratorRecipe( is, this.pro_output[0].getItemStack() ); - } - catch( final java.lang.RuntimeException err ) - { - AELog.info( "IC2 not happy - " + err.getMessage() ); - } - } - } - - @Override - public String getPattern( final RecipeHandler h ) - { - return null; - } - - @Override - public boolean canCraft( final ItemStack output ) throws RegistrationException, MissingIngredientException - { - return Platform.itemComparisons().isSameItem( this.pro_output[0].getItemStack(), output ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/MekCrusher.java b/src/main/java/appeng/recipes/handlers/MekCrusher.java deleted file mode 100644 index a1ddeff74..000000000 --- a/src/main/java/appeng/recipes/handlers/MekCrusher.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import net.minecraft.item.ItemStack; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.core.AELog; -import appeng.integration.Integrations; -import appeng.integration.abstraction.IMekanism; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class MekCrusher implements ICraftHandler, IWebsiteSerializer -{ - - private IIngredient pro_input; - private IIngredient[] pro_output; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( input.size() == 1 && output.size() == 1 ) - { - final int outs = output.get( 0 ).size(); - if( input.get( 0 ).size() == 1 && outs == 1 ) - { - this.pro_input = input.get( 0 ).get( 0 ); - this.pro_output = output.get( 0 ).toArray( new IIngredient[outs] ); - return; - } - } - - throw new RecipeException( "MekCrusher must have a single input, and single output." ); - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - IMekanism mekanism = Integrations.mekanism(); - for( final ItemStack is : this.pro_input.getItemStackSet() ) - { - try - { - mekanism.addCrusherRecipe( is, this.pro_output[0].getItemStack() ); - } - catch( final java.lang.RuntimeException err ) - { - AELog.info( "Mekanism not happy - " + err.getMessage() ); - } - } - } - - @Override - public String getPattern( final RecipeHandler h ) - { - return null; - } - - @Override - public boolean canCraft( final ItemStack output ) throws RegistrationException, MissingIngredientException - { - return Platform.itemComparisons().isSameItem( this.pro_output[0].getItemStack(), output ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/MekEnrichment.java b/src/main/java/appeng/recipes/handlers/MekEnrichment.java deleted file mode 100644 index 969dff3f8..000000000 --- a/src/main/java/appeng/recipes/handlers/MekEnrichment.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import net.minecraft.item.ItemStack; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.core.AELog; -import appeng.integration.Integrations; -import appeng.integration.abstraction.IMekanism; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class MekEnrichment implements ICraftHandler, IWebsiteSerializer -{ - - private IIngredient pro_input; - private IIngredient[] pro_output; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( input.size() == 1 && output.size() == 1 ) - { - final int outs = output.get( 0 ).size(); - if( input.get( 0 ).size() == 1 && outs == 1 ) - { - this.pro_input = input.get( 0 ).get( 0 ); - this.pro_output = output.get( 0 ).toArray( new IIngredient[outs] ); - return; - } - } - throw new RecipeException( "MekCrusher must have a single input, and single output." ); - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - IMekanism mekanism = Integrations.mekanism(); - for( final ItemStack is : this.pro_input.getItemStackSet() ) - { - try - { - mekanism.addEnrichmentChamberRecipe( is, this.pro_output[0].getItemStack() ); - } - catch( final java.lang.RuntimeException err ) - { - AELog.info( "Mekanism not happy - " + err.getMessage() ); - } - } - } - - @Override - public String getPattern( final RecipeHandler h ) - { - return null; - } - - @Override - public boolean canCraft( final ItemStack output ) throws RegistrationException, MissingIngredientException - { - return Platform.itemComparisons().isSameItem( this.pro_output[0].getItemStack(), output ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/OreRegistration.java b/src/main/java/appeng/recipes/handlers/OreRegistration.java deleted file mode 100644 index deb23983e..000000000 --- a/src/main/java/appeng/recipes/handlers/OreRegistration.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; - - -public class OreRegistration implements ICraftHandler -{ - - private final List inputs; - private final String name; - - public OreRegistration( final List in, final String out ) - { - this.inputs = in; - this.name = out; - } - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - for( final IIngredient i : this.inputs ) - { - for( final ItemStack is : i.getItemStackSet() ) - { - OreDictionary.registerOre( this.name, is ); - } - } - } -} diff --git a/src/main/java/appeng/recipes/handlers/Press.java b/src/main/java/appeng/recipes/handlers/Press.java deleted file mode 100644 index fa484547b..000000000 --- a/src/main/java/appeng/recipes/handlers/Press.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import net.minecraft.item.ItemStack; - -import appeng.api.AEApi; -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.features.IInscriberRecipe; -import appeng.api.features.IInscriberRecipeBuilder; -import appeng.api.features.InscriberProcessType; - - -/** - * recipe translation for pressing in the inscriber - * - * @author AlgorithmX2 - * @author thatsIch - * @version rv2 - * @since rv0 - */ -public final class Press extends InscriberProcess -{ - @Override - public void register() throws RegistrationException, MissingIngredientException - { - if( this.getImprintable() == null ) - { - return; - } - if( this.getOutput() == null ) - { - return; - } - - final IInscriberRecipeBuilder builder = AEApi.instance().registries().inscriber().builder(); - final ItemStack[] realInput = this.getImprintable().getItemStackSet(); - final List inputs = new ArrayList<>( realInput.length ); - Collections.addAll( inputs, realInput ); - final ItemStack top = ( this.getTopOptional() == null ) ? ItemStack.EMPTY : this.getTopOptional().getItemStack(); - final ItemStack bot = ( this.getBotOptional() == null ) ? ItemStack.EMPTY : this.getBotOptional().getItemStack(); - final ItemStack output = this.getOutput().getItemStack(); - final InscriberProcessType type = InscriberProcessType.PRESS; - - final IInscriberRecipe recipe = builder.withInputs( inputs ) - .withOutput( output ) - .withTopOptional( top ) - .withBottomOptional( bot ) - .withProcessType( type ) - .build(); - - AEApi.instance().registries().inscriber().addRecipe( recipe ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/Pulverizer.java b/src/main/java/appeng/recipes/handlers/Pulverizer.java deleted file mode 100644 index ad700d189..000000000 --- a/src/main/java/appeng/recipes/handlers/Pulverizer.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fml.common.event.FMLInterModComms; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class Pulverizer implements ICraftHandler, IWebsiteSerializer -{ - - private IIngredient pro_input; - private IIngredient[] pro_output; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( input.size() == 1 && output.size() == 1 ) - { - final int outs = output.get( 0 ).size(); - if( input.get( 0 ).size() == 1 && outs == 1 ) - { - this.pro_input = input.get( 0 ).get( 0 ); - this.pro_output = output.get( 0 ).toArray( new IIngredient[outs] ); - return; - } - } - throw new RecipeException( "Grind must have a single input, and single output." ); - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - final NBTTagCompound toSend = new NBTTagCompound(); - toSend.setInteger( "energy", 800 ); - toSend.setTag( "primaryOutput", new NBTTagCompound() ); - - this.pro_output[0].getItemStack().writeToNBT( toSend.getCompoundTag( "primaryOutput" ) ); - - for( final ItemStack is : this.pro_input.getItemStackSet() ) - { - toSend.setTag( "input", new NBTTagCompound() ); - is.writeToNBT( toSend.getCompoundTag( "input" ) ); - FMLInterModComms.sendMessage( "ThermalExpansion", "PulverizerRecipe", toSend ); - } - } - - @Override - public String getPattern( final RecipeHandler h ) - { - return null; - } - - @Override - public boolean canCraft( final ItemStack output ) throws RegistrationException, MissingIngredientException - { - return Platform.itemComparisons().isSameItem( this.pro_output[0].getItemStack(), output ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/Shaped.java b/src/main/java/appeng/recipes/handlers/Shaped.java deleted file mode 100644 index 54735fe06..000000000 --- a/src/main/java/appeng/recipes/handlers/Shaped.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.core.AELog; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class Shaped implements ICraftHandler, IWebsiteSerializer -{ - - private List> inputs; - private IIngredient output; - private int rows; - private int cols; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( output.size() == 1 && output.get( 0 ).size() == 1 ) - { - this.rows = input.size(); - if( this.rows > 0 && input.size() <= 3 ) - { - this.cols = input.get( 0 ).size(); - if( this.cols <= 3 && this.cols >= 1 ) - { - for( final List anInput : input ) - { - if( anInput.size() != this.cols ) - { - throw new RecipeException( "all rows in a shaped crafting recipe must contain the same number of ingredients." ); - } - } - - this.inputs = input; - this.output = output.get( 0 ).get( 0 ); - } - else - { - throw new RecipeException( "Crafting recipes must have 1-3 columns." ); - } - } - else - { - throw new RecipeException( "shaped crafting recipes must have 1-3 rows." ); - } - } - else - { - throw new RecipeException( "Crafting must produce a single output." ); - } - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - char first = 'A'; - final List args = new ArrayList<>(); - - for( int y = 0; y < this.rows; y++ ) - { - final StringBuilder row = new StringBuilder(); - for( int x = 0; x < this.cols; x++ ) - { - if( this.inputs.get( y ).get( x ).isAir() ) - { - row.append( ' ' ); - } - else - { - row.append( first ); - args.add( first ); - args.add( this.inputs.get( y ).get( x ) ); - - first++; - } - } - args.add( y, row.toString() ); - } - - final ItemStack outIS = this.output.getItemStack(); - - try - { - // TODO : 1.12 Cleanup/remove the old recipe loader. - // Registration.addRecipeToRegister( new ShapedRecipe( outIS, args.toArray( new Object[args.size()] ) ) ); - } - catch( final Throwable e ) - { - AELog.debug( e ); - throw new RegistrationException( "Error while adding shaped recipe." ); - } - } - - @Override - public String getPattern( final RecipeHandler h ) - { - String o = "shaped " + this.output.getQty() + ' ' + this.cols + 'x' + this.rows + '\n'; - - o += h.getName( this.output ) + '\n'; - - for( int y = 0; y < this.rows; y++ ) - { - for( int x = 0; x < this.cols; x++ ) - { - final IIngredient i = this.inputs.get( y ).get( x ); - - if( i.isAir() ) - { - o += "air" + ( x + 1 == this.cols ? "\n" : " " ); - } - else - { - o += h.getName( i ) + ( x + 1 == this.cols ? "\n" : " " ); - } - } - } - - return o.trim(); - } - - @Override - public boolean canCraft( final ItemStack reqOutput ) throws RegistrationException, MissingIngredientException - { - for( int y = 0; y < this.rows; y++ ) - { - for( int x = 0; x < this.cols; x++ ) - { - final IIngredient i = this.inputs.get( y ).get( x ); - - if( !i.isAir() ) - { - for( final ItemStack r : i.getItemStackSet() ) - { - if( Platform.itemComparisons().isSameItem( r, reqOutput ) ) - { - return false; - } - } - } - } - } - - return Platform.itemComparisons().isSameItem( this.output.getItemStack(), reqOutput ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/Shapeless.java b/src/main/java/appeng/recipes/handlers/Shapeless.java deleted file mode 100644 index 9b7251e25..000000000 --- a/src/main/java/appeng/recipes/handlers/Shapeless.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.core.AELog; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class Shapeless implements ICraftHandler, IWebsiteSerializer -{ - - private List inputs; - private IIngredient output; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( output.size() == 1 && output.get( 0 ).size() == 1 ) - { - if( input.size() == 1 ) - { - this.inputs = input.get( 0 ); - this.output = output.get( 0 ).get( 0 ); - } - else - { - throw new RecipeException( "Shapeless crafting recipes cannot have rows." ); - } - } - else - { - throw new RecipeException( "Crafting must produce a single output." ); - } - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - final List args = new ArrayList<>(); - for( final IIngredient i : this.inputs ) - { - args.add( i ); - } - - final ItemStack outIS = this.output.getItemStack(); - - try - { - // TODO : 1.12 Cleanup/remove the old recipe loader. - // Registration.addRecipeToRegister( new ShapelessRecipe( outIS, args.toArray( new Object[args.size()] ) ) - // ); - } - catch( final Throwable e ) - { - AELog.debug( e ); - throw new RegistrationException( "Error while adding shapeless recipe." ); - } - } - - @Override - public String getPattern( final RecipeHandler h ) - { - final StringBuilder o = new StringBuilder( "shapeless " + this.output.getQty() + '\n' ); - - o.append( h.getName( this.output ) ).append( '\n' ); - - for( int y = 0; y < this.inputs.size(); y++ ) - { - final IIngredient i = this.inputs.get( y ); - - if( i.isAir() ) - { - o.append( "air" ); - } - else - { - o.append( h.getName( i ) ); - } - - if( y + 1 == this.inputs.size() ) - { - o.append( '\n' ); - } - else - { - o.append( ' ' ); - } - } - - return o.toString().trim(); - } - - @Override - public boolean canCraft( final ItemStack reqOutput ) throws RegistrationException, MissingIngredientException - { - - for( final IIngredient i : this.inputs ) - { - if( !i.isAir() ) - { - for( final ItemStack r : i.getItemStackSet() ) - { - if( Platform.itemComparisons().isSameItem( r, reqOutput ) ) - { - return false; - } - } - } - } - - return Platform.itemComparisons().isSameItem( this.output.getItemStack(), reqOutput ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/Smelt.java b/src/main/java/appeng/recipes/handlers/Smelt.java deleted file mode 100644 index 6dda9f38b..000000000 --- a/src/main/java/appeng/recipes/handlers/Smelt.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.handlers; - - -import java.util.List; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.registry.GameRegistry; - -import appeng.api.exceptions.MissingIngredientException; -import appeng.api.exceptions.RecipeException; -import appeng.api.exceptions.RegistrationException; -import appeng.api.recipes.ICraftHandler; -import appeng.api.recipes.IIngredient; -import appeng.recipes.RecipeHandler; -import appeng.util.Platform; - - -public class Smelt implements ICraftHandler, IWebsiteSerializer -{ - - private IIngredient in; - private IIngredient out; - - @Override - public void setup( final List> input, final List> output ) throws RecipeException - { - if( input.size() == 1 && output.size() == 1 ) - { - final List inputList = input.get( 0 ); - final List outputList = output.get( 0 ); - if( inputList.size() == 1 && outputList.size() == 1 ) - { - this.in = inputList.get( 0 ); - this.out = outputList.get( 0 ); - return; - } - } - throw new RecipeException( "Smelting recipe can only have a single input and output." ); - } - - @Override - public void register() throws RegistrationException, MissingIngredientException - { - if( this.in.getItemStack().getItem() == Items.AIR ) - { - throw new RegistrationException( this.in.toString() + ": Smelting Input is not a valid item." ); - } - - if( this.out.getItemStack().getItem() == Items.AIR ) - { - throw new RegistrationException( this.out.toString() + ": Smelting Output is not a valid item." ); - } - - GameRegistry.addSmelting( this.in.getItemStack(), this.out.getItemStack(), 0 ); - } - - @Override - public String getPattern( final RecipeHandler h ) - { - return "smelt " + this.out.getQty() + '\n' + h.getName( this.out ) + '\n' + h.getName( this.in ); - } - - @Override - public boolean canCraft( final ItemStack reqOutput ) throws RegistrationException, MissingIngredientException - { - return Platform.itemComparisons().isSameItem( this.out.getItemStack(), reqOutput ); - } -} diff --git a/src/main/java/appeng/recipes/handlers/SmeltingHandler.java b/src/main/java/appeng/recipes/handlers/SmeltingHandler.java new file mode 100644 index 000000000..0dc466bc8 --- /dev/null +++ b/src/main/java/appeng/recipes/handlers/SmeltingHandler.java @@ -0,0 +1,36 @@ + +package appeng.recipes.handlers; + + +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.JsonContext; +import net.minecraftforge.fml.common.registry.GameRegistry; + +import appeng.recipes.IAERecipeFactory; +import appeng.recipes.factories.recipes.PartRecipeFactory; + + +public class SmeltingHandler implements IAERecipeFactory +{ + @Override + public void register( JsonObject json, JsonContext ctx ) + { + ItemStack result = PartRecipeFactory.getResult( json, ctx ); + ItemStack[] input = CraftingHelper.getIngredient( json.get( "input" ), ctx ).getMatchingStacks(); + float xp = 0.0f; + if( json.has( "xp" ) ) + { + xp = JsonUtils.getFloat( json, "xp" ); + } + + for( int i = 0; i < input.length; ++i ) + { + GameRegistry.addSmelting( input[i], result, xp ); + } + } + +} diff --git a/src/main/java/appeng/recipes/loader/ConfigLoader.java b/src/main/java/appeng/recipes/loader/ConfigLoader.java deleted file mode 100644 index a97ec89a3..000000000 --- a/src/main/java/appeng/recipes/loader/ConfigLoader.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.loader; - - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStreamReader; - -import javax.annotation.Nonnull; - -import com.google.common.base.Preconditions; - -import appeng.api.recipes.IRecipeLoader; - - -/** - * Loads the recipes from the config folder - */ -public final class ConfigLoader implements IRecipeLoader -{ - private final File generatedRecipesDir; - private final File userRecipesDir; - - public ConfigLoader( final File generatedRecipesDir, final File userRecipesDir ) - { - this.generatedRecipesDir = generatedRecipesDir; - this.userRecipesDir = userRecipesDir; - } - - @Override - public BufferedReader getFile( @Nonnull final String relativeFilePath ) throws Exception - { - Preconditions.checkNotNull( relativeFilePath ); - Preconditions.checkArgument( !relativeFilePath.isEmpty(), "Supplying an empty String will result creating a reader of a folder." ); - - final File generatedFile = new File( this.generatedRecipesDir, relativeFilePath ); - final File userFile = new File( this.userRecipesDir, relativeFilePath ); - - final File toBeLoaded = ( userFile.exists() && userFile.isFile() ) ? userFile : generatedFile; - - return new BufferedReader( new InputStreamReader( new FileInputStream( toBeLoaded ), "UTF-8" ) ); - } -} diff --git a/src/main/java/appeng/recipes/loader/JarLoader.java b/src/main/java/appeng/recipes/loader/JarLoader.java deleted file mode 100644 index dee71cdf8..000000000 --- a/src/main/java/appeng/recipes/loader/JarLoader.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.loader; - - -import java.io.BufferedReader; -import java.io.InputStreamReader; - -import javax.annotation.Nonnull; - -import com.google.common.base.Preconditions; - -import appeng.api.recipes.IRecipeLoader; - - -public class JarLoader implements IRecipeLoader -{ - - private final String rootPath; - - public JarLoader( final String s ) - { - this.rootPath = s; - } - - @Override - public BufferedReader getFile( @Nonnull final String s ) throws Exception - { - Preconditions.checkNotNull( s ); - Preconditions.checkArgument( !s.isEmpty() ); - - return new BufferedReader( new InputStreamReader( this.getClass().getResourceAsStream( this.rootPath + s ), "UTF-8" ) ); - } -} diff --git a/src/main/java/appeng/recipes/loader/RecipeResourceCopier.java b/src/main/java/appeng/recipes/loader/RecipeResourceCopier.java deleted file mode 100644 index 793566c47..000000000 --- a/src/main/java/appeng/recipes/loader/RecipeResourceCopier.java +++ /dev/null @@ -1,265 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.recipes.loader; - - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.Collection; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.annotation.Nonnull; - -import com.google.common.base.Preconditions; - -import org.apache.commons.io.FileUtils; - - -/** - * copies recipes in jars onto file system includes the readme, needs to be modified if other files needs to be handled - * - * @author thatsIch - * @version rv3 - 11.05.2015 - * @since rv3 11.05.2015 - */ -public class RecipeResourceCopier -{ - /** - * Most expected size of recipes found - */ - private static final int INITIAL_RESOURCE_CAPACITY = 20; - private static final Pattern DOT_COMPILE_PATTERN = Pattern.compile( ".", Pattern.LITERAL ); - private static final String FILE_PROTOCOL = "file"; - private static final String CLASS_EXTENSION = ".class"; - private static final String JAR_PROTOCOL = "jar"; - - /** - * copy source in the jar - */ - private final String root; - - /** - * @param root source root folder of the recipes inside the jar. - * - * @throws NullPointerException if root is null - */ - public RecipeResourceCopier( @Nonnull final String root ) - { - Preconditions.checkNotNull( root ); - - this.root = root; - } - - /** - * copies recipes found in the root to destination. - * - * @param identifier only copy files which end with the identifier - * @param destination destination folder to which the recipes are copied to - * - * @throws URISyntaxException {@see #getResourceListing} - * @throws IOException {@see #getResourceListing} and if copying the detected resource to file is not possible - * @throws NullPointerException if either parameter is null - * @throws IllegalArgumentException if destination is not a directory - */ - public void copyTo( @Nonnull final String identifier, @Nonnull final File destination ) throws URISyntaxException, IOException - { - Preconditions.checkNotNull( destination ); - Preconditions.checkArgument( destination.isDirectory() ); - - this.copyTo( identifier, destination, this.root ); - } - - /** - * @param destination destination folder to which the recipes are copied to - * @param directory the folder to copy. - * - * @throws URISyntaxException {@see #getResourceListing} - * @throws IOException {@see #getResourceListing} and if copying the detected resource to file is not possible - * @see {RecipeResourceCopier#copyTo(File)} - */ - private void copyTo( @Nonnull final String identifier, @Nonnull final File destination, @Nonnull final String directory ) throws URISyntaxException, IOException - { - assert identifier != null; - assert destination != null; - assert directory != null; - - final Class copierClass = this.getClass(); - final String[] listing = this.getResourceListing( copierClass, directory ); - for( final String list : listing ) - { - if( list.endsWith( identifier ) ) - { - // generate folder before the file is copied so no empty folders will be generated - FileUtils.forceMkdir( destination ); - - this.copyFile( destination, directory, list ); - } - else if( !list.contains( "." ) ) - { - final File subDirectory = new File( destination, list ); - - this.copyTo( identifier, subDirectory, directory + list + "/" ); - } - } - } - - /** - * Copies a single file inside a folder to the destination. - * - * @param destination folder to which the file is copied to - * @param directory the directory containing the file - * @param fileName the file to copy - * - * @throws IOException if copying the file is not possible - */ - private void copyFile( @Nonnull final File destination, @Nonnull final String directory, @Nonnull final String fileName ) throws IOException - { - assert destination != null; - assert directory != null; - assert fileName != null; - - final Class copierClass = this.getClass(); - final InputStream inStream = copierClass.getResourceAsStream( '/' + directory + fileName ); - final File outFile = new File( destination, fileName ); - - if( !outFile.exists() && inStream != null ) - { - FileUtils.copyInputStreamToFile( inStream, outFile ); - inStream.close(); - } - } - - /** - * List directory contents for a resource folder. Not recursive. This is basically a brute-force implementation. - * Works for regular files and also JARs. - * - * @param clazz Any java class that lives in the same place as the resources you want. - * @param path Should end with "/", but not start with one. - * - * @return Just the name of each member item, not the full paths. - * - * @throws URISyntaxException if it is a file path and the URL can not be converted to URI - * @throws IOException if jar path can not be decoded - * @throws UnsupportedOperationException if it is neither in jar nor in file path - */ - @Nonnull - private String[] getResourceListing( @Nonnull final Class clazz, @Nonnull final String path ) throws URISyntaxException, IOException - { - assert clazz != null; - assert path != null; - - final ClassLoader classLoader = clazz.getClassLoader(); - if( classLoader == null ) - { - throw new IllegalStateException( "ClassLoader was not found. It was probably loaded at a inappropriate time" ); - } - - URL dirURL = classLoader.getResource( path ); - if( dirURL != null ) - { - final String protocol = dirURL.getProtocol(); - if( protocol.equals( FILE_PROTOCOL ) ) - { - // A file path: easy enough - - final URI uriOfURL = dirURL.toURI(); - final File fileOfURI = new File( uriOfURL ); - final String[] filesAndDirectoriesOfURI = fileOfURI.list(); - - if( filesAndDirectoriesOfURI == null ) - { - throw new IllegalStateException( "Files and Directories were illegal. Either an abstract pathname does not denote a directory, or an I/O error occured." ); - } - else - { - return filesAndDirectoriesOfURI; - } - } - } - - if( dirURL == null ) - { - - /* - * In case of a jar file, we can't actually find a directory. - * Have to assume the same jar as clazz. - */ - final String className = clazz.getName(); - final Matcher matcher = DOT_COMPILE_PATTERN.matcher( className ); - final String me = matcher.replaceAll( "/" ) + CLASS_EXTENSION; - dirURL = classLoader.getResource( me ); - } - - if( dirURL != null ) - { - - final String protocol = dirURL.getProtocol(); - if( protocol.equals( JAR_PROTOCOL ) ) - { - /* A JAR path */ - final String dirPath = dirURL.getPath(); - final String jarPath = dirPath.substring( 0, dirPath.indexOf( '!' ) ); // strip out only - // the JAR file - final JarFile jar = new JarFile( new File( new URI( jarPath ) ) ); - try - { - final Enumeration entries = jar.entries(); // gives ALL entries in jar - final Collection result = new HashSet<>( INITIAL_RESOURCE_CAPACITY ); // avoid - // duplicates - - // in case it is a - // subdirectory - while( entries.hasMoreElements() ) - { - final JarEntry entry = entries.nextElement(); - final String entryFullName = entry.getName(); - if( entryFullName.startsWith( path ) ) - { // filter according to the path - String entryName = entryFullName.substring( path.length() ); - final int checkSubDir = entryName.indexOf( '/' ); - if( checkSubDir >= 0 ) - { - // if it is a subdirectory, we just return the directory name - entryName = entryName.substring( 0, checkSubDir ); - } - result.add( entryName ); - } - } - - return result.toArray( new String[result.size()] ); - } - finally - { - jar.close(); - } - } - } - - throw new UnsupportedOperationException( "Cannot list files for URL " + dirURL ); - } -} diff --git a/src/main/java/appeng/recipes/ores/OreDictionaryHandler.java b/src/main/java/appeng/recipes/ores/OreDictionaryHandler.java index 3b05d50e4..a294df76d 100644 --- a/src/main/java/appeng/recipes/ores/OreDictionaryHandler.java +++ b/src/main/java/appeng/recipes/ores/OreDictionaryHandler.java @@ -24,12 +24,8 @@ import java.util.List; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.registry.ForgeRegistries; import net.minecraftforge.oredict.OreDictionary; -import appeng.core.AELog; -import appeng.recipes.game.IRecipeBakeable; - public class OreDictionaryHandler { @@ -38,8 +34,6 @@ public class OreDictionaryHandler private final List oreListeners = new ArrayList<>(); - private boolean enableRebaking = false; - @SubscribeEvent public void onOreDictionaryRegister( final OreDictionary.OreRegisterEvent event ) { @@ -55,11 +49,6 @@ public class OreDictionaryHandler v.oreRegistered( event.getName(), event.getOre() ); } } - - if( this.enableRebaking ) - { - this.bakeRecipes(); - } } /** @@ -74,26 +63,6 @@ public class OreDictionaryHandler return true; } - public void bakeRecipes() - { - this.enableRebaking = true; - - for( final Object o : ForgeRegistries.RECIPES.getValues() ) - { - if( o instanceof IRecipeBakeable ) - { - try - { - ( (IRecipeBakeable) o ).bake(); - } - catch( final Throwable e ) - { - AELog.debug( e ); - } - } - } - } - /** * Adds a new IOreListener and immediately notifies it of any previous ores, any ores added latter will be added at * that point. diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/README.html b/src/main/resources/assets/appliedenergistics2/aerecipes/README.html deleted file mode 100644 index 0234fd432..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/README.html +++ /dev/null @@ -1,348 +0,0 @@ - - - - - Custom Recipes - - - - -
- - -
- - -

Introduction

-

This file is the README of Applied Energistics 2 for Custom Recipes. Applied Energistics 2 is extremely configurable and supports 100% customize-able - recipes if desired. This page will direct you on how to get started. The entry file for the recipe system is index.recipe.

- -

Auto-Generation

-

AE2 will generate 2 folders in your AE2 configuration folder config/AppliedEneristics2/. One is generated-recipes/ and the other is user-recipes/. Recipes will be automatically exported from AE2 into generated-recipes/ on every start-up containing always the latest valid recipes.

-
- You require file system permissions to generate the folders. Recipes will be loaded directly from AE2 if user has no permissions. -
- - -

Recipe Modification

-

You can modify the recipes by copying over the recipes from generated-recipes/ into user-recipes/. You do not need to copy over all files, but the ones you will be changing. AE2 will prefer loading a user recipe if one would replace a generated recipe.

-

That way changed recipes by us are not overwriting your modified files.

- -

Item References

-

In Minecraft each item is referenced by a namespace and a name, for example all of minecrafts items use the namespace minecraft. A glass block would be minecraft:glass.

-

The recipe system also exposes access to the oredictionary via a namespace, so you can use oredictionary:glass to use any type of glass.

- -

Recipe Types

-

Different recipe types are there to interface with specific machines or mods. Use a , to add a new row to the recipe.

- -

Shapeless

-
    -
  • crafted in a minecraft crafting table
  • -
  • can take any shape as long as the inputs are correct
  • -
  • takes up to 9 items as input
  • -
  • outputs a single item as output, optionally with quantity
  • -
  • Example: Log -> Planks recipe
  • -
  • - AE2:
    - shapeless = minecraft:log -> 4 minecraft:planks -
  • -
- -

Shaped

-
    -
  • crafted in a minecraft crafting table
  • -
  • requires the specific shape
  • -
  • takes up to 9 items as input
  • -
  • outputs a single item as output, optionally with quantity
  • -
  • Example: 8 Cobblestone -> Furnace recipe
  • -
  • - AE2: -
    shaped =
    -    minecraft:cobblestone minecraft:cobblestone minecraft:cobblestone,
    -    minecraft:cobblestone _                     minecraft:cobblestone,
    -    minecraft:cobblestone minecraft:cobblestone minecraft:cobblestone
    -    -> minecraft:furnace
    -
  • -
- -

Smelt

-
    -
  • items to be burned in furnaces
  • -
  • takes 1 item as input
  • -
  • takes 1 item as output, optionally with quantity
  • -
  • Example: Log -> Charcoal recipe
  • -
  • - AE2:
    - smelt = minecraft:log -> minecraft:coal:1 -
  • -
- -

Grind

-
    -
  • items to be grinded in the grindstone
  • -
  • takes 1 item as input
  • -
  • takes 1 item as output, optionally with quantity
  • -
  • Example: Gravel -> Flint recipe
  • -
  • - AE2:
    - grind = minecraft:gravel -> minecraft:flint -
  • -
- -

Grindfz

-

Same as grind for Factorization Grinder

- -

Mekcrusher

-

Same as grind for Mekanism Crusher

- -

Mekechamber

-

Same as grind for Mekanism Enrichment Chamber

- -

Hccrusher

-

Same as grind for HydrauliCraft Crusher

- -

Crusher

-

Same as grind for RailCraft Crusher

- -

Macerator

-

Same as grind for IndustrialCraft Macerator

- -

Pulverizer

-

Same as grind for Thermal Expansion Pulverizer

- -

Inscribe

-
    -
  • used in the AE2 Inscriber
  • -
  • takes 2 or 3 items as input, first item is the center item
  • -
  • takes 1 item as output, optionally with quantity
  • -
  • center item is consumed
  • -
  • - Example: duplicate logic processor plate
    - Iron Block + Logic Processor Plate -> Logic Processor Plate -
  • -
  • - AE2: -
    inscribe =
    -    minecraft:iron_block
    -    appliedenergistics2:ItemMaterial.LogicProcessorPress
    -    -> appliedenergistics2:ItemMaterial.LogicProcessorPress
    -
  • -
- -

Press

-
    -
  • used in the AE2 Inscriber
  • -
  • takes 2 or 3 items as input, first item is the center item
  • -
  • takes 1 item as output, optionally with quantity
  • -
  • all items are consumed
  • -
  • - Example: create logic processor
    - Redstone + logic processor print + silicon print -> logic processor -
  • -
  • - AE2: -
    press =
    -    minecraft:redstone
    -    appliedenergistics2:ItemMaterial.LogicProcessorPrint
    -    appliedenergistics2:ItemMaterial.SiliconPrint
    -    -> appliedenergistics2:ItemMaterial.LogicProcessor
    -
  • -
- -

Recipe Function

-

Adds convenience for easier recipe management.

- -

Alias

-
    -
  • creates a shorthand for a longer value
  • -
  • - AE2: alias appliedenergistics2 to ae2
    - alias = ae2 -> appliedenergistics2 -
  • -
  • appliedenergistics2:ItemMaterial.LogicProcessorPrint could be aliased to ae2:ItemMaterial.LogicProcessorPrint
  • -
- -

Ore

-
    -
  • lets you add items into an ore dictionary value.
  • -
  • - AE2: add minecraft wool to OreDictionary as blockWool
    - ore = minecraft:wool:* -> blockWool -
  • -
  • oredictioned items can be accessed as oredictionary:blockWool for example
  • -
- -

Group

-
    -
  • lets you create a item group for 1 or more inputs
  • -
  • - Example: define a common group for both different AE2 interfaces
    - Block Interface + Part Interface = Interface -
  • -
  • - AE2:
    - group = ae2:BlockInterface ae2:ItemPart.Interface -> interface -
  • -
  • - This also enables shortening annoying names for example
    - group = ae2:ToolNetherQuartzWrench -> wrench -
  • -
- -

Import

-
    -
  • lets you load an additional recipe file
  • -
  • this works with subdirectories, but the path needs to be always a relative path to the root recipe directory
  • -
  • - AE2: import all recipes for stairs
    - import = stairs.recipe -
  • -
  • Any knowledge through alias, ore, group are carried over to the imported file
  • -
- - - - - - - -
-
- - \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/aliases.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/aliases.recipe deleted file mode 100644 index 614a6fe7a..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/aliases.recipe +++ /dev/null @@ -1,2 +0,0 @@ -alias=mc -> minecraft -alias=ae2 -> appliedenergistics2 \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/certus.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/certus.recipe deleted file mode 100644 index f47d11520..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/certus.recipe +++ /dev/null @@ -1,8 +0,0 @@ -shaped= - ae2:quartz_block, - ae2:quartz_block - -> 2 ae2:quartz_pillar - -shaped= - ae2:quartz_block ae2:quartz_block - -> 2 ae2:chiseled_quartz_block diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/crystals.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/crystals.recipe deleted file mode 100644 index 34397bd5b..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/crystals.recipe +++ /dev/null @@ -1,30 +0,0 @@ -# Raw Storage Blocks -shaped= - oredictionary:crystalCertusQuartz oredictionary:crystalCertusQuartz, - oredictionary:crystalCertusQuartz oredictionary:crystalCertusQuartz - -> ae2:quartz_block - -shaped= - oredictionary:crystalFluix oredictionary:crystalFluix, - oredictionary:crystalFluix oredictionary:crystalFluix - -> ae2:fluix_block - - -# Pure Storage Blocks -shaped= - ae2:material.PurifiedNetherQuartzCrystal ae2:material.PurifiedNetherQuartzCrystal ae2:material.PurifiedNetherQuartzCrystal, - ae2:material.PurifiedNetherQuartzCrystal _ ae2:material.PurifiedNetherQuartzCrystal, - ae2:material.PurifiedNetherQuartzCrystal ae2:material.PurifiedNetherQuartzCrystal ae2:material.PurifiedNetherQuartzCrystal - -> mc:quartz_block - -shaped= - ae2:material.PurifiedCertusQuartzCrystal ae2:material.PurifiedCertusQuartzCrystal ae2:material.PurifiedCertusQuartzCrystal, - ae2:material.PurifiedCertusQuartzCrystal _ ae2:material.PurifiedCertusQuartzCrystal, - ae2:material.PurifiedCertusQuartzCrystal ae2:material.PurifiedCertusQuartzCrystal ae2:material.PurifiedCertusQuartzCrystal - -> ae2:quartz_block - -shaped= - ae2:material.PurifiedFluixCrystal ae2:material.PurifiedFluixCrystal ae2:material.PurifiedFluixCrystal, - ae2:material.PurifiedFluixCrystal _ ae2:material.PurifiedFluixCrystal, - ae2:material.PurifiedFluixCrystal ae2:material.PurifiedFluixCrystal ae2:material.PurifiedFluixCrystal - -> ae2:fluix_block diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/fixtures.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/fixtures.recipe deleted file mode 100644 index 5af69cd39..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/fixtures.recipe +++ /dev/null @@ -1,7 +0,0 @@ -shaped= - ae2:material.CertusQuartzCrystalCharged mc:iron_ingot - -> 2 ae2:quartz_fixture - -shaped= - netherCrystal mc:iron_ingot - -> ae2:light_detector diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/index.recipe deleted file mode 100644 index 5b79d2a13..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/index.recipe +++ /dev/null @@ -1,7 +0,0 @@ -import=decorative/certus.recipe -import=decorative/crystals.recipe -import=decorative/fixtures.recipe -import=decorative/quartzglass.recipe -import=decorative/skystone.recipe -import=decorative/slabs.recipe -import=decorative/stairs.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/quartzglass.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/quartzglass.recipe deleted file mode 100644 index 3c5d66578..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/quartzglass.recipe +++ /dev/null @@ -1,9 +0,0 @@ -shaped= - dustQuartz glass dustQuartz, - glass dustQuartz glass, - dustQuartz glass dustQuartz - -> 4 ae2:quartz_glass - -shaped= - mc:glowstone_dust ae2:quartz_glass mc:glowstone_dust - -> ae2:quartz_vibrant_glass diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/skystone.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/skystone.recipe deleted file mode 100644 index 2f58de316..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/skystone.recipe +++ /dev/null @@ -1,11 +0,0 @@ -smelt= - ae2:sky_stone_block -> ae2:smooth_sky_stone_block - -shapeless= - ae2:smooth_sky_stone_block -> ae2:sky_stone_brick - -shapeless= - ae2:sky_stone_brick -> ae2:sky_stone_small_brick - -shapeless= - ae2:sky_stone_small_brick -> ae2:smooth_sky_stone_block diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/slabs.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/slabs.recipe deleted file mode 100644 index 0392b87c4..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/slabs.recipe +++ /dev/null @@ -1,31 +0,0 @@ -shaped= - ae2:chiseled_quartz_block ae2:chiseled_quartz_block ae2:chiseled_quartz_block - -> 6 ae2:chiseled_quartz_slab - -shaped= - ae2:fluix_block ae2:fluix_block ae2:fluix_block - -> 6 ae2:fluix_slab - -shaped= - ae2:quartz_pillar ae2:quartz_pillar ae2:quartz_pillar - -> 6 ae2:quartz_pillar_slab - -shaped= - ae2:quartz_block ae2:quartz_block ae2:quartz_block - -> 6 ae2:quartz_slab - -shaped= - ae2:sky_stone_block ae2:sky_stone_block ae2:sky_stone_block - -> 6 ae2:sky_stone_slab - -shaped= - ae2:smooth_sky_stone_block ae2:smooth_sky_stone_block ae2:smooth_sky_stone_block - -> 6 ae2:smooth_sky_stone_slab - -shaped= - ae2:sky_stone_brick ae2:sky_stone_brick ae2:sky_stone_brick - -> 6 ae2:sky_stone_brick_slab - -shaped= - ae2:sky_stone_small_brick ae2:sky_stone_small_brick ae2:sky_stone_small_brick - -> 6 ae2:sky_stone_small_brick_slab diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/stairs.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/stairs.recipe deleted file mode 100644 index 935ed7a3e..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/decorative/stairs.recipe +++ /dev/null @@ -1,47 +0,0 @@ -shaped= - ae2:chiseled_quartz_block _ _, - ae2:chiseled_quartz_block ae2:chiseled_quartz_block _, - ae2:chiseled_quartz_block ae2:chiseled_quartz_block ae2:chiseled_quartz_block - -> 4 ae2:chiseled_quartz_stairs - -shaped= - ae2:fluix_block _ _, - ae2:fluix_block ae2:fluix_block _, - ae2:fluix_block ae2:fluix_block ae2:fluix_block - -> 4 ae2:fluix_stairs - -shaped= - ae2:quartz_pillar _ _, - ae2:quartz_pillar ae2:quartz_pillar _, - ae2:quartz_pillar ae2:quartz_pillar ae2:quartz_pillar - -> 4 ae2:quartz_pillar_stairs - -shaped= - ae2:quartz_block _ _, - ae2:quartz_block ae2:quartz_block _, - ae2:quartz_block ae2:quartz_block ae2:quartz_block - -> 4 ae2:quartz_stairs - -shaped= - ae2:sky_stone_block _ _, - ae2:sky_stone_block ae2:sky_stone_block _, - ae2:sky_stone_block ae2:sky_stone_block ae2:sky_stone_block - -> 4 ae2:sky_stone_stairs - -shaped= - ae2:smooth_sky_stone_block _ _, - ae2:smooth_sky_stone_block ae2:smooth_sky_stone_block _, - ae2:smooth_sky_stone_block ae2:smooth_sky_stone_block ae2:smooth_sky_stone_block - -> 4 ae2:smooth_sky_stone_stairs - -shaped= - ae2:sky_stone_brick _ _, - ae2:sky_stone_brick ae2:sky_stone_brick _, - ae2:sky_stone_brick ae2:sky_stone_brick ae2:sky_stone_brick - -> 4 ae2:sky_stone_brick_stairs - -shaped= - ae2:sky_stone_small_brick _ _, - ae2:sky_stone_small_brick ae2:sky_stone_small_brick _, - ae2:sky_stone_small_brick ae2:sky_stone_small_brick ae2:sky_stone_small_brick - -> 4 ae2:sky_stone_small_brick_stairs diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/bonemeal.json b/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/bonemeal.json new file mode 100644 index 000000000..554c97825 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/bonemeal.json @@ -0,0 +1,14 @@ +{ + "type": "appliedenergistics2:grinder", + "input": { + "item": "minecraft:bone" + }, + "result": { + "primary": { + "item": "minecraft:dye", + "data": 15, + "count": 4 + } + }, + "turns": 8 +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/flint.json b/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/flint.json new file mode 100644 index 000000000..05db5cc7a --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/flint.json @@ -0,0 +1,12 @@ +{ + "type": "appliedenergistics2:grinder", + "input": { + "item": "minecraft:gravel" + }, + "result": { + "primary": { + "item": "minecraft:flint" + } + }, + "turns": 8 +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/fluix_dust.json b/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/fluix_dust.json new file mode 100644 index 000000000..b916a8728 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/fluix_dust.json @@ -0,0 +1,13 @@ +{ + "type": "appliedenergistics2:grinder", + "input": { + "type": "forge:ore_dict", + "ore": "crystalFluix" + }, + "result": { + "primary": { + "part": "material.fluix_dust" + } + }, + "turns": 8 +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/sky_dust.json b/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/sky_dust.json new file mode 100644 index 000000000..96496c44d --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/grinder/sky_dust.json @@ -0,0 +1,12 @@ +{ + "type": "appliedenergistics2:grinder", + "input": { + "item": "appliedenergistics2:sky_stone_block" + }, + "result": { + "primary": { + "part": "material.sky_dust" + } + }, + "turns": 8 +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/groups.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/groups.recipe deleted file mode 100644 index 4bef8fbbc..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/groups.recipe +++ /dev/null @@ -1,21 +0,0 @@ -group= oredictionary:itemIlluminatedPanel -> monitor -group= ae2:interface ae2:part.interface -> interface - -group= ae2:certus_quartz_cutting_knife:* ae2:nether_quartz_cutting_knife:* -> knife -group= ae2:certus_quartz_wrench ae2:nether_quartz_wrench -> wrench - -group= ae2:cable_glass ae2:cable_covered ae2:cable_smart -> cable -group= ae2:cable_dense -> densecable - -group= mc:iron_ingot oredictionary:ingotCopper oredictionary:ingotTin oredictionary:ingotSilver oredictionary:ingotLead oredictionary:ingotBronze oredictionary:ingotBrass oredictionary:ingotNickel oredictionary:ingotInvar oredictionary:ingotAluminium -> metalIngots -group= oredictionary:dustEnder oredictionary:dustEnderPearl -> dustEnder - -group=oredictionary:blockGlass oredictionary:glass mc:glass -> glass -group=oredictionary:wool mc:wool:* -> wool - -group=oredictionary:crystalCertusQuartz oredictionary:crystalNetherQuartz ae2:material.certus_quartz_crystal_charged -> crystalQuartz -group=oredictionary:dustCertusQuartz oredictionary:dustNetherQuartz -> dustQuartz - -group=oredictionary:crystalCertusQuartz ae2:material.certus_quartz_crystal_charged ae2:material.purified_certus_quartz_crystal -> certusCrystal -group=oredictionary:crystalNetherQuartz ae2:material.purified_nether_quartz_crystal -> netherCrystal -group=oredictionary:crystalFluix ae2:material.purified_fluix_crystal -> fluixCrystal \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/index.recipe deleted file mode 100644 index ca34c6bad..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/index.recipe +++ /dev/null @@ -1,37 +0,0 @@ -########################################################## -# DEPRECATED # -# Until vanilla/Forge JSON is capable of supporting most # -# of our use cases use CraftTweaker for custom recipes # -########################################################## - -# Crash on Issues -crash=false - -# Hides Exceptions and just display messages. -exceptions=false - -# Error on Missing Items ( default is no because AE2 allows you to enable/disable items without modifying recipes. ) -erroronmissing=true - -# Important, keep in this order -import=aliases.recipe -import=oredict.recipe -import=groups.recipe - -import=processing/index.recipe - -### Manually load non-shaped/shapeless recipe files -import=smelting/smelting.recipe -import=materials/circuits.recipe -import=materials/presses.recipe -import=materials/processors.recipe - - - -### REPLACED IN 1.12 BY JSON RECIPES -# All actual recipes -#import=decorative/index.recipe -#import=materials/index.recipe -#import=misc/index.recipe -#import=network/index.recipe -#import=tools/index.recipe \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor.json new file mode 100644 index 000000000..13d75c514 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor.json @@ -0,0 +1,21 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "press", + "result": { + "part": "material.engineering_processor" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.engineering_processor_print" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "bottom": { + "type": "appliedenergistics2:part", + "part": "material.silicon_print" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor_press.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor_press.json new file mode 100644 index 000000000..32f8f1eed --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor_press.json @@ -0,0 +1,17 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "inscribe", + "result": { + "part": "material.calculation_processor_press" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.calculation_processor_press" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "blockIron" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor_print.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor_print.json new file mode 100644 index 000000000..1f83a08b0 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/calculation_processor_print.json @@ -0,0 +1,17 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "inscribe", + "result": { + "part": "material.calculation_processor_print" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.calculation_processor_press" + }, + "middle": { + "type": "appliedenergistics2:part", + "part": "material.purified_certus_quartz_crystal" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor.json new file mode 100644 index 000000000..6e21c3799 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor.json @@ -0,0 +1,21 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "press", + "result": { + "part": "material.calculation_processor" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.calculation_processor_print" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "bottom": { + "type": "appliedenergistics2:part", + "part": "material.silicon_print" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor_press.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor_press.json new file mode 100644 index 000000000..47797029f --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor_press.json @@ -0,0 +1,17 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "inscribe", + "result": { + "part": "material.engineering_processor_press" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.engineering_processor_press" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "blockIron" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor_print.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor_print.json new file mode 100644 index 000000000..12649ae21 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/engineering_processor_print.json @@ -0,0 +1,17 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "inscribe", + "result": { + "part": "material.engineering_processor_print" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.engineering_processor_press" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "gemDiamond" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor.json new file mode 100644 index 000000000..47ab83c98 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor.json @@ -0,0 +1,21 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "press", + "result": { + "part": "material.logic_processor" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.logic_processor_print" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "bottom": { + "type": "appliedenergistics2:part", + "part": "material.silicon_print" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor_press.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor_press.json new file mode 100644 index 000000000..aa85757bf --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor_press.json @@ -0,0 +1,17 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "inscribe", + "result": { + "part": "material.logic_processor_press" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.logic_processor_press" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "blockIron" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor_print.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor_print.json new file mode 100644 index 000000000..7eb63773c --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/logic_processor_print.json @@ -0,0 +1,17 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "inscribe", + "result": { + "part": "material.logic_processor_print" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.logic_processor_press" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "ingotGold" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/silicon_press.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/silicon_press.json new file mode 100644 index 000000000..d6e43e32a --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/silicon_press.json @@ -0,0 +1,17 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "inscribe", + "result": { + "part": "material.silicon_press" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.silicon_press" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "blockIron" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/silicon_print.json b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/silicon_print.json new file mode 100644 index 000000000..e79d39b6c --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/inscriber/silicon_print.json @@ -0,0 +1,17 @@ +{ + "type": "appliedenergistics2:inscriber", + "mode": "inscribe", + "result": { + "part": "material.silicon_print" + }, + "ingredients": { + "top": { + "type": "appliedenergistics2:part", + "part": "material.silicon_press" + }, + "middle": { + "type": "forge:ore_dict", + "ore": "itemSilicon" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/cards.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/materials/cards.recipe deleted file mode 100644 index 4c89e4740..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/cards.recipe +++ /dev/null @@ -1,35 +0,0 @@ -shaped= - oredictionary:ingotGold oredictionary:ingotIron _, - oredictionary:dustRedstone ae2:material.CalcProcessor oredictionary:ingotIron, - oredictionary:ingotGold oredictionary:ingotIron _ - -> 2 ae2:material.BasicCard - -shaped= - oredictionary:gemDiamond oredictionary:ingotIron _, - oredictionary:dustRedstone ae2:material.CalcProcessor oredictionary:ingotIron, - oredictionary:gemDiamond oredictionary:ingotIron _ - -> 2 ae2:material.AdvCard - -shapeless= - ae2:material.BasicCard certusCrystal - -> ae2:material.CardCapacity - -shapeless= - ae2:material.BasicCard mc:redstone_torch - -> ae2:material.CardRedstone - -shapeless= - ae2:material.AdvCard wool - -> ae2:material.CardFuzzy - -shapeless= - ae2:material.AdvCard mc:redstone_torch - -> ae2:material.CardInverter - -shapeless= - ae2:material.AdvCard fluixCrystal - -> ae2:material.CardSpeed - -shapeless= - ae2:material.BasicCard oredictionary:craftingTableWood - -> ae2:material.CardCrafting diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/circuits.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/materials/circuits.recipe deleted file mode 100644 index a7398bd06..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/circuits.recipe +++ /dev/null @@ -1,15 +0,0 @@ -inscribe= - oredictionary:ingotGold ae2:material.logic_processor_press - -> ae2:material.logic_processor_print - -inscribe= - ae2:material.purified_certus_quartz_crystal ae2:material.calculation_processor_press - -> ae2:material.calculation_processor_print - -inscribe= - oredictionary:gemDiamond ae2:material.engineering_processor_press - -> ae2:material.engineering_processor_print - -inscribe= - oredictionary:itemSilicon ae2:material.silicon_press - -> ae2:material.silicon_print diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/cores.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/materials/cores.recipe deleted file mode 100644 index a1db44dc8..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/cores.recipe +++ /dev/null @@ -1,7 +0,0 @@ -shaped= - netherCrystal oreDictionary:dustFluix ae2:material.LogicProcessor - -> 2 ae2:material.AnnihilationCore - -shaped= - certusCrystal oreDictionary:dustFluix ae2:material.LogicProcessor - -> 2 ae2:material.FormationCore diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/materials/index.recipe deleted file mode 100644 index 2f989adc2..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/index.recipe +++ /dev/null @@ -1,5 +0,0 @@ -import=materials/cards.recipe -import=materials/circuits.recipe -import=materials/cores.recipe -import=materials/presses.recipe -import=materials/processors.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/presses.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/materials/presses.recipe deleted file mode 100644 index 0efeb351d..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/presses.recipe +++ /dev/null @@ -1,15 +0,0 @@ -inscribe= - oredictionary:blockIron ae2:material.logic_processor_press - -> ae2:material.logic_processor_press - -inscribe= - oredictionary:blockIron ae2:material.calculation_processor_press - -> ae2:material.calculation_processor_press - -inscribe= - oredictionary:blockIron ae2:material.engineering_processor_press - -> ae2:material.engineering_processor_press - -inscribe= - oredictionary:blockIron ae2:material.silicon_press - -> ae2:material.silicon_press diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/processors.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/materials/processors.recipe deleted file mode 100644 index f10645b25..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/materials/processors.recipe +++ /dev/null @@ -1,11 +0,0 @@ -press= - oredictionary:dustRedstone ae2:material.logic_processor_print ae2:material.silicon_print - -> ae2:material.logic_processor - -press= - oredictionary:dustRedstone ae2:material.calculation_processor_print ae2:material.silicon_print - -> ae2:material.calculation_processor - -press= - oredictionary:dustRedstone ae2:material.engineering_processor_print ae2:material.silicon_print - -> ae2:material.engineering_processor diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/chests.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/misc/chests.recipe deleted file mode 100644 index d534d41e0..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/chests.recipe +++ /dev/null @@ -1,11 +0,0 @@ -shaped= - ae2:sky_stone_block ae2:sky_stone_block ae2:sky_stone_block, - ae2:sky_stone_block _ ae2:sky_stone_block, - ae2:sky_stone_block ae2:sky_stone_block ae2:sky_stone_block - -> ae2:sky_stone_chest - -shaped= - ae2:smooth_sky_stone_block ae2:smooth_sky_stone_block ae2:smooth_sky_stone_block, - ae2:smooth_sky_stone_block _ ae2:smooth_sky_stone_block, - ae2:smooth_sky_stone_block ae2:smooth_sky_stone_block ae2:smooth_sky_stone_block - -> ae2:smooth_sky_stone_chest diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/deconstruction.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/misc/deconstruction.recipe deleted file mode 100644 index 2520e2754..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/deconstruction.recipe +++ /dev/null @@ -1,15 +0,0 @@ -shapeless= - ae2:quartz_block - -> 4 ae2:material.CertusQuartzCrystal - -shapeless= - ae2:quartz_pillar - -> 4 ae2:material.CertusQuartzCrystal - -shapeless= - ae2:chiseled_quartz_block - -> 4 ae2:material.CertusQuartzCrystal - -shapeless= - ae2:fluix_block - -> 4 ae2:material.FluixCrystal diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/fluixpearl.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/misc/fluixpearl.recipe deleted file mode 100644 index c0de22053..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/fluixpearl.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - oredictionary:dustFluix fluixCrystal oredictionary:dustFluix, - fluixCrystal mc:ender_pearl fluixCrystal, - oredictionary:dustFluix fluixCrystal oredictionary:dustFluix - -> ae2:material.FluixPearl diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/grindstone.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/misc/grindstone.recipe deleted file mode 100644 index bbd395dbe..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/grindstone.recipe +++ /dev/null @@ -1,17 +0,0 @@ -shaped= - _ oredictionary:stickWood _, - oredictionary:stickWood _ oredictionary:stickWood, - _ oredictionary:stickWood _ - -> ae2:material.WoodenGear - -shaped= - oredictionary:stickWood oredictionary:stickWood oredictionary:stickWood, - _ _ oredictionary:stickWood, - _ _ oredictionary:stickWood - -> ae2:crank - -shaped= - oredictionary:stone oredictionary:gearWood oredictionary:stone, - crystalQuartz oredictionary:stone crystalQuartz, - oredictionary:cobblestone crystalQuartz oredictionary:cobblestone - -> ae2:grindstone diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/misc/index.recipe deleted file mode 100644 index 59927195d..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/index.recipe +++ /dev/null @@ -1,8 +0,0 @@ -import=misc/chests.recipe -import=misc/deconstruction.recipe -import=misc/fluixpearl.recipe -import=misc/grindstone.recipe -import=misc/meteors.recipe -import=misc/tinytnt.recipe -import=misc/seeds.recipe -import=misc/vanilla.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/meteors.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/misc/meteors.recipe deleted file mode 100644 index 46ce7ee2a..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/meteors.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - _ oredictionary:ingotIron _, - oredictionary:ingotIron ae2:material.CertusQuartzCrystalCharged oredictionary:ingotIron, - _ oredictionary:ingotIron _ - -> ae2:sky_compass diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/seeds.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/misc/seeds.recipe deleted file mode 100644 index 1e584493f..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/seeds.recipe +++ /dev/null @@ -1,3 +0,0 @@ -shapeless= oredictionary:sand oredictionary:dustNetherQuartz -> 2 ae2:crystal_seed.nether -shapeless= oredictionary:sand oredictionary:dustCertusQuartz -> 2 ae2:crystal_seed.certus -shapeless= oredictionary:sand oredictionary:dustFluix -> 2 ae2:crystal_seed.fluix diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/tinytnt.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/misc/tinytnt.recipe deleted file mode 100644 index 99910a688..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/tinytnt.recipe +++ /dev/null @@ -1,4 +0,0 @@ -shaped= - dustQuartz mc:gunpowder, - mc:gunpowder dustQuartz - -> ae2:tiny_tnt diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/vanilla.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/misc/vanilla.recipe deleted file mode 100644 index 834694177..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/misc/vanilla.recipe +++ /dev/null @@ -1,11 +0,0 @@ -shaped= - glass glass glass, - netherCrystal netherCrystal netherCrystal, - oredictionary:slabWood oredictionary:slabWood oredictionary:slabWood - -> mc:daylight_detector - -shaped= - _ mc:redstone_torch _, - mc:redstone_torch netherCrystal mc:redstone_torch, - oredictionary:stone oredictionary:stone oredictionary:stone - -> mc:comparator diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/cellworkbench.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/cellworkbench.recipe deleted file mode 100644 index 68be753ea..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/cellworkbench.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - wool ae2:material.CalcProcessor wool, - oredictionary:ingotIron oredictionary:chestWood oredictionary:ingotIron, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:cell_workbench diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/controller.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/controller.recipe deleted file mode 100644 index 7d6fb5c42..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/controller.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - ae2:smooth_sky_stone_block ae2:material.PurifiedFluixCrystal ae2:smooth_sky_stone_block, - ae2:material.PurifiedFluixCrystal ae2:material.EngProcessor ae2:material.PurifiedFluixCrystal, - ae2:smooth_sky_stone_block ae2:material.PurifiedFluixCrystal ae2:smooth_sky_stone_block - -> ae2:controller diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/crystal_processing.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/crystal_processing.recipe deleted file mode 100644 index 9b978732e..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/crystal_processing.recipe +++ /dev/null @@ -1,11 +0,0 @@ -shaped= - oredictionary:ingotIron cable oredictionary:ingotIron, - ae2:quartz_glass ae2:fluix_block ae2:quartz_glass, - oredictionary:ingotIron cable oredictionary:ingotIron - -> ae2:quartz_growth_accelerator - -shaped= - oredictionary:ingotIron fluixCrystal oredictionary:ingotIron, - oredictionary:ingotIron _ _, - oredictionary:ingotIron fluixCrystal oredictionary:ingotIron - -> ae2:charger diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/energy.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/energy.recipe deleted file mode 100644 index edf7d6625..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/energy.recipe +++ /dev/null @@ -1,23 +0,0 @@ -shaped= - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron, - oredictionary:ingotIron mc:furnace oredictionary:ingotIron, - oredictionary:ingotIron ae2:energy_acceptor oredictionary:ingotIron - -> ae2:vibration_chamber - -shaped= - oredictionary:ingotIron ae2:quartz_glass oredictionary:ingotIron, - ae2:quartz_glass fluixCrystal ae2:quartz_glass, - oredictionary:ingotIron ae2:quartz_glass oredictionary:ingotIron - -> ae2:energy_acceptor - -shaped= - certusCrystal oredictionary:dustFluix certusCrystal, - oredictionary:dustFluix ae2:quartz_glass oredictionary:dustFluix, - certusCrystal oredictionary:dustFluix certusCrystal - -> ae2:energy_cell - -shaped= - ae2:energy_cell ae2:energy_cell ae2:energy_cell, - ae2:energy_cell ae2:material.CalcProcessor ae2:energy_cell, - ae2:energy_cell ae2:energy_cell ae2:energy_cell - -> ae2:dense_energy_cell diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/index.recipe deleted file mode 100644 index 290368db1..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/index.recipe +++ /dev/null @@ -1,11 +0,0 @@ -import=network/blocks/cellworkbench.recipe -import=network/blocks/controller.recipe -import=network/blocks/crystal_processing.recipe -import=network/blocks/energy.recipe -import=network/blocks/inscribers.recipe -import=network/blocks/interfaces.recipe -import=network/blocks/io.recipe -import=network/blocks/quantum.recipe -import=network/blocks/security_station.recipe -import=network/blocks/spatial_io.recipe -import=network/blocks/storage.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/inscribers.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/inscribers.recipe deleted file mode 100644 index d84b56ee3..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/inscribers.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - oredictionary:ingotIron mc:sticky_piston oredictionary:ingotIron, - fluixCrystal _ oredictionary:ingotIron, - oredictionary:ingotIron mc:sticky_piston oredictionary:ingotIron - -> ae2:inscriber diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/interfaces.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/interfaces.recipe deleted file mode 100644 index e4187f4ac..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/interfaces.recipe +++ /dev/null @@ -1,13 +0,0 @@ -shapeless= - ae2:part.Interface - -> ae2:interface - -shapeless= - ae2:interface - -> ae2:part.Interface - -shaped= - oredictionary:ingotIron glass oredictionary:ingotIron, - ae2:material.AnnihilationCore _ ae2:material.FormationCore, - oredictionary:ingotIron glass oredictionary:ingotIron - -> ae2:interface diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/io.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/io.recipe deleted file mode 100644 index cd787c422..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/io.recipe +++ /dev/null @@ -1,11 +0,0 @@ -shaped= - oredictionary:ingotIron glass oredictionary:ingotIron, - glass oredictionary:dustFluix glass, - oredictionary:ingotIron glass oredictionary:ingotIron - -> ae2:condenser - -shaped= - glass glass glass, - ae2:drive cable ae2:drive, - oredictionary:ingotIron ae2:material.LogicProcessor oredictionary:ingotIron - -> ae2:io_port diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/quantum.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/quantum.recipe deleted file mode 100644 index e26c15475..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/quantum.recipe +++ /dev/null @@ -1,13 +0,0 @@ -# Quantum Link Chamber -shaped= - ae2:quartz_glass ae2:material.FluixPearl ae2:quartz_glass, - ae2:material.FluixPearl _ ae2:material.FluixPearl, - ae2:quartz_glass ae2:material.FluixPearl ae2:quartz_glass, - -> ae2:quantum_link - -# Quantum Ring -shaped= - oredictionary:ingotIron ae2:material.LogicProcessor oredictionary:ingotIron, - ae2:material.EngProcessor ae2:energy_cell densecable, - oredictionary:ingotIron ae2:material.LogicProcessor oredictionary:ingotIron, - -> ae2:quantum_ring diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/security_station.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/security_station.recipe deleted file mode 100644 index 6623dfa95..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/security_station.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - oredictionary:ingotIron ae2:chest oredictionary:ingotIron, - cable ae2:material.Cell16kPart cable, - oredictionary:ingotIron ae2:material.EngProcessor oredictionary:ingotIron - -> ae2:security_station diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/spatial_io.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/spatial_io.recipe deleted file mode 100644 index 2816302b6..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/spatial_io.recipe +++ /dev/null @@ -1,11 +0,0 @@ -shaped= - glass glass glass, - cable ae2:io_port cable, - oredictionary:ingotIron ae2:material.EngProcessor oredictionary:ingotIron - -> ae2:spatial_io_port - -shaped= - ae2:quartz_glass cable ae2:quartz_glass, - oredictionary:dustFluix fluixCrystal oredictionary:dustFluix, - ae2:quartz_glass cable ae2:quartz_glass - -> ae2:spatial_pylon diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/storage.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/storage.recipe deleted file mode 100644 index cc6faa176..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/blocks/storage.recipe +++ /dev/null @@ -1,11 +0,0 @@ -shaped= - glass ae2:part.Terminal glass, - cable _ cable, - oredictionary:ingotIron fluixCrystal oredictionary:ingotIron, - -> ae2:chest - -shaped= - oredictionary:ingotIron ae2:material.EngProcessor oredictionary:ingotIron, - cable _ cable, - oredictionary:ingotIron ae2:material.EngProcessor oredictionary:ingotIron - -> ae2:drive diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/covered.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/covered.recipe deleted file mode 100644 index 5b8c16960..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/covered.recipe +++ /dev/null @@ -1,104 +0,0 @@ -shapeless= - ae2:cable_glass - wool - -> ae2:cable_covered.fluix - -shapeless= - ae2:cable_covered mc:water_bucket - -> ae2:cable_covered.fluix - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeWhite ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.white - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeBlack ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.black - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeRed ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.red - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeGreen ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.green - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeBrown ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.brown - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeBlue ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.blue - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyePurple ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.purple - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeCyan ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.cyan - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeLightGray ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.light_gray - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeGray ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.gray - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyePink ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.pink - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeLime ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.lime - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeYellow ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.yellow - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeLightBlue ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.light_blue - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeMagenta ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.magenta - -shaped= - ae2:cable_covered ae2:cable_covered ae2:cable_covered, - ae2:cable_covered oredictionary:dyeOrange ae2:cable_covered, - ae2:cable_covered ae2:cable_covered ae2:cable_covered - -> 8 ae2:cable_covered.orange diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/dense.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/dense.recipe deleted file mode 100644 index 2f603434f..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/dense.recipe +++ /dev/null @@ -1,104 +0,0 @@ -shapeless= - ae2:cable_covered ae2:cable_covered ae2:cable_covered ae2:cable_covered - oredictionary:dustRedstone oredictionary:dustGlowstone - -> ae2:cable_dense.fluix - -shapeless= - ae2:cable_dense mc:water_bucket - -> ae2:cable_dense.fluix - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeWhite ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.white - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeBlack ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.black - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeRed ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.red - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeGreen ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.green - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeBrown ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.brown - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeBlue ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.blue - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyePurple ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.purple - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeCyan ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.cyan - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeLightGray ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.light_gray - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeGray ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.gray - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyePink ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.pink - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeLime ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.lime - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeYellow ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.yellow - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeLightBlue ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.light_blue - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeMagenta ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.magenta - -shaped= - ae2:cable_dense ae2:cable_dense ae2:cable_dense, - ae2:cable_dense oredictionary:dyeOrange ae2:cable_dense, - ae2:cable_dense ae2:cable_dense ae2:cable_dense - -> 8 ae2:cable_dense.orange diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/glass.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/glass.recipe deleted file mode 100644 index e17ba43e4..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/glass.recipe +++ /dev/null @@ -1,103 +0,0 @@ -shapeless= - ae2:part.QuartzFiber fluixCrystal fluixCrystal - -> 4 ae2:cable_glass.fluix - -shapeless= - ae2:cable_glass mc:water_bucket - -> ae2:cable_glass.fluix - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeWhite ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.white - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeBlack ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.black - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeRed ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.red - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeGreen ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.green - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeBrown ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.brown - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeBlue ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.blue - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyePurple ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.purple - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeCyan ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.cyan - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeLightGray ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.light_gray - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeGray ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.gray - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyePink ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.pink - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeLime ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.lime - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeYellow ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.yellow - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeLightBlue ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.light_blue - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeMagenta ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.magenta - -shaped= - ae2:cable_glass ae2:cable_glass ae2:cable_glass, - ae2:cable_glass oredictionary:dyeOrange ae2:cable_glass, - ae2:cable_glass ae2:cable_glass ae2:cable_glass - -> 8 ae2:cable_glass.orange diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/index.recipe deleted file mode 100644 index 00752ce95..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/index.recipe +++ /dev/null @@ -1,4 +0,0 @@ -import=network/cables/covered.recipe -import=network/cables/dense.recipe -import=network/cables/glass.recipe -import=network/cables/smart.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/smart.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/smart.recipe deleted file mode 100644 index ca43794ea..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cables/smart.recipe +++ /dev/null @@ -1,104 +0,0 @@ -shapeless= - ae2:cable_covered - oredictionary:dustRedstone oredictionary:dustGlowstone - -> ae2:cable_smart.fluix - -shapeless= - ae2:cable_smart mc:water_bucket - -> ae2:cable_smart.fluix - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeWhite ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.white - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeBlack ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.black - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeRed ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.red - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeGreen ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.green - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeBrown ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.brown - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeBlue ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.blue - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyePurple ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.purple - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeCyan ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.cyan - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeLightGray ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.light_gray - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeGray ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.gray - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyePink ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.pink - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeLime ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.lime - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeYellow ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.yellow - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeLightBlue ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.light_blue - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeMagenta ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.magenta - -shaped= - ae2:cable_smart ae2:cable_smart ae2:cable_smart, - ae2:cable_smart oredictionary:dyeOrange ae2:cable_smart, - ae2:cable_smart ae2:cable_smart ae2:cable_smart - -> 8 ae2:cable_smart.orange diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/empty.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/empty.recipe deleted file mode 100644 index d1829fad1..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/empty.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - ae2:quartz_glass oredictionary:dustRedstone ae2:quartz_glass, - oredictionary:dustRedstone _ oredictionary:dustRedstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:material.EmptyStorageCell diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/index.recipe deleted file mode 100644 index f92abe884..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/index.recipe +++ /dev/null @@ -1,6 +0,0 @@ -import=network/cells/empty.recipe -import=network/cells/spatial_components.recipe -import=network/cells/spatial.recipe -import=network/cells/storage_components.recipe -import=network/cells/storage.recipe -import=network/cells/view.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/spatial.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/spatial.recipe deleted file mode 100644 index c9a0e616c..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/spatial.recipe +++ /dev/null @@ -1,26 +0,0 @@ -shapeless= - ae2:material.Cell2SpatialPart ae2:material.EmptyStorageCell -> ae2:spatial_storage_cell_2_cubed - -shapeless= - ae2:material.Cell16SpatialPart ae2:material.EmptyStorageCell -> ae2:spatial_storage_cell_16_cubed - -shapeless= - ae2:material.Cell128SpatialPart ae2:material.EmptyStorageCell -> ae2:spatial_storage_cell_128_cubed - -shaped= - ae2:quartz_glass oredictionary:dustRedstone ae2:quartz_glass, - oredictionary:dustRedstone ae2:material.Cell2SpatialPart oredictionary:dustRedstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:spatial_storage_cell_2_cubed - -shaped= - ae2:quartz_glass oredictionary:dustRedstone ae2:quartz_glass, - oredictionary:dustRedstone ae2:material.Cell16SpatialPart oredictionary:dustRedstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:spatial_storage_cell_16_cubed - -shaped= - ae2:quartz_glass oredictionary:dustRedstone ae2:quartz_glass, - oredictionary:dustRedstone ae2:material.Cell128SpatialPart oredictionary:dustRedstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:spatial_storage_cell_128_cubed diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/spatial_components.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/spatial_components.recipe deleted file mode 100644 index ae78b07af..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/spatial_components.recipe +++ /dev/null @@ -1,17 +0,0 @@ -shaped= - oredictionary:dustGlowstone ae2:material.FluixPearl oredictionary:dustGlowstone, - ae2:material.FluixPearl ae2:material.EngProcessor ae2:material.FluixPearl, - oredictionary:dustGlowstone ae2:material.FluixPearl oredictionary:dustGlowstone - -> ae2:material.Cell2SpatialPart - -shaped= - oredictionary:dustGlowstone ae2:material.Cell2SpatialPart oredictionary:dustGlowstone, - ae2:material.Cell2SpatialPart ae2:material.EngProcessor ae2:material.Cell2SpatialPart, - oredictionary:dustGlowstone ae2:material.Cell2SpatialPart oredictionary:dustGlowstone - -> ae2:material.Cell16SpatialPart - -shaped= - oredictionary:dustGlowstone ae2:material.Cell16SpatialPart oredictionary:dustGlowstone, - ae2:material.Cell16SpatialPart ae2:material.EngProcessor ae2:material.Cell16SpatialPart, - oredictionary:dustGlowstone ae2:material.Cell16SpatialPart oredictionary:dustGlowstone - -> ae2:material.Cell128SpatialPart diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/storage.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/storage.recipe deleted file mode 100644 index 95b0fcdb7..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/storage.recipe +++ /dev/null @@ -1,35 +0,0 @@ -shapeless= - ae2:material.Cell1kPart ae2:material.EmptyStorageCell -> ae2:storage_cell_1k - -shapeless= - ae2:material.Cell4kPart ae2:material.EmptyStorageCell -> ae2:storage_cell_4k - -shapeless= - ae2:material.Cell16kPart ae2:material.EmptyStorageCell -> ae2:storage_cell_16k - -shapeless= - ae2:material.Cell64kPart ae2:material.EmptyStorageCell -> ae2:storage_cell_64k - -shaped= - ae2:quartz_glass oredictionary:dustRedstone ae2:quartz_glass, - oredictionary:dustRedstone ae2:material.Cell1kPart oredictionary:dustRedstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:storage_cell_1k - -shaped= - ae2:quartz_glass oredictionary:dustRedstone ae2:quartz_glass, - oredictionary:dustRedstone ae2:material.Cell4kPart oredictionary:dustRedstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:storage_cell_4k - -shaped= - ae2:quartz_glass oredictionary:dustRedstone ae2:quartz_glass, - oredictionary:dustRedstone ae2:material.Cell16kPart oredictionary:dustRedstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:storage_cell_16k - -shaped= - ae2:quartz_glass oredictionary:dustRedstone ae2:quartz_glass, - oredictionary:dustRedstone ae2:material.Cell64kPart oredictionary:dustRedstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:storage_cell_64k diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/storage_components.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/storage_components.recipe deleted file mode 100644 index e66699414..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/storage_components.recipe +++ /dev/null @@ -1,23 +0,0 @@ -shaped= - oredictionary:dustRedstone certusCrystal oredictionary:dustRedstone, - certusCrystal ae2:material.LogicProcessor certusCrystal, - oredictionary:dustRedstone certusCrystal oredictionary:dustRedstone - -> ae2:material.Cell1kPart - -shaped= - oredictionary:dustRedstone ae2:material.CalcProcessor oredictionary:dustRedstone, - ae2:material.Cell1kPart ae2:quartz_glass ae2:material.Cell1kPart, - oredictionary:dustRedstone ae2:material.Cell1kPart oredictionary:dustRedstone - -> ae2:material.Cell4kPart - -shaped= - oredictionary:dustGlowstone ae2:material.EngProcessor oredictionary:dustGlowstone, - ae2:material.Cell4kPart ae2:quartz_glass ae2:material.Cell4kPart, - oredictionary:dustGlowstone ae2:material.Cell4kPart oredictionary:dustGlowstone - -> ae2:material.Cell16kPart - -shaped= - oredictionary:dustGlowstone ae2:material.EngProcessor oredictionary:dustGlowstone, - ae2:material.Cell16kPart ae2:quartz_glass ae2:material.Cell16kPart, - oredictionary:dustGlowstone ae2:material.Cell16kPart oredictionary:dustGlowstone - -> ae2:material.Cell64kPart diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/view.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/view.recipe deleted file mode 100644 index a01193d21..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/cells/view.recipe +++ /dev/null @@ -1,8 +0,0 @@ -shapeless= - certusCrystal ae2:material.EmptyStorageCell -> ae2:view_cell - -shaped= - ae2:quartz_glass oredictionary:dustRedstone ae2:quartz_glass, - oredictionary:dustRedstone certusCrystal oredictionary:dustRedstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:view_cell diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/assembler.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/assembler.recipe deleted file mode 100644 index 3e476c2b6..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/assembler.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - oredictionary:ingotIron ae2:quartz_glass oredictionary:ingotIron, - ae2:material.AnnihilationCore oredictionary:craftingTableWood ae2:material.FormationCore, - oredictionary:ingotIron ae2:quartz_glass oredictionary:ingotIron - -> ae2:molecular_assembler diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/cpu.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/cpu.recipe deleted file mode 100644 index 970205804..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/cpu.recipe +++ /dev/null @@ -1,37 +0,0 @@ -shaped= - oredictionary:ingotIron ae2:material.CalcProcessor oredictionary:ingotIron, - cable ae2:material.LogicProcessor cable, - oredictionary:ingotIron ae2:material.CalcProcessor oredictionary:ingotIron - -> ae2:crafting_unit - -# co processor -shapeless= - ae2:crafting_unit - ae2:material.EngProcessor - -> ae2:crafting_accelerator - -shapeless= - ae2:crafting_unit - ae2:part.StorageMonitor - -> ae2:crafting_monitor - -# various storage sizes -shapeless= - ae2:crafting_unit - ae2:material.Cell1kPart - -> ae2:crafting_storage_1k - -shapeless= - ae2:crafting_unit - ae2:material.Cell4kPart - -> ae2:crafting_storage_4k - -shapeless= - ae2:crafting_unit - ae2:material.Cell16kPart - -> ae2:crafting_storage_16k - -shapeless= - ae2:crafting_unit - ae2:material.Cell64kPart - -> ae2:crafting_storage_64k diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/index.recipe deleted file mode 100644 index 2d4f10d0b..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/index.recipe +++ /dev/null @@ -1,3 +0,0 @@ -import=network/crafting/assembler.recipe -import=network/crafting/cpu.recipe -import=network/crafting/patterns.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/patterns.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/patterns.recipe deleted file mode 100644 index 95e9f1070..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/crafting/patterns.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - ae2:quartz_glass oredictionary:dustGlowstone ae2:quartz_glass, - oredictionary:dustGlowstone certusCrystal oredictionary:dustGlowstone, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron - -> ae2:material.BlankPattern diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/index.recipe deleted file mode 100644 index 22cdf1319..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/index.recipe +++ /dev/null @@ -1,6 +0,0 @@ -import=network/blocks/index.recipe -import=network/cables/index.recipe -import=network/cells/index.recipe -import=network/crafting/index.recipe -import=network/parts/index.recipe -import=network/wireless.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/cable_anchor.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/cable_anchor.recipe deleted file mode 100644 index f5b5aed9a..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/cable_anchor.recipe +++ /dev/null @@ -1,3 +0,0 @@ -shapeless= - metalIngots knife - -> 3 ae2:part.CableAnchor diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/emitters.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/emitters.recipe deleted file mode 100644 index 0373d1985..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/emitters.recipe +++ /dev/null @@ -1,3 +0,0 @@ -shapeless= - ae2:material.CalcProcessor mc:redstone_torch - -> ae2:part.LevelEmitter diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/index.recipe deleted file mode 100644 index 5e7445114..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/index.recipe +++ /dev/null @@ -1,10 +0,0 @@ -import=network/parts/cable_anchor.recipe -import=network/parts/emitters.recipe -import=network/parts/io_buses.recipe -import=network/parts/monitors.recipe -import=network/parts/panels.recipe -import=network/parts/planes.recipe -import=network/parts/quartz_fiber.recipe -import=network/parts/terminals.recipe -import=network/parts/toggle_buses.recipe -import=network/parts/tunnels.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/io_buses.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/io_buses.recipe deleted file mode 100644 index 847f1adae..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/io_buses.recipe +++ /dev/null @@ -1,13 +0,0 @@ -shaped= - oredictionary:ingotIron ae2:material.FormationCore oredictionary:ingotIron, - _ mc:piston _ - -> ae2:part.ExportBus - -shaped= - _ ae2:material.AnnihilationCore _, - oredictionary:ingotIron mc:sticky_piston oredictionary:ingotIron - -> ae2:part.ImportBus - -shapeless= - interface mc:sticky_piston mc:piston - -> ae2:part.StorageBus diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/monitors.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/monitors.recipe deleted file mode 100644 index edb3b2992..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/monitors.recipe +++ /dev/null @@ -1,7 +0,0 @@ -shapeless= - ae2:part.LevelEmitter monitor - -> ae2:part.StorageMonitor - -shapeless= - ae2:material.AnnihilationCore ae2:part.StorageMonitor ae2:material.FormationCore - -> ae2:part.ConversionMonitor diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/panels.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/panels.recipe deleted file mode 100644 index b956eff3b..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/panels.recipe +++ /dev/null @@ -1,17 +0,0 @@ -shaped= - _ oredictionary:dustGlowstone ae2:quartz_glass, - oredictionary:ingotIron oredictionary:dustRedstone ae2:quartz_glass, - _ oredictionary:dustGlowstone ae2:quartz_glass - -> 3 ae2:part.SemiDarkMonitor - -shapeless= - ae2:part.DarkMonitor - -> ae2:part.SemiDarkMonitor - -shapeless= - ae2:part.SemiDarkMonitor - -> ae2:part.Monitor - -shapeless= - ae2:part.Monitor - -> ae2:part.DarkMonitor diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/planes.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/planes.recipe deleted file mode 100644 index 87e23d4ac..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/planes.recipe +++ /dev/null @@ -1,25 +0,0 @@ -shaped= - fluixCrystal fluixCrystal fluixCrystal, - oredictionary:ingotIron ae2:material.FormationCore oredictionary:ingotIron - -> ae2:part.FormationPlane - -shaped= - fluixCrystal fluixCrystal fluixCrystal, - oredictionary:ingotIron ae2:material.AnnihilationCore oredictionary:ingotIron - -> ae2:part.AnnihilationPlane - -shaped= - oredictionary:ingotIron fluixCrystal, - ae2:material.AnnihilationCore fluixCrystal, - oredictionary:ingotIron fluixCrystal - -> ae2:part.AnnihilationPlane - -shaped= - oredictionary:ingotIron fluixCrystal, - ae2:material.FormationCore fluixCrystal, - oredictionary:ingotIron fluixCrystal - -> ae2:part.FormationPlane - -shapeless= - ae2:part.AnnihilationPlane ae2:material.FluixPearl - -> ae2:part.IdentityAnnihilationPlane diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/quartz_fiber.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/quartz_fiber.recipe deleted file mode 100644 index 09c741a9c..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/quartz_fiber.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - glass glass glass, - dustQuartz dustQuartz dustQuartz, - glass glass glass - -> 3 ae2:part.QuartzFiber diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/terminals.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/terminals.recipe deleted file mode 100644 index 94a0cd199..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/terminals.recipe +++ /dev/null @@ -1,15 +0,0 @@ -shapeless= - monitor ae2:material.FormationCore ae2:material.AnnihilationCore ae2:material.LogicProcessor - -> ae2:part.Terminal - -shapeless= - ae2:part.Terminal oredictionary:craftingTableWood ae2:material.CalcProcessor - -> ae2:part.CraftingTerminal - -shapeless= - monitor interface ae2:material.EngProcessor - -> ae2:part.InterfaceTerminal - -shapeless= - ae2:part.CraftingTerminal ae2:material.EngProcessor - -> ae2:part.PatternTerminal diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/toggle_buses.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/toggle_buses.recipe deleted file mode 100644 index 0b7fd20fe..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/toggle_buses.recipe +++ /dev/null @@ -1,13 +0,0 @@ -shaped= - _ oredictionary:dustRedstone _, - cable mc:lever cable, - _ oredictionary:dustRedstone _ - -> ae2:part.ToggleBus - -shapeless= - ae2:part.ToggleBus - -> ae2:part.InvertedToggleBus - -shapeless= - ae2:part.InvertedToggleBus - -> ae2:part.ToggleBus diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/tunnels.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/tunnels.recipe deleted file mode 100644 index 0eb8c7f1e..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/parts/tunnels.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - _ oredictionary:ingotIron _, - oredictionary:ingotIron ae2:material.EngProcessor oredictionary:ingotIron, - fluixCrystal fluixCrystal fluixCrystal - -> ae2:part.P2PTunnelME diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/network/wireless.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/network/wireless.recipe deleted file mode 100644 index 704564b88..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/network/wireless.recipe +++ /dev/null @@ -1,22 +0,0 @@ -shaped= - _ ae2:material.FluixPearl _, - oredictionary:ingotIron ae2:part.QuartzFiber oredictionary:ingotIron, - _ oredictionary:ingotIron _ - -> ae2:material.Wireless - -shaped= - ae2:material.Wireless, - ae2:material.CalcProcessor, - cable - -> ae2:wireless_access_point - -shaped= - ae2:material.Wireless, - ae2:part.Terminal, - ae2:dense_energy_cell - -> ae2:wireless_terminal - -shaped= - oredictionary:dustFluix certusCrystal dustEnder, - oredictionary:ingotIron oredictionary:ingotIron oredictionary:ingotIron, - -> 2 ae2:material.WirelessBooster diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/oredict.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/oredict.recipe deleted file mode 100644 index 480af8fe1..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/oredict.recipe +++ /dev/null @@ -1,37 +0,0 @@ -########################################################## -# DEPRECATED # -# Until vanilla/Forge JSON is capable of supporting most # -# of our use cases use CraftTweaker for custom recipes # -########################################################## - -# Forge Ore Dictionary -# logWood, slabWood, stairWood, treeSapling, treeLeaves, -# oreGold, oreIron, oreLapis, oreDiamond, oreRedstone, oreEmerald, oreQuartz, oreCoal, -# stone, cobblestone, record, stickWood, plankWood, -# dyeBlack, dyeRed, dyeGreen, dyeBrown, dyeBlue, dyePurple, dyeCyan, dyeLightGray, dyeGray, dyePink, dyeLime, dyeYellow, dyeLightBlue, dyeMagenta, dyeOrange, dyeWhite - -# Minecraft Ore Dict Entries -# Renamed for less clashing -ore=mc:quartz -> crystalNetherQuartz -ore=mc:wool:* -> blockWool -ore=mc:stained_hardened_clay:* -> blockStainedHardenedClay -ore=mc:crafting_table -> craftingTableWood -ore=mc:chest -> chestWood - -# AE2 Ore Dictionary -# Materials for processing in other machines -ore=ae2:material.certus_quartz_crystal -> crystalCertusQuartz -ore=ae2:material.fluix_crystal -> crystalFluix -ore=ae2:material.purified_fluix_crystal -> crystalPureFluix -ore=ae2:material.nether_quartz_dust -> dustNetherQuartz -ore=ae2:material.certus_quartz_dust -> dustCertusQuartz -ore=ae2:material.fluix_dust -> dustFluix - -# Ores of AE2 -ore=ae2:quartz_ore -> oreCertusQuartz -ore=ae2:charged_quartz_ore -> oreChargedCertusQuartz - -# Parts to be used -ore= ae2:part.semi_dark_monitor -> itemIlluminatedPanel -ore= ae2:part.monitor -> itemIlluminatedPanel -ore= ae2:part.dark_monitor -> itemIlluminatedPanel diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/factorization.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/processing/factorization.recipe deleted file mode 100644 index 1a8add582..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/factorization.recipe +++ /dev/null @@ -1,9 +0,0 @@ -grindfz= ae2:material.fluix_crystal -> ae2:material.fluix_dust -grindfz= ae2:sky_stone_block:0 -> ae2:material.sky_dust -grindfz= mc:ender_pearl -> ae2:material.ender_dust -# grindfz= oredictionary:cropWheat -> ae2:material.flour -grindfz= ae2:material.certus_quartz_crystal_charged -> ae2:material.certus_quartz_dust -grindfz= ae2:material.certus_quartz_crystal -> ae2:material.certus_quartz_dust -# grindfz= mc:quartz -> ae2:material.nether_quartz_dust -grindfz= ae2:quartz_ore -> 2 ae2:material.certus_quartz_dust -grindfz= ae2:charged_quartz_ore -> 2 ae2:material.certus_quartz_dust diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/grind.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/processing/grind.recipe deleted file mode 100644 index 729291b65..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/grind.recipe +++ /dev/null @@ -1,4 +0,0 @@ -grind= ae2:material.fluix_crystal -> ae2:material.fluix_dust -grind= ae2:sky_stone_block:0 -> ae2:material.sky_dust -grind= mc:gravel -> mc:flint -grind= mc:bone -> 4 mc:dye:15 diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/hydraulicraft.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/processing/hydraulicraft.recipe deleted file mode 100644 index 2ecefa866..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/hydraulicraft.recipe +++ /dev/null @@ -1,9 +0,0 @@ -hccrusher= ae2:material.fluix_crystal -> ae2:material.fluix_dust -hccrusher= ae2:sky_stone_block:0 -> ae2:material.sky_dust -hccrusher= mc:ender_pearl -> ae2:material.ender_dust -hccrusher= oredictionary:cropWheat -> ae2:material.flour -hccrusher= ae2:material.certus_quartz_crystal_charged -> ae2:material.certus_quartz_dust -hccrusher= ae2:material.certus_quartz_crystal -> ae2:material.certus_quartz_dust -hccrusher= mc:quartz -> ae2:material.nether_quartz_dust -hccrusher= ae2:quartz_ore -> 2 ae2:material.certus_quartz_dust -hccrusher= ae2:charged_quartz_ore -> 2 ae2:material.certus_quartz_dust diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/ic2.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/processing/ic2.recipe deleted file mode 100644 index 9341e1923..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/ic2.recipe +++ /dev/null @@ -1,9 +0,0 @@ -macerator= ae2:material.fluix_crystal -> ae2:material.fluix_dust -macerator= ae2:sky_stone_block:0 -> ae2:material.sky_dust -macerator= mc:ender_pearl -> ae2:material.ender_dust -# macerator= oredictionary:cropWheat -> ae2:material.flour -macerator= ae2:material.certus_quartz_crystal_charged -> ae2:material.certus_quartz_dust -macerator= ae2:material.certus_quartz_crystal -> ae2:material.certus_quartz_dust -macerator= mc:quartz -> ae2:material.nether_quartz_dust -macerator= ae2:quartz_ore -> 2 ae2:material.certus_quartz_dust -macerator= ae2:charged_quartz_ore -> 2 ae2:material.certus_quartz_dust diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/processing/index.recipe deleted file mode 100644 index fd14d0c73..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/index.recipe +++ /dev/null @@ -1,8 +0,0 @@ -import=processing/factorization.recipe -import=processing/grind.recipe -import=processing/hydraulicraft.recipe -import=processing/ic2.recipe -import=processing/mekanism.recipe -import=processing/rotarycraft.recipe -import=processing/te.recipe -import=processing/vanilla.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/mekanism.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/processing/mekanism.recipe deleted file mode 100644 index ee501a391..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/mekanism.recipe +++ /dev/null @@ -1,9 +0,0 @@ -mekcrusher= ae2:material.fluix_crystal -> ae2:material.fluix_dust -#bug mekcrusher= ae2:sky_stone_block:0 -> ae2:material.sky_dust -#bug mekcrusher= mc:ender_pearl -> ae2:material.ender_dust -# mekcrusher= oredictionary:cropWheat -> ae2:material.flour -#bug mekcrusher= ae2:material.certus_quartz_crystal_charged -> ae2:material.certus_quartz_dust -mekcrusher= ae2:material.certus_quartz_crystal -> ae2:material.certus_quartz_dust -mekcrusher= mc:quartz -> ae2:material.nether_quartz_dust -mekechamber= ae2:quartz_ore -> 2 ae2:material.certus_quartz_dust -mekechamber= ae2:charged_quartz_ore -> 2 ae2:material.certus_quartz_dust diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/rotarycraft.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/processing/rotarycraft.recipe deleted file mode 100644 index a23d06b31..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/rotarycraft.recipe +++ /dev/null @@ -1,9 +0,0 @@ -crusher= ae2:material.fluix_crystal -> ae2:material.fluix_dust -crusher= ae2:sky_stone_block:0 -> ae2:material.sky_dust -crusher= mc:ender_pearl -> ae2:material.ender_dust -crusher= oredictionary:cropWheat -> ae2:material.flour -crusher= ae2:material.certus_quartz_crystal_charged -> ae2:material.certus_quartz_dust -crusher= ae2:material.certus_quartz_crystal -> ae2:material.certus_quartz_dust -crusher= mc:quartz -> ae2:material.certus_quartz_dust -crusher= ae2:quartz_ore -> 2 ae2:material.certus_quartz_dust -crusher= ae2:charged_quartz_ore -> 2 ae2:material.certus_quartz_dust diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/te.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/processing/te.recipe deleted file mode 100644 index a169b59d8..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/te.recipe +++ /dev/null @@ -1,9 +0,0 @@ -pulverizer= ae2:material.fluix_crystal -> ae2:material.fluix_dust -pulverizer= ae2:sky_stone_block:0 -> ae2:material.sky_dust -pulverizer= mc:ender_pearl -> ae2:material.ender_dust -pulverizer= oredictionary:cropWheat -> ae2:material.flour -pulverizer= ae2:material.certus_quartz_crystal_charged -> ae2:material.certus_quartz_dust -pulverizer= ae2:material.certus_quartz_crystal -> ae2:material.certus_quartz_dust -pulverizer= mc:quartz -> ae2:material.nether_quartz_dust -pulverizer= ae2:quartz_ore -> 2 ae2:material.certus_quartz_dust -pulverizer= ae2:charged_quartz_ore -> 2 ae2:material.certus_quartz_dust diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/vanilla.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/processing/vanilla.recipe deleted file mode 100644 index e7c6ce343..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/processing/vanilla.recipe +++ /dev/null @@ -1,8 +0,0 @@ -# Ore Processing -smelt= ae2:material.gold_dust -> mc:gold_ingot -smelt= ae2:material.iron_dust -> mc:iron_ingot -smelt= ae2:material.flour -> mc:bread - -# Silicon -smelt= ae2:material.nether_quartz_dust -> ae2:material.silicon -smelt= ae2:material.certus_quartz_dust -> ae2:material.silicon diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/bread.json b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/bread.json new file mode 100644 index 000000000..fd055c556 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/bread.json @@ -0,0 +1,11 @@ +{ + "type": "appliedenergistics2:smelt", + "result": { + "item": "minecraft:bread" + }, + "input": { + "type": "appliedenergistics2:part", + "part": "material.flour" + }, + "xp" : 0.0 +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/gold_ingot.json b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/gold_ingot.json new file mode 100644 index 000000000..098a02701 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/gold_ingot.json @@ -0,0 +1,11 @@ +{ + "type": "appliedenergistics2:smelt", + "result": { + "item": "minecraft:gold_ingot" + }, + "input": { + "type": "forge:ore_dict", + "ore": "dustGold" + }, + "xp" : 0.0 +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/iron_ingot.json b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/iron_ingot.json new file mode 100644 index 000000000..61c7c7bcb --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/iron_ingot.json @@ -0,0 +1,11 @@ +{ + "type": "appliedenergistics2:smelt", + "result": { + "item": "minecraft:iron_ingot" + }, + "input": { + "type": "forge:ore_dict", + "ore": "dustIron" + }, + "xp" : 0.0 +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/silicon.json b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/silicon.json new file mode 100644 index 000000000..b9da64a44 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/silicon.json @@ -0,0 +1,18 @@ +{ + "type": "appliedenergistics2:smelt", + "result": { + "part": "material.silicon" + }, + "input": + [ + { + "type": "forge:ore_dict", + "ore": "dustNetherQuartz" + }, + { + "type": "forge:ore_dict", + "ore": "dustCertusQuartz" + } + ], + "xp" : 0.0 +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/smelting.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/smelting.recipe deleted file mode 100644 index f207c6683..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/smelting.recipe +++ /dev/null @@ -1,2 +0,0 @@ -smelt= - ae2:sky_stone_block -> ae2:smooth_sky_stone_block \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/smooth_sky_stone_block.json b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/smooth_sky_stone_block.json new file mode 100644 index 000000000..f063b9547 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/aerecipes/smelting/smooth_sky_stone_block.json @@ -0,0 +1,10 @@ +{ + "type": "appliedenergistics2:smelt", + "result": { + "item": "appliedenergistics2:smooth_sky_stone_block" + }, + "input": { + "item": "appliedenergistics2:sky_stone_block" + }, + "xp" : 0.0 +} \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/certus_quartz.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/tools/certus_quartz.recipe deleted file mode 100644 index debabaef9..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/certus_quartz.recipe +++ /dev/null @@ -1,41 +0,0 @@ -shaped= - oredictionary:crystalCertusQuartz oredictionary:crystalCertusQuartz, - oredictionary:crystalCertusQuartz oredictionary:stickWood, - _ oredictionary:stickWood - -> ae2:certus_quartz_axe - -shaped= - oredictionary:crystalCertusQuartz oredictionary:crystalCertusQuartz oredictionary:crystalCertusQuartz, - _ oredictionary:stickWood _, - _ oredictionary:stickWood _ - -> ae2:certus_quartz_pickaxe - -shaped= - oredictionary:crystalCertusQuartz, - oredictionary:stickWood, - oredictionary:stickWood - -> ae2:certus_quartz_spade - -shaped= - oredictionary:crystalCertusQuartz, - oredictionary:crystalCertusQuartz, - oredictionary:stickWood - -> ae2:certus_quartz_sword - -shaped= - oredictionary:crystalCertusQuartz oredictionary:crystalCertusQuartz, - _ oredictionary:stickWood, - _ oredictionary:stickWood - -> ae2:certus_quartz_hoe - -shaped= - oredictionary:crystalCertusQuartz _ oredictionary:crystalCertusQuartz, - _ oredictionary:crystalCertusQuartz _, - oredictionary:crystalCertusQuartz _ oredictionary:crystalCertusQuartz - -> ae2:certus_quartz_wrench - -shaped= - _ _ oredictionary:stickWood, - oredictionary:ingotIron oredictionary:stickWood _, - oredictionary:crystalCertusQuartz oredictionary:crystalCertusQuartz _ - -> ae2:certus_quartz_cutting_knife diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/index.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/tools/index.recipe deleted file mode 100644 index 6c804eb04..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/index.recipe +++ /dev/null @@ -1,6 +0,0 @@ -import=tools/certus_quartz.recipe -import=tools/matter_cannon.recipe -import=tools/misctools.recipe -import=tools/nether_quartz.recipe -import=tools/network.recipe -import=tools/paintballs.recipe diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/matter_cannon.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/tools/matter_cannon.recipe deleted file mode 100644 index 72538c63f..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/matter_cannon.recipe +++ /dev/null @@ -1,5 +0,0 @@ -shaped= - oredictionary:ingotIron oredictionary:ingotIron ae2:material.FormationCore, - ae2:material.Cell4kPart ae2:energy_cell _, - oredictionary:ingotIron _ _ - -> ae2:matter_cannon diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/misctools.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/tools/misctools.recipe deleted file mode 100644 index cd5cd1cce..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/misctools.recipe +++ /dev/null @@ -1,11 +0,0 @@ -shaped= - ae2:material.CertusQuartzCrystalCharged _ _, - _ oredictionary:ingotIron _, - _ _ oredictionary:ingotIron - -> ae2:charged_staff - -shaped= - fluixCrystal ae2:energy_cell _, - ae2:material.EngProcessor oredictionary:ingotIron _, - _ _ oredictionary:ingotIron - -> ae2:entropy_manipulator diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/nether_quartz.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/tools/nether_quartz.recipe deleted file mode 100644 index 23f529796..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/nether_quartz.recipe +++ /dev/null @@ -1,41 +0,0 @@ -shaped= - oredictionary:crystalNetherQuartz oredictionary:crystalNetherQuartz, - oredictionary:crystalNetherQuartz oredictionary:stickWood, - _ oredictionary:stickWood - -> ae2:nether_quartz_axe - -shaped= - oredictionary:crystalNetherQuartz oredictionary:crystalNetherQuartz oredictionary:crystalNetherQuartz, - _ oredictionary:stickWood _, - _ oredictionary:stickWood _ - -> ae2:nether_quartz_pickaxe - -shaped= - oredictionary:crystalNetherQuartz, - oredictionary:stickWood, - oredictionary:stickWood - -> ae2:nether_quartz_spade - -shaped= - oredictionary:crystalNetherQuartz, - oredictionary:crystalNetherQuartz, - oredictionary:stickWood - -> ae2:nether_quartz_sword - -shaped= - oredictionary:crystalNetherQuartz oredictionary:crystalNetherQuartz, - _ oredictionary:stickWood, - _ oredictionary:stickWood - -> ae2:nether_quartz_hoe - -shaped= - oredictionary:crystalNetherQuartz _ oredictionary:crystalNetherQuartz, - _ oredictionary:crystalNetherQuartz _, - oredictionary:crystalNetherQuartz _ oredictionary:crystalNetherQuartz - -> ae2:nether_quartz_wrench - -shaped= - _ _ oredictionary:stickWood, - oredictionary:ingotIron oredictionary:stickWood _, - oredictionary:crystalNetherQuartz oredictionary:crystalNetherQuartz _ - -> ae2:nether_quartz_cutting_knife diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/network.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/tools/network.recipe deleted file mode 100644 index dbdfa9801..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/network.recipe +++ /dev/null @@ -1,23 +0,0 @@ -shaped= - ae2:chest ae2:material.Cell1kPart ae2:energy_cell - -> ae2:portable_cell - -shapeless= - wrench monitor ae2:material.CalcProcessor oredictionary:chestWood - -> ae2:network_tool - -shaped= - ae2:material.EngProcessor oredictionary:ingotIron oredictionary:ingotIron, - oredictionary:ingotGold oredictionary:dustRedstone oredictionary:ingotGold - -> ae2:biometric_card - -shaped= - ae2:material.CalcProcessor oredictionary:ingotIron oredictionary:ingotIron, - oredictionary:ingotGold oredictionary:dustRedstone oredictionary:ingotGold - -> ae2:memory_card - -shaped= - ae2:material.FormationCore oredictionary:ingotIron _, - oredictionary:ingotIron ae2:material.Cell4kPart _, - _ _ ae2:energy_cell - -> ae2:color_applicator diff --git a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/paintballs.recipe b/src/main/resources/assets/appliedenergistics2/aerecipes/tools/paintballs.recipe deleted file mode 100644 index a67d44668..000000000 --- a/src/main/resources/assets/appliedenergistics2/aerecipes/tools/paintballs.recipe +++ /dev/null @@ -1,191 +0,0 @@ -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeWhite ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.white - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeBlack ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.black - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeRed ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.red - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeGreen ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.green - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeBrown ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.brown - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeBlue ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.blue - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyePurple ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.purple - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeCyan ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.cyan - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeLightGray ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.light_gray - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeGray ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.gray - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyePink ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.pink - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeLime ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.lime - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeYellow ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.yellow - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeLightBlue ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.light_blue - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeMagenta ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.magenta - -shaped= - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall, - ae2:material.MatterBall oredictionary:dyeOrange ae2:material.MatterBall, - ae2:material.MatterBall ae2:material.MatterBall ae2:material.MatterBall - -> 8 ae2:paint_ball.orange - -shaped= - ae2:paint_ball.white ae2:paint_ball.white ae2:paint_ball.white, - ae2:paint_ball.white oredictionary:dustGlowstone ae2:paint_ball.white, - ae2:paint_ball.white ae2:paint_ball.white ae2:paint_ball.white - -> 8 ae2:lumen_paint_ball.white - -shaped= - ae2:paint_ball.black ae2:paint_ball.black ae2:paint_ball.black, - ae2:paint_ball.black oredictionary:dustGlowstone ae2:paint_ball.black, - ae2:paint_ball.black ae2:paint_ball.black ae2:paint_ball.black - -> 8 ae2:lumen_paint_ball.black - -shaped= - ae2:paint_ball.red ae2:paint_ball.red ae2:paint_ball.red, - ae2:paint_ball.red oredictionary:dustGlowstone ae2:paint_ball.red, - ae2:paint_ball.red ae2:paint_ball.red ae2:paint_ball.red - -> 8 ae2:lumen_paint_ball.red - -shaped= - ae2:paint_ball.green ae2:paint_ball.green ae2:paint_ball.green, - ae2:paint_ball.green oredictionary:dustGlowstone ae2:paint_ball.green, - ae2:paint_ball.green ae2:paint_ball.green ae2:paint_ball.green - -> 8 ae2:lumen_paint_ball.green - -shaped= - ae2:paint_ball.brown ae2:paint_ball.brown ae2:paint_ball.brown, - ae2:paint_ball.brown oredictionary:dustGlowstone ae2:paint_ball.brown, - ae2:paint_ball.brown ae2:paint_ball.brown ae2:paint_ball.brown - -> 8 ae2:lumen_paint_ball.brown - -shaped= - ae2:paint_ball.blue ae2:paint_ball.blue ae2:paint_ball.blue, - ae2:paint_ball.blue oredictionary:dustGlowstone ae2:paint_ball.blue, - ae2:paint_ball.blue ae2:paint_ball.blue ae2:paint_ball.blue - -> 8 ae2:lumen_paint_ball.blue - -shaped= - ae2:paint_ball.purple ae2:paint_ball.purple ae2:paint_ball.purple, - ae2:paint_ball.purple oredictionary:dustGlowstone ae2:paint_ball.purple, - ae2:paint_ball.purple ae2:paint_ball.purple ae2:paint_ball.purple - -> 8 ae2:lumen_paint_ball.purple - -shaped= - ae2:paint_ball.cyan ae2:paint_ball.cyan ae2:paint_ball.cyan, - ae2:paint_ball.cyan oredictionary:dustGlowstone ae2:paint_ball.cyan, - ae2:paint_ball.cyan ae2:paint_ball.cyan ae2:paint_ball.cyan - -> 8 ae2:lumen_paint_ball.cyan - -shaped= - ae2:paint_ball.light_gray ae2:paint_ball.light_gray ae2:paint_ball.light_gray, - ae2:paint_ball.light_gray oredictionary:dustGlowstone ae2:paint_ball.light_gray, - ae2:paint_ball.light_gray ae2:paint_ball.light_gray ae2:paint_ball.light_gray - -> 8 ae2:lumen_paint_ball.light_gray - -shaped= - ae2:paint_ball.gray ae2:paint_ball.gray ae2:paint_ball.gray, - ae2:paint_ball.gray oredictionary:dustGlowstone ae2:paint_ball.gray, - ae2:paint_ball.gray ae2:paint_ball.gray ae2:paint_ball.gray - -> 8 ae2:lumen_paint_ball.gray - -shaped= - ae2:paint_ball.pink ae2:paint_ball.pink ae2:paint_ball.pink, - ae2:paint_ball.pink oredictionary:dustGlowstone ae2:paint_ball.pink, - ae2:paint_ball.pink ae2:paint_ball.pink ae2:paint_ball.pink - -> 8 ae2:lumen_paint_ball.pink - -shaped= - ae2:paint_ball.lime ae2:paint_ball.lime ae2:paint_ball.lime, - ae2:paint_ball.lime oredictionary:dustGlowstone ae2:paint_ball.lime, - ae2:paint_ball.lime ae2:paint_ball.lime ae2:paint_ball.lime - -> 8 ae2:lumen_paint_ball.lime - -shaped= - ae2:paint_ball.yellow ae2:paint_ball.yellow ae2:paint_ball.yellow, - ae2:paint_ball.yellow oredictionary:dustGlowstone ae2:paint_ball.yellow, - ae2:paint_ball.yellow ae2:paint_ball.yellow ae2:paint_ball.yellow - -> 8 ae2:lumen_paint_ball.yellow - -shaped= - ae2:paint_ball.light_blue ae2:paint_ball.light_blue ae2:paint_ball.light_blue, - ae2:paint_ball.light_blue oredictionary:dustGlowstone ae2:paint_ball.light_blue, - ae2:paint_ball.light_blue ae2:paint_ball.light_blue ae2:paint_ball.light_blue - -> 8 ae2:lumen_paint_ball.light_blue - -shaped= - ae2:paint_ball.magenta ae2:paint_ball.magenta ae2:paint_ball.magenta, - ae2:paint_ball.magenta oredictionary:dustGlowstone ae2:paint_ball.magenta, - ae2:paint_ball.magenta ae2:paint_ball.magenta ae2:paint_ball.magenta - -> 8 ae2:lumen_paint_ball.magenta - -shaped= - ae2:paint_ball.orange ae2:paint_ball.orange ae2:paint_ball.orange, - ae2:paint_ball.orange oredictionary:dustGlowstone ae2:paint_ball.orange, - ae2:paint_ball.orange ae2:paint_ball.orange ae2:paint_ball.orange - -> 8 ae2:lumen_paint_ball.orange diff --git a/src/main/resources/assets/appliedenergistics2/recipes/_constants.json b/src/main/resources/assets/appliedenergistics2/recipes/_constants.json index 81ec1f1c5..703cf7191 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/_constants.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/_constants.json @@ -169,7 +169,7 @@ }, { "type": "forge:ore_dict", - "ore": "crystalNetherQuartz" + "ore": "gemQuartz" }, { "type": "appliedenergistics2:part", @@ -212,7 +212,7 @@ "ingredient": [ { "type": "forge:ore_dict", - "ore": "crystalNetherQuartz" + "ore": "gemQuartz" }, { "type": "appliedenergistics2:part", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/materials/cardcrafting.json b/src/main/resources/assets/appliedenergistics2/recipes/materials/cardcrafting.json index 6be45b07f..a892f9b45 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/materials/cardcrafting.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/materials/cardcrafting.json @@ -13,7 +13,7 @@ "ingredients": [ { "type": "forge:ore_dict", - "ore": "craftingTableWood" + "ore": "workbench" }, { "type": "appliedenergistics2:part", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/network/crafting/molecular_assembler.json b/src/main/resources/assets/appliedenergistics2/recipes/network/crafting/molecular_assembler.json index 96c573e7c..97247f7b1 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/network/crafting/molecular_assembler.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/network/crafting/molecular_assembler.json @@ -18,7 +18,7 @@ }, "d": { "type": "forge:ore_dict", - "ore": "craftingTableWood" + "ore": "workbench" }, "a": { "type": "forge:ore_dict", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/network/parts/terminals_crafting.json b/src/main/resources/assets/appliedenergistics2/recipes/network/parts/terminals_crafting.json index 0e8bde028..1c6519584 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/network/parts/terminals_crafting.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/network/parts/terminals_crafting.json @@ -11,7 +11,7 @@ }, { "type": "forge:ore_dict", - "ore": "craftingTableWood" + "ore": "workbench" }, { "type": "appliedenergistics2:part", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_axe.json b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_axe.json index 0cdcc434b..123919328 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_axe.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_axe.json @@ -11,7 +11,7 @@ "key": { "a": { "type": "forge:ore_dict", - "ore": "crystalNetherQuartz" + "ore": "gemQuartz" }, "b": { "type": "forge:ore_dict", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_cutting_knife.json b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_cutting_knife.json index ebbf8312e..4205b95e9 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_cutting_knife.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_cutting_knife.json @@ -15,7 +15,7 @@ }, "c": { "type": "forge:ore_dict", - "ore": "crystalNetherQuartz" + "ore": "gemQuartz" }, "a": { "type": "forge:ore_dict", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_hoe.json b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_hoe.json index 287528339..44cfbdec4 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_hoe.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_hoe.json @@ -11,7 +11,7 @@ "key": { "a": { "type": "forge:ore_dict", - "ore": "crystalNetherQuartz" + "ore": "gemQuartz" }, "b": { "type": "forge:ore_dict", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_pickaxe.json b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_pickaxe.json index 646960947..11c136770 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_pickaxe.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_pickaxe.json @@ -11,7 +11,7 @@ "key": { "a": { "type": "forge:ore_dict", - "ore": "crystalNetherQuartz" + "ore": "gemQuartz" }, "b": { "type": "forge:ore_dict", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_spade.json b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_spade.json index 0b11731ad..6f0e8de7b 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_spade.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_spade.json @@ -11,7 +11,7 @@ "key": { "a": { "type": "forge:ore_dict", - "ore": "crystalNetherQuartz" + "ore": "gemQuartz" }, "b": { "type": "forge:ore_dict", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_sword.json b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_sword.json index 71d7899da..548d64f9e 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_sword.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_sword.json @@ -11,7 +11,7 @@ "key": { "a": { "type": "forge:ore_dict", - "ore": "crystalNetherQuartz" + "ore": "gemQuartz" }, "b": { "type": "forge:ore_dict", diff --git a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_wrench.json b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_wrench.json index 0435c6e58..483e3c2e7 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_wrench.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/tools/nether_quartz_wrench.json @@ -11,7 +11,7 @@ "key": { "a": { "type": "forge:ore_dict", - "ore": "crystalNetherQuartz" + "ore": "gemQuartz" } } }