Fixed build issues in AdvancementManager

This commit is contained in:
Frank 2023-12-18 13:03:10 +01:00
parent 1258130729
commit 3d4245331a

View file

@ -1,6 +1,5 @@
package org.betterx.bclib.api.v2.advancement; package org.betterx.bclib.api.v2.advancement;
import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.v2.levelgen.structures.BCLStructure; import org.betterx.bclib.api.v2.levelgen.structures.BCLStructure;
import org.betterx.bclib.complexmaterials.WoodenComplexMaterial; import org.betterx.bclib.complexmaterials.WoodenComplexMaterial;
import org.betterx.bclib.complexmaterials.set.wood.WoodSlots; import org.betterx.bclib.complexmaterials.set.wood.WoodSlots;
@ -21,13 +20,11 @@ import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeHolder;
import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.levelgen.structure.Structure; import net.minecraft.world.level.levelgen.structure.Structure;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.*; import java.util.*;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -35,7 +32,7 @@ import java.util.stream.Collectors;
public class AdvancementManager { public class AdvancementManager {
static class OrderedBuilder extends Advancement.Builder { static class OrderedBuilder extends Advancement.Builder {
OrderedBuilder() { OrderedBuilder() {
super(false); super();
} }
} }
@ -45,29 +42,22 @@ public class AdvancementManager {
ADVANCEMENTS.put(id, builder); ADVANCEMENTS.put(id, builder);
} }
public static void registerAllDataGen(List<String> namespaces, Consumer<Advancement> consumer) { public static void registerAllDataGen(List<String> namespaces, Consumer<AdvancementHolder> consumer) {
final Advancement ROOT_RECIPE = Advancement.Builder.advancement() final AdvancementHolder ROOT_RECIPE = Advancement.Builder.advancement()
.addCriterion( .addCriterion(
"impossible", "impossible",
new ImpossibleTrigger.TriggerInstance() CriteriaTriggers.IMPOSSIBLE.createCriterion(new ImpossibleTrigger.TriggerInstance())
) )
.build(RecipeBuilder.ROOT_RECIPE_ADVANCEMENT); .build(RecipeBuilder.ROOT_RECIPE_ADVANCEMENT);
final Map<ResourceLocation, Advancement> BUILT = new HashMap<>(); final Map<ResourceLocation, AdvancementHolder> BUILT = new HashMap<>();
for (var entry : ADVANCEMENTS.entrySet()) { for (var entry : ADVANCEMENTS.entrySet()) {
final ResourceLocation loc = entry.getKey(); final ResourceLocation loc = entry.getKey();
if (namespaces == null || namespaces.contains(loc.getNamespace())) { if (namespaces == null || namespaces.contains(loc.getNamespace())) {
final Advancement.Builder builder = entry.getValue(); final Advancement.Builder builder = entry.getValue();
if (builder.canBuild(locToAdd -> { final AdvancementHolder adv = builder.build(loc);
if (locToAdd.equals(RecipeBuilder.ROOT_RECIPE_ADVANCEMENT)) return ROOT_RECIPE; BUILT.put(loc, adv);
return BUILT.get(locToAdd); consumer.accept(adv);
})) {
final Advancement adv = builder.build(loc);
BUILT.put(loc, adv);
consumer.accept(adv);
} else {
BCLib.LOGGER.error("Unable to build Advancement " + loc);
}
} }
} }
} }
@ -98,7 +88,6 @@ public class AdvancementManager {
return this; return this;
} }
public RewardsBuilder runs(ResourceLocation resourceLocation) { public RewardsBuilder runs(ResourceLocation resourceLocation) {
builder.runs(resourceLocation); builder.runs(resourceLocation);
return this; return this;
@ -129,10 +118,10 @@ public class AdvancementManager {
ResourceLocation ID; ResourceLocation ID;
if (type == AdvancementType.RECIPE_DECORATIONS) { if (type == AdvancementType.RECIPE_DECORATIONS) {
ID = new ResourceLocation(id.getNamespace(), "recipes/decorations/" + id.getPath()); ID = new ResourceLocation(id.getNamespace(), "recipes/decorations/" + id.getPath());
builder.parent(RECIPES_ROOT); //builder.parent(RECIPES_ROOT); //will be root by default
} else if (type == AdvancementType.RECIPE_TOOL) { } else if (type == AdvancementType.RECIPE_TOOL) {
ID = new ResourceLocation(id.getNamespace(), "recipes/tools/" + id.getPath()); ID = new ResourceLocation(id.getNamespace(), "recipes/tools/" + id.getPath());
builder.parent(RECIPES_ROOT); //builder.parent(RECIPES_ROOT); //will be root by default
} else { } else {
ID = id; ID = id;
} }
@ -198,25 +187,27 @@ public class AdvancementManager {
return b; return b;
} }
public static <C extends Container, T extends Recipe<C>> Builder createRecipe( public static <C extends Container, T extends RecipeHolder<Recipe<C>>> Builder createRecipe(
T recipe, T recipe,
AdvancementType type AdvancementType type
) { ) {
Item item = recipe.getResultItem(Minecraft.getInstance().level.registryAccess()).getItem(); Item item = recipe.value().getResultItem(Minecraft.getInstance().level.registryAccess()).getItem();
return create(item, type, displayBuilder -> displayBuilder.hideToast().hideFromChat()) return create(item, type, displayBuilder -> displayBuilder.hideToast().hideFromChat())
//.awardRecipe(item) //.awardRecipe(item)
.addRecipeUnlockCriterion("has_the_recipe", recipe) .addRecipeUnlockCriterion("has_the_recipe", recipe)
.startReward() .startReward()
.addRecipe(recipe.getId()) .addRecipe(recipe.id())
.endReward() .endReward()
.requirements(RequirementsStrategy.OR); .requirements(AdvancementRequirements.Strategy.OR);
} }
public Builder parent(Advancement advancement) { public Builder parent(AdvancementHolder advancement) {
builder.parent(advancement); builder.parent(advancement);
return this; return this;
} }
@SuppressWarnings("removal")
@Deprecated(forRemoval = true)
public Builder parent(ResourceLocation resourceLocation) { public Builder parent(ResourceLocation resourceLocation) {
builder.parent(resourceLocation); builder.parent(resourceLocation);
return this; return this;
@ -284,8 +275,12 @@ public class AdvancementManager {
return rewards(AdvancementRewards.Builder.experience(500).build()); return rewards(AdvancementRewards.Builder.experience(500).build());
} }
public Builder addCriterion(String string, CriterionTriggerInstance criterionTriggerInstance) { public <T extends CriterionTriggerInstance> Builder addCriterion(
builder.addCriterion(string, new Criterion(criterionTriggerInstance)); String string,
CriterionTrigger<T> criterionTrigger,
T criterionTriggerInstance
) {
builder.addCriterion(string, new Criterion(criterionTrigger, criterionTriggerInstance));
return this; return this;
} }
@ -304,15 +299,18 @@ public class AdvancementManager {
PlayerTrigger PlayerTrigger
.TriggerInstance .TriggerInstance
.located( .located(
LocationPredicate.inStructure(structure) LocationPredicate.Builder.inStructure(structure)
) )
); );
} }
public <C extends Container, T extends Recipe<C>> Builder addRecipeUnlockCriterion(String name, T recipe) { public <C extends Container, T extends Recipe<C>> Builder addRecipeUnlockCriterion(
String name,
RecipeHolder<T> recipe
) {
return addCriterion( return addCriterion(
name, name,
RecipeUnlockedTrigger.unlocked(recipe.getId()) RecipeUnlockedTrigger.unlocked(recipe.id())
); );
} }
@ -324,34 +322,21 @@ public class AdvancementManager {
} }
public Builder addInventoryChangedAnyCriterion(String name, ItemLike... items) { public Builder addInventoryChangedAnyCriterion(String name, ItemLike... items) {
InventoryChangeTrigger.TriggerInstance trigger = final Criterion<InventoryChangeTrigger.TriggerInstance> t =
InventoryChangeTrigger.TriggerInstance.hasItems(new ItemPredicate( InventoryChangeTrigger.TriggerInstance.hasItems(
null, ItemPredicate.Builder.item().of(items)
Arrays.stream(items).map(i -> i.asItem()).collect(Collectors.toSet()), );
MinMaxBounds.Ints.ANY,
MinMaxBounds.Ints.ANY, return addCriterion(name, t);
EnchantmentPredicate.NONE,
EnchantmentPredicate.NONE,
null,
NbtPredicate.ANY
));
return addCriterion(name, trigger);
} }
public Builder addInventoryChangedCriterion(String name, TagKey<Item> tag) { public Builder addInventoryChangedCriterion(String name, TagKey<Item> tag) {
return addCriterion( final Criterion<InventoryChangeTrigger.TriggerInstance> t =
name, InventoryChangeTrigger.TriggerInstance.hasItems(
InventoryChangeTrigger.TriggerInstance.hasItems(new ItemPredicate( ItemPredicate.Builder.item().of(tag)
tag, );
null,
MinMaxBounds.Ints.ANY, return addCriterion(name, t);
MinMaxBounds.Ints.ANY,
EnchantmentPredicate.NONE,
EnchantmentPredicate.NONE,
null,
NbtPredicate.ANY
))
);
} }
// //
@ -391,25 +376,27 @@ public class AdvancementManager {
for (ResourceKey<Biome> resourceKey : list) { for (ResourceKey<Biome> resourceKey : list) {
addCriterion( addCriterion(
resourceKey.location().toString(), resourceKey.location().toString(),
PlayerTrigger.TriggerInstance.located(LocationPredicate.inBiome(resourceKey)) PlayerTrigger.TriggerInstance.located(LocationPredicate.Builder.inBiome(resourceKey))
); );
} }
return this; return this;
} }
public Builder requirements(RequirementsStrategy requirementsStrategy) { public Builder requirements(AdvancementRequirements.Strategy requirementsStrategy) {
builder.requirements(requirementsStrategy); builder.requirements(requirementsStrategy);
return this; return this;
} }
@Deprecated(forRemoval = true)
public Builder requirements(String[][] strings) { public Builder requirements(String[][] strings) {
builder.requirements(strings); return requirements(Arrays.stream(strings)
return this; .map(Arrays::asList)
.map(ArrayList::new)
.collect(Collectors.toList()));
} }
public Builder printDebugJson() { public Builder requirements(List<List<String>> strings) {
Gson gson = new GsonBuilder().setPrettyPrinting().create(); builder.requirements(new AdvancementRequirements(strings));
BCLib.LOGGER.info(gson.toJson(builder.serializeToJson()));
return this; return this;
} }
@ -484,21 +471,21 @@ public class AdvancementManager {
return this; return this;
} }
public DisplayBuilder frame(FrameType type) { public DisplayBuilder frame(net.minecraft.advancements.AdvancementType type) {
display.frame = type; display.frame = type;
return this; return this;
} }
public DisplayBuilder challenge() { public DisplayBuilder challenge() {
return frame(FrameType.CHALLENGE); return frame(net.minecraft.advancements.AdvancementType.CHALLENGE);
} }
public DisplayBuilder task() { public DisplayBuilder task() {
return frame(FrameType.TASK); return frame(net.minecraft.advancements.AdvancementType.TASK);
} }
public DisplayBuilder goal() { public DisplayBuilder goal() {
return frame(FrameType.GOAL); return frame(net.minecraft.advancements.AdvancementType.GOAL);
} }
public Builder endDisplay() { public Builder endDisplay() {