Added reversion recipes
Added reversion recipes to the Alchemical Reaction Chamber. This allows no longer used blood orbs to be converted back to their pre-crafted form.
This commit is contained in:
parent
204fbb3c28
commit
4f46dc150d
17 changed files with 67 additions and 37 deletions
|
@ -28,15 +28,16 @@ public abstract class RecipeARC extends BloodMagicRecipe
|
|||
@Nonnull
|
||||
private final ItemStack output;
|
||||
private final FluidStack outputFluid;
|
||||
private final boolean consumeIngredient;
|
||||
|
||||
private final List<Pair<ItemStack, Double>> addedItems;
|
||||
|
||||
protected RecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid)
|
||||
protected RecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid, boolean consumeIngredient)
|
||||
{
|
||||
this(id, input, arc_tool, inputFluid, output, new ArrayList<Pair<ItemStack, Double>>(), outputFluid);
|
||||
this(id, input, arc_tool, inputFluid, output, new ArrayList<Pair<ItemStack, Double>>(), outputFluid, consumeIngredient);
|
||||
}
|
||||
|
||||
protected RecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, List<Pair<ItemStack, Double>> addedItems, FluidStack outputFluid)
|
||||
protected RecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, List<Pair<ItemStack, Double>> addedItems, FluidStack outputFluid, boolean consumeIngredient)
|
||||
{
|
||||
super(id);
|
||||
this.input = input;
|
||||
|
@ -45,6 +46,7 @@ public abstract class RecipeARC extends BloodMagicRecipe
|
|||
this.output = output;
|
||||
this.addedItems = addedItems;
|
||||
this.outputFluid = outputFluid;
|
||||
this.consumeIngredient = consumeIngredient;
|
||||
}
|
||||
|
||||
public RecipeARC addRandomOutput(ItemStack stack, double chance)
|
||||
|
@ -130,6 +132,11 @@ public abstract class RecipeARC extends BloodMagicRecipe
|
|||
return chanceArray;
|
||||
}
|
||||
|
||||
public boolean getConsumeIngredient()
|
||||
{
|
||||
return consumeIngredient;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(PacketBuffer buffer)
|
||||
{
|
||||
|
@ -154,5 +161,6 @@ public abstract class RecipeARC extends BloodMagicRecipe
|
|||
{
|
||||
outputFluid.writeToPacket(buffer);
|
||||
}
|
||||
buffer.writeBoolean(consumeIngredient);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,8 +28,9 @@ public class ARCRecipeBuilder extends BloodMagicRecipeBuilder<ARCRecipeBuilder>
|
|||
private final ItemStack output;
|
||||
private final FluidStack outputFluid;
|
||||
private final List<Pair<ItemStack, Double>> addedItems = new ArrayList<Pair<ItemStack, Double>>();
|
||||
private final boolean consumeIngredient;
|
||||
|
||||
protected ARCRecipeBuilder(Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid)
|
||||
protected ARCRecipeBuilder(Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid, boolean consumeIngredient)
|
||||
{
|
||||
super(bmSerializer("arc"));
|
||||
this.input = input;
|
||||
|
@ -37,11 +38,17 @@ public class ARCRecipeBuilder extends BloodMagicRecipeBuilder<ARCRecipeBuilder>
|
|||
this.inputFluid = inputFluid;
|
||||
this.output = output;
|
||||
this.outputFluid = outputFluid == null ? FluidStack.EMPTY : outputFluid;
|
||||
this.consumeIngredient = consumeIngredient;
|
||||
}
|
||||
|
||||
public static ARCRecipeBuilder arc(Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid)
|
||||
{
|
||||
return new ARCRecipeBuilder(input, arcTool, inputFluid, output, outputFluid);
|
||||
return new ARCRecipeBuilder(input, arcTool, inputFluid, output, outputFluid, false);
|
||||
}
|
||||
|
||||
public static ARCRecipeBuilder arcConsume(Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid)
|
||||
{
|
||||
return new ARCRecipeBuilder(input, arcTool, inputFluid, output, outputFluid, true);
|
||||
}
|
||||
|
||||
public ARCRecipeBuilder addRandomOutput(ItemStack stack, double chance)
|
||||
|
@ -96,6 +103,7 @@ public class ARCRecipeBuilder extends BloodMagicRecipeBuilder<ARCRecipeBuilder>
|
|||
json.add(Constants.JSON.OUTPUT_FLUID, SerializerHelper.serializeFluidStack(outputFluid));
|
||||
|
||||
json.add(Constants.JSON.OUTPUT, SerializerHelper.serializeItemStack(output));
|
||||
json.addProperty("consumeingredient", consumeIngredient);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -55,6 +55,6 @@ public class ARCRecipeProvider implements ISubRecipeProvider
|
|||
|
||||
private void registerReversionRecipe(Ingredient input, ItemStack outputStack, Consumer<IFinishedRecipe> consumer, String path)
|
||||
{
|
||||
ARCRecipeBuilder.arc(input, Ingredient.fromTag(BloodMagicTags.ARC_TOOL_REVERTER), null, outputStack, null).build(consumer, BloodMagic.rl(path));
|
||||
ARCRecipeBuilder.arcConsume(input, Ingredient.fromTag(BloodMagicTags.ARC_TOOL_REVERTER), null, outputStack, null).build(consumer, BloodMagic.rl(path));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,7 +92,9 @@ public class ARCRecipeSerializer<RECIPE extends RecipeARC> extends ForgeRegistry
|
|||
outputFluidStack = SerializerHelper.deserializeFluid(outputFluid);
|
||||
}
|
||||
|
||||
return this.factory.create(recipeId, inputIng, toolIng, inputFluidIng, output, addedItems, outputFluidStack);
|
||||
boolean consumeIngredient = JSONUtils.getBoolean(json, "consumeingredient");
|
||||
|
||||
return this.factory.create(recipeId, inputIng, toolIng, inputFluidIng, output, addedItems, outputFluidStack, consumeIngredient);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -126,7 +128,9 @@ public class ARCRecipeSerializer<RECIPE extends RecipeARC> extends ForgeRegistry
|
|||
outputFluid = FluidStack.readFromPacket(buffer);
|
||||
}
|
||||
|
||||
return this.factory.create(recipeId, inputIng, toolIng, inputFluid, output, addedItems, outputFluid);
|
||||
boolean consumeIngredient = buffer.readBoolean();
|
||||
|
||||
return this.factory.create(recipeId, inputIng, toolIng, inputFluid, output, addedItems, outputFluid, consumeIngredient);
|
||||
} catch (Exception e)
|
||||
{
|
||||
BloodMagic.LOGGER.error("Error reading ARC recipe from packet.", e);
|
||||
|
@ -150,6 +154,6 @@ public class ARCRecipeSerializer<RECIPE extends RecipeARC> extends ForgeRegistry
|
|||
@FunctionalInterface
|
||||
public interface IFactory<RECIPE extends RecipeARC>
|
||||
{
|
||||
RECIPE create(ResourceLocation id, Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, List<Pair<ItemStack, Double>> addedItems, FluidStack outputFluid);
|
||||
RECIPE create(ResourceLocation id, Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, List<Pair<ItemStack, Double>> addedItems, FluidStack outputFluid, boolean consumeIngredient);
|
||||
}
|
||||
}
|
|
@ -18,14 +18,14 @@ import wayoftime.bloodmagic.common.registries.BloodMagicRecipeSerializers;
|
|||
|
||||
public class IRecipeARC extends RecipeARC
|
||||
{
|
||||
public IRecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid)
|
||||
public IRecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid, boolean consumeIngredient)
|
||||
{
|
||||
super(id, input, arc_tool, inputFluid, output, new ArrayList<Pair<ItemStack, Double>>(), outputFluid);
|
||||
super(id, input, arc_tool, inputFluid, output, new ArrayList<Pair<ItemStack, Double>>(), outputFluid, consumeIngredient);
|
||||
}
|
||||
|
||||
public IRecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, List<Pair<ItemStack, Double>> addedItems, FluidStack outputFluid)
|
||||
public IRecipeARC(ResourceLocation id, Ingredient input, Ingredient arc_tool, FluidStackIngredient inputFluid, ItemStack output, List<Pair<ItemStack, Double>> addedItems, FluidStack outputFluid, boolean consumeIngredient)
|
||||
{
|
||||
super(id, input, arc_tool, inputFluid, output, addedItems, outputFluid);
|
||||
super(id, input, arc_tool, inputFluid, output, addedItems, outputFluid, consumeIngredient);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -287,7 +287,7 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic
|
|||
|
||||
outputSlotHandler.canTransferAllItemsToSlots(recipe.getAllOutputs(world.rand), false);
|
||||
outputTank.fill(recipe.getFluidOutput().copy(), FluidAction.EXECUTE);
|
||||
consumeInventory();
|
||||
consumeInventory(recipe.getConsumeIngredient());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -303,15 +303,15 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic
|
|||
List<ItemStack> outputList = new ArrayList<>();
|
||||
outputList.add(outputStack);
|
||||
outputSlotHandler.canTransferAllItemsToSlots(outputList, false);
|
||||
consumeInventory();
|
||||
consumeInventory(false);
|
||||
}
|
||||
|
||||
public void consumeInventory()
|
||||
public void consumeInventory(boolean consumeInput)
|
||||
{
|
||||
ItemStack inputStack = getStackInSlot(INPUT_SLOT);
|
||||
if (!inputStack.isEmpty())
|
||||
{
|
||||
if (inputStack.getItem().hasContainerItem(inputStack))
|
||||
if (!consumeInput && inputStack.getItem().hasContainerItem(inputStack))
|
||||
{
|
||||
setInventorySlotContents(INPUT_SLOT, inputStack.getItem().getContainerItem(inputStack));
|
||||
} else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue