[Features] (Recipe-) Advancement API
This commit is contained in:
parent
e5da06a1e1
commit
18fffafb3a
10 changed files with 490 additions and 10 deletions
|
@ -249,9 +249,10 @@ public class AlloyingRecipe implements Recipe<Container>, UnknownReceipBookCateg
|
|||
BCLib.LOGGER.debug("Can't add Alloying recipe {}! Ingeredient or output not exists.", id);
|
||||
return;
|
||||
}
|
||||
BCLRecipeManager.addRecipe(
|
||||
BCLRecipeManager.addRecipeAndCreateAdvancement(
|
||||
TYPE,
|
||||
new AlloyingRecipe(id, group, primaryInput, secondaryInput, output, experience, smeltTime)
|
||||
new AlloyingRecipe(id, group, primaryInput, secondaryInput, output, experience, smeltTime),
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -350,9 +350,10 @@ public class AnvilRecipe implements Recipe<Container>, UnknownReceipBookCategory
|
|||
BCLib.LOGGER.debug("Can't add Anvil recipe {}! Ingeredient or output not exists.", id);
|
||||
return;
|
||||
}
|
||||
BCLRecipeManager.addRecipe(
|
||||
BCLRecipeManager.addRecipeAndCreateAdvancement(
|
||||
TYPE,
|
||||
new AnvilRecipe(id, input, output, inputCount, toolLevel, anvilLevel, damage)
|
||||
new AnvilRecipe(id, input, output, inputCount, toolLevel, anvilLevel, damage),
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
package org.betterx.bclib.recipes;
|
||||
|
||||
import org.betterx.bclib.api.v2.advancement.AdvancementManager;
|
||||
import org.betterx.bclib.util.CollectionsUtil;
|
||||
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.Container;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.TieredItem;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.crafting.Recipe;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.minecraft.world.item.crafting.RecipeType;
|
||||
|
@ -58,6 +63,48 @@ public class BCLRecipeManager {
|
|||
list.put(recipe.getId(), recipe);
|
||||
}
|
||||
|
||||
public static <C extends Container, T extends Recipe<C>> void addRecipeAndCreateAdvancement(
|
||||
RecipeType<T> type,
|
||||
T recipe
|
||||
) {
|
||||
addRecipe(type, recipe);
|
||||
registerAndCreateAdvancement(recipe, recipe.getResultItem().getItem() instanceof TieredItem);
|
||||
}
|
||||
|
||||
public static <C extends Container, T extends Recipe<C>> void addRecipeAndCreateAdvancement(
|
||||
RecipeType<T> type,
|
||||
T recipe,
|
||||
boolean isTool
|
||||
) {
|
||||
addRecipe(type, recipe);
|
||||
registerAndCreateAdvancement(recipe, isTool);
|
||||
}
|
||||
|
||||
public static <C extends Container, T extends Recipe<C>> ResourceLocation registerAndCreateAdvancement(
|
||||
T recipe,
|
||||
boolean isTool
|
||||
) {
|
||||
AdvancementManager.Builder b = AdvancementManager.Builder.createRecipe(
|
||||
recipe,
|
||||
isTool
|
||||
? AdvancementManager.AdvancementType.RECIPE_TOOL
|
||||
: AdvancementManager.AdvancementType.RECIPE_DECORATIONS
|
||||
);
|
||||
|
||||
int ct = 0;
|
||||
for (Ingredient ingredient : recipe.getIngredients()) {
|
||||
for (ItemStack stack : ingredient.getItems()) {
|
||||
if (stack.is(Items.AIR)) continue;
|
||||
|
||||
final String name = "has_" + ct++;
|
||||
Item item = stack.getItem();
|
||||
b.addInventoryChangedCriterion(name, item);
|
||||
}
|
||||
}
|
||||
|
||||
return b.buildAndRegister();
|
||||
}
|
||||
|
||||
public static <C extends Container, T extends Recipe<C>> T getRecipe(RecipeType<T> type, ResourceLocation id) {
|
||||
Map<ResourceLocation, T> map = BCLRecipeManager.<C, T>RECIPES().get(type);
|
||||
return map != null ? map.get(id) : null;
|
||||
|
|
|
@ -84,7 +84,7 @@ public class FurnaceRecipe {
|
|||
xp,
|
||||
time
|
||||
);
|
||||
BCLRecipeManager.addRecipe(RecipeType.SMELTING, recipe);
|
||||
BCLRecipeManager.addRecipeAndCreateAdvancement(RecipeType.SMELTING, recipe, false);
|
||||
|
||||
if (blasting) {
|
||||
BlastingRecipe recipe2 = new BlastingRecipe(
|
||||
|
@ -95,7 +95,7 @@ public class FurnaceRecipe {
|
|||
xp,
|
||||
time / 2
|
||||
);
|
||||
BCLRecipeManager.addRecipe(RecipeType.BLASTING, recipe2);
|
||||
BCLRecipeManager.addRecipeAndCreateAdvancement(RecipeType.BLASTING, recipe2, false);
|
||||
}
|
||||
|
||||
if (campfire) {
|
||||
|
@ -107,7 +107,7 @@ public class FurnaceRecipe {
|
|||
xp,
|
||||
time * 3
|
||||
);
|
||||
BCLRecipeManager.addRecipe(RecipeType.CAMPFIRE_COOKING, recipe2);
|
||||
BCLRecipeManager.addRecipeAndCreateAdvancement(RecipeType.CAMPFIRE_COOKING, recipe2, false);
|
||||
}
|
||||
|
||||
if (smoker) {
|
||||
|
@ -119,7 +119,7 @@ public class FurnaceRecipe {
|
|||
xp,
|
||||
time / 2
|
||||
);
|
||||
BCLRecipeManager.addRecipe(RecipeType.SMOKING, recipe2);
|
||||
BCLRecipeManager.addRecipeAndCreateAdvancement(RecipeType.SMOKING, recipe2, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -145,6 +145,6 @@ public class GridRecipe {
|
|||
result
|
||||
) : new ShapelessRecipe(id, group, result, materials);
|
||||
|
||||
BCLRecipeManager.addRecipe(type, recipe);
|
||||
BCLRecipeManager.addRecipeAndCreateAdvancement(type, recipe);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,6 +99,6 @@ public class SmithingTableRecipe {
|
|||
return;
|
||||
}
|
||||
|
||||
BCLRecipeManager.addRecipe(TYPE, new UpgradeRecipe(id, base, addition, result));
|
||||
BCLRecipeManager.addRecipeAndCreateAdvancement(TYPE, new UpgradeRecipe(id, base, addition, result));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue