Moved Recipe Registration to Init, Added Recipe Baking.
This commit is contained in:
parent
846e8a0384
commit
31cb594f4d
10 changed files with 135 additions and 63 deletions
|
@ -140,6 +140,7 @@ import appeng.parts.PartPlacement;
|
|||
import appeng.recipes.AEItemResolver;
|
||||
import appeng.recipes.RecipeHandler;
|
||||
import appeng.recipes.game.FacadeRecipe;
|
||||
import appeng.recipes.game.IRecipeBakeable;
|
||||
import appeng.recipes.game.ShapedRecipe;
|
||||
import appeng.recipes.game.ShapelessRecipe;
|
||||
import appeng.recipes.handlers.Crusher;
|
||||
|
@ -561,7 +562,10 @@ public class Registration
|
|||
// default settings..
|
||||
((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)
|
||||
|
@ -690,11 +694,25 @@ public class Registration
|
|||
*/
|
||||
mr.whiteListTileEntity( AEBaseTile.class );
|
||||
|
||||
recipeHandler.registerHandlers();
|
||||
|
||||
if ( AEConfig.instance.isFeatureEnabled( AEFeature.enableFacadeCrafting ) )
|
||||
CraftingManager.getInstance().getRecipeList().add( new FacadeRecipe() );
|
||||
bakeRecipes();
|
||||
}
|
||||
|
||||
private void bakeRecipes()
|
||||
{
|
||||
for ( Object o : CraftingManager.getInstance().getRecipeList() )
|
||||
{
|
||||
if ( o instanceof IRecipeBakeable )
|
||||
{
|
||||
try
|
||||
{
|
||||
( (IRecipeBakeable) o ).bake();
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void registerSpatial(boolean force)
|
||||
|
|
|
@ -17,6 +17,7 @@ public class GroupIngredient implements IIngredient
|
|||
int qty = 0;
|
||||
final String name;
|
||||
final List<IIngredient> ingredients;
|
||||
ItemStack[] baked;
|
||||
|
||||
boolean isInside = false;
|
||||
|
||||
|
@ -57,6 +58,9 @@ public class GroupIngredient implements IIngredient
|
|||
@Override
|
||||
public ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError
|
||||
{
|
||||
if ( baked != null )
|
||||
return baked;
|
||||
|
||||
if ( isInside )
|
||||
return new ItemStack[0];
|
||||
|
||||
|
@ -107,4 +111,10 @@ public class GroupIngredient implements IIngredient
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bake() throws RegistrationError, MissingIngredientError
|
||||
{
|
||||
baked = getItemStackSet();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -26,6 +26,8 @@ public class Ingredient implements IIngredient
|
|||
|
||||
final public int qty;
|
||||
|
||||
ItemStack[] baked;
|
||||
|
||||
public Ingredient(RecipeHandler handler, String input, int qty) throws RecipeError, MissedIngredientSet {
|
||||
|
||||
// works no matter wat!
|
||||
|
@ -159,6 +161,9 @@ public class Ingredient implements IIngredient
|
|||
@Override
|
||||
public ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError
|
||||
{
|
||||
if ( baked != null )
|
||||
return baked;
|
||||
|
||||
if ( nameSpace.equalsIgnoreCase( "oreDictionary" ) )
|
||||
{
|
||||
List<ItemStack> ores = OreDictionary.getOres( itemName );
|
||||
|
@ -211,4 +216,10 @@ public class Ingredient implements IIngredient
|
|||
return isAir;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bake() throws RegistrationError, MissingIngredientError
|
||||
{
|
||||
baked = getItemStackSet();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ public class IngredientSet implements IIngredient
|
|||
int qty = 0;
|
||||
final String name;
|
||||
final List<ItemStack> items;
|
||||
ItemStack[] baked;
|
||||
|
||||
public IngredientSet(ResolverResultSet rr) {
|
||||
name = rr.name;
|
||||
|
@ -44,6 +45,9 @@ public class IngredientSet implements IIngredient
|
|||
@Override
|
||||
public ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError
|
||||
{
|
||||
if ( baked != null )
|
||||
return baked;
|
||||
|
||||
if ( isInside )
|
||||
return new ItemStack[0];
|
||||
|
||||
|
@ -75,4 +79,11 @@ public class IngredientSet implements IIngredient
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bake() throws RegistrationError, MissingIngredientError
|
||||
{
|
||||
baked = getItemStackSet();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import java.util.zip.ZipEntry;
|
|||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import appeng.api.AEApi;
|
||||
|
@ -32,6 +33,7 @@ import appeng.items.misc.ItemCrystalSeed;
|
|||
import appeng.items.parts.ItemMultiPart;
|
||||
import appeng.recipes.handlers.IWebsiteSeralizer;
|
||||
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.UniqueIdentifier;
|
||||
|
||||
|
@ -77,8 +79,11 @@ public class RecipeHandler implements IRecipeHandler
|
|||
}
|
||||
|
||||
@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>();
|
||||
try
|
||||
{
|
||||
|
|
12
recipes/game/IRecipeBakeable.java
Normal file
12
recipes/game/IRecipeBakeable.java
Normal 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;
|
||||
|
||||
}
|
|
@ -3,13 +3,16 @@ package appeng.recipes.game;
|
|||
import java.util.ArrayList;
|
||||
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.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.world.World;
|
||||
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.
|
||||
|
@ -82,21 +85,9 @@ public class ShapedRecipe implements IRecipe
|
|||
Character chr = (Character) recipe[idx];
|
||||
Object in = recipe[idx + 1];
|
||||
|
||||
if ( in instanceof ItemStack )
|
||||
if ( in instanceof IIngredient )
|
||||
{
|
||||
itemMap.put( chr, ((ItemStack) in).copy() );
|
||||
}
|
||||
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 ) );
|
||||
itemMap.put( chr, in );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -183,21 +174,25 @@ public class ShapedRecipe implements IRecipe
|
|||
|
||||
ItemStack slot = inv.getStackInRowAndColumn( x, y );
|
||||
|
||||
if ( target instanceof ItemStack )
|
||||
{
|
||||
if ( !checkItemEquals( (ItemStack) target, slot ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if ( target instanceof ItemStack[] )
|
||||
if ( target instanceof IIngredient )
|
||||
{
|
||||
boolean matched = false;
|
||||
|
||||
for (ItemStack item : (ItemStack[]) target)
|
||||
try
|
||||
{
|
||||
for (ItemStack item : ((IIngredient) target).getItemStackSet() )
|
||||
{
|
||||
matched = matched || checkItemEquals( item, slot );
|
||||
}
|
||||
}
|
||||
catch (RegistrationError e)
|
||||
{
|
||||
// :P
|
||||
}
|
||||
catch (MissingIngredientError e)
|
||||
{
|
||||
// :P
|
||||
}
|
||||
|
||||
if ( !matched )
|
||||
{
|
||||
|
@ -270,4 +265,14 @@ public class ShapedRecipe implements IRecipe
|
|||
return input;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bake() throws RegistrationError, MissingIngredientError
|
||||
{
|
||||
for ( Object o : getInput() )
|
||||
{
|
||||
if ( o instanceof IIngredient )
|
||||
((IIngredient)o).bake();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -3,13 +3,16 @@ package appeng.recipes.game;
|
|||
import java.util.ArrayList;
|
||||
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.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
public class ShapelessRecipe implements IRecipe
|
||||
public class ShapelessRecipe implements IRecipe, IRecipeBakeable
|
||||
{
|
||||
|
||||
private ItemStack output = null;
|
||||
|
@ -19,21 +22,9 @@ public class ShapelessRecipe implements IRecipe
|
|||
output = result.copy();
|
||||
for (Object in : recipe)
|
||||
{
|
||||
if ( in instanceof ItemStack )
|
||||
if ( in instanceof IIngredient )
|
||||
{
|
||||
input.add( ((ItemStack) in).copy() );
|
||||
}
|
||||
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 ) );
|
||||
input.add( in );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -87,22 +78,22 @@ public class ShapelessRecipe implements IRecipe
|
|||
|
||||
Object next = req.next();
|
||||
|
||||
if ( next instanceof ItemStack )
|
||||
if ( next instanceof IIngredient )
|
||||
{
|
||||
match = checkItemEquals( (ItemStack) next, slot );
|
||||
}
|
||||
else if ( next instanceof ItemStack[] )
|
||||
try
|
||||
{
|
||||
for (ItemStack item : (ItemStack[]) next)
|
||||
for (ItemStack item : ((IIngredient) next).getItemStackSet() )
|
||||
{
|
||||
match = match || checkItemEquals( item, slot );
|
||||
}
|
||||
}
|
||||
else if ( next instanceof ArrayList )
|
||||
catch (RegistrationError e)
|
||||
{
|
||||
for (ItemStack item : (ArrayList<ItemStack>) next)
|
||||
// :P
|
||||
}
|
||||
catch (MissingIngredientError e)
|
||||
{
|
||||
match = match || checkItemEquals( item, slot );
|
||||
// :P
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -141,4 +132,13 @@ public class ShapelessRecipe implements IRecipe
|
|||
return this.input;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bake() throws RegistrationError, MissingIngredientError
|
||||
{
|
||||
for ( Object o : getInput() )
|
||||
{
|
||||
if ( o instanceof IIngredient )
|
||||
((IIngredient)o).bake();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -69,7 +69,7 @@ public class Shaped implements ICraftHandler, IWebsiteSeralizer
|
|||
{
|
||||
row = row + first;
|
||||
args.add( first );
|
||||
args.add( inputs.get( y ).get( x ).getItemStackSet() );
|
||||
args.add( inputs.get( y ).get( x ) );
|
||||
|
||||
first++;
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ public class Shapeless implements ICraftHandler, IWebsiteSeralizer
|
|||
{
|
||||
List<Object> args = new ArrayList<Object>();
|
||||
for (IIngredient i : inputs)
|
||||
args.add( i.getItemStackSet() );
|
||||
args.add( i );
|
||||
|
||||
ItemStack outIS = output.getItemStack();
|
||||
|
||||
|
@ -54,7 +54,7 @@ public class Shapeless implements ICraftHandler, IWebsiteSeralizer
|
|||
catch (Throwable e)
|
||||
{
|
||||
AELog.error( e );
|
||||
throw new RegistrationError( "Erro while adding shapeless recipe." );
|
||||
throw new RegistrationError( "Error while adding shapeless recipe." );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue