Relocate Source to proper directory.

This commit is contained in:
AlgorithmX2
2014-09-23 19:26:27 -05:00
parent fe927ce65d
commit 386d18a059
785 changed files with 35585 additions and 35580 deletions
@@ -0,0 +1,72 @@
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.IntegrationType;
import appeng.integration.abstraction.IRC;
import appeng.recipes.RecipeHandler;
import appeng.util.Platform;
public class Crusher implements ICraftHandler, IWebsiteSerializer
{
IIngredient pro_input;
IIngredient pro_output[];
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> 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( IntegrationType.RC ) )
{
IRC rc = (IRC) AppEng.instance.getIntegration( IntegrationType.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;
}
}
@@ -0,0 +1,56 @@
package appeng.recipes.handlers;
import java.util.List;
import net.minecraft.item.ItemStack;
import appeng.api.AEApi;
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.recipes.RecipeHandler;
import appeng.util.Platform;
public class Grind implements ICraftHandler, IWebsiteSerializer
{
IIngredient pro_input;
IIngredient pro_output[];
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> 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( "Grind must have a single input, and single output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
for (ItemStack is : pro_input.getItemStackSet())
AEApi.instance().registries().grinder().addRecipe( is, pro_output[0].getItemStack(), 8 );
}
@Override
public boolean canCraft(ItemStack output) throws RegistrationError, MissingIngredientError {
return Platform.isSameItemPrecise( pro_output[0].getItemStack(),output );
}
@Override
public String getPattern( RecipeHandler h ) {
return "grind\n"+
h.getName(pro_input)+"\n"+
h.getName(pro_output[0]);
}
}
@@ -0,0 +1,72 @@
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.IntegrationType;
import appeng.integration.abstraction.IFZ;
import appeng.recipes.RecipeHandler;
import appeng.util.Platform;
public class GrindFZ implements ICraftHandler, IWebsiteSerializer
{
IIngredient pro_input;
IIngredient pro_output[];
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> 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( "Grind must have a single input, and single output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
if ( AppEng.instance.isIntegrationEnabled( IntegrationType.FZ ) )
{
IFZ fz = (IFZ) AppEng.instance.getIntegration( IntegrationType.FZ );
for (ItemStack is : pro_input.getItemStackSet())
{
try
{
fz.grinderRecipe( is, pro_output[0].getItemStack() );
}
catch (java.lang.RuntimeException err)
{
AELog.info( "FZ 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;
}
}
@@ -0,0 +1,82 @@
package appeng.recipes.handlers;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
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.recipes.RecipeHandler;
import appeng.util.Platform;
import cpw.mods.fml.common.event.FMLInterModComms;
public class HCCrusher implements ICraftHandler, IWebsiteSerializer
{
IIngredient pro_input;
IIngredient pro_output[];
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> 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
{
for (ItemStack is : pro_input.getItemStackSet())
{
try
{
NBTTagCompound toRegister = new NBTTagCompound();
ItemStack beginStack = is;
ItemStack endStack = pro_output[0].getItemStack();
NBTTagCompound itemFrom = new NBTTagCompound();
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 (java.lang.RuntimeException err)
{
AELog.info( "Hydraulicraft 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;
}
}
@@ -0,0 +1,15 @@
package appeng.recipes.handlers;
import net.minecraft.item.ItemStack;
import appeng.api.exceptions.MissingIngredientError;
import appeng.api.exceptions.RegistrationError;
import appeng.recipes.RecipeHandler;
public interface IWebsiteSerializer
{
String getPattern(RecipeHandler han);
boolean canCraft(ItemStack output) throws RegistrationError, MissingIngredientError;
}
@@ -0,0 +1,119 @@
package appeng.recipes.handlers;
import java.util.HashSet;
import java.util.LinkedList;
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.recipes.RecipeHandler;
import appeng.util.Platform;
public class Inscribe implements ICraftHandler, IWebsiteSerializer
{
public static class InscriberRecipe
{
public InscriberRecipe(ItemStack[] imprintable, ItemStack plateA, ItemStack plateB, ItemStack out, boolean usePlates) {
this.imprintable = imprintable;
this.usePlates = usePlates;
this.plateA = plateA;
this.plateB = plateB;
output = out;
}
final public boolean usePlates;
final public ItemStack plateA;
final public ItemStack[] imprintable;
final public ItemStack plateB;
final public ItemStack output;
};
public boolean usePlates = false;
public static HashSet<ItemStack> plates = new HashSet();
public static HashSet<ItemStack> inputs = new HashSet();
public static LinkedList<InscriberRecipe> recipes = new LinkedList();
IIngredient imprintable;
IIngredient plateA;
IIngredient plateB;
IIngredient output;
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> output) throws RecipeError
{
if ( output.size() == 1 && output.get( 0 ).size() == 1 )
{
if ( input.size() == 1 && input.get( 0 ).size() > 1 )
{
imprintable = input.get( 0 ).get( 0 );
plateA = input.get( 0 ).get( 1 );
if ( input.get( 0 ).size() > 2 )
plateB = input.get( 0 ).get( 2 );
this.output = output.get( 0 ).get( 0 );
}
else
throw new RecipeError( "Inscriber recipes cannot have rows, and must have more then one input." );
}
else
throw new RecipeError( "Inscriber recipes must produce a single output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
if ( imprintable != null )
for (ItemStack s : imprintable.getItemStackSet())
inputs.add( s );
if ( plateA != null )
for (ItemStack s : plateA.getItemStackSet())
plates.add( s );
if ( plateB != null )
for (ItemStack s : plateB.getItemStackSet())
plates.add( s );
InscriberRecipe ir = new InscriberRecipe( imprintable.getItemStackSet(), plateA == null ? null : plateA.getItemStack(), plateB == null ? null
: plateB.getItemStack(), output.getItemStack(), usePlates );
recipes.add( ir );
}
@Override
public boolean canCraft(ItemStack reqOutput) throws RegistrationError, MissingIngredientError
{
return Platform.isSameItemPrecise( output.getItemStack(), reqOutput );
}
@Override
public String getPattern(RecipeHandler h)
{
String o = "inscriber " + output.getQty() + "\n";
o += h.getName( output ) + "\n";
if ( plateA != null )
o += h.getName( plateA )+"\n";
o += h.getName(imprintable);
if ( plateB != null )
o += "\n"+h.getName( plateB );
return o;
}
}
@@ -0,0 +1,72 @@
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.IntegrationType;
import appeng.integration.abstraction.IIC2;
import appeng.recipes.RecipeHandler;
import appeng.util.Platform;
public class Macerator implements ICraftHandler, IWebsiteSerializer
{
IIngredient pro_input;
IIngredient pro_output[];
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> 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( "Grind must have a single input, and single output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
if ( AppEng.instance.isIntegrationEnabled( IntegrationType.IC2 ) )
{
IIC2 ic2 = (IIC2) AppEng.instance.getIntegration( IntegrationType.IC2 );
for (ItemStack is : pro_input.getItemStackSet())
{
try
{
ic2.maceratorRecipe( is, pro_output[0].getItemStack() );
}
catch (java.lang.RuntimeException err)
{
AELog.info( "IC2 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;
}
}
@@ -0,0 +1,72 @@
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.IntegrationType;
import appeng.integration.abstraction.IMekanism;
import appeng.recipes.RecipeHandler;
import appeng.util.Platform;
public class MekCrusher implements ICraftHandler, IWebsiteSerializer
{
IIngredient pro_input;
IIngredient pro_output[];
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> 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( "MekCrusher must have a single input, and single output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
if ( AppEng.instance.isIntegrationEnabled( IntegrationType.Mekanism ) )
{
IMekanism rc = (IMekanism) AppEng.instance.getIntegration( IntegrationType.Mekanism );
for (ItemStack is : pro_input.getItemStackSet())
{
try
{
rc.addCrusherRecipe( is, pro_output[0].getItemStack() );
}
catch (java.lang.RuntimeException err)
{
AELog.info( "Mekanism 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;
}
}
@@ -0,0 +1,72 @@
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.IntegrationType;
import appeng.integration.abstraction.IMekanism;
import appeng.recipes.RecipeHandler;
import appeng.util.Platform;
public class MekEnrichment implements ICraftHandler, IWebsiteSerializer
{
IIngredient pro_input;
IIngredient pro_output[];
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> 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( "MekCrusher must have a single input, and single output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
if ( AppEng.instance.isIntegrationEnabled( IntegrationType.Mekanism ) )
{
IMekanism rc = (IMekanism) AppEng.instance.getIntegration( IntegrationType.Mekanism );
for (ItemStack is : pro_input.getItemStackSet())
{
try
{
rc.addEnrichmentChamberRecipe( is, pro_output[0].getItemStack() );
}
catch (java.lang.RuntimeException err)
{
AELog.info( "Mekanism 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;
}
}
@@ -0,0 +1,42 @@
package appeng.recipes.handlers;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
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;
public class OreRegistration implements ICraftHandler
{
List<IIngredient> inputs;
String name;
public OreRegistration(List<IIngredient> in, String out) {
inputs = in;
name = out;
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
for (IIngredient i : inputs)
{
for (ItemStack is : i.getItemStackSet())
{
OreDictionary.registerOre( name, is );
}
}
}
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> output) throws RecipeError
{
}
}
@@ -0,0 +1,10 @@
package appeng.recipes.handlers;
public class Press extends Inscribe
{
public Press() {
usePlates = true;
}
}
@@ -0,0 +1,67 @@
package appeng.recipes.handlers;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
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.recipes.RecipeHandler;
import appeng.util.Platform;
import cpw.mods.fml.common.event.FMLInterModComms;
public class Pulverizer implements ICraftHandler, IWebsiteSerializer
{
IIngredient pro_input;
IIngredient pro_output[];
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> 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( "Grind must have a single input, and single output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
NBTTagCompound toSend = new NBTTagCompound();
toSend.setInteger( "energy", 800 );
toSend.setTag( "primaryOutput", new NBTTagCompound() );
pro_output[0].getItemStack().writeToNBT( toSend.getCompoundTag( "primaryOutput" ) );
for (ItemStack is : pro_input.getItemStackSet())
{
toSend.setTag( "input", new NBTTagCompound() );
is.writeToNBT( toSend.getCompoundTag( "input" ) );
FMLInterModComms.sendMessage( "ThermalExpansion", "PulverizerRecipe", toSend );
}
}
@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;
}
}
@@ -0,0 +1,134 @@
package appeng.recipes.handlers;
import java.util.ArrayList;
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.recipes.RecipeHandler;
import appeng.recipes.game.ShapedRecipe;
import appeng.util.Platform;
import cpw.mods.fml.common.registry.GameRegistry;
public class Shaped implements ICraftHandler, IWebsiteSerializer
{
private int rows;
private int cols;
List<List<IIngredient>> inputs;
IIngredient output;
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> output) throws RecipeError
{
if ( output.size() == 1 && output.get( 0 ).size() == 1 )
{
rows = input.size();
if ( rows > 0 && input.size() <= 3 )
{
cols = input.get( 0 ).size();
if ( cols <= 3 && cols >= 1 )
{
for (int x = 0; x < input.size(); x++)
if ( input.get( x ).size() != cols )
throw new RecipeError( "all rows in a shaped crafting recipe must contain the same number of ingredients." );
inputs = input;
this.output = output.get( 0 ).get( 0 );
}
else
throw new RecipeError( "Crafting recipes must have 1-3 columns." );
}
else
throw new RecipeError( "shaped crafting recipes must have 1-3 rows." );
}
else
throw new RecipeError( "Crafting must produce a single output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
char first = 'A';
List<Object> args = new ArrayList<Object>();
for (int y = 0; y < rows; y++)
{
String row = "";
for (int x = 0; x < cols; x++)
{
if ( inputs.get( y ).get( x ).isAir() )
row = row + " ";
else
{
row = row + first;
args.add( first );
args.add( inputs.get( y ).get( x ) );
first++;
}
}
args.add( y, new String( row ) );
}
ItemStack outIS = output.getItemStack();
try
{
GameRegistry.addRecipe( new ShapedRecipe( outIS, args.toArray( new Object[args.size()] ) ) );
}
catch (Throwable e)
{
AELog.error( e );
throw new RegistrationError( "Error while adding shaped recipe." );
}
}
@Override
public boolean canCraft(ItemStack reqOutput) throws RegistrationError, MissingIngredientError
{
for (int y = 0; y < rows; y++)
for (int x = 0; x < cols; x++)
{
IIngredient i = inputs.get( y ).get( x );
if ( !i.isAir() )
{
for ( ItemStack r : i.getItemStackSet() )
{
if ( Platform.isSameItemPrecise( r, reqOutput) )
return false;
}
}
}
return Platform.isSameItemPrecise( output.getItemStack(), reqOutput );
}
@Override
public String getPattern(RecipeHandler h)
{
String o = "shaped " + output.getQty() + " " + cols + "x" + rows + "\n";
o += h.getName( output ) + "\n";
for (int y = 0; y < rows; y++)
for (int x = 0; x < cols; x++)
{
IIngredient i = inputs.get( y ).get( x );
if ( i.isAir() )
o += "air" + (x + 1 == cols ? "\n" : " ");
else
o += h.getName( i ) + (x + 1 == cols ? "\n" : " ");
}
return o.trim();
}
}
@@ -0,0 +1,98 @@
package appeng.recipes.handlers;
import java.util.ArrayList;
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.recipes.RecipeHandler;
import appeng.recipes.game.ShapelessRecipe;
import appeng.util.Platform;
import cpw.mods.fml.common.registry.GameRegistry;
public class Shapeless implements ICraftHandler, IWebsiteSerializer
{
List<IIngredient> inputs;
IIngredient output;
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> output) throws RecipeError
{
if ( output.size() == 1 && output.get( 0 ).size() == 1 )
{
if ( input.size() == 1 )
{
inputs = input.get( 0 );
this.output = output.get( 0 ).get( 0 );
}
else
throw new RecipeError( "Shapeless crafting recipes cannot have rows." );
}
else
throw new RecipeError( "Crafting must produce a single output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
List<Object> args = new ArrayList<Object>();
for (IIngredient i : inputs)
args.add( i );
ItemStack outIS = output.getItemStack();
try
{
GameRegistry.addRecipe( new ShapelessRecipe( outIS, args.toArray( new Object[args.size()] ) ) );
}
catch (Throwable e)
{
AELog.error( e );
throw new RegistrationError( "Error while adding shapeless recipe." );
}
}
@Override
public boolean canCraft(ItemStack reqOutput) throws RegistrationError, MissingIngredientError {
for ( int y = 0; y < inputs.size(); y++ )
{
IIngredient i = inputs.get(y);
if ( !i.isAir() )
{
for ( ItemStack r : i.getItemStackSet() )
{
if ( Platform.isSameItemPrecise( r, reqOutput) )
return false;
}
}
}
return Platform.isSameItemPrecise( output.getItemStack(),reqOutput );
}
@Override
public String getPattern( RecipeHandler h) {
String o = "shapeless "+output.getQty()+"\n";
o += h.getName(output)+"\n";
for ( int y = 0; y < inputs.size(); y++ )
{
IIngredient i = inputs.get(y);
if ( i.isAir() )
o += "air"+( y +1 == inputs.size() ? "\n" : " " );
else
o += h.getName(i)+( y +1 == inputs.size() ? "\n" : " " );
}
return o.trim();
}
}
@@ -0,0 +1,61 @@
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.recipes.RecipeHandler;
import appeng.util.Platform;
import cpw.mods.fml.common.registry.GameRegistry;
public class Smelt implements ICraftHandler, IWebsiteSerializer
{
IIngredient in;
IIngredient out;
@Override
public void setup(List<List<IIngredient>> input, List<List<IIngredient>> output) throws RecipeError
{
if ( input.size() == 1 && output.size() == 1 )
{
List<IIngredient> inputList = input.get( 0 );
List<IIngredient> outputList = output.get( 0 );
if ( inputList.size() == 1 && outputList.size() == 1 )
{
in = inputList.get( 0 );
out = outputList.get( 0 );
return;
}
}
throw new RecipeError( "Smelting recipe can only have a single input and output." );
}
@Override
public void register() throws RegistrationError, MissingIngredientError
{
if ( in.getItemStack().getItem() == null )
throw new RegistrationError( in.toString() + ": Smelting Input is not a valid item." );
if ( out.getItemStack().getItem() == null )
throw new RegistrationError( out.toString() + ": Smelting Output is not a valid item." );
GameRegistry.addSmelting( in.getItemStack(), out.getItemStack(), 0 );
}
@Override
public boolean canCraft(ItemStack reqOutput) throws RegistrationError, MissingIngredientError {
return Platform.isSameItemPrecise( out.getItemStack(),reqOutput );
}
@Override
public String getPattern( RecipeHandler h ) {
return "smelt "+out.getQty()+"\n"+
h.getName(out)+"\n"+
h.getName(in);
}
}