fix adv and reg
This commit is contained in:
		@@ -20,8 +20,6 @@ import java.util.function.Consumer;
 | 
			
		||||
 | 
			
		||||
public final class Reg {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	private final String modid;
 | 
			
		||||
 | 
			
		||||
	private final Map<Registry<?>, DeferredRegister<?>> map = new LinkedHashMap<>();
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ public record SR<T>(DeferredRegister<T> reg) {
 | 
			
		||||
		return new SR<>(parent.make(reg));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public Val<T> reg(String id, Supplier<T> sup) {
 | 
			
		||||
	public <H extends T> Val<H> reg(String id, Supplier<H> sup) {
 | 
			
		||||
		return new ValImpl<>(reg.register(id, sup));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,85 +7,87 @@ import net.minecraft.advancements.AdvancementType;
 | 
			
		||||
import net.minecraft.resources.ResourceLocation;
 | 
			
		||||
import net.minecraft.world.item.Item;
 | 
			
		||||
import net.minecraft.world.item.ItemStack;
 | 
			
		||||
import net.neoforged.neoforge.common.conditions.ICondition;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings("unused")
 | 
			
		||||
public class AdvancementGenerator {
 | 
			
		||||
 | 
			
		||||
	private final RegistrateAdvancementProvider pvd;
 | 
			
		||||
	private final String modid;
 | 
			
		||||
    private final RegistrateAdvancementProvider pvd;
 | 
			
		||||
    private final String modid;
 | 
			
		||||
 | 
			
		||||
	public AdvancementGenerator(RegistrateAdvancementProvider pvd, String modid) {
 | 
			
		||||
		this.pvd = pvd;
 | 
			
		||||
		this.modid = modid;
 | 
			
		||||
	}
 | 
			
		||||
    public AdvancementGenerator(RegistrateAdvancementProvider pvd, String modid) {
 | 
			
		||||
        this.pvd = pvd;
 | 
			
		||||
        this.modid = modid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	public class TabBuilder {
 | 
			
		||||
    public class TabBuilder {
 | 
			
		||||
 | 
			
		||||
		private final String tab;
 | 
			
		||||
		private final ResourceLocation bg;
 | 
			
		||||
        private final String tab;
 | 
			
		||||
        private final ResourceLocation bg;
 | 
			
		||||
 | 
			
		||||
		private Entry root;
 | 
			
		||||
        private Entry root;
 | 
			
		||||
 | 
			
		||||
		public TabBuilder(String tab) {
 | 
			
		||||
			this.tab = tab;
 | 
			
		||||
			this.bg = ResourceLocation.fromNamespaceAndPath(modid, "textures/gui/advancements/backgrounds/" + tab + ".png");
 | 
			
		||||
		}
 | 
			
		||||
        public TabBuilder(String tab) {
 | 
			
		||||
            this.tab = tab;
 | 
			
		||||
            this.bg = ResourceLocation.fromNamespaceAndPath(modid, "textures/gui/advancements/backgrounds/" + tab + ".png");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public void build() {
 | 
			
		||||
			root.build();
 | 
			
		||||
		}
 | 
			
		||||
        public void build() {
 | 
			
		||||
            root.build();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public Entry root(String id, Item item, CriterionBuilder builder, String title, String desc) {
 | 
			
		||||
			return root(id, item.getDefaultInstance(), builder, title, desc);
 | 
			
		||||
		}
 | 
			
		||||
        public Entry root(String id, Item item, CriterionBuilder builder, String title, String desc) {
 | 
			
		||||
            return root(id, item.getDefaultInstance(), builder, title, desc);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public Entry root(String id, ItemStack item, CriterionBuilder builder, String title, String desc) {
 | 
			
		||||
			if (root == null) {
 | 
			
		||||
				root = new Entry(new EntryData(id, item, builder, title, desc), null);
 | 
			
		||||
			}
 | 
			
		||||
			return root;
 | 
			
		||||
		}
 | 
			
		||||
        public Entry root(String id, ItemStack item, CriterionBuilder builder, String title, String desc) {
 | 
			
		||||
            if (root == null) {
 | 
			
		||||
                root = new Entry(new EntryData(id, item, builder, title, desc), null);
 | 
			
		||||
            }
 | 
			
		||||
            return root;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public Entry hidden(String id, CriterionBuilder builder) {
 | 
			
		||||
			return new Entry(new EntryData(id, ItemStack.EMPTY, builder, "", ""), null);
 | 
			
		||||
		}
 | 
			
		||||
        public Entry hidden(String id, CriterionBuilder builder) {
 | 
			
		||||
            return new Entry(new EntryData(id, ItemStack.EMPTY, builder, "", ""), null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public class Entry {
 | 
			
		||||
        public class Entry {
 | 
			
		||||
 | 
			
		||||
			private final List<Entry> children = new ArrayList<>();
 | 
			
		||||
			private final EntryData data;
 | 
			
		||||
			private final ResourceLocation rl;
 | 
			
		||||
			private final Entry parent;
 | 
			
		||||
            private final List<Entry> children = new ArrayList<>();
 | 
			
		||||
            private final EntryData data;
 | 
			
		||||
            private final ResourceLocation rl;
 | 
			
		||||
            private final Entry parent;
 | 
			
		||||
 | 
			
		||||
			private AdvancementType type = AdvancementType.TASK;
 | 
			
		||||
			private boolean showToast = true, announce = true, hidden = false;
 | 
			
		||||
			private AdvancementHolder result;
 | 
			
		||||
            private AdvancementType type = AdvancementType.TASK;
 | 
			
		||||
            private boolean showToast = true, announce = true, hidden = false;
 | 
			
		||||
            private AdvancementHolder result;
 | 
			
		||||
 | 
			
		||||
			private Entry(EntryData data, @Nullable Entry parent) {
 | 
			
		||||
				this.data = data;
 | 
			
		||||
				this.parent = parent;
 | 
			
		||||
				if (parent == null) {
 | 
			
		||||
					showToast = false;
 | 
			
		||||
					announce = false;
 | 
			
		||||
					rl = bg;
 | 
			
		||||
				} else {
 | 
			
		||||
					rl = null;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
            private Entry(EntryData data, @Nullable Entry parent) {
 | 
			
		||||
                this.data = data;
 | 
			
		||||
                this.parent = parent;
 | 
			
		||||
                if (parent == null) {
 | 
			
		||||
                    showToast = false;
 | 
			
		||||
                    announce = false;
 | 
			
		||||
                    rl = bg;
 | 
			
		||||
                } else {
 | 
			
		||||
                    rl = null;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			public Entry create(String id, Item item, CriterionBuilder builder, String title, String desc) {
 | 
			
		||||
				return create(id, item.getDefaultInstance(), builder, title, desc);
 | 
			
		||||
			}
 | 
			
		||||
            public Entry create(String id, Item item, CriterionBuilder builder, String title, String desc) {
 | 
			
		||||
                return create(id, item.getDefaultInstance(), builder, title, desc);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			public Entry create(String id, ItemStack item, CriterionBuilder builder, String title, String desc) {
 | 
			
		||||
				Entry sub = new Entry(new EntryData(id, item, builder, title, desc), this);
 | 
			
		||||
				children.add(sub);
 | 
			
		||||
				return sub;
 | 
			
		||||
			}
 | 
			
		||||
            public Entry create(String id, ItemStack item, CriterionBuilder builder, String title, String desc) {
 | 
			
		||||
                Entry sub = new Entry(new EntryData(id, item, builder, title, desc), this);
 | 
			
		||||
                children.add(sub);
 | 
			
		||||
                return sub;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			/*TODO
 | 
			
		||||
			public Entry patchouli(L2Registrate reg, CriterionBuilder builder, ResourceLocation book, String title, String desc) {
 | 
			
		||||
@@ -95,69 +97,72 @@ public class AdvancementGenerator {
 | 
			
		||||
						.add(new RewardBuilder(reg, 0, book, () -> PatchouliHelper.getBookLoot(book)));
 | 
			
		||||
			}*/
 | 
			
		||||
 | 
			
		||||
			public Entry root() {
 | 
			
		||||
				return root;
 | 
			
		||||
			}
 | 
			
		||||
            public Entry root() {
 | 
			
		||||
                return root;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			public Entry enter() {
 | 
			
		||||
				return children.getLast();
 | 
			
		||||
			}
 | 
			
		||||
            public Entry enter() {
 | 
			
		||||
                return children.getLast();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			public Entry type(AdvancementType type) {
 | 
			
		||||
				this.type = type;
 | 
			
		||||
				return this;
 | 
			
		||||
			}
 | 
			
		||||
            public Entry type(AdvancementType type) {
 | 
			
		||||
                this.type = type;
 | 
			
		||||
                return this;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			public Entry type(AdvancementType type, boolean showToast, boolean announce, boolean hidden) {
 | 
			
		||||
				this.type = type;
 | 
			
		||||
				this.showToast = showToast;
 | 
			
		||||
				this.announce = announce;
 | 
			
		||||
				this.hidden = hidden;
 | 
			
		||||
				return this;
 | 
			
		||||
			}
 | 
			
		||||
            public Entry type(AdvancementType type, boolean showToast, boolean announce, boolean hidden) {
 | 
			
		||||
                this.type = type;
 | 
			
		||||
                this.showToast = showToast;
 | 
			
		||||
                this.announce = announce;
 | 
			
		||||
                this.hidden = hidden;
 | 
			
		||||
                return this;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			public Entry add(IAdvBuilder builder) {
 | 
			
		||||
				data.builder.add(builder);
 | 
			
		||||
				return this;
 | 
			
		||||
			}
 | 
			
		||||
            public Entry add(IAdvBuilder builder) {
 | 
			
		||||
                data.builder.add(builder);
 | 
			
		||||
                return this;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			public void build() {
 | 
			
		||||
				var builder = Advancement.Builder.advancement();
 | 
			
		||||
				if (!data.item.isEmpty()) {
 | 
			
		||||
					builder.display(data.item,
 | 
			
		||||
							pvd.title(modid, "advancements." + tab + "." + data.id, data.title),
 | 
			
		||||
							pvd.desc(modid, "advancements." + tab + "." + data.id, data.desc),
 | 
			
		||||
							rl, type, showToast, announce, hidden);
 | 
			
		||||
				}
 | 
			
		||||
				if (parent != null) {
 | 
			
		||||
					builder.parent(parent.result);
 | 
			
		||||
				}
 | 
			
		||||
            public void build() {
 | 
			
		||||
                var builder = Advancement.Builder.advancement();
 | 
			
		||||
                if (!data.item.isEmpty()) {
 | 
			
		||||
                    builder.display(data.item,
 | 
			
		||||
                        pvd.title(modid, tab + "." + data.id, data.title),
 | 
			
		||||
                        pvd.desc(modid, tab + "." + data.id, data.desc),
 | 
			
		||||
                        rl, type, showToast, announce, hidden
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
                if (parent != null) {
 | 
			
		||||
                    builder.parent(parent.result);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
				String uid = modid + ":" + tab + "/" + data.id;
 | 
			
		||||
				for (var e : data.builder) {
 | 
			
		||||
					e.modify(uid, builder);
 | 
			
		||||
					e.onBuild();
 | 
			
		||||
				}
 | 
			
		||||
				result = builder.save(pvd, uid);
 | 
			
		||||
				for (Entry e : children) {
 | 
			
		||||
					e.build();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
                String uid = modid + ":" + tab + "/" + data.id;
 | 
			
		||||
                List<ICondition> conditions = new ArrayList<>();
 | 
			
		||||
                for (var e : data.builder) {
 | 
			
		||||
                    e.onBuild(uid, builder, conditions);
 | 
			
		||||
                }
 | 
			
		||||
                Consumer<AdvancementHolder> cons = conditions.isEmpty() ? pvd :
 | 
			
		||||
                    e -> pvd.withConditions(e, conditions);
 | 
			
		||||
                result = builder.save(cons, uid);
 | 
			
		||||
                for (Entry e : children) {
 | 
			
		||||
                    e.build();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			public void finish() {
 | 
			
		||||
				TabBuilder.this.build();
 | 
			
		||||
			}
 | 
			
		||||
            public void finish() {
 | 
			
		||||
                TabBuilder.this.build();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	private record EntryData(String id, ItemStack item, List<IAdvBuilder> builder, String title, String desc) {
 | 
			
		||||
    private record EntryData(String id, ItemStack item, List<IAdvBuilder> builder, String title, String desc) {
 | 
			
		||||
 | 
			
		||||
		EntryData(String id, ItemStack item, IAdvBuilder builder, String title, String desc) {
 | 
			
		||||
			this(id, item, new ArrayList<>(List.of(builder)), title, desc);
 | 
			
		||||
		}
 | 
			
		||||
        EntryData(String id, ItemStack item, IAdvBuilder builder, String title, String desc) {
 | 
			
		||||
            this(id, item, new ArrayList<>(List.of(builder)), title, desc);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ import net.minecraft.tags.TagKey;
 | 
			
		||||
import net.minecraft.world.item.Item;
 | 
			
		||||
import net.minecraft.world.item.enchantment.Enchantment;
 | 
			
		||||
import net.minecraft.world.level.ItemLike;
 | 
			
		||||
import net.neoforged.neoforge.common.conditions.ICondition;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@@ -102,7 +103,7 @@ public class CriterionBuilder implements IAdvBuilder {
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void modify(String id, Advancement.Builder builder) {
 | 
			
		||||
	public void onBuild(String id, Advancement.Builder builder, List<ICondition> conditions) {
 | 
			
		||||
		if (list.size() > 1) {
 | 
			
		||||
			var ids = list.stream().map(Pair::getFirst).toList();
 | 
			
		||||
			builder.requirements(req == RequirementsStrategy.AND ?
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,12 @@
 | 
			
		||||
package dev.xkmc.l2core.serial.advancements;
 | 
			
		||||
 | 
			
		||||
import net.minecraft.advancements.Advancement;
 | 
			
		||||
import net.neoforged.neoforge.common.conditions.ICondition;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public interface IAdvBuilder {
 | 
			
		||||
 | 
			
		||||
	default void modify(String id, Advancement.Builder builder) {
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	default void onBuild() {
 | 
			
		||||
	}
 | 
			
		||||
    void onBuild(String id, Advancement.Builder builder, List<ICondition> conditions);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,18 +1,18 @@
 | 
			
		||||
package dev.xkmc.l2core.serial.advancements;
 | 
			
		||||
 | 
			
		||||
import com.google.gson.JsonArray;
 | 
			
		||||
import com.google.gson.JsonObject;
 | 
			
		||||
import net.minecraft.advancements.Advancement;
 | 
			
		||||
import net.neoforged.neoforge.common.conditions.ICondition;
 | 
			
		||||
import net.neoforged.neoforge.common.conditions.ModLoadedCondition;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public record ModLoadedAdv(String... modid) implements IAdvBuilder {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void addConditions(JsonArray conditions) {
 | 
			
		||||
		for (String str : modid) {
 | 
			
		||||
			JsonObject condition = new JsonObject();
 | 
			
		||||
			condition.addProperty("type", "forge:mod_loaded");
 | 
			
		||||
			condition.addProperty("modid", str);
 | 
			
		||||
			conditions.add(condition);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onBuild(String id, Advancement.Builder builder, List<ICondition> conditions) {
 | 
			
		||||
        for (var e : modid) {
 | 
			
		||||
            conditions.add(new ModLoadedCondition(e));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,19 +7,17 @@ import net.minecraft.advancements.AdvancementRewards;
 | 
			
		||||
import net.minecraft.resources.ResourceKey;
 | 
			
		||||
import net.minecraft.world.level.storage.loot.LootTable;
 | 
			
		||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
 | 
			
		||||
import net.neoforged.neoforge.common.conditions.ICondition;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.function.Supplier;
 | 
			
		||||
 | 
			
		||||
public record RewardBuilder(L2Registrate reg, int exp, ResourceKey<LootTable> loot,
 | 
			
		||||
							Supplier<LootTable.Builder> sup) implements IAdvBuilder {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void modify(String id, Advancement.Builder builder) {
 | 
			
		||||
	public void onBuild(String id, Advancement.Builder builder, List<ICondition> conditions) {
 | 
			
		||||
		builder.rewards(AdvancementRewards.Builder.loot(loot).addExperience(exp).build());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void onBuild() {
 | 
			
		||||
		reg.addDataGenerator(ProviderType.LOOT, e -> e.addLootAction(LootContextParamSets.EMPTY,
 | 
			
		||||
				x -> x.accept(loot, sup.get())));
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,18 +7,32 @@ import net.minecraft.data.recipes.RecipeOutput;
 | 
			
		||||
import net.minecraft.resources.ResourceLocation;
 | 
			
		||||
import net.minecraft.world.item.crafting.Recipe;
 | 
			
		||||
import net.neoforged.neoforge.common.conditions.ICondition;
 | 
			
		||||
import net.neoforged.neoforge.common.conditions.ModLoadedCondition;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
public record ConditionalRecipeWrapper(RecipeOutput pvd, ICondition... conditions) implements RecipeOutput {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Advancement.Builder advancement() {
 | 
			
		||||
		return pvd.advancement();
 | 
			
		||||
	}
 | 
			
		||||
    public static RecipeOutput mod(RecipeOutput pvd, String... modid) {
 | 
			
		||||
        ICondition[] ans = new ICondition[modid.length];
 | 
			
		||||
        for (int i = 0; i < ans.length; ++i) {
 | 
			
		||||
            ans[i] = new ModLoadedCondition(modid[i]);
 | 
			
		||||
        }
 | 
			
		||||
        return new ConditionalRecipeWrapper(pvd, ans);
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void accept(ResourceLocation id, Recipe<?> recipe, @Nullable AdvancementHolder advancement, ICondition... conditions) {
 | 
			
		||||
		pvd.accept(id, recipe, advancement, MathHelper.merge(conditions(), conditions));
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static RecipeOutput of(RecipeOutput pvd, ICondition... cond) {
 | 
			
		||||
        return new ConditionalRecipeWrapper(pvd, cond);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Advancement.Builder advancement() {
 | 
			
		||||
        return pvd.advancement();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void accept(ResourceLocation id, Recipe<?> recipe, @Nullable AdvancementHolder advancement, ICondition... conditions) {
 | 
			
		||||
        pvd.accept(id, recipe, advancement, MathHelper.merge(conditions(), conditions));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,20 +13,24 @@ import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
public record DataRecipeWrapper(RecipeOutput pvd, ItemStack stack) implements RecipeOutput {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Advancement.Builder advancement() {
 | 
			
		||||
		return pvd.advancement();
 | 
			
		||||
	}
 | 
			
		||||
    public static RecipeOutput of(RecipeOutput pvd, ItemStack stack) {
 | 
			
		||||
        return new DataRecipeWrapper(pvd, stack);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void accept(ResourceLocation id, Recipe<?> recipe, @Nullable AdvancementHolder advancement, ICondition... conditions) {
 | 
			
		||||
		if (recipe instanceof ShapedRecipe r) {
 | 
			
		||||
			r.result.applyComponents(stack.getComponents());
 | 
			
		||||
		}
 | 
			
		||||
		if (recipe instanceof ShapelessRecipe r) {
 | 
			
		||||
			r.result.applyComponents(stack.getComponents());
 | 
			
		||||
		}
 | 
			
		||||
		pvd.accept(id, recipe, advancement, conditions);
 | 
			
		||||
	}
 | 
			
		||||
    @Override
 | 
			
		||||
    public Advancement.Builder advancement() {
 | 
			
		||||
        return pvd.advancement();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void accept(ResourceLocation id, Recipe<?> recipe, @Nullable AdvancementHolder advancement, ICondition... conditions) {
 | 
			
		||||
        if (recipe instanceof ShapedRecipe r) {
 | 
			
		||||
            r.result.applyComponents(stack.getComponents());
 | 
			
		||||
        }
 | 
			
		||||
        if (recipe instanceof ShapelessRecipe r) {
 | 
			
		||||
            r.result.applyComponents(stack.getComponents());
 | 
			
		||||
        }
 | 
			
		||||
        pvd.accept(id, recipe, advancement, conditions);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user