From 40de3da45445dbbdb3ca3d09d10b71a220223d6c Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Thu, 1 May 2014 21:49:19 -0500 Subject: [PATCH] Added Railcraft Integration. --- core/Registration.java | 2 + integration/abstraction/IRC.java | 10 +++ integration/modules/RC.java | 39 ++++++++++ integration/modules/dead/RC.java | 51 ------------- .../helpers/NEIWorldCraftingHandler.java | 2 +- recipes/handlers/Crusher.java | 71 +++++++++++++++++++ transformer/asm/ASMIntegration.java | 4 +- 7 files changed, 125 insertions(+), 54 deletions(-) create mode 100644 integration/abstraction/IRC.java create mode 100644 integration/modules/RC.java delete mode 100644 integration/modules/dead/RC.java create mode 100644 recipes/handlers/Crusher.java diff --git a/core/Registration.java b/core/Registration.java index 989872f11..0b4c3d545 100644 --- a/core/Registration.java +++ b/core/Registration.java @@ -129,6 +129,7 @@ import appeng.recipes.RecipeHandler; import appeng.recipes.game.FacadeRecipe; import appeng.recipes.game.ShapedRecipe; import appeng.recipes.game.ShapelessRecipe; +import appeng.recipes.handlers.Crusher; import appeng.recipes.handlers.Grind; import appeng.recipes.handlers.GrindFZ; import appeng.recipes.handlers.Inscribe; @@ -178,6 +179,7 @@ public class Registration recipeRegistery.addNewSubItemResolver( new AEItemResolver() ); recipeRegistery.addNewCraftHandler( "grind", Grind.class ); + recipeRegistery.addNewCraftHandler( "crusher", Crusher.class ); recipeRegistery.addNewCraftHandler( "grindfz", GrindFZ.class ); recipeRegistery.addNewCraftHandler( "pulverizer", Pulverizer.class ); recipeRegistery.addNewCraftHandler( "macerator", Macerator.class ); diff --git a/integration/abstraction/IRC.java b/integration/abstraction/IRC.java new file mode 100644 index 000000000..7b48d9a1d --- /dev/null +++ b/integration/abstraction/IRC.java @@ -0,0 +1,10 @@ +package appeng.integration.abstraction; + +import net.minecraft.item.ItemStack; + +public interface IRC +{ + + void rockCrusher(ItemStack input, ItemStack output); + +} diff --git a/integration/modules/RC.java b/integration/modules/RC.java new file mode 100644 index 000000000..eba9526fd --- /dev/null +++ b/integration/modules/RC.java @@ -0,0 +1,39 @@ +package appeng.integration.modules; + +import mods.railcraft.api.crafting.IRockCrusherRecipe; +import mods.railcraft.api.crafting.RailcraftCraftingManager; +import net.minecraft.item.ItemStack; +import appeng.integration.BaseModule; +import appeng.integration.IIntegrationModule; +import appeng.integration.abstraction.IRC; + +public class RC extends BaseModule implements IIntegrationModule, IRC +{ + + public static RC instance; + + @Override + public void rockCrusher(ItemStack input, ItemStack output) + { + IRockCrusherRecipe re = RailcraftCraftingManager.rockCrusher.createNewRecipe( input, true, true ); + re.addOutput( output, 1.0f ); + } + + public RC() { + TestClass( RailcraftCraftingManager.class ); + TestClass( IRockCrusherRecipe.class ); + } + + @Override + public void Init() + { + // TODO Auto-generated method stub + + } + + @Override + public void PostInit() + { + + } +} diff --git a/integration/modules/dead/RC.java b/integration/modules/dead/RC.java deleted file mode 100644 index 92623c2ff..000000000 --- a/integration/modules/dead/RC.java +++ /dev/null @@ -1,51 +0,0 @@ -package appeng.integration.modules.dead; - -import mods.railcraft.api.crafting.IRockCrusherRecipe; -import mods.railcraft.api.crafting.RailcraftCraftingManager; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import appeng.api.AEApi; -import appeng.integration.IIntegrationModule; - -public class RC implements IIntegrationModule -{ - - public static RC instance; - - public void rockCrusher(ItemStack input, ItemStack output) - { - IRockCrusherRecipe re = RailcraftCraftingManager.rockCrusher.createNewRecipe( input, true, true ); - re.addOutput( output, 1.0f ); - } - - public void rockCrusher(ItemStack input, ItemStack output, ItemStack secondary, float chance) - { - IRockCrusherRecipe re = RailcraftCraftingManager.rockCrusher.createNewRecipe( input, true, true ); - re.addOutput( output, 1.0f ); - if ( secondary != null ) re.addOutput( secondary, chance ); - } - - @Override - public void Init() - { - // TODO Auto-generated method stub - - } - - @Override - public void PostInit() - { - // certus quartz - rockCrusher( AEApi.instance().materials().materialCertusQuartzCrystal.stack( 1 ), - AEApi.instance().materials().materialCertusQuartzDust.stack( 1 ) ); - - rockCrusher( AEApi.instance().materials().materialCertusQuartzCrystalCharged.stack( 1 ), - AEApi.instance().materials().materialCertusQuartzDust.stack( 1 ) ); - - // fluix - rockCrusher( AEApi.instance().materials().materialFluixCrystal.stack( 1 ), AEApi.instance().materials().materialFluixDust.stack( 1 ) ); - - // nether quartz - rockCrusher( new ItemStack( Item.netherQuartz ), AEApi.instance().materials().materialNetherQuartzDust.stack( 1 ) ); - } -} diff --git a/integration/modules/helpers/NEIWorldCraftingHandler.java b/integration/modules/helpers/NEIWorldCraftingHandler.java index 197275c36..ed9f71293 100644 --- a/integration/modules/helpers/NEIWorldCraftingHandler.java +++ b/integration/modules/helpers/NEIWorldCraftingHandler.java @@ -83,7 +83,7 @@ public class NEIWorldCraftingHandler implements ICraftingHandler, IUsageHandler { if ( this.outputs.size() > recipe ) { - PositionedStack cr = this.outputs.get( recipe ); + // PositionedStack cr = this.outputs.get( recipe ); String details = this.details.get( this.offsets.get( recipe ) ); FontRenderer fr = Minecraft.getMinecraft().fontRenderer; diff --git a/recipes/handlers/Crusher.java b/recipes/handlers/Crusher.java new file mode 100644 index 000000000..0e59914da --- /dev/null +++ b/recipes/handlers/Crusher.java @@ -0,0 +1,71 @@ +package appeng.recipes.handlers; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import appeng.api.exceptions.MissingIngredientError; +import appeng.api.exceptions.RecipeError; +import appeng.api.exceptions.RegistrationError; +import appeng.api.recipes.ICraftHandler; +import appeng.api.recipes.IIngredient; +import appeng.core.AELog; +import appeng.core.AppEng; +import appeng.integration.abstraction.IRC; +import appeng.recipes.RecipeHandler; +import appeng.util.Platform; + +public class Crusher implements ICraftHandler, IWebsiteSeralizer +{ + + IIngredient pro_input; + IIngredient pro_output[]; + + @Override + public void setup(List> input, List> output) throws RecipeError + { + if ( input.size() == 1 && output.size() == 1 ) + { + int outs = output.get( 0 ).size(); + if ( input.get( 0 ).size() == 1 && outs == 1 ) + { + pro_input = input.get( 0 ).get( 0 ); + pro_output = output.get( 0 ).toArray( new IIngredient[outs] ); + return; + } + } + new RecipeError( "Crusher must have a single input, and single output." ); + } + + @Override + public void register() throws RegistrationError, MissingIngredientError + { + if ( AppEng.instance.isIntegrationEnabled( "RC" ) ) + { + IRC rc = (IRC) AppEng.instance.getIntegration( "RC" ); + for (ItemStack is : pro_input.getItemStackSet()) + { + try + { + rc.rockCrusher( is, pro_output[0].getItemStack() ); + } + catch (java.lang.RuntimeException err) + { + AELog.info( "RC not happy - " + err.getMessage() ); + } + } + } + } + + @Override + public boolean canCraft(ItemStack output) throws RegistrationError, MissingIngredientError + { + return Platform.isSameItemPrecise( pro_output[0].getItemStack(), output ); + } + + @Override + public String getPattern(RecipeHandler h) + { + return null; + } + +} diff --git a/transformer/asm/ASMIntegration.java b/transformer/asm/ASMIntegration.java index 7c47818de..0ebfef173 100644 --- a/transformer/asm/ASMIntegration.java +++ b/transformer/asm/ASMIntegration.java @@ -31,7 +31,7 @@ public class ASMIntegration implements IClassTransformer integrationModules.add( IntegrationSide.BOTH, "Rotary Craft", "RotaryCraft", "RotaryCraft" ); integrationModules.add( IntegrationSide.BOTH, "Industrial Craft 2", "IC2", "IC2" ); - // integrationModules.add( IntegrationSide.BOTH, "Railcraft", "Railcraft", "RC" ); + integrationModules.add( IntegrationSide.BOTH, "Railcraft", "Railcraft", "RC" ); // integrationModules.add( IntegrationSide.BOTH, "Thermal Expansion", "ThermalExpansion", "TE" ); // integrationModules.add( IntegrationSide.BOTH, "Mystcraft", "Mystcraft", "Mystcraft" ); integrationModules.add( IntegrationSide.BOTH, "BuildCraft", "BuildCraft|Silicon", "BC" ); @@ -40,7 +40,7 @@ public class ASMIntegration implements IClassTransformer // integrationModules.add( IntegrationSide.BOTH, "Greg Tech", "gregtech_addon", "GT" ); // integrationModules.add( IntegrationSide.BOTH, "Universal Electricity", null, "UE" ); // integrationModules.add( IntegrationSide.BOTH, "Logistics Pipes", "LogisticsPipes|Main", "LP" ); - // integrationModules.add( IntegrationSide.CLIENT, "Inventory Tweaks", "", "InvTweaks" ); + integrationModules.add( IntegrationSide.CLIENT, "Inventory Tweaks", "", "InvTweaks" ); integrationModules.add( IntegrationSide.BOTH, "Mine Factory Reloaded", "MineFactoryReloaded", "MFR" ); integrationModules.add( IntegrationSide.BOTH, "Deep Storage Unit", null, "DSU" ); // integrationModules.add( IntegrationSide.BOTH, "Better Storage", "betterstorage" );