mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 15:18:34 +01:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
4eee99c75b
35 changed files with 370 additions and 476 deletions
|
@ -3,7 +3,6 @@ package de.ellpeck.actuallyadditions.api.internal;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient;
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.crafting.IRecipe;
|
import net.minecraft.item.crafting.IRecipe;
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
package de.ellpeck.actuallyadditions.api.recipe;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.util.WeightedRandom;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public class BallOfFurReturn extends WeightedRandom.Item {
|
|
||||||
|
|
||||||
public final ItemStack returnItem;
|
|
||||||
|
|
||||||
public BallOfFurReturn(ItemStack returnItem, int chance) {
|
|
||||||
super(chance);
|
|
||||||
this.returnItem = returnItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
package de.ellpeck.actuallyadditions.api.recipe;
|
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
|
||||||
import net.minecraft.potion.EffectInstance;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public class CoffeeIngredient {
|
|
||||||
|
|
||||||
protected final Ingredient input;
|
|
||||||
protected final int maxAmplifier;
|
|
||||||
protected EffectInstance[] effects;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public CoffeeIngredient(ItemStack input, EffectInstance[] effects, int maxAmplifier) {
|
|
||||||
this(Ingredient.fromStacks(input), maxAmplifier, effects);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CoffeeIngredient(Ingredient input, int maxAmplifier, EffectInstance... effects) {
|
|
||||||
this.input = input;
|
|
||||||
this.effects = effects;
|
|
||||||
this.maxAmplifier = maxAmplifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean matches(ItemStack stack) {
|
|
||||||
return this.input.test(stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Ingredient getInput() {
|
|
||||||
return this.input;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EffectInstance[] getEffects() {
|
|
||||||
return this.effects;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean effect(ItemStack stack) {
|
|
||||||
return ActuallyAdditionsAPI.methodHandler.addEffectToStack(stack, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getExtraText() {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMaxAmplifier() {
|
|
||||||
return this.maxAmplifier;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
package de.ellpeck.actuallyadditions.api.recipe;
|
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.block.BlockState;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public class CompostRecipe {
|
|
||||||
|
|
||||||
protected final Ingredient input;
|
|
||||||
protected final ItemStack output;
|
|
||||||
protected final BlockState inputDisplay;
|
|
||||||
protected final BlockState outputDisplay;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public CompostRecipe(ItemStack input, Block inputDisplay, ItemStack output, Block outputDisplay) {
|
|
||||||
this(Ingredient.fromStacks(input), inputDisplay.getDefaultState(), output, outputDisplay.getDefaultState());
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompostRecipe(Ingredient input, BlockState inputDisplay, ItemStack output, BlockState outputDisplay) {
|
|
||||||
this.input = input;
|
|
||||||
this.output = output;
|
|
||||||
this.inputDisplay = inputDisplay;
|
|
||||||
this.outputDisplay = outputDisplay;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean matches(ItemStack stack) {
|
|
||||||
return this.input.test(stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Ingredient getInput() {
|
|
||||||
return this.input;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemStack getOutput() {
|
|
||||||
return this.output;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState getInputDisplay() {
|
|
||||||
return this.inputDisplay;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState getOutputDisplay() {
|
|
||||||
return this.outputDisplay;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
package de.ellpeck.actuallyadditions.api.recipe;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
|
||||||
|
|
||||||
public class CrusherRecipe {
|
|
||||||
|
|
||||||
protected Ingredient input;
|
|
||||||
protected ItemStack outputOne;
|
|
||||||
protected ItemStack outputTwo;
|
|
||||||
protected int outputChance;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public CrusherRecipe(ItemStack input, ItemStack outputOne, ItemStack outputTwo, int outputChance) {
|
|
||||||
this(Ingredient.fromStacks(input), outputOne, outputTwo, outputChance);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CrusherRecipe(Ingredient input, ItemStack outputOne, ItemStack outputTwo, int outputChance) {
|
|
||||||
this.input = input;
|
|
||||||
this.outputOne = outputOne;
|
|
||||||
this.outputTwo = outputTwo;
|
|
||||||
this.outputChance = outputChance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean matches(ItemStack stack) {
|
|
||||||
return this.input.test(stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemStack getOutputOne() {
|
|
||||||
return this.outputOne;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemStack getOutputTwo() {
|
|
||||||
return this.outputTwo;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSecondChance() {
|
|
||||||
return this.outputChance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Ingredient getInput() {
|
|
||||||
return this.input;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -7,7 +7,6 @@ import java.util.List;
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient;
|
|
||||||
import de.ellpeck.actuallyadditions.booklet.page.BookletPage;
|
import de.ellpeck.actuallyadditions.booklet.page.BookletPage;
|
||||||
import de.ellpeck.actuallyadditions.booklet.page.PageCoffeeMachine;
|
import de.ellpeck.actuallyadditions.booklet.page.PageCoffeeMachine;
|
||||||
import de.ellpeck.actuallyadditions.common.items.ItemCoffee;
|
import de.ellpeck.actuallyadditions.common.items.ItemCoffee;
|
||||||
|
|
|
@ -6,7 +6,6 @@ import java.util.List;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.booklet.page.PageCrusherRecipe;
|
import de.ellpeck.actuallyadditions.booklet.page.PageCrusherRecipe;
|
||||||
import de.ellpeck.actuallyadditions.common.crafting.CrusherCrafting;
|
import de.ellpeck.actuallyadditions.common.crafting.CrusherCrafting;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
|
@ -4,7 +4,6 @@ import java.util.List;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase;
|
import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient;
|
|
||||||
import de.ellpeck.actuallyadditions.booklet.gui.GuiBooklet;
|
import de.ellpeck.actuallyadditions.booklet.gui.GuiBooklet;
|
||||||
import de.ellpeck.actuallyadditions.common.items.InitItems;
|
import de.ellpeck.actuallyadditions.common.items.InitItems;
|
||||||
import de.ellpeck.actuallyadditions.common.items.metalists.TheMiscItems;
|
import de.ellpeck.actuallyadditions.common.items.metalists.TheMiscItems;
|
||||||
|
|
|
@ -3,7 +3,6 @@ package de.ellpeck.actuallyadditions.booklet.page;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase;
|
import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
||||||
import de.ellpeck.actuallyadditions.booklet.gui.GuiBooklet;
|
import de.ellpeck.actuallyadditions.booklet.gui.GuiBooklet;
|
||||||
import de.ellpeck.actuallyadditions.common.util.StackUtil;
|
import de.ellpeck.actuallyadditions.common.util.StackUtil;
|
||||||
|
|
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
||||||
import de.ellpeck.actuallyadditions.common.items.InitItems;
|
import de.ellpeck.actuallyadditions.common.items.InitItems;
|
||||||
import de.ellpeck.actuallyadditions.common.items.metalists.TheDusts;
|
import de.ellpeck.actuallyadditions.common.items.metalists.TheDusts;
|
||||||
|
|
|
@ -6,7 +6,6 @@ import java.util.List;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient;
|
|
||||||
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
||||||
import de.ellpeck.actuallyadditions.common.items.base.ItemFoodBase;
|
import de.ellpeck.actuallyadditions.common.items.base.ItemFoodBase;
|
||||||
import de.ellpeck.actuallyadditions.common.items.metalists.TheMiscItems;
|
import de.ellpeck.actuallyadditions.common.items.metalists.TheMiscItems;
|
||||||
|
|
|
@ -2,9 +2,6 @@ package de.ellpeck.actuallyadditions.common.jei;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient;
|
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe;
|
import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe;
|
import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe;
|
||||||
import de.ellpeck.actuallyadditions.common.blocks.InitBlocks;
|
import de.ellpeck.actuallyadditions.common.blocks.InitBlocks;
|
||||||
|
|
|
@ -7,7 +7,6 @@ import com.google.common.base.Strings;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient;
|
|
||||||
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
||||||
import de.ellpeck.actuallyadditions.common.blocks.InitBlocks;
|
import de.ellpeck.actuallyadditions.common.blocks.InitBlocks;
|
||||||
import de.ellpeck.actuallyadditions.booklet.misc.BookletUtils;
|
import de.ellpeck.actuallyadditions.booklet.misc.BookletUtils;
|
||||||
|
|
|
@ -3,7 +3,6 @@ package de.ellpeck.actuallyadditions.common.jei.compost;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.common.blocks.InitBlocks;
|
import de.ellpeck.actuallyadditions.common.blocks.InitBlocks;
|
||||||
import de.ellpeck.actuallyadditions.booklet.misc.BookletUtils;
|
import de.ellpeck.actuallyadditions.booklet.misc.BookletUtils;
|
||||||
import de.ellpeck.actuallyadditions.common.jei.RecipeWrapperWithButton;
|
import de.ellpeck.actuallyadditions.common.jei.RecipeWrapperWithButton;
|
||||||
|
|
|
@ -5,7 +5,6 @@ import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.common.blocks.InitBlocks;
|
import de.ellpeck.actuallyadditions.common.blocks.InitBlocks;
|
||||||
import de.ellpeck.actuallyadditions.booklet.misc.BookletUtils;
|
import de.ellpeck.actuallyadditions.booklet.misc.BookletUtils;
|
||||||
import de.ellpeck.actuallyadditions.common.jei.RecipeWrapperWithButton;
|
import de.ellpeck.actuallyadditions.common.jei.RecipeWrapperWithButton;
|
||||||
|
|
|
@ -10,7 +10,6 @@ import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
|
||||||
import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor;
|
import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor;
|
||||||
import de.ellpeck.actuallyadditions.api.internal.IMethodHandler;
|
import de.ellpeck.actuallyadditions.api.internal.IMethodHandler;
|
||||||
import de.ellpeck.actuallyadditions.api.lens.Lens;
|
import de.ellpeck.actuallyadditions.api.lens.Lens;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient;
|
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe;
|
import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe;
|
||||||
import de.ellpeck.actuallyadditions.common.blocks.BlockLaserRelay;
|
import de.ellpeck.actuallyadditions.common.blocks.BlockLaserRelay;
|
||||||
import de.ellpeck.actuallyadditions.booklet.chapter.BookletChapter;
|
import de.ellpeck.actuallyadditions.booklet.chapter.BookletChapter;
|
||||||
|
|
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
||||||
import de.ellpeck.actuallyadditions.common.config.values.ConfigStringListValues;
|
import de.ellpeck.actuallyadditions.common.config.values.ConfigStringListValues;
|
||||||
import de.ellpeck.actuallyadditions.common.util.StackUtil;
|
import de.ellpeck.actuallyadditions.common.util.StackUtil;
|
||||||
|
|
|
@ -6,10 +6,12 @@ import net.minecraft.item.crafting.IRecipeSerializer;
|
||||||
import net.minecraft.item.crafting.IRecipeType;
|
import net.minecraft.item.crafting.IRecipeType;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recipe class for the AtomicReconstructor when hitting a items stack
|
* Recipe class for the AtomicReconstructor when hitting a items stack
|
||||||
*/
|
*/
|
||||||
public class AtomicReconstructorBlockRecipe implements IDummyRecipe {
|
public class AtomicReconstructorBlockRecipe implements IDummyRecipe<AtomicReconstructorBlockRecipe> {
|
||||||
|
|
||||||
public static final IRecipeType<AtomicReconstructorBlockRecipe> ATOMIC_RECONSTRUCTOR_BLOCK_RECIPE_TYPE = IRecipeType.register("actuallyadditions:atomic_reconstructor_block");
|
public static final IRecipeType<AtomicReconstructorBlockRecipe> ATOMIC_RECONSTRUCTOR_BLOCK_RECIPE_TYPE = IRecipeType.register("actuallyadditions:atomic_reconstructor_block");
|
||||||
|
|
||||||
|
@ -44,16 +46,19 @@ public class AtomicReconstructorBlockRecipe implements IDummyRecipe {
|
||||||
return energyConsumption;
|
return energyConsumption;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation getId(){
|
public ResourceLocation getId(){
|
||||||
return this.recipeId;
|
return this.recipeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public IRecipeSerializer<?> getSerializer(){
|
public IRecipeSerializer<AtomicReconstructorBlockRecipe> getSerializer(){
|
||||||
return AtomicReconstructorBlockRecipeFactory.INSTANCE;
|
return AtomicReconstructorBlockRecipeFactory.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public IRecipeType<?> getType(){
|
public IRecipeType<?> getType(){
|
||||||
return ATOMIC_RECONSTRUCTOR_BLOCK_RECIPE_TYPE;
|
return ATOMIC_RECONSTRUCTOR_BLOCK_RECIPE_TYPE;
|
||||||
|
|
|
@ -7,21 +7,23 @@ import net.minecraft.item.crafting.IRecipeType;
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recipe class for the AtomicReconstructor when hitting a items stack
|
* Recipe class for the AtomicReconstructor when hitting a items stack
|
||||||
*/
|
*/
|
||||||
public class AtomicReconstructorItemRecipe implements IDummyRecipe {
|
public class AtomicReconstructorItemRecipe implements IDummyRecipe<AtomicReconstructorItemRecipe> {
|
||||||
|
|
||||||
public static final IRecipeType<AtomicReconstructorItemRecipe> ATOMIC_RECONSTRUCTOR_ITEM_RECIPE_TYPE = IRecipeType.register("actuallyadditions:atomic_reconstructor_item");
|
public static final IRecipeType<AtomicReconstructorItemRecipe> ATOMIC_RECONSTRUCTOR_ITEM_RECIPE_TYPE = IRecipeType.register("actuallyadditions:atomic_reconstructor_item");
|
||||||
|
|
||||||
private final ResourceLocation recipeId;
|
@Nonnull private final ResourceLocation recipeId;
|
||||||
|
|
||||||
private final Lens lens;
|
@Nonnull private final Lens lens;
|
||||||
private final Ingredient input;
|
@Nonnull private final Ingredient input;
|
||||||
private final ItemStack output;
|
@Nonnull private final ItemStack output;
|
||||||
private final int energyConsumption;
|
private final int energyConsumption;
|
||||||
|
|
||||||
public AtomicReconstructorItemRecipe(ResourceLocation recipeId, Lens lens, Ingredient input, ItemStack output, int energyConsumption){
|
public AtomicReconstructorItemRecipe(@Nonnull ResourceLocation recipeId, @Nonnull Lens lens, @Nonnull Ingredient input, @Nonnull ItemStack output, int energyConsumption){
|
||||||
this.recipeId = recipeId;
|
this.recipeId = recipeId;
|
||||||
this.lens = lens;
|
this.lens = lens;
|
||||||
this.input = input;
|
this.input = input;
|
||||||
|
@ -29,14 +31,17 @@ public class AtomicReconstructorItemRecipe implements IDummyRecipe {
|
||||||
this.energyConsumption = energyConsumption;
|
this.energyConsumption = energyConsumption;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
public Lens getLens(){
|
public Lens getLens(){
|
||||||
return lens;
|
return lens;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
public Ingredient getInput(){
|
public Ingredient getInput(){
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
public ItemStack getOutput(){
|
public ItemStack getOutput(){
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
@ -45,16 +50,19 @@ public class AtomicReconstructorItemRecipe implements IDummyRecipe {
|
||||||
return energyConsumption;
|
return energyConsumption;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation getId(){
|
public ResourceLocation getId(){
|
||||||
return this.recipeId;
|
return this.recipeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public IRecipeSerializer<?> getSerializer(){
|
public IRecipeSerializer<AtomicReconstructorItemRecipe> getSerializer(){
|
||||||
return AtomicReconstructorItemRecipeFactory.INSTANCE;
|
return AtomicReconstructorItemRecipeFactory.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public IRecipeType<?> getType(){
|
public IRecipeType<?> getType(){
|
||||||
return ATOMIC_RECONSTRUCTOR_ITEM_RECIPE_TYPE;
|
return ATOMIC_RECONSTRUCTOR_ITEM_RECIPE_TYPE;
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
package de.ellpeck.actuallyadditions.common.recipes;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.item.crafting.IRecipeSerializer;
|
|
||||||
import net.minecraft.item.crafting.IRecipeType;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
|
||||||
|
|
||||||
public class BallOfFurRecipe implements IDummyRecipe {
|
|
||||||
|
|
||||||
public static final IRecipeType<BallOfFurRecipe> BALL_OF_FUR_RECIPE_TYPE = IRecipeType.register("actuallyadditions:ball_of_fur");
|
|
||||||
|
|
||||||
private final ResourceLocation recipeId;
|
|
||||||
|
|
||||||
private final ItemStack returnItem;
|
|
||||||
private final int chance;
|
|
||||||
|
|
||||||
public BallOfFurRecipe(ResourceLocation recipeId, ItemStack returnItem, int chance){
|
|
||||||
this.recipeId = recipeId;
|
|
||||||
this.returnItem = returnItem;
|
|
||||||
this.chance = chance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemStack getReturnItem(){
|
|
||||||
return this.returnItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getChance(){
|
|
||||||
return this.chance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResourceLocation getId(){
|
|
||||||
return this.recipeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IRecipeSerializer<?> getSerializer(){
|
|
||||||
return BallOfFurRecipeFactory.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IRecipeType<?> getType(){
|
|
||||||
return BALL_OF_FUR_RECIPE_TYPE;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,65 +0,0 @@
|
||||||
package de.ellpeck.actuallyadditions.common.recipes;
|
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.google.gson.JsonParseException;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.item.crafting.IRecipeSerializer;
|
|
||||||
import net.minecraft.item.crafting.ShapedRecipe;
|
|
||||||
import net.minecraft.network.PacketBuffer;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
|
||||||
import net.minecraftforge.registries.ForgeRegistryEntry;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
public class BallOfFurRecipeFactory extends ForgeRegistryEntry<IRecipeSerializer<?>> implements IRecipeSerializer<BallOfFurRecipe> {
|
|
||||||
|
|
||||||
public static final BallOfFurRecipeFactory INSTANCE = IRecipeSerializer.register("actuallyadditions:ball_of_fur", new BallOfFurRecipeFactory());
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
@Override
|
|
||||||
public BallOfFurRecipe read(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json){
|
|
||||||
ItemStack stack;
|
|
||||||
int chance;
|
|
||||||
|
|
||||||
if(json.has("stack")){
|
|
||||||
JsonElement stackJsonElement = json.get("stack");
|
|
||||||
if(stackJsonElement.isJsonObject()){
|
|
||||||
stack = ShapedRecipe.deserializeItem(stackJsonElement.getAsJsonObject());
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("BallOfFurRecipe stack has to be a json object!");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("BallOfFurRecipe has no json stack object!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(json.has("chance")){
|
|
||||||
JsonElement chanceJsonElement = json.get("chance");
|
|
||||||
if(chanceJsonElement.isJsonPrimitive()){
|
|
||||||
chance = chanceJsonElement.getAsInt();
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("BallOfFurRecipe chance is not a json integer!");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("BallOfFurRecipe has no chance integer!");
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BallOfFurRecipe(recipeId, stack, chance);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public BallOfFurRecipe read(@Nonnull ResourceLocation recipeId, @Nonnull PacketBuffer buffer){
|
|
||||||
ItemStack stack = buffer.readItemStack();
|
|
||||||
int chance = buffer.readInt();
|
|
||||||
return new BallOfFurRecipe(recipeId, stack, chance);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(@Nonnull PacketBuffer buffer, @Nonnull BallOfFurRecipe recipe){
|
|
||||||
buffer.writeItemStack(recipe.getReturnItem());
|
|
||||||
buffer.writeInt(recipe.getChance());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -6,22 +6,25 @@ import net.minecraft.item.crafting.Ingredient;
|
||||||
import net.minecraft.potion.EffectInstance;
|
import net.minecraft.potion.EffectInstance;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
public class CoffeeMachineIngredient implements IDummyRecipe{
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
public class CoffeeMachineIngredient implements IDummyRecipe<CoffeeMachineIngredient> {
|
||||||
|
|
||||||
public static final IRecipeType<CoffeeMachineIngredient> COFFEE_MACHINE_RECIPE_TYPE = IRecipeType.register("actuallyadditions:coffee_machine");
|
public static final IRecipeType<CoffeeMachineIngredient> COFFEE_MACHINE_RECIPE_TYPE = IRecipeType.register("actuallyadditions:coffee_machine");
|
||||||
|
|
||||||
protected final ResourceLocation recipeId;
|
@Nonnull private final ResourceLocation recipeId;
|
||||||
protected final Ingredient input;
|
@Nonnull private final Ingredient input;
|
||||||
protected final int maxAmplifier;
|
private final int maxAmplifier;
|
||||||
protected final EffectInstance[] effects;
|
@Nonnull private final EffectInstance[] effects;
|
||||||
|
|
||||||
public CoffeeMachineIngredient(ResourceLocation recipeId, Ingredient input, int maxAmplifier, EffectInstance[] effects){
|
public CoffeeMachineIngredient(@Nonnull ResourceLocation recipeId, @Nonnull Ingredient input, int maxAmplifier, @Nonnull EffectInstance[] effects){
|
||||||
this.recipeId = recipeId;
|
this.recipeId = recipeId;
|
||||||
this.input = input;
|
this.input = input;
|
||||||
this.maxAmplifier = maxAmplifier;
|
this.maxAmplifier = maxAmplifier;
|
||||||
this.effects = effects;
|
this.effects = effects;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
public Ingredient getInput(){
|
public Ingredient getInput(){
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
@ -30,20 +33,24 @@ public class CoffeeMachineIngredient implements IDummyRecipe{
|
||||||
return maxAmplifier;
|
return maxAmplifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
public EffectInstance[] getEffects(){
|
public EffectInstance[] getEffects(){
|
||||||
return effects;
|
return effects;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation getId(){
|
public ResourceLocation getId(){
|
||||||
return this.recipeId;
|
return this.recipeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public IRecipeSerializer<?> getSerializer(){
|
public IRecipeSerializer<CoffeeMachineIngredient> getSerializer(){
|
||||||
return CoffeeMachineIngredientFactory.INSTANCE;
|
return CoffeeMachineIngredientFactory.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public IRecipeType<?> getType(){
|
public IRecipeType<?> getType(){
|
||||||
return COFFEE_MACHINE_RECIPE_TYPE;
|
return COFFEE_MACHINE_RECIPE_TYPE;
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
package de.ellpeck.actuallyadditions.common.recipes;
|
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.item.crafting.IRecipeSerializer;
|
|
||||||
import net.minecraft.item.crafting.IRecipeType;
|
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
|
||||||
|
|
||||||
public class CompostRecipe implements IDummyRecipe {
|
|
||||||
|
|
||||||
public static final IRecipeType<CompostRecipe> COMPOST_RECIPE_TYPE = IRecipeType.register("actuallyadditions:compost");
|
|
||||||
|
|
||||||
private final ResourceLocation recipeId;
|
|
||||||
|
|
||||||
private final Ingredient input;
|
|
||||||
private final ItemStack output;
|
|
||||||
private final BlockState inputDisplay;
|
|
||||||
private final BlockState outputDisplay;
|
|
||||||
|
|
||||||
public CompostRecipe(ResourceLocation recipeId, Ingredient input, ItemStack output, BlockState inputDisplay, BlockState outputDisplay){
|
|
||||||
this.recipeId = recipeId;
|
|
||||||
this.input = input;
|
|
||||||
this.output = output;
|
|
||||||
this.inputDisplay = inputDisplay;
|
|
||||||
this.outputDisplay = outputDisplay;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Ingredient getInput(){
|
|
||||||
return this.input;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemStack getOutput(){
|
|
||||||
return this.output;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState getInputDisplay(){
|
|
||||||
return this.inputDisplay;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState getOutputDisplay(){
|
|
||||||
return this.outputDisplay;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResourceLocation getId(){
|
|
||||||
return this.recipeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IRecipeSerializer<?> getSerializer(){
|
|
||||||
return CompostRecipeFactory.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IRecipeType<?> getType(){
|
|
||||||
return COMPOST_RECIPE_TYPE;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,101 +0,0 @@
|
||||||
package de.ellpeck.actuallyadditions.common.recipes;
|
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.google.gson.JsonParseException;
|
|
||||||
import com.mojang.datafixers.Dynamic;
|
|
||||||
import com.mojang.datafixers.types.JsonOps;
|
|
||||||
import net.minecraft.block.BlockState;
|
|
||||||
import net.minecraft.block.Blocks;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.item.crafting.IRecipeSerializer;
|
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
|
||||||
import net.minecraft.item.crafting.ShapedRecipe;
|
|
||||||
import net.minecraft.nbt.*;
|
|
||||||
import net.minecraft.network.PacketBuffer;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
|
||||||
import net.minecraftforge.registries.ForgeRegistryEntry;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
public class CompostRecipeFactory extends ForgeRegistryEntry<IRecipeSerializer<?>> implements IRecipeSerializer<CompostRecipe> {
|
|
||||||
|
|
||||||
public static final CompostRecipeFactory INSTANCE = IRecipeSerializer.register("actuallyadditions:compost", new CompostRecipeFactory());
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompostRecipe read(ResourceLocation recipeId, JsonObject json){
|
|
||||||
Ingredient input;
|
|
||||||
ItemStack output;
|
|
||||||
BlockState inputDisplay;
|
|
||||||
BlockState outputDisplay;
|
|
||||||
|
|
||||||
if(json.has("input")){
|
|
||||||
input = Ingredient.deserialize(json.get("input"));
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("CompostRecipe needs a input ingredient json element!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(json.has("output")){
|
|
||||||
JsonElement outputJsonElement = json.get("output");
|
|
||||||
if(outputJsonElement.isJsonObject()){
|
|
||||||
output = ShapedRecipe.deserializeItem(outputJsonElement.getAsJsonObject());
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("CompostRecipe output element is not a json object!");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("CompostRecipe needs a output itemstack json object!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(json.has("display")){
|
|
||||||
JsonElement displayJsonElement = json.get("display");
|
|
||||||
if(displayJsonElement.isJsonObject()){
|
|
||||||
JsonObject displayJsonObject = displayJsonElement.getAsJsonObject();
|
|
||||||
if(displayJsonObject.has("input")){
|
|
||||||
inputDisplay = BlockState.deserialize(new Dynamic<>(JsonOps.INSTANCE, displayJsonObject.get("input")));
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("CompostRecipe display needs an input json element!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(displayJsonObject.has("output")){
|
|
||||||
outputDisplay = BlockState.deserialize(new Dynamic<>(JsonOps.INSTANCE, displayJsonObject.get("output")));
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("CompostRecipe display needs an output json element!");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new JsonParseException("CompostRecipe display has to be a json object!");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// no exception but default values
|
|
||||||
inputDisplay = Blocks.DIRT.getDefaultState();
|
|
||||||
outputDisplay = Blocks.COARSE_DIRT.getDefaultState();
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CompostRecipe(recipeId, input, output, inputDisplay, outputDisplay);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public CompostRecipe read(ResourceLocation recipeId, PacketBuffer buffer){
|
|
||||||
Ingredient input = Ingredient.read(buffer);
|
|
||||||
ItemStack output = buffer.readItemStack();
|
|
||||||
CompoundNBT inputNBT = buffer.readCompoundTag();
|
|
||||||
CompoundNBT outputNBT = buffer.readCompoundTag();
|
|
||||||
|
|
||||||
BlockState inputDisplay = BlockState.deserialize(new Dynamic<>(NBTDynamicOps.INSTANCE, inputNBT));
|
|
||||||
BlockState outputDisplay = BlockState.deserialize(new Dynamic<>(NBTDynamicOps.INSTANCE, outputNBT));
|
|
||||||
|
|
||||||
return new CompostRecipe(recipeId, input, output, inputDisplay, outputDisplay);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(PacketBuffer buffer, CompostRecipe recipe){
|
|
||||||
recipe.getInput().write(buffer);
|
|
||||||
buffer.writeItemStack(recipe.getOutput());
|
|
||||||
|
|
||||||
INBT inputNBT = BlockState.serialize(NBTDynamicOps.INSTANCE, recipe.getInputDisplay()).getValue();
|
|
||||||
buffer.writeCompoundTag((CompoundNBT) inputNBT); // if it isn't a compound than something real big is wrong and a crash should be the best way to handle it
|
|
||||||
|
|
||||||
INBT outputNBT = BlockState.serialize(NBTDynamicOps.INSTANCE, recipe.getOutputDisplay()).getValue();
|
|
||||||
buffer.writeCompoundTag((CompoundNBT) outputNBT);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
package de.ellpeck.actuallyadditions.common.recipes;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.crafting.IRecipeSerializer;
|
||||||
|
import net.minecraft.item.crafting.IRecipeType;
|
||||||
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
|
import net.minecraft.network.PacketBuffer;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
public class CrusherRecipe implements IDummyRecipe<CrusherRecipe> {
|
||||||
|
|
||||||
|
public static final IRecipeType<CrusherRecipe> RECIPE_TYPE = IRecipeType.register("actuallyadditions:crusher");
|
||||||
|
public static final CrusherRecipeFactory FACTORY = IRecipeSerializer.register("actuallyadditions:crusher", new CrusherRecipeFactory());
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private final ResourceLocation recipeId;
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private final Ingredient input;
|
||||||
|
@Nonnull
|
||||||
|
private final ItemStack output;
|
||||||
|
@Nonnull
|
||||||
|
private final ItemStack secondaryOutput;
|
||||||
|
private final int outputChance;
|
||||||
|
|
||||||
|
public CrusherRecipe(@Nonnull ResourceLocation recipeId, @Nonnull Ingredient input, @Nonnull ItemStack output, @Nonnull ItemStack secondaryOutput, int outputChance){
|
||||||
|
this.recipeId = recipeId;
|
||||||
|
this.input = input;
|
||||||
|
this.output = output;
|
||||||
|
this.secondaryOutput = secondaryOutput;
|
||||||
|
this.outputChance = outputChance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CrusherRecipe(@Nonnull ResourceLocation recipeId, @Nonnull Ingredient input, @Nonnull ItemStack output){
|
||||||
|
this(recipeId, input, output, ItemStack.EMPTY, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
public Ingredient getInput(){
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
public ItemStack getOutput(){
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
public ItemStack getSecondaryOutput(){
|
||||||
|
return secondaryOutput;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOutputChance(){
|
||||||
|
return outputChance;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getId(){
|
||||||
|
return this.recipeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IRecipeSerializer<CrusherRecipe> getSerializer(){
|
||||||
|
return FACTORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IRecipeType<?> getType(){
|
||||||
|
return RECIPE_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static class CrusherRecipeFactory extends RecipeFactoryBase<CrusherRecipe> {
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public CrusherRecipe read(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json){
|
||||||
|
Ingredient input = this.readIngredient(json, "input");
|
||||||
|
ItemStack firstOutput = this.readItemStack(json, "output");
|
||||||
|
ItemStack secondOutput = ItemStack.EMPTY;
|
||||||
|
int secondaryOutputChance = 0;
|
||||||
|
|
||||||
|
if(json.has("secondary")){ // Optional
|
||||||
|
JsonElement secondaryElement = json.get("secondary");
|
||||||
|
if(secondaryElement.isJsonObject()){
|
||||||
|
JsonObject secondary = secondaryElement.getAsJsonObject();
|
||||||
|
secondOutput = this.readItemStack(secondary, "output", ItemStack.EMPTY);
|
||||||
|
secondaryOutputChance = this.readInt(secondary, "chance", 0);
|
||||||
|
} else {
|
||||||
|
throw new JsonSyntaxException("Secondary is not valid!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new CrusherRecipe(recipeId, input, firstOutput, secondOutput, secondaryOutputChance);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(@Nonnull JsonObject json, @Nonnull CrusherRecipe recipe){
|
||||||
|
json.add("input", recipe.getInput().serialize());
|
||||||
|
json.add("output", this.writeItemStack(recipe.getOutput()));
|
||||||
|
if(!recipe.getSecondaryOutput().isEmpty() && recipe.getOutputChance() > 0){
|
||||||
|
JsonObject secondary = new JsonObject();
|
||||||
|
secondary.add("output", this.writeItemStack(recipe.getSecondaryOutput()));
|
||||||
|
secondary.addProperty("chance", recipe.getOutputChance());
|
||||||
|
json.add("secondary", secondary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public CrusherRecipe read(@Nonnull ResourceLocation recipeId, @Nonnull PacketBuffer buffer){
|
||||||
|
Ingredient input = Ingredient.read(buffer);
|
||||||
|
ItemStack output = buffer.readItemStack();
|
||||||
|
ItemStack secondaryOutput = buffer.readItemStack();
|
||||||
|
int chance = buffer.readVarInt();
|
||||||
|
|
||||||
|
return new CrusherRecipe(recipeId, input, output, secondaryOutput, chance);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(@Nonnull PacketBuffer buffer, @Nonnull CrusherRecipe recipe){
|
||||||
|
recipe.getInput().write(buffer);
|
||||||
|
buffer.writeItemStack(recipe.getOutput());
|
||||||
|
buffer.writeItemStack(recipe.getSecondaryOutput());
|
||||||
|
buffer.writeVarInt(recipe.getOutputChance());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,25 +1,37 @@
|
||||||
package de.ellpeck.actuallyadditions.common.recipes;
|
package de.ellpeck.actuallyadditions.common.recipes;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import net.minecraft.data.IFinishedRecipe;
|
||||||
import net.minecraft.inventory.IInventory;
|
import net.minecraft.inventory.IInventory;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.crafting.IRecipe;
|
import net.minecraft.item.crafting.IRecipe;
|
||||||
|
import net.minecraft.item.crafting.IRecipeSerializer;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A dummy Recipe implementation, because the minecraft recipe system forces us to use IRecipe with all of it's methods,
|
* A dummy Recipe implementation, because the minecraft recipe system forces us to use IRecipe with all of it's methods,
|
||||||
* but we don't need any of them.
|
* but we don't need any of them.
|
||||||
* Additionally the "isDynamic()" methods now returns true, because this indicates that the recipe book doesn't list
|
* Additionally the "isDynamic()" methods now returns true, because this indicates that the recipe book doesn't list
|
||||||
* this recipe at all.
|
* this recipe at all.
|
||||||
*/
|
*/
|
||||||
public interface IDummyRecipe extends IRecipe<IInventory> {
|
public interface IDummyRecipe<T extends IDummyRecipe<T>> extends IRecipe<IInventory>, IFinishedRecipe {
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
IRecipeSerializer<T> getSerializer();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default boolean matches(IInventory inv, World worldIn){
|
default boolean matches(@Nonnull IInventory inv, @Nonnull World world){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
default ItemStack getCraftingResult(IInventory inv){
|
default ItemStack getCraftingResult(@Nonnull IInventory inv){
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +40,7 @@ public interface IDummyRecipe extends IRecipe<IInventory> {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
default ItemStack getRecipeOutput(){
|
default ItemStack getRecipeOutput(){
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
|
@ -39,4 +52,28 @@ public interface IDummyRecipe extends IRecipe<IInventory> {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default void serialize(@Nonnull JsonObject json){
|
||||||
|
if(this.getSerializer() instanceof RecipeFactoryBase){
|
||||||
|
(((RecipeFactoryBase<T>) this.getSerializer())).write(json, (T) this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
default ResourceLocation getID(){
|
||||||
|
return this.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
default JsonObject getAdvancementJson(){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
default ResourceLocation getAdvancementID(){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
package de.ellpeck.actuallyadditions.common.recipes;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.crafting.IRecipeSerializer;
|
||||||
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraftforge.common.crafting.CraftingHelper;
|
||||||
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
import net.minecraftforge.registries.ForgeRegistryEntry;
|
||||||
|
|
||||||
|
public abstract class RecipeFactoryBase<T extends IDummyRecipe<T>> extends ForgeRegistryEntry<IRecipeSerializer<?>> implements IRecipeSerializer<T> {
|
||||||
|
|
||||||
|
public abstract void write(JsonObject json, T recipe);
|
||||||
|
|
||||||
|
protected Ingredient readIngredient(JsonObject json, String key){
|
||||||
|
if(json.has(key)){
|
||||||
|
return Ingredient.deserialize(json.get(key));
|
||||||
|
} else {
|
||||||
|
throw new JsonSyntaxException(String.format("Json element does not contain any element with the key: '%s'", key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Ingredient readIngredient(JsonObject json, String key, Ingredient alternative){
|
||||||
|
try{
|
||||||
|
return this.readIngredient(json, key);
|
||||||
|
} catch(JsonSyntaxException e){
|
||||||
|
return alternative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ItemStack readItemStack(JsonObject json, String key){
|
||||||
|
if(json.has(key)){
|
||||||
|
if(json.get(key).isJsonObject()){
|
||||||
|
return CraftingHelper.getItemStack(json.get(key).getAsJsonObject(), true);
|
||||||
|
} else if(json.get(key).isJsonPrimitive()){
|
||||||
|
ResourceLocation itemKey = new ResourceLocation(json.get(key).getAsString());
|
||||||
|
if(ForgeRegistries.ITEMS.containsKey(itemKey)){
|
||||||
|
return new ItemStack(ForgeRegistries.ITEMS.getValue(itemKey));
|
||||||
|
} else {
|
||||||
|
throw new JsonSyntaxException(String.format("Item with the key: '%s' is not registered!", key));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new JsonSyntaxException(String.format("Json element with the key: '%s' is neither a object nor a string!", key));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new JsonSyntaxException(String.format("Json element does not contain any element with the key: '%s'!", key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected JsonObject writeItemStack(ItemStack stack){
|
||||||
|
JsonObject json = new JsonObject();
|
||||||
|
json.addProperty("item", stack.getItem().getRegistryName().toString());
|
||||||
|
json.addProperty("count", stack.getCount());
|
||||||
|
if(stack.hasTag()){
|
||||||
|
json.add("nbt", new JsonParser().parse(stack.getTag().toString()));
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ItemStack readItemStack(JsonObject json, String key, ItemStack alternative){
|
||||||
|
try{
|
||||||
|
return this.readItemStack(json, key);
|
||||||
|
} catch(JsonSyntaxException e){
|
||||||
|
return alternative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int readInt(JsonObject json, String key){
|
||||||
|
if(json.has(key)){
|
||||||
|
if(json.get(key).isJsonPrimitive()){
|
||||||
|
try{
|
||||||
|
return json.get(key).getAsJsonPrimitive().getAsInt();
|
||||||
|
} catch(NumberFormatException e){
|
||||||
|
throw new JsonSyntaxException(String.format("Json element '%s' is not a valid integer!", key), e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new JsonSyntaxException(String.format("Json element '%s' is not a valid integer!", key));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new JsonSyntaxException(String.format("Json element '%s' does not exist!", key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int readInt(JsonObject json, String key, int alternative){
|
||||||
|
try{
|
||||||
|
return this.readInt(json, key);
|
||||||
|
} catch(Exception e){
|
||||||
|
return alternative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package de.ellpeck.actuallyadditions.common.tile;
|
package de.ellpeck.actuallyadditions.common.tile;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient;
|
|
||||||
import de.ellpeck.actuallyadditions.common.items.InitItems;
|
import de.ellpeck.actuallyadditions.common.items.InitItems;
|
||||||
import de.ellpeck.actuallyadditions.common.items.ItemCoffee;
|
import de.ellpeck.actuallyadditions.common.items.ItemCoffee;
|
||||||
import de.ellpeck.actuallyadditions.common.items.metalists.TheMiscItems;
|
import de.ellpeck.actuallyadditions.common.items.metalists.TheMiscItems;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package de.ellpeck.actuallyadditions.common.tile;
|
package de.ellpeck.actuallyadditions.common.tile;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.common.util.ItemStackHandlerAA.IAcceptor;
|
import de.ellpeck.actuallyadditions.common.util.ItemStackHandlerAA.IAcceptor;
|
||||||
import de.ellpeck.actuallyadditions.common.util.ItemStackHandlerAA.IRemover;
|
import de.ellpeck.actuallyadditions.common.util.ItemStackHandlerAA.IRemover;
|
||||||
import de.ellpeck.actuallyadditions.common.util.ItemUtil;
|
import de.ellpeck.actuallyadditions.common.util.ItemUtil;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package de.ellpeck.actuallyadditions.common.tile;
|
package de.ellpeck.actuallyadditions.common.tile;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.common.blocks.BlockFurnaceDouble;
|
import de.ellpeck.actuallyadditions.common.blocks.BlockFurnaceDouble;
|
||||||
import de.ellpeck.actuallyadditions.common.misc.SoundHandler;
|
import de.ellpeck.actuallyadditions.common.misc.SoundHandler;
|
||||||
import de.ellpeck.actuallyadditions.common.network.gui.IButtonReactor;
|
import de.ellpeck.actuallyadditions.common.network.gui.IButtonReactor;
|
||||||
|
|
|
@ -3,7 +3,6 @@ package de.ellpeck.actuallyadditions.common.util;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
|
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe;
|
import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe;
|
||||||
import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe;
|
import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe;
|
||||||
import de.ellpeck.actuallyadditions.common.util.crafting.RecipeHandler;
|
import de.ellpeck.actuallyadditions.common.util.crafting.RecipeHandler;
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package de.ellpeck.actuallyadditions.data;
|
package de.ellpeck.actuallyadditions.data;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
||||||
|
import de.ellpeck.actuallyadditions.data.recipes.CrusherRecipeGenerator;
|
||||||
|
import net.minecraft.data.DataGenerator;
|
||||||
|
import net.minecraftforge.client.model.generators.ExistingFileHelper;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
|
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
|
||||||
|
@ -9,7 +12,11 @@ import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
|
||||||
public class AADataGenerator {
|
public class AADataGenerator {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void gatherData(GatherDataEvent event) {
|
public static void gatherData(GatherDataEvent event){
|
||||||
|
DataGenerator dataGenerator = event.getGenerator();
|
||||||
|
ExistingFileHelper existingFileHelper = event.getExistingFileHelper();
|
||||||
|
|
||||||
|
dataGenerator.addProvider(new BlockStateGenerator(dataGenerator, existingFileHelper));
|
||||||
|
dataGenerator.addProvider(new CrusherRecipeGenerator(dataGenerator));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
package de.ellpeck.actuallyadditions.data;
|
||||||
|
|
||||||
|
|
||||||
|
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
||||||
|
import de.ellpeck.actuallyadditions.common.blocks.InitBlocks;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.DataGenerator;
|
||||||
|
import net.minecraftforge.client.model.generators.BlockStateProvider;
|
||||||
|
import net.minecraftforge.client.model.generators.ExistingFileHelper;
|
||||||
|
import net.minecraftforge.fml.RegistryObject;
|
||||||
|
|
||||||
|
public class BlockStateGenerator extends BlockStateProvider {
|
||||||
|
|
||||||
|
public BlockStateGenerator(DataGenerator dataGenerator, ExistingFileHelper existingFileHelper){
|
||||||
|
super(dataGenerator, ActuallyAdditions.MODID, existingFileHelper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerStatesAndModels(){
|
||||||
|
for(RegistryObject<Block> blockEntry : InitBlocks.BLOCKS.getEntries()){
|
||||||
|
blockEntry.ifPresent(block -> {
|
||||||
|
// todo check if the blocks aren't "simple" and provide a different model,
|
||||||
|
// probably with the help of a interface the block implements, like naturesaura does
|
||||||
|
this.simpleBlock(block);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package de.ellpeck.actuallyadditions.data.recipes;
|
||||||
|
|
||||||
|
import de.ellpeck.actuallyadditions.common.ActuallyAdditions;
|
||||||
|
import de.ellpeck.actuallyadditions.common.recipes.CrusherRecipe;
|
||||||
|
import net.minecraft.data.DataGenerator;
|
||||||
|
import net.minecraft.data.IFinishedRecipe;
|
||||||
|
import net.minecraft.data.RecipeProvider;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class CrusherRecipeGenerator extends RecipeProvider {
|
||||||
|
|
||||||
|
public CrusherRecipeGenerator(DataGenerator dataGenerator){
|
||||||
|
super(dataGenerator);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerRecipes(Consumer<IFinishedRecipe> consumer){
|
||||||
|
super.registerRecipes(consumer);
|
||||||
|
consumer.accept(new CrusherRecipe(new ResourceLocation(ActuallyAdditions.MODID, "test"), Ingredient.fromItems(Items.DIAMOND), new ItemStack(Items.DIRT, 64)));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +0,0 @@
|
||||||
{
|
|
||||||
"recipes": {
|
|
||||||
"atomic_reconstructor": "de.ellpeck.actuallyadditions.common.recipes.AtomicReconstructorRecipeFactory",
|
|
||||||
"ball_of_fur": "de.ellpeck.actuallyadditions.common.recipes.BallOfFurRecipeFactory",
|
|
||||||
"coffee_machine_ingredient": "de.ellpeck.actuallyadditions.common.recipes.CoffeeMachineIngredientFactory",
|
|
||||||
"compost": "de.ellpeck.actuallyadditions.common.recipes.CompostRecipeFactory"
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue