This commit is contained in:
Jared 2017-03-11 17:28:46 +02:00
parent 82ddcfd9cf
commit e4f357dffe
5 changed files with 177 additions and 252 deletions

View file

@ -3,9 +3,8 @@ package modtweaker.mods.forestry.handlers;
import com.blamejared.mtlib.helpers.LogHelper;
import forestry.api.recipes.*;
import forestry.core.recipes.ShapedRecipeCustom;
import forestry.factory.recipes.CarpenterRecipeManager;
import forestry.factory.recipes.jei.carpenter.*;
import mezz.jei.api.recipe.*;
import forestry.factory.recipes.jei.carpenter.CarpenterRecipeWrapper;
import mezz.jei.api.recipe.IRecipeWrapper;
import minetweaker.MineTweakerAPI;
import minetweaker.api.item.*;
import minetweaker.api.liquid.ILiquidStack;

View file

@ -2,8 +2,9 @@ package modtweaker.mods.forestry.handlers;
import com.blamejared.mtlib.helpers.LogHelper;
import forestry.api.recipes.*;
import forestry.factory.recipes.jei.fabricator.*;
import mezz.jei.api.recipe.*;
import forestry.core.recipes.ShapedRecipeCustom;
import forestry.factory.recipes.jei.fabricator.FabricatorRecipeWrapper;
import mezz.jei.api.recipe.IRecipeWrapper;
import minetweaker.MineTweakerAPI;
import minetweaker.api.item.*;
import modtweaker.mods.forestry.*;
@ -19,164 +20,161 @@ import static com.blamejared.mtlib.helpers.StackHelper.matches;
@ZenClass("mods.forestry.ThermionicFabricator")
public class ThermionicFabricator {
public static final String nameSmelting = "Forestry Thermionic Fabricator (Smelting)";
public static final String nameCasting = "Forestry Thermionic Fabricator (Casting)";
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Adds smelting recipe to Thermionic Fabricator
*
* @param fluidOutput recipe fluid amount
* @param itemInput recipe input input
* @param meltingPoint point at where itemInput melts down
*/
@ZenMethod
public static void addSmelting(int fluidOutput, IItemStack itemInput, int meltingPoint) {
//The machines internal tank accept only liquid glass, therefor this function only accept the amount and hardcode the fluid to glass
MineTweakerAPI.apply(new AddSmelting(new FabricatorSmeltingRecipe(toStack(itemInput), FluidRegistry.getFluidStack("glass", fluidOutput), meltingPoint)));
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Adds casting recipe to Thermionic Fabricator
*
* @param output recipe output item
* @param ingredients list of input items
* @param fluidInput recipe fluid input
* * @param plan recipe plan item (optional)
* * @param remainingItems no idea(optional)
*/
@ZenMethod
public static void addCast(IItemStack output, IIngredient[][] ingredients, int fluidInput, @Optional IItemStack plan, @Optional IItemStack[] remainingItems) {
if(remainingItems == null) {
remainingItems = new IItemStack[0];
}
IDescriptiveRecipe recipe = new DescriptiveRecipe(3, 3, toShapedObjects(ingredients), toStack(output), toStacks(remainingItems));
MineTweakerAPI.apply(new AddCast(new FabricatorRecipe(toStack(plan), FluidRegistry.getFluidStack("glass", fluidInput), recipe)));
}
/*
Implements the actions to add a recipe
Since the machine has two crafting Steps, this is a constructors for both
*/
private static class AddSmelting extends ForestryListAddition<IFabricatorSmeltingRecipe> {
public AddSmelting(IFabricatorSmeltingRecipe recipe) {
super(ThermionicFabricator.nameSmelting, RecipeManagers.fabricatorSmeltingManager);
recipes.add(recipe);
}
@Override
public String getRecipeInfo(IFabricatorSmeltingRecipe recipe) {
return LogHelper.getStackDescription(recipe.getResource());
}
//It's not clear to me how the smelting recipes should be wrapped
@Override
public IRecipeWrapper wrapRecipe(IFabricatorSmeltingRecipe recipe){
return null;
}
}
private static class AddCast extends ForestryListAddition<IFabricatorRecipe> {
public AddCast(IFabricatorRecipe recipe) {
super(ThermionicFabricator.nameCasting, RecipeManagers.fabricatorManager);
recipes.add(recipe);
}
@Override
public String getRecipeInfo(IFabricatorRecipe recipe) {
return LogHelper.getStackDescription(recipe.getRecipeOutput());
}
@Override
public IRecipeWrapper wrapRecipe(IFabricatorRecipe recipe){
return new FabricatorRecipeWrapper(recipe);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Removes smelting recipe from Thermionic Fabricator
*
* @param itemInput = item input
*/
@ZenMethod
public static void removeSmelting(IIngredient itemInput) {
List<IFabricatorSmeltingRecipe> recipes = new LinkedList<IFabricatorSmeltingRecipe>();
for(IFabricatorSmeltingRecipe r : RecipeManagers.fabricatorSmeltingManager.recipes()) {
if(r != null && r.getResource() != null && matches(itemInput, toIItemStack(r.getResource()))) {
recipes.add(r);
}
}
if(!recipes.isEmpty()) {
MineTweakerAPI.apply(new RemoveSmelting(recipes));
} else {
LogHelper.logWarning(String.format("No %s Recipe found for %s. Command ignored!", ThermionicFabricator.nameSmelting, itemInput.toString()));
}
}
/**
* Removes casting recipe from Thermionic Fabricator
*
* @param product = recipe result
*/
@ZenMethod
public static void removeCast(IIngredient product) {
List<IFabricatorRecipe> recipes = new LinkedList<IFabricatorRecipe>();
for(IFabricatorRecipe r : RecipeManagers.fabricatorManager.recipes()) {
if(r != null && r.getRecipeOutput() != null && matches(product, toIItemStack(r.getRecipeOutput()))) {
recipes.add(r);
}
}
if(!recipes.isEmpty()) {
MineTweakerAPI.apply(new RemoveCasts(recipes));
} else {
LogHelper.logWarning(String.format("No %s Recipe found for %s. Command ignored!", ThermionicFabricator.nameSmelting, product.toString()));
}
}
private static class RemoveSmelting extends ForestryListRemoval<IFabricatorSmeltingRecipe, IFabricatorSmeltingManager> {
public RemoveSmelting(List<IFabricatorSmeltingRecipe> recipes) {
super(ThermionicFabricator.nameSmelting, RecipeManagers.fabricatorSmeltingManager, recipes);
}
@Override
public String getRecipeInfo(IFabricatorSmeltingRecipe recipe) {
return LogHelper.getStackDescription(recipe.getResource());
}
//It's not clear to me how the smelting recipes should be wrapped
@Override
public IRecipeWrapper wrapRecipe(IFabricatorSmeltingRecipe recipe){
return null;
}
}
private static class RemoveCasts extends ForestryListRemoval<IFabricatorRecipe, IFabricatorManager> {
public RemoveCasts(List<IFabricatorRecipe> recipes) {
super(ThermionicFabricator.nameCasting, RecipeManagers.fabricatorManager, recipes);
}
@Override
public String getRecipeInfo(IFabricatorRecipe recipe) {
return LogHelper.getStackDescription(recipe.getRecipeOutput());
}
@Override
public IRecipeWrapper wrapRecipe(IFabricatorRecipe recipe){
return new FabricatorRecipeWrapper(recipe);
}
}
public static final String nameSmelting = "Forestry Thermionic Fabricator (Smelting)";
public static final String nameCasting = "Forestry Thermionic Fabricator (Casting)";
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Adds smelting recipe to Thermionic Fabricator
*
* @param fluidOutput recipe fluid amount
* @param itemInput recipe input input
* @param meltingPoint point at where itemInput melts down
*/
@ZenMethod
public static void addSmelting(int fluidOutput, IItemStack itemInput, int meltingPoint) {
//The machines internal tank accept only liquid glass, therefor this function only accept the amount and hardcode the fluid to glass
MineTweakerAPI.apply(new AddSmelting(new FabricatorSmeltingRecipe(toStack(itemInput), FluidRegistry.getFluidStack("glass", fluidOutput), meltingPoint)));
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Adds casting recipe to Thermionic Fabricator
*
* @param output recipe output item
* @param ingredients list of input items
* @param fluidInput recipe fluid input
* * @param plan recipe plan item (optional)
* * @param remainingItems no idea(optional)
*/
@ZenMethod
public static void addCast(IItemStack output, IIngredient[][] ingredients, int fluidInput, @Optional IItemStack plan) {
IDescriptiveRecipe recipe = new ShapedRecipeCustom(toStack(output), toShapedObjects(ingredients));
MineTweakerAPI.apply(new AddCast(new FabricatorRecipe(toStack(plan), FluidRegistry.getFluidStack("glass", fluidInput), recipe)));
}
/*
Implements the actions to add a recipe
Since the machine has two crafting Steps, this is a constructors for both
*/
private static class AddSmelting extends ForestryListAddition<IFabricatorSmeltingRecipe> {
public AddSmelting(IFabricatorSmeltingRecipe recipe) {
super(ThermionicFabricator.nameSmelting, RecipeManagers.fabricatorSmeltingManager);
recipes.add(recipe);
}
@Override
public String getRecipeInfo(IFabricatorSmeltingRecipe recipe) {
return LogHelper.getStackDescription(recipe.getResource());
}
//It's not clear to me how the smelting recipes should be wrapped
@Override
public IRecipeWrapper wrapRecipe(IFabricatorSmeltingRecipe recipe) {
return null;
}
}
private static class AddCast extends ForestryListAddition<IFabricatorRecipe> {
public AddCast(IFabricatorRecipe recipe) {
super(ThermionicFabricator.nameCasting, RecipeManagers.fabricatorManager);
recipes.add(recipe);
}
@Override
public String getRecipeInfo(IFabricatorRecipe recipe) {
return LogHelper.getStackDescription(recipe.getRecipeOutput());
}
@Override
public IRecipeWrapper wrapRecipe(IFabricatorRecipe recipe) {
return new FabricatorRecipeWrapper(recipe);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Removes smelting recipe from Thermionic Fabricator
*
* @param itemInput = item input
*/
@ZenMethod
public static void removeSmelting(IIngredient itemInput) {
List<IFabricatorSmeltingRecipe> recipes = new LinkedList<IFabricatorSmeltingRecipe>();
for(IFabricatorSmeltingRecipe r : RecipeManagers.fabricatorSmeltingManager.recipes()) {
if(r != null && r.getResource() != null && matches(itemInput, toIItemStack(r.getResource()))) {
recipes.add(r);
}
}
if(!recipes.isEmpty()) {
MineTweakerAPI.apply(new RemoveSmelting(recipes));
} else {
LogHelper.logWarning(String.format("No %s Recipe found for %s. Command ignored!", ThermionicFabricator.nameSmelting, itemInput.toString()));
}
}
/**
* Removes casting recipe from Thermionic Fabricator
*
* @param product = recipe result
*/
@ZenMethod
public static void removeCast(IIngredient product) {
List<IFabricatorRecipe> recipes = new LinkedList<IFabricatorRecipe>();
for(IFabricatorRecipe r : RecipeManagers.fabricatorManager.recipes()) {
if(r != null && r.getRecipeOutput() != null && matches(product, toIItemStack(r.getRecipeOutput()))) {
recipes.add(r);
}
}
if(!recipes.isEmpty()) {
MineTweakerAPI.apply(new RemoveCasts(recipes));
} else {
LogHelper.logWarning(String.format("No %s Recipe found for %s. Command ignored!", ThermionicFabricator.nameSmelting, product.toString()));
}
}
private static class RemoveSmelting extends ForestryListRemoval<IFabricatorSmeltingRecipe, IFabricatorSmeltingManager> {
public RemoveSmelting(List<IFabricatorSmeltingRecipe> recipes) {
super(ThermionicFabricator.nameSmelting, RecipeManagers.fabricatorSmeltingManager, recipes);
}
@Override
public String getRecipeInfo(IFabricatorSmeltingRecipe recipe) {
return LogHelper.getStackDescription(recipe.getResource());
}
//It's not clear to me how the smelting recipes should be wrapped
@Override
public IRecipeWrapper wrapRecipe(IFabricatorSmeltingRecipe recipe) {
return null;
}
}
private static class RemoveCasts extends ForestryListRemoval<IFabricatorRecipe, IFabricatorManager> {
public RemoveCasts(List<IFabricatorRecipe> recipes) {
super(ThermionicFabricator.nameCasting, RecipeManagers.fabricatorManager, recipes);
}
@Override
public String getRecipeInfo(IFabricatorRecipe recipe) {
return LogHelper.getStackDescription(recipe.getRecipeOutput());
}
@Override
public IRecipeWrapper wrapRecipe(IFabricatorRecipe recipe) {
return new FabricatorRecipeWrapper(recipe);
}
}
}

View file

@ -1,72 +0,0 @@
package modtweaker.mods.forestry.recipes;
import forestry.api.recipes.IDescriptiveRecipe;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.oredict.ShapedOreRecipe;
import javax.annotation.Nonnull;
public class DescriptiveRecipe implements IDescriptiveRecipe {
private final int width;
private final int height;
private final ShapedOreRecipe recipe;
private final ItemStack[] remainingItems;
public DescriptiveRecipe(int width, int height, Object[] ingredients, ItemStack output, ItemStack[] remainingItems) {
this.width = width;
this.height = height;
this.recipe = new ShapedOreRecipe(output, ingredients);
this.remainingItems = remainingItems;
}
@Override
public int getWidth() {
return width;
}
@Override
public int getHeight() {
return height;
}
@Override
public ItemStack getRecipeOutput() {
return recipe.getRecipeOutput();
}
@Nonnull
public ItemStack func_77571_b() {
return recipe.getRecipeOutput();
}
@Override
public ItemStack[] getRemainingItems(InventoryCrafting inv) {
return remainingItems;
}
@Override
public Object[] getIngredients() {
return recipe.getInput();
}
@Override
public boolean matches(InventoryCrafting inventoryCrafting, World world) {
return recipe.matches(inventoryCrafting, world);
}
@Override
public ItemStack getCraftingResult(InventoryCrafting inventoryCrafting) {
return recipe.getCraftingResult(inventoryCrafting);
}
@Override
public int getRecipeSize() {
return width * height;
}
}

View file

@ -1,58 +1,58 @@
package modtweaker.mods.forestry.recipes;
import forestry.api.recipes.IDescriptiveRecipe;
import forestry.api.recipes.IFabricatorRecipe;
import forestry.api.recipes.*;
import forestry.core.recipes.ShapedRecipeCustom;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nullable;
public class FabricatorRecipe implements IFabricatorRecipe {
private final ItemStack plan;
private final FluidStack molten;
private final IDescriptiveRecipe internal;
public FabricatorRecipe(ItemStack plan, FluidStack molten, ItemStack result, ItemStack[] remainingItems, Object[] ingredients) {
this(plan, molten, new DescriptiveRecipe(3, 3, ingredients, result, remainingItems));
public FabricatorRecipe(ItemStack plan, FluidStack molten, ItemStack result, Object[] ingredients) {
this(plan, molten, new ShapedRecipeCustom(result, ingredients));
}
public FabricatorRecipe(ItemStack plan, FluidStack molten, IDescriptiveRecipe internal) {
this.plan = plan;
this.molten = molten;
this.internal = internal;
}
@Override
public Object[] getIngredients() {
return internal.getIngredients();
}
@Override
public int getWidth() {
return internal.getWidth();
}
@Override
public int getHeight() {
return internal.getHeight();
}
@Override
@Nullable
public ItemStack getPlan() {
return plan;
}
@Override
public FluidStack getLiquid() {
return molten;
}
@Override
public ItemStack getRecipeOutput() {
return internal.getRecipeOutput();
}
}