Rework custom recipe system (#3232)
This commit is contained in:
@@ -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<ItemStack> 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() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user