Fixed build issues in AdvancementManager
This commit is contained in:
parent
1258130729
commit
3d4245331a
1 changed files with 59 additions and 72 deletions
|
@ -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() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue