diff --git a/gradle.properties b/gradle.properties index 3b7ef08..c59aaec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ loader_version_range=[2,) mod_id=l2core mod_name=L2Core mod_license=LGPL-2.1 -mod_version=3.0.2-pre3 +mod_version=3.0.2-pre6 mod_group_id=dev.xkmc mod_authors=lcy0x1 mod_description=Core Library mod for all L2 mods @@ -26,7 +26,7 @@ mod_description=Core Library mod for all L2 mods jei_minecraft_version = 1.21-neoforge jei_version = 19.0.0.7 -registrate_version = MC1.21-1.4.0 +registrate_version = MC1.21-1.4.1 lljij = false rootMod = false diff --git a/libs/Registrate-MC1.21-1.4.1-sources.jar b/libs/Registrate-MC1.21-1.4.1-sources.jar new file mode 100644 index 0000000..30f8727 Binary files /dev/null and b/libs/Registrate-MC1.21-1.4.1-sources.jar differ diff --git a/libs/Registrate-MC1.21-1.4.0.jar b/libs/Registrate-MC1.21-1.4.1.jar similarity index 68% rename from libs/Registrate-MC1.21-1.4.0.jar rename to libs/Registrate-MC1.21-1.4.1.jar index 563786a..72bbd4a 100644 Binary files a/libs/Registrate-MC1.21-1.4.0.jar and b/libs/Registrate-MC1.21-1.4.1.jar differ diff --git a/src/main/java/dev/xkmc/l2core/init/reg/simple/Reg.java b/src/main/java/dev/xkmc/l2core/init/reg/simple/Reg.java index 3fe18ae..5427b23 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/simple/Reg.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/simple/Reg.java @@ -20,8 +20,6 @@ import java.util.function.Consumer; public final class Reg { - - private final String modid; private final Map, DeferredRegister> map = new LinkedHashMap<>(); diff --git a/src/main/java/dev/xkmc/l2core/init/reg/simple/SR.java b/src/main/java/dev/xkmc/l2core/init/reg/simple/SR.java index 26a0c54..b600f70 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/simple/SR.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/simple/SR.java @@ -12,7 +12,7 @@ public record SR(DeferredRegister reg) { return new SR<>(parent.make(reg)); } - public Val reg(String id, Supplier sup) { + public Val reg(String id, Supplier sup) { return new ValImpl<>(reg.register(id, sup)); } diff --git a/src/main/java/dev/xkmc/l2core/serial/advancements/AdvancementGenerator.java b/src/main/java/dev/xkmc/l2core/serial/advancements/AdvancementGenerator.java index 0529c87..694177d 100644 --- a/src/main/java/dev/xkmc/l2core/serial/advancements/AdvancementGenerator.java +++ b/src/main/java/dev/xkmc/l2core/serial/advancements/AdvancementGenerator.java @@ -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 children = new ArrayList<>(); - private final EntryData data; - private final ResourceLocation rl; - private final Entry parent; + private final List 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 conditions = new ArrayList<>(); + for (var e : data.builder) { + e.onBuild(uid, builder, conditions); + } + Consumer 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 builder, String title, String desc) { + private record EntryData(String id, ItemStack item, List 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); + } - } + } } diff --git a/src/main/java/dev/xkmc/l2core/serial/advancements/CriterionBuilder.java b/src/main/java/dev/xkmc/l2core/serial/advancements/CriterionBuilder.java index ab6722e..4700a00 100644 --- a/src/main/java/dev/xkmc/l2core/serial/advancements/CriterionBuilder.java +++ b/src/main/java/dev/xkmc/l2core/serial/advancements/CriterionBuilder.java @@ -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 conditions) { if (list.size() > 1) { var ids = list.stream().map(Pair::getFirst).toList(); builder.requirements(req == RequirementsStrategy.AND ? diff --git a/src/main/java/dev/xkmc/l2core/serial/advancements/IAdvBuilder.java b/src/main/java/dev/xkmc/l2core/serial/advancements/IAdvBuilder.java index b76f2b5..cd11f82 100644 --- a/src/main/java/dev/xkmc/l2core/serial/advancements/IAdvBuilder.java +++ b/src/main/java/dev/xkmc/l2core/serial/advancements/IAdvBuilder.java @@ -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 conditions); } diff --git a/src/main/java/dev/xkmc/l2core/serial/advancements/ModLoadedAdv.java b/src/main/java/dev/xkmc/l2core/serial/advancements/ModLoadedAdv.java index 04e24a0..7017486 100644 --- a/src/main/java/dev/xkmc/l2core/serial/advancements/ModLoadedAdv.java +++ b/src/main/java/dev/xkmc/l2core/serial/advancements/ModLoadedAdv.java @@ -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 conditions) { + for (var e : modid) { + conditions.add(new ModLoadedCondition(e)); + } + } } diff --git a/src/main/java/dev/xkmc/l2core/serial/advancements/RewardBuilder.java b/src/main/java/dev/xkmc/l2core/serial/advancements/RewardBuilder.java index d571ba4..0d0ab34 100644 --- a/src/main/java/dev/xkmc/l2core/serial/advancements/RewardBuilder.java +++ b/src/main/java/dev/xkmc/l2core/serial/advancements/RewardBuilder.java @@ -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 loot, Supplier sup) implements IAdvBuilder { @Override - public void modify(String id, Advancement.Builder builder) { + public void onBuild(String id, Advancement.Builder builder, List 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()))); } diff --git a/src/main/java/dev/xkmc/l2core/serial/recipe/ConditionalRecipeWrapper.java b/src/main/java/dev/xkmc/l2core/serial/recipe/ConditionalRecipeWrapper.java index bae95a5..a457bb2 100644 --- a/src/main/java/dev/xkmc/l2core/serial/recipe/ConditionalRecipeWrapper.java +++ b/src/main/java/dev/xkmc/l2core/serial/recipe/ConditionalRecipeWrapper.java @@ -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)); + } } diff --git a/src/main/java/dev/xkmc/l2core/serial/recipe/DataRecipeWrapper.java b/src/main/java/dev/xkmc/l2core/serial/recipe/DataRecipeWrapper.java index 166e46f..c4bf5a5 100644 --- a/src/main/java/dev/xkmc/l2core/serial/recipe/DataRecipeWrapper.java +++ b/src/main/java/dev/xkmc/l2core/serial/recipe/DataRecipeWrapper.java @@ -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); + } }