Moved Recipe Registration to Init, Added Recipe Baking.

This commit is contained in:
AlgorithmX2 2014-07-25 17:49:49 -05:00
parent 846e8a0384
commit 31cb594f4d
10 changed files with 135 additions and 63 deletions

View file

@ -140,6 +140,7 @@ import appeng.parts.PartPlacement;
import appeng.recipes.AEItemResolver; import appeng.recipes.AEItemResolver;
import appeng.recipes.RecipeHandler; import appeng.recipes.RecipeHandler;
import appeng.recipes.game.FacadeRecipe; import appeng.recipes.game.FacadeRecipe;
import appeng.recipes.game.IRecipeBakeable;
import appeng.recipes.game.ShapedRecipe; import appeng.recipes.game.ShapedRecipe;
import appeng.recipes.game.ShapelessRecipe; import appeng.recipes.game.ShapelessRecipe;
import appeng.recipes.handlers.Crusher; import appeng.recipes.handlers.Crusher;
@ -561,7 +562,10 @@ public class Registration
// default settings.. // default settings..
((P2PTunnelRegistry) AEApi.instance().registries().p2pTunnel()).configure(); ((P2PTunnelRegistry) AEApi.instance().registries().p2pTunnel()).configure();
// NetworkRegistry.instance().registerGuiHandler( AppEng.instance, GuiBridge.GUI_Handler ); recipeHandler.injectRecipes();
if ( AEConfig.instance.isFeatureEnabled( AEFeature.enableFacadeCrafting ) )
CraftingManager.getInstance().getRecipeList().add( new FacadeRecipe() );
} }
public void PostInit(FMLPostInitializationEvent event) public void PostInit(FMLPostInitializationEvent event)
@ -689,12 +693,26 @@ public class Registration
* Whitelist AE2 * Whitelist AE2
*/ */
mr.whiteListTileEntity( AEBaseTile.class ); mr.whiteListTileEntity( AEBaseTile.class );
bakeRecipes();
}
recipeHandler.registerHandlers(); private void bakeRecipes()
{
if ( AEConfig.instance.isFeatureEnabled( AEFeature.enableFacadeCrafting ) ) for ( Object o : CraftingManager.getInstance().getRecipeList() )
CraftingManager.getInstance().getRecipeList().add( new FacadeRecipe() ); {
if ( o instanceof IRecipeBakeable )
{
try
{
( (IRecipeBakeable) o ).bake();
}
catch (Throwable e)
{
AELog.error( e );
}
}
}
} }
private void registerSpatial(boolean force) private void registerSpatial(boolean force)

View file

@ -17,6 +17,7 @@ public class GroupIngredient implements IIngredient
int qty = 0; int qty = 0;
final String name; final String name;
final List<IIngredient> ingredients; final List<IIngredient> ingredients;
ItemStack[] baked;
boolean isInside = false; boolean isInside = false;
@ -57,6 +58,9 @@ public class GroupIngredient implements IIngredient
@Override @Override
public ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError public ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError
{ {
if ( baked != null )
return baked;
if ( isInside ) if ( isInside )
return new ItemStack[0]; return new ItemStack[0];
@ -107,4 +111,10 @@ public class GroupIngredient implements IIngredient
return false; return false;
} }
@Override
public void bake() throws RegistrationError, MissingIngredientError
{
baked = getItemStackSet();
}
} }

View file

@ -26,6 +26,8 @@ public class Ingredient implements IIngredient
final public int qty; final public int qty;
ItemStack[] baked;
public Ingredient(RecipeHandler handler, String input, int qty) throws RecipeError, MissedIngredientSet { public Ingredient(RecipeHandler handler, String input, int qty) throws RecipeError, MissedIngredientSet {
// works no matter wat! // works no matter wat!
@ -159,6 +161,9 @@ public class Ingredient implements IIngredient
@Override @Override
public ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError public ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError
{ {
if ( baked != null )
return baked;
if ( nameSpace.equalsIgnoreCase( "oreDictionary" ) ) if ( nameSpace.equalsIgnoreCase( "oreDictionary" ) )
{ {
List<ItemStack> ores = OreDictionary.getOres( itemName ); List<ItemStack> ores = OreDictionary.getOres( itemName );
@ -211,4 +216,10 @@ public class Ingredient implements IIngredient
return isAir; return isAir;
} }
@Override
public void bake() throws RegistrationError, MissingIngredientError
{
baked = getItemStackSet();
}
} }

View file

@ -16,7 +16,8 @@ public class IngredientSet implements IIngredient
int qty = 0; int qty = 0;
final String name; final String name;
final List<ItemStack> items; final List<ItemStack> items;
ItemStack[] baked;
public IngredientSet(ResolverResultSet rr) { public IngredientSet(ResolverResultSet rr) {
name = rr.name; name = rr.name;
items = rr.results; items = rr.results;
@ -44,6 +45,9 @@ public class IngredientSet implements IIngredient
@Override @Override
public ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError public ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError
{ {
if ( baked != null )
return baked;
if ( isInside ) if ( isInside )
return new ItemStack[0]; return new ItemStack[0];
@ -75,4 +79,11 @@ public class IngredientSet implements IIngredient
{ {
return false; return false;
} }
@Override
public void bake() throws RegistrationError, MissingIngredientError
{
baked = getItemStackSet();
}
} }

View file

@ -12,6 +12,7 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
import com.google.common.collect.HashMultimap; import com.google.common.collect.HashMultimap;
import com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import appeng.api.AEApi; import appeng.api.AEApi;
@ -32,6 +33,7 @@ import appeng.items.misc.ItemCrystalSeed;
import appeng.items.parts.ItemMultiPart; import appeng.items.parts.ItemMultiPart;
import appeng.recipes.handlers.IWebsiteSeralizer; import appeng.recipes.handlers.IWebsiteSeralizer;
import appeng.recipes.handlers.OreRegistration; import appeng.recipes.handlers.OreRegistration;
import cpw.mods.fml.common.LoaderState;
import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier;
@ -77,8 +79,11 @@ public class RecipeHandler implements IRecipeHandler
} }
@Override @Override
public void registerHandlers() public void injectRecipes()
{ {
if ( cpw.mods.fml.common.Loader.instance().hasReachedState( LoaderState.POSTINITIALIZATION ))
throw new RuntimeException("Recipes must now be loaded in Init.");
HashMap<Class, Integer> processed = new HashMap<Class, Integer>(); HashMap<Class, Integer> processed = new HashMap<Class, Integer>();
try try
{ {

View file

@ -0,0 +1,12 @@
package appeng.recipes.game;
import appeng.api.exceptions.MissingIngredientError;
import appeng.api.exceptions.RegistrationError;
public interface IRecipeBakeable
{
void bake() throws RegistrationError, MissingIngredientError;
}

View file

@ -3,13 +3,16 @@ package appeng.recipes.game;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import appeng.api.exceptions.MissingIngredientError;
import appeng.api.exceptions.RegistrationError;
import appeng.api.recipes.IIngredient;
import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.OreDictionary;
public class ShapedRecipe implements IRecipe public class ShapedRecipe implements IRecipe, IRecipeBakeable
{ {
// Added in for future ease of change, but hard coded for now. // Added in for future ease of change, but hard coded for now.
@ -82,21 +85,9 @@ public class ShapedRecipe implements IRecipe
Character chr = (Character) recipe[idx]; Character chr = (Character) recipe[idx];
Object in = recipe[idx + 1]; Object in = recipe[idx + 1];
if ( in instanceof ItemStack ) if ( in instanceof IIngredient )
{ {
itemMap.put( chr, ((ItemStack) in).copy() ); itemMap.put( chr, in );
}
else if ( in instanceof ItemStack[] )
{
ItemStack[] a = (ItemStack[]) in;
if ( a.length == 1 )
itemMap.put( chr, a[0] );
else
itemMap.put( chr, a );
}
else if ( in instanceof String )
{
itemMap.put( chr, OreDictionary.getOres( (String) in ) );
} }
else else
{ {
@ -183,20 +174,24 @@ public class ShapedRecipe implements IRecipe
ItemStack slot = inv.getStackInRowAndColumn( x, y ); ItemStack slot = inv.getStackInRowAndColumn( x, y );
if ( target instanceof ItemStack ) if ( target instanceof IIngredient )
{
if ( !checkItemEquals( (ItemStack) target, slot ) )
{
return false;
}
}
else if ( target instanceof ItemStack[] )
{ {
boolean matched = false; boolean matched = false;
for (ItemStack item : (ItemStack[]) target) try
{ {
matched = matched || checkItemEquals( item, slot ); for (ItemStack item : ((IIngredient) target).getItemStackSet() )
{
matched = matched || checkItemEquals( item, slot );
}
}
catch (RegistrationError e)
{
// :P
}
catch (MissingIngredientError e)
{
// :P
} }
if ( !matched ) if ( !matched )
@ -270,4 +265,14 @@ public class ShapedRecipe implements IRecipe
return input; return input;
} }
@Override
public void bake() throws RegistrationError, MissingIngredientError
{
for ( Object o : getInput() )
{
if ( o instanceof IIngredient )
((IIngredient)o).bake();
}
}
} }

View file

@ -3,13 +3,16 @@ package appeng.recipes.game;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import appeng.api.exceptions.MissingIngredientError;
import appeng.api.exceptions.RegistrationError;
import appeng.api.recipes.IIngredient;
import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.OreDictionary;
public class ShapelessRecipe implements IRecipe public class ShapelessRecipe implements IRecipe, IRecipeBakeable
{ {
private ItemStack output = null; private ItemStack output = null;
@ -19,21 +22,9 @@ public class ShapelessRecipe implements IRecipe
output = result.copy(); output = result.copy();
for (Object in : recipe) for (Object in : recipe)
{ {
if ( in instanceof ItemStack ) if ( in instanceof IIngredient )
{ {
input.add( ((ItemStack) in).copy() ); input.add( in );
}
else if ( in instanceof ItemStack[] )
{
ItemStack[] a = (ItemStack[]) in;
if ( a.length == 1 )
input.add( a[0] );
else
input.add( a );
}
else if ( in instanceof String )
{
input.add( OreDictionary.getOres( (String) in ) );
} }
else else
{ {
@ -87,22 +78,22 @@ public class ShapelessRecipe implements IRecipe
Object next = req.next(); Object next = req.next();
if ( next instanceof ItemStack ) if ( next instanceof IIngredient )
{ {
match = checkItemEquals( (ItemStack) next, slot ); try
}
else if ( next instanceof ItemStack[] )
{
for (ItemStack item : (ItemStack[]) next)
{ {
match = match || checkItemEquals( item, slot ); for (ItemStack item : ((IIngredient) next).getItemStackSet() )
{
match = match || checkItemEquals( item, slot );
}
} }
} catch (RegistrationError e)
else if ( next instanceof ArrayList )
{
for (ItemStack item : (ArrayList<ItemStack>) next)
{ {
match = match || checkItemEquals( item, slot ); // :P
}
catch (MissingIngredientError e)
{
// :P
} }
} }
@ -141,4 +132,13 @@ public class ShapelessRecipe implements IRecipe
return this.input; return this.input;
} }
@Override
public void bake() throws RegistrationError, MissingIngredientError
{
for ( Object o : getInput() )
{
if ( o instanceof IIngredient )
((IIngredient)o).bake();
}
}
} }

View file

@ -69,7 +69,7 @@ public class Shaped implements ICraftHandler, IWebsiteSeralizer
{ {
row = row + first; row = row + first;
args.add( first ); args.add( first );
args.add( inputs.get( y ).get( x ).getItemStackSet() ); args.add( inputs.get( y ).get( x ) );
first++; first++;
} }

View file

@ -43,7 +43,7 @@ public class Shapeless implements ICraftHandler, IWebsiteSeralizer
{ {
List<Object> args = new ArrayList<Object>(); List<Object> args = new ArrayList<Object>();
for (IIngredient i : inputs) for (IIngredient i : inputs)
args.add( i.getItemStackSet() ); args.add( i );
ItemStack outIS = output.getItemStack(); ItemStack outIS = output.getItemStack();
@ -54,7 +54,7 @@ public class Shapeless implements ICraftHandler, IWebsiteSeralizer
catch (Throwable e) catch (Throwable e)
{ {
AELog.error( e ); AELog.error( e );
throw new RegistrationError( "Erro while adding shapeless recipe." ); throw new RegistrationError( "Error while adding shapeless recipe." );
} }
} }