Fixed Build issues

This commit is contained in:
Frank 2023-12-18 15:48:26 +01:00
parent f6703dc8bf
commit 0a8b66c551
14 changed files with 99 additions and 141 deletions

View file

@ -1,11 +1,12 @@
package org.betterx.bclib.api.v2.advancement; package org.betterx.bclib.api.v2.advancement;
import net.minecraft.advancements.AdvancementType;
import net.minecraft.advancements.DisplayInfo; import net.minecraft.advancements.DisplayInfo;
import net.minecraft.advancements.FrameType;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import java.util.Optional;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
class Display { class Display {
@ -13,7 +14,7 @@ class Display {
Component title; Component title;
net.minecraft.network.chat.Component description; net.minecraft.network.chat.Component description;
@Nullable ResourceLocation background; @Nullable ResourceLocation background;
FrameType frame; AdvancementType frame;
boolean showToast; boolean showToast;
boolean announceChat; boolean announceChat;
boolean hidden; boolean hidden;
@ -25,7 +26,7 @@ class Display {
this.icon = null; this.icon = null;
this.title = null; this.title = null;
this.description = null; this.description = null;
frame = FrameType.TASK; frame = AdvancementType.TASK;
background = null; background = null;
showToast = true; showToast = true;
announceChat = true; announceChat = true;
@ -36,7 +37,7 @@ class Display {
DisplayInfo build() { DisplayInfo build() {
return new DisplayInfo( return new DisplayInfo(
icon, title, description, icon, title, description,
background, frame, showToast, announceChat, hidden Optional.of(background), frame, showToast, announceChat, hidden
); );
} }
} }

View file

@ -3,6 +3,7 @@ package org.betterx.bclib.api.v3.datagen;
import org.betterx.bclib.api.v2.advancement.AdvancementManager; import org.betterx.bclib.api.v2.advancement.AdvancementManager;
import net.minecraft.advancements.Advancement; import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementHolder;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricAdvancementProvider; import net.fabricmc.fabric.api.datagen.v1.provider.FabricAdvancementProvider;
@ -21,7 +22,7 @@ public abstract class AdvancementDataProvider extends FabricAdvancementProvider
protected abstract void bootstrap(); protected abstract void bootstrap();
@Override @Override
public void generateAdvancement(Consumer<Advancement> consumer) { public void generateAdvancement(Consumer<AdvancementHolder> consumer) {
bootstrap(); bootstrap();
AdvancementManager.registerAllDataGen(modIDs, consumer); AdvancementManager.registerAllDataGen(modIDs, consumer);
} }

View file

@ -1,6 +1,6 @@
package org.betterx.bclib.api.v3.datagen; package org.betterx.bclib.api.v3.datagen;
import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -11,5 +11,5 @@ public interface DatapackRecipeBuilder {
default String getNamespace() { default String getNamespace() {
return this.getId().getNamespace(); return this.getId().getNamespace();
} }
void build(Consumer<FinishedRecipe> cc); void build(RecipeOutput cc);
} }

View file

@ -2,7 +2,7 @@ package org.betterx.bclib.api.v3.datagen;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeOutput;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
@ -25,7 +25,7 @@ public class RecipeDataProvider extends FabricRecipeProvider {
} }
@Override @Override
public void buildRecipes(Consumer<FinishedRecipe> exporter) { public void buildRecipes(RecipeOutput exporter) {
if (RECIPES == null) return; if (RECIPES == null) return;
for (var r : RECIPES) { for (var r : RECIPES) {

View file

@ -3,19 +3,21 @@ package org.betterx.bclib.interfaces;
import org.betterx.bclib.recipes.AnvilRecipe; import org.betterx.bclib.recipes.AnvilRecipe;
import net.minecraft.world.item.crafting.RecipeHolder;
import java.util.List; import java.util.List;
public interface AnvilScreenHandlerExtended { public interface AnvilScreenHandlerExtended {
void bcl_updateCurrentRecipe(AnvilRecipe recipe); void bcl_updateCurrentRecipe(RecipeHolder<AnvilRecipe> recipe);
AnvilRecipe bcl_getCurrentRecipe(); RecipeHolder<AnvilRecipe> bcl_getCurrentRecipe();
List<AnvilRecipe> bcl_getRecipes(); List<RecipeHolder<AnvilRecipe>> bcl_getRecipes();
default void be_nextRecipe() { default void be_nextRecipe() {
List<AnvilRecipe> recipes = bcl_getRecipes(); List<RecipeHolder<AnvilRecipe>> recipes = bcl_getRecipes();
if (recipes.size() < 2) return; if (recipes.size() < 2) return;
AnvilRecipe current = bcl_getCurrentRecipe(); RecipeHolder<AnvilRecipe> current = bcl_getCurrentRecipe();
int i = recipes.indexOf(current) + 1; int i = recipes.indexOf(current) + 1;
if (i >= recipes.size()) { if (i >= recipes.size()) {
i = 0; i = 0;
@ -24,9 +26,9 @@ public interface AnvilScreenHandlerExtended {
} }
default void be_previousRecipe() { default void be_previousRecipe() {
List<AnvilRecipe> recipes = bcl_getRecipes(); List<RecipeHolder<AnvilRecipe>> recipes = bcl_getRecipes();
if (recipes.size() < 2) return; if (recipes.size() < 2) return;
AnvilRecipe current = bcl_getCurrentRecipe(); RecipeHolder<AnvilRecipe> current = bcl_getCurrentRecipe();
int i = recipes.indexOf(current) - 1; int i = recipes.indexOf(current) - 1;
if (i <= 0) { if (i <= 0) {
i = recipes.size() - 1; i = recipes.size() - 1;

View file

@ -11,15 +11,16 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.*; import net.minecraft.world.inventory.*;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeHolder;
import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeManager;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.LevelEvent; import net.minecraft.world.level.block.LevelEvent;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@ -32,16 +33,15 @@ import org.jetbrains.annotations.Nullable;
@Mixin(AnvilMenu.class) @Mixin(AnvilMenu.class)
public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilScreenHandlerExtended { public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilScreenHandlerExtended {
private List<AnvilRecipe> bcl_recipes = Collections.emptyList(); @Unique
private AnvilRecipe bcl_currentRecipe; private List<RecipeHolder<AnvilRecipe>> bcl_recipes = Collections.emptyList();
private DataSlot anvilLevel; @Unique
private RecipeHolder<AnvilRecipe> bcl_currentRecipe;
@Shadow
private int repairItemCountCost;
@Final @Unique
@Shadow private DataSlot bcl_anvilLevel;
private DataSlot cost;
public AnvilMenuMixin( public AnvilMenuMixin(
@Nullable MenuType<?> menuType, @Nullable MenuType<?> menuType,
@ -54,15 +54,15 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc
@Inject(method = "<init>(ILnet/minecraft/world/entity/player/Inventory;Lnet/minecraft/world/inventory/ContainerLevelAccess;)V", at = @At("TAIL")) @Inject(method = "<init>(ILnet/minecraft/world/entity/player/Inventory;Lnet/minecraft/world/inventory/ContainerLevelAccess;)V", at = @At("TAIL"))
public void be_initAnvilLevel(int syncId, Inventory inventory, ContainerLevelAccess context, CallbackInfo info) { public void be_initAnvilLevel(int syncId, Inventory inventory, ContainerLevelAccess context, CallbackInfo info) {
this.anvilLevel = addDataSlot(DataSlot.standalone()); this.bcl_anvilLevel = addDataSlot(DataSlot.standalone());
if (context != ContainerLevelAccess.NULL) { if (context != ContainerLevelAccess.NULL) {
int level = context.evaluate((world, blockPos) -> { int level = context.evaluate((world, blockPos) -> {
Block anvilBlock = world.getBlockState(blockPos).getBlock(); Block anvilBlock = world.getBlockState(blockPos).getBlock();
return LeveledAnvilBlock.getAnvilCraftingLevel(anvilBlock); return LeveledAnvilBlock.getAnvilCraftingLevel(anvilBlock);
}, 0); }, 0);
anvilLevel.set(level); bcl_anvilLevel.set(level);
} else { } else {
anvilLevel.set(0); bcl_anvilLevel.set(0);
} }
} }
@ -72,7 +72,7 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc
@Inject(method = "mayPickup", at = @At("HEAD"), cancellable = true) @Inject(method = "mayPickup", at = @At("HEAD"), cancellable = true)
protected void bcl_canTakeOutput(Player player, boolean present, CallbackInfoReturnable<Boolean> info) { protected void bcl_canTakeOutput(Player player, boolean present, CallbackInfoReturnable<Boolean> info) {
if (bcl_currentRecipe != null) { if (bcl_currentRecipe != null) {
info.setReturnValue(bcl_currentRecipe.checkHammerDurability(inputSlots, player)); info.setReturnValue(bcl_currentRecipe.value().checkHammerDurability(inputSlots, player));
} }
} }
@ -94,8 +94,8 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc
if (bcl_currentRecipe != null) { if (bcl_currentRecipe != null) {
final int ingredientSlot = AnvilRecipe.getIngredientSlot(inputSlots); final int ingredientSlot = AnvilRecipe.getIngredientSlot(inputSlots);
inputSlots.getItem(ingredientSlot).shrink(bcl_currentRecipe.getInputCount()); inputSlots.getItem(ingredientSlot).shrink(bcl_currentRecipe.value().getInputCount());
stack = bcl_currentRecipe.craft(inputSlots, player); stack = bcl_currentRecipe.value().craft(inputSlots, player);
slotsChanged(inputSlots); slotsChanged(inputSlots);
access.execute((level, blockPos) -> { access.execute((level, blockPos) -> {
final BlockState anvilState = level.getBlockState(blockPos); final BlockState anvilState = level.getBlockState(blockPos);
@ -119,12 +119,12 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc
public void bcl_updateOutput(CallbackInfo info) { public void bcl_updateOutput(CallbackInfo info) {
RecipeManager recipeManager = this.player.level().getRecipeManager(); RecipeManager recipeManager = this.player.level().getRecipeManager();
bcl_recipes = recipeManager.getRecipesFor(AnvilRecipe.TYPE, inputSlots, player.level()); bcl_recipes = recipeManager.getRecipesFor(AnvilRecipe.TYPE, inputSlots, player.level());
if (bcl_recipes.size() > 0) { if (!bcl_recipes.isEmpty()) {
int anvilLevel = this.anvilLevel.get(); int anvilLevel = this.bcl_anvilLevel.get();
bcl_recipes = bcl_recipes.stream() bcl_recipes = bcl_recipes.stream()
.filter(recipe -> anvilLevel >= recipe.getAnvilLevel()) .filter(recipe -> anvilLevel >= recipe.value().getAnvilLevel())
.collect(Collectors.toList()); .collect(Collectors.toList());
if (bcl_recipes.size() > 0) { if (!bcl_recipes.isEmpty()) {
if (bcl_currentRecipe == null || !bcl_recipes.contains(bcl_currentRecipe)) { if (bcl_currentRecipe == null || !bcl_recipes.contains(bcl_currentRecipe)) {
bcl_currentRecipe = bcl_recipes.get(0); bcl_currentRecipe = bcl_recipes.get(0);
} }
@ -156,25 +156,26 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc
return super.clickMenuButton(player, id); return super.clickMenuButton(player, id);
} }
@Unique
private void bcl_updateResult() { private void bcl_updateResult() {
if (bcl_currentRecipe == null) return; if (bcl_currentRecipe == null) return;
resultSlots.setItem(0, bcl_currentRecipe.assemble(inputSlots, this.player.level().registryAccess())); resultSlots.setItem(0, bcl_currentRecipe.value().assemble(inputSlots, this.player.level().registryAccess()));
broadcastChanges(); broadcastChanges();
} }
@Override @Override
public void bcl_updateCurrentRecipe(AnvilRecipe recipe) { public void bcl_updateCurrentRecipe(RecipeHolder<AnvilRecipe> recipe) {
this.bcl_currentRecipe = recipe; this.bcl_currentRecipe = recipe;
bcl_updateResult(); bcl_updateResult();
} }
@Override @Override
public AnvilRecipe bcl_getCurrentRecipe() { public RecipeHolder<AnvilRecipe> bcl_getCurrentRecipe() {
return bcl_currentRecipe; return bcl_currentRecipe;
} }
@Override @Override
public List<AnvilRecipe> bcl_getRecipes() { public List<RecipeHolder<AnvilRecipe>> bcl_getRecipes() {
return bcl_recipes; return bcl_recipes;
} }
} }

View file

@ -5,11 +5,11 @@ import org.betterx.bclib.api.v3.datagen.DatapackRecipeBuilder;
import org.betterx.bclib.api.v3.datagen.RecipeDataProvider; import org.betterx.bclib.api.v3.datagen.RecipeDataProvider;
import org.betterx.bclib.util.RecipeHelper; import org.betterx.bclib.util.RecipeHelper;
import net.minecraft.advancements.CriterionTriggerInstance; import net.minecraft.advancements.Criterion;
import net.minecraft.advancements.critereon.InventoryChangeTrigger; import net.minecraft.advancements.critereon.InventoryChangeTrigger;
import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.data.recipes.RecipeCategory; import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.data.recipes.RecipeProvider; import net.minecraft.data.recipes.RecipeProvider;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -21,7 +21,6 @@ import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import java.util.Arrays; import java.util.Arrays;
import java.util.function.Consumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public abstract class AbstractBaseRecipeBuilder<T extends AbstractBaseRecipeBuilder> implements DatapackRecipeBuilder { public abstract class AbstractBaseRecipeBuilder<T extends AbstractBaseRecipeBuilder> implements DatapackRecipeBuilder {
@ -132,7 +131,7 @@ public abstract class AbstractBaseRecipeBuilder<T extends AbstractBaseRecipeBuil
return unlockedBy(items); return unlockedBy(items);
} }
protected abstract T unlocks(String name, CriterionTriggerInstance trigger); protected abstract T unlocks(String name, Criterion<?> criterion);
public final T build() { public final T build() {
@ -158,10 +157,10 @@ public abstract class AbstractBaseRecipeBuilder<T extends AbstractBaseRecipeBuil
return true; return true;
} }
protected abstract void buildRecipe(Consumer<FinishedRecipe> cc); protected abstract void buildRecipe(RecipeOutput cc);
@Override @Override
public final void build(Consumer<FinishedRecipe> cc) { public final void build(RecipeOutput cc) {
if (!checkRecipe()) return; if (!checkRecipe()) return;
buildRecipe(cc); buildRecipe(cc);
} }

View file

@ -1,7 +1,6 @@
package org.betterx.bclib.recipes; package org.betterx.bclib.recipes;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.util.ItemUtil;
import org.betterx.bclib.util.RecipeHelper; import org.betterx.bclib.util.RecipeHelper;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -12,9 +11,6 @@ import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.ItemLike;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
public abstract class AbstractDoubleInputRecipeBuilder<T extends AbstractDoubleInputRecipeBuilder, R extends Recipe<? extends Container>> extends AbstractSingleInputRecipeBuilder<T, R> { public abstract class AbstractDoubleInputRecipeBuilder<T extends AbstractDoubleInputRecipeBuilder, R extends Recipe<? extends Container>> extends AbstractSingleInputRecipeBuilder<T, R> {
protected Ingredient secondaryInput; protected Ingredient secondaryInput;
@ -62,18 +58,4 @@ public abstract class AbstractDoubleInputRecipeBuilder<T extends AbstractDoubleI
} }
return super.checkRecipe(); return super.checkRecipe();
} }
@Override
protected void serializeRecipeData(JsonObject root) {
final JsonArray ingredients = new JsonArray();
ingredients.add(primaryInput.toJson());
ingredients.add(secondaryInput.toJson());
root.add("ingredients", ingredients);
if (group != null && !group.isEmpty()) {
root.addProperty("group", group);
}
root.add("result", ItemUtil.toJsonRecipe(output));
}
} }

View file

@ -1,13 +1,12 @@
package org.betterx.bclib.recipes; package org.betterx.bclib.recipes;
import org.betterx.bclib.util.ItemUtil;
import net.minecraft.advancements.Advancement; import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.CriterionTriggerInstance; import net.minecraft.advancements.AdvancementHolder;
import net.minecraft.advancements.RequirementsStrategy; import net.minecraft.advancements.AdvancementRequirements;
import net.minecraft.advancements.Criterion;
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger; import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.data.recipes.RecipeBuilder; import net.minecraft.data.recipes.RecipeBuilder;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
import net.minecraft.world.Container; import net.minecraft.world.Container;
@ -17,9 +16,6 @@ import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.ItemLike;
import com.google.gson.JsonObject;
import java.util.function.Consumer;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public abstract class AbstractSingleInputRecipeBuilder<T extends AbstractSingleInputRecipeBuilder, R extends Recipe<? extends Container>> extends AbstractSimpleRecipeBuilder<T> { public abstract class AbstractSingleInputRecipeBuilder<T extends AbstractSingleInputRecipeBuilder, R extends Recipe<? extends Container>> extends AbstractSimpleRecipeBuilder<T> {
@ -46,73 +42,49 @@ public abstract class AbstractSingleInputRecipeBuilder<T extends AbstractSingleI
} }
@Override @Override
protected T unlocks(String name, CriterionTriggerInstance trigger) { protected T unlocks(String name, Criterion<?> trigger) {
this.advancement.addCriterion(name, trigger); this.advancement.addCriterion(name, trigger);
return (T) this; return (T) this;
} }
@Override @Override
protected void buildRecipe(Consumer<FinishedRecipe> cc) { protected void buildRecipe(RecipeOutput cc) {
setupAdvancementForResult(); setupAdvancementForResult();
cc.accept(new AbstractSingleInputRecipeBuilder<T, R>.Result()); final AdvancementHolder advancementHolder = advancement.build(getId());
final R recipe = createRecipe(getId());
cc.accept(getId(), recipe, advancementHolder);
} }
protected abstract R createRecipe(ResourceLocation id);
protected abstract RecipeSerializer<R> getSerializer(); protected abstract RecipeSerializer<R> getSerializer();
protected void serializeRecipeData(JsonObject root) {
root.add("input", ItemUtil.toJsonIngredientWithNBT(primaryInput));
if (group != null && !group.isEmpty()) {
root.addProperty("group", group);
}
root.add("result", ItemUtil.toJsonRecipeWithNBT(output));
}
protected void setupAdvancementForResult() { protected void setupAdvancementForResult() {
advancement.parent(RecipeBuilder.ROOT_RECIPE_ADVANCEMENT) advancement
.addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(id)) .parent(RecipeBuilder.ROOT_RECIPE_ADVANCEMENT)//automatically at root level
.rewards(net.minecraft.advancements.AdvancementRewards.Builder.recipe(id)) .addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(id))
.requirements(RequirementsStrategy.OR); .rewards(net.minecraft.advancements.AdvancementRewards.Builder.recipe(id))
.requirements(AdvancementRequirements.Strategy.OR);
} }
protected ResourceLocation createAdvancementId() { protected ResourceLocation createAdvancementId() {
return id.withPrefix("recipes/" + category.getFolderName() + "/"); return id.withPrefix("recipes/" + category.getFolderName() + "/");
} }
public class Result implements FinishedRecipe { public class Result implements RecipeOutput {
private final ResourceLocation advancementId; @Override
public void accept(
ResourceLocation resourceLocation,
Recipe<?> recipe,
@Nullable AdvancementHolder advancementHolder
) {
protected Result() {
this.advancementId = createAdvancementId();
} }
@Override @Override
public ResourceLocation getId() { public Advancement.Builder advancement() {
return AbstractSingleInputRecipeBuilder.this.getId(); return null;
}
@Override
public RecipeSerializer<R> getType() {
return getSerializer();
}
@Nullable
@Override
public JsonObject serializeAdvancement() {
return advancement.serializeToJson();
}
@Nullable
@Override
public ResourceLocation getAdvancementId() {
return advancementId;
}
@Override
public void serializeRecipeData(JsonObject root) {
AbstractSingleInputRecipeBuilder.this.serializeRecipeData(root);
} }
} }
} }

View file

@ -1,6 +1,6 @@
package org.betterx.bclib.recipes; package org.betterx.bclib.recipes;
import net.minecraft.advancements.CriterionTriggerInstance; import net.minecraft.advancements.Criterion;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
@ -15,7 +15,7 @@ public abstract class AbstractUnlockableRecipeBuilder<T extends AbstractUnlockab
super(id, output); super(id, output);
} }
protected final Map<String, CriterionTriggerInstance> unlocks = new HashMap<>(); protected final Map<String, Criterion<?>> unlocks = new HashMap<>();
@Override @Override
public T unlockedBy(ItemLike item) { public T unlockedBy(ItemLike item) {
@ -28,8 +28,8 @@ public abstract class AbstractUnlockableRecipeBuilder<T extends AbstractUnlockab
} }
@Override @Override
protected T unlocks(String name, CriterionTriggerInstance trigger) { protected T unlocks(String name, Criterion<?> criterion) {
this.unlocks.put(name, trigger); this.unlocks.put(name, criterion);
return (T) this; return (T) this;
} }
} }

View file

@ -2,7 +2,7 @@ package org.betterx.bclib.recipes;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.data.recipes.SimpleCookingRecipeBuilder; import net.minecraft.data.recipes.SimpleCookingRecipeBuilder;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
@ -139,7 +139,7 @@ public class CookingRecipeBuilder extends AbstractUnlockableRecipeBuilder<Cookin
build(false, true, true); build(false, true, true);
} }
private void buildRecipe(Consumer<FinishedRecipe> cc, SimpleCookingRecipeBuilder builder, String postfix) { private void buildRecipe(RecipeOutput cc, SimpleCookingRecipeBuilder builder, String postfix) {
ResourceLocation loc = new ResourceLocation(id.getNamespace(), id.getPath() + "_" + postfix); ResourceLocation loc = new ResourceLocation(id.getNamespace(), id.getPath() + "_" + postfix);
for (var item : unlocks.entrySet()) { for (var item : unlocks.entrySet()) {
builder.unlockedBy(item.getKey(), item.getValue()); builder.unlockedBy(item.getKey(), item.getValue());
@ -148,7 +148,7 @@ public class CookingRecipeBuilder extends AbstractUnlockableRecipeBuilder<Cookin
} }
@Override @Override
protected void buildRecipe(Consumer<FinishedRecipe> cc) { protected void buildRecipe(RecipeOutput cc) {
if (smelting) { if (smelting) {
buildRecipe( buildRecipe(
cc, cc,

View file

@ -2,8 +2,8 @@ package org.betterx.bclib.recipes;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import net.minecraft.advancements.CriterionTriggerInstance; import net.minecraft.advancements.Criterion;
import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.data.recipes.ShapedRecipeBuilder; import net.minecraft.data.recipes.ShapedRecipeBuilder;
import net.minecraft.data.recipes.ShapelessRecipeBuilder; import net.minecraft.data.recipes.ShapelessRecipeBuilder;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -16,7 +16,6 @@ import net.minecraft.world.level.ItemLike;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.function.Consumer;
public class CraftingRecipeBuilder extends AbstractBaseRecipeBuilder<CraftingRecipeBuilder> { public class CraftingRecipeBuilder extends AbstractBaseRecipeBuilder<CraftingRecipeBuilder> {
private String[] shape; private String[] shape;
@ -35,7 +34,7 @@ public class CraftingRecipeBuilder extends AbstractBaseRecipeBuilder<CraftingRec
return new CraftingRecipeBuilder(id, output); return new CraftingRecipeBuilder(id, output);
} }
protected final Map<String, CriterionTriggerInstance> unlocks = new HashMap<>(); protected final Map<String, Criterion<?>> unlocks = new HashMap<>();
protected final Map<Character, Ingredient> materials = new HashMap<>(); protected final Map<Character, Ingredient> materials = new HashMap<>();
@Override @Override
@ -112,10 +111,10 @@ public class CraftingRecipeBuilder extends AbstractBaseRecipeBuilder<CraftingRec
public CraftingRecipeBuilder unlockedBy(ItemStack... stacks) { public CraftingRecipeBuilder unlockedBy(ItemStack... stacks) {
return super.unlockedBy(stacks); return super.unlockedBy(stacks);
} }
@Override @Override
protected CraftingRecipeBuilder unlocks(String name, CriterionTriggerInstance trigger) { protected CraftingRecipeBuilder unlocks(String name, Criterion<?> criterion) {
this.unlocks.put(name, trigger); this.unlocks.put(name, criterion);
return this; return this;
} }
@ -132,7 +131,7 @@ public class CraftingRecipeBuilder extends AbstractBaseRecipeBuilder<CraftingRec
} }
@Override @Override
protected void buildRecipe(Consumer<FinishedRecipe> cc) { protected void buildRecipe(RecipeOutput cc) {
if (shape != null) buildShaped(cc); if (shape != null) buildShaped(cc);
else buildShapeless(cc); else buildShapeless(cc);
} }
@ -145,11 +144,11 @@ public class CraftingRecipeBuilder extends AbstractBaseRecipeBuilder<CraftingRec
return super.checkRecipe(); return super.checkRecipe();
} }
protected void buildShapeless(Consumer<FinishedRecipe> cc) { protected void buildShapeless(RecipeOutput cc) {
final ShapelessRecipeBuilder builder = ShapelessRecipeBuilder.shapeless( final ShapelessRecipeBuilder builder = ShapelessRecipeBuilder.shapeless(
category, output.getItem(), output.getCount() category, output.getItem(), output.getCount()
); );
for (Map.Entry<String, CriterionTriggerInstance> item : unlocks.entrySet()) { for (Map.Entry<String, Criterion<?>> item : unlocks.entrySet()) {
builder.unlockedBy(item.getKey(), item.getValue()); builder.unlockedBy(item.getKey(), item.getValue());
} }
for (Map.Entry<Character, Ingredient> mat : materials.entrySet()) { for (Map.Entry<Character, Ingredient> mat : materials.entrySet()) {
@ -201,11 +200,11 @@ public class CraftingRecipeBuilder extends AbstractBaseRecipeBuilder<CraftingRec
} }
protected void buildShaped(Consumer<FinishedRecipe> cc) { protected void buildShaped(RecipeOutput cc) {
final ShapedRecipeBuilder builder = ShapedRecipeBuilder.shaped( final ShapedRecipeBuilder builder = ShapedRecipeBuilder.shaped(
category, output.getItem(), output.getCount() category, output.getItem(), output.getCount()
); );
for (Map.Entry<String, CriterionTriggerInstance> item : unlocks.entrySet()) { for (Map.Entry<String, Criterion<?>> item : unlocks.entrySet()) {
builder.unlockedBy(item.getKey(), item.getValue()); builder.unlockedBy(item.getKey(), item.getValue());
} }
for (Map.Entry<Character, Ingredient> mat : materials.entrySet()) { for (Map.Entry<Character, Ingredient> mat : materials.entrySet()) {

View file

@ -2,7 +2,7 @@ package org.betterx.bclib.recipes;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.data.recipes.SmithingTransformRecipeBuilder; import net.minecraft.data.recipes.SmithingTransformRecipeBuilder;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
@ -85,7 +85,7 @@ public class SmithingRecipeBuilder extends AbstractUnlockableRecipeBuilder<Smith
} }
@Override @Override
protected void buildRecipe(Consumer<FinishedRecipe> cc) { protected void buildRecipe(RecipeOutput cc) {
final SmithingTransformRecipeBuilder builder = SmithingTransformRecipeBuilder.smithing( final SmithingTransformRecipeBuilder builder = SmithingTransformRecipeBuilder.smithing(
Ingredient.of(template), Ingredient.of(template),
primaryInput, primaryInput,

View file

@ -1,13 +1,14 @@
package org.betterx.bclib.recipes; package org.betterx.bclib.recipes;
import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.advancements.Criterion;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.data.recipes.SingleItemRecipeBuilder; import net.minecraft.data.recipes.SingleItemRecipeBuilder;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.ItemLike;
import java.util.function.Consumer; import java.util.Map;
public class StonecutterRecipeBuilder extends AbstractUnlockableRecipeBuilder<StonecutterRecipeBuilder> { public class StonecutterRecipeBuilder extends AbstractUnlockableRecipeBuilder<StonecutterRecipeBuilder> {
@ -53,11 +54,11 @@ public class StonecutterRecipeBuilder extends AbstractUnlockableRecipeBuilder<St
} }
@Override @Override
protected void buildRecipe(Consumer<FinishedRecipe> cc) { protected void buildRecipe(RecipeOutput cc) {
final SingleItemRecipeBuilder builder = SingleItemRecipeBuilder.stonecutting( final SingleItemRecipeBuilder builder = SingleItemRecipeBuilder.stonecutting(
primaryInput, category, output.getItem(), output.getCount() primaryInput, category, output.getItem(), output.getCount()
); );
for (var item : unlocks.entrySet()) { for (Map.Entry<String, Criterion<?>> item : unlocks.entrySet()) {
builder.unlockedBy(item.getKey(), item.getValue()); builder.unlockedBy(item.getKey(), item.getValue());
} }
builder.group(group); builder.group(group);