VanillaHusbandryAdvancements.java
net.minecraft.data.advancements.packs.VanillaHusbandryAdvancements
信息
- 全限定名:net.minecraft.data.advancements.packs.VanillaHusbandryAdvancements
- 类型:public class
- 包:net.minecraft.data.advancements.packs
- 源码路径:src/main/java/net/minecraft/data/advancements/packs/VanillaHusbandryAdvancements.java
- 起始行号:L62
- 实现:AdvancementSubProvider
- 职责:
TODO
字段/常量
-
BREEDABLE_ANIMALS- 类型:
List<EntityType<?>> - 修饰符:
public static final - 源码定位:
L63 - 说明:
TODO
- 类型:
-
INDIRECTLY_BREEDABLE_ANIMALS- 类型:
List<EntityType<?>> - 修饰符:
public static final - 源码定位:
L88 - 说明:
TODO
- 类型:
-
FISH- 类型:
Item[] - 修饰符:
private static final - 源码定位:
L89 - 说明:
TODO
- 类型:
-
FISH_BUCKETS- 类型:
Item[] - 修饰符:
private static final - 源码定位:
L90 - 说明:
TODO
- 类型:
-
EDIBLE_ITEMS- 类型:
Item[] - 修饰符:
private static final - 源码定位:
L91 - 说明:
TODO
- 类型:
-
WAX_SCRAPING_TOOLS- 类型:
Item[] - 修饰符:
public static final - 源码定位:
L133 - 说明:
TODO
- 类型:
-
HOLDER_KEY_COMPARATOR- 类型:
Comparator<Holder.Reference<?>> - 修饰符:
private static final - 源码定位:
L136 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public void generate(HolderLookup.Provider registries, Consumer<AdvancementHolder> output) @ L138
- 方法名:generate
- 源码定位:L138
- 返回类型:void
- 修饰符:public
参数:
- registries: HolderLookup.Provider
- output: Consumer
说明:
TODO
public static AdvancementHolder createBreedAllAnimalsAdvancement(AdvancementHolder parent, Consumer<AdvancementHolder> output, HolderGetter<EntityType<?>> entityTypes, Stream<EntityType<?>> breedable, Stream<EntityType<?>> indirectlyBreedable) @ L681
- 方法名:createBreedAllAnimalsAdvancement
- 源码定位:L681
- 返回类型:AdvancementHolder
- 修饰符:public static
参数:
- parent: AdvancementHolder
- output: Consumer
- entityTypes: HolderGetter<EntityType<?>>
- breedable: Stream<EntityType<?>>
- indirectlyBreedable: Stream<EntityType<?>>
说明:
TODO
private static Advancement.Builder addLeashedFrogVariants(HolderGetter<EntityType<?>> entityTypes, HolderGetter<Item> items, HolderLookup<FrogVariant> frogVariants, Advancement.Builder advancement) @ L704
- 方法名:addLeashedFrogVariants
- 源码定位:L704
- 返回类型:Advancement.Builder
- 修饰符:private static
参数:
- entityTypes: HolderGetter<EntityType<?>>
- items: HolderGetter
- frogVariants: HolderLookup
- advancement: Advancement.Builder
说明:
TODO
private static <T> Stream<Holder.Reference<T>> sortedVariants(HolderLookup<T> variants) @ L730
- 方法名:sortedVariants
- 源码定位:L730
- 返回类型:
Stream<Holder.Reference > - 修饰符:private static
参数:
- variants: HolderLookup
说明:
TODO
private static Advancement.Builder addFood(Advancement.Builder advancement, HolderGetter<Item> items) @ L734
- 方法名:addFood
- 源码定位:L734
- 返回类型:Advancement.Builder
- 修饰符:private static
参数:
- advancement: Advancement.Builder
- items: HolderGetter
说明:
TODO
private static Advancement.Builder addBreedable(Advancement.Builder advancement, Stream<EntityType<?>> breedable, HolderGetter<EntityType<?>> entityTypes, Stream<EntityType<?>> indirectlyBreedable) @ L742
- 方法名:addBreedable
- 源码定位:L742
- 返回类型:Advancement.Builder
- 修饰符:private static
参数:
- advancement: Advancement.Builder
- breedable: Stream<EntityType<?>>
- entityTypes: HolderGetter<EntityType<?>>
- indirectlyBreedable: Stream<EntityType<?>>
说明:
TODO
private static Advancement.Builder addFishBuckets(Advancement.Builder advancement, HolderGetter<Item> items) @ L764
- 方法名:addFishBuckets
- 源码定位:L764
- 返回类型:Advancement.Builder
- 修饰符:private static
参数:
- advancement: Advancement.Builder
- items: HolderGetter
说明:
TODO
private static Advancement.Builder addFish(Advancement.Builder advancement, HolderGetter<Item> items) @ L775
- 方法名:addFish
- 源码定位:L775
- 返回类型:Advancement.Builder
- 修饰符:private static
参数:
- advancement: Advancement.Builder
- items: HolderGetter
说明:
TODO
private static Advancement.Builder addCatVariants(Advancement.Builder advancement, HolderLookup<CatVariant> catVariants) @ L788
- 方法名:addCatVariants
- 源码定位:L788
- 返回类型:Advancement.Builder
- 修饰符:private static
参数:
- advancement: Advancement.Builder
- catVariants: HolderLookup
说明:
TODO
private static Advancement.Builder addTamedWolfVariants(Advancement.Builder advancement, HolderLookup<WolfVariant> wolfVariants) @ L804
- 方法名:addTamedWolfVariants
- 源码定位:L804
- 返回类型:Advancement.Builder
- 修饰符:private static
参数:
- advancement: Advancement.Builder
- wolfVariants: HolderLookup
说明:
TODO
代码
public class VanillaHusbandryAdvancements implements AdvancementSubProvider {
public static final List<EntityType<?>> BREEDABLE_ANIMALS = List.of(
EntityType.HORSE,
EntityType.DONKEY,
EntityType.MULE,
EntityType.SHEEP,
EntityType.COW,
EntityType.MOOSHROOM,
EntityType.PIG,
EntityType.CHICKEN,
EntityType.WOLF,
EntityType.OCELOT,
EntityType.RABBIT,
EntityType.LLAMA,
EntityType.CAT,
EntityType.PANDA,
EntityType.FOX,
EntityType.BEE,
EntityType.HOGLIN,
EntityType.STRIDER,
EntityType.GOAT,
EntityType.AXOLOTL,
EntityType.CAMEL,
EntityType.ARMADILLO,
EntityType.NAUTILUS
);
public static final List<EntityType<?>> INDIRECTLY_BREEDABLE_ANIMALS = List.of(EntityType.TURTLE, EntityType.FROG, EntityType.SNIFFER);
private static final Item[] FISH = new Item[]{Items.COD, Items.TROPICAL_FISH, Items.PUFFERFISH, Items.SALMON};
private static final Item[] FISH_BUCKETS = new Item[]{Items.COD_BUCKET, Items.TROPICAL_FISH_BUCKET, Items.PUFFERFISH_BUCKET, Items.SALMON_BUCKET};
private static final Item[] EDIBLE_ITEMS = new Item[]{
Items.APPLE,
Items.MUSHROOM_STEW,
Items.BREAD,
Items.PORKCHOP,
Items.COOKED_PORKCHOP,
Items.GOLDEN_APPLE,
Items.ENCHANTED_GOLDEN_APPLE,
Items.COD,
Items.SALMON,
Items.TROPICAL_FISH,
Items.PUFFERFISH,
Items.COOKED_COD,
Items.COOKED_SALMON,
Items.COOKIE,
Items.MELON_SLICE,
Items.BEEF,
Items.COOKED_BEEF,
Items.CHICKEN,
Items.COOKED_CHICKEN,
Items.ROTTEN_FLESH,
Items.SPIDER_EYE,
Items.CARROT,
Items.POTATO,
Items.BAKED_POTATO,
Items.POISONOUS_POTATO,
Items.GOLDEN_CARROT,
Items.PUMPKIN_PIE,
Items.RABBIT,
Items.COOKED_RABBIT,
Items.RABBIT_STEW,
Items.MUTTON,
Items.COOKED_MUTTON,
Items.CHORUS_FRUIT,
Items.BEETROOT,
Items.BEETROOT_SOUP,
Items.DRIED_KELP,
Items.SUSPICIOUS_STEW,
Items.SWEET_BERRIES,
Items.HONEY_BOTTLE,
Items.GLOW_BERRIES
};
public static final Item[] WAX_SCRAPING_TOOLS = new Item[]{
Items.WOODEN_AXE, Items.GOLDEN_AXE, Items.STONE_AXE, Items.COPPER_AXE, Items.IRON_AXE, Items.DIAMOND_AXE, Items.NETHERITE_AXE
};
private static final Comparator<Holder.Reference<?>> HOLDER_KEY_COMPARATOR = Comparator.comparing(e -> e.key().identifier());
@Override
public void generate(HolderLookup.Provider registries, Consumer<AdvancementHolder> output) {
HolderGetter<EntityType<?>> entityTypes = registries.lookupOrThrow(Registries.ENTITY_TYPE);
HolderGetter<Item> items = registries.lookupOrThrow(Registries.ITEM);
HolderGetter<Block> blocks = registries.lookupOrThrow(Registries.BLOCK);
HolderLookup<FrogVariant> frogVariants = registries.lookupOrThrow(Registries.FROG_VARIANT);
HolderLookup<CatVariant> catVariants = registries.lookupOrThrow(Registries.CAT_VARIANT);
HolderLookup<WolfVariant> wolfVariants = registries.lookupOrThrow(Registries.WOLF_VARIANT);
HolderLookup.RegistryLookup<Enchantment> enchantments = registries.lookupOrThrow(Registries.ENCHANTMENT);
AdvancementHolder root = Advancement.Builder.advancement()
.display(
Blocks.HAY_BLOCK,
Component.translatable("advancements.husbandry.root.title"),
Component.translatable("advancements.husbandry.root.description"),
Identifier.withDefaultNamespace("gui/advancements/backgrounds/husbandry"),
AdvancementType.TASK,
false,
false,
false
)
.addCriterion("consumed_item", ConsumeItemTrigger.TriggerInstance.usedItem())
.save(output, "husbandry/root");
AdvancementHolder plantSeed = Advancement.Builder.advancement()
.parent(root)
.display(
Items.WHEAT,
Component.translatable("advancements.husbandry.plant_seed.title"),
Component.translatable("advancements.husbandry.plant_seed.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.requirements(AdvancementRequirements.Strategy.OR)
.addCriterion("wheat", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.WHEAT))
.addCriterion("pumpkin_stem", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.PUMPKIN_STEM))
.addCriterion("melon_stem", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.MELON_STEM))
.addCriterion("beetroots", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.BEETROOTS))
.addCriterion("nether_wart", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.NETHER_WART))
.addCriterion("torchflower", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.TORCHFLOWER_CROP))
.addCriterion("pitcher_pod", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.PITCHER_CROP))
.save(output, "husbandry/plant_seed");
AdvancementHolder breedAnAnimalAdvancement = Advancement.Builder.advancement()
.parent(root)
.display(
Items.WHEAT,
Component.translatable("advancements.husbandry.breed_an_animal.title"),
Component.translatable("advancements.husbandry.breed_an_animal.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.requirements(AdvancementRequirements.Strategy.OR)
.addCriterion("bred", BredAnimalsTrigger.TriggerInstance.bredAnimals())
.save(output, "husbandry/breed_an_animal");
createBreedAllAnimalsAdvancement(breedAnAnimalAdvancement, output, entityTypes, BREEDABLE_ANIMALS.stream(), INDIRECTLY_BREEDABLE_ANIMALS.stream());
addFood(Advancement.Builder.advancement(), items)
.parent(plantSeed)
.display(
Items.APPLE,
Component.translatable("advancements.husbandry.balanced_diet.title"),
Component.translatable("advancements.husbandry.balanced_diet.description"),
null,
AdvancementType.CHALLENGE,
true,
true,
false
)
.rewards(AdvancementRewards.Builder.experience(100))
.save(output, "husbandry/balanced_diet");
Advancement.Builder.advancement()
.parent(plantSeed)
.display(
Items.NETHERITE_HOE,
Component.translatable("advancements.husbandry.netherite_hoe.title"),
Component.translatable("advancements.husbandry.netherite_hoe.description"),
null,
AdvancementType.CHALLENGE,
true,
true,
false
)
.rewards(AdvancementRewards.Builder.experience(100))
.addCriterion("netherite_hoe", InventoryChangeTrigger.TriggerInstance.hasItems(Items.NETHERITE_HOE))
.save(output, "husbandry/obtain_netherite_hoe");
AdvancementHolder tameAnAnimal = Advancement.Builder.advancement()
.parent(root)
.display(
Items.LEAD,
Component.translatable("advancements.husbandry.tame_an_animal.title"),
Component.translatable("advancements.husbandry.tame_an_animal.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.addCriterion("tamed_animal", TameAnimalTrigger.TriggerInstance.tamedAnimal())
.save(output, "husbandry/tame_an_animal");
AdvancementHolder fishyBusiness = addFish(Advancement.Builder.advancement(), items)
.parent(root)
.requirements(AdvancementRequirements.Strategy.OR)
.display(
Items.FISHING_ROD,
Component.translatable("advancements.husbandry.fishy_business.title"),
Component.translatable("advancements.husbandry.fishy_business.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.save(output, "husbandry/fishy_business");
AdvancementHolder tacticalFishing = addFishBuckets(Advancement.Builder.advancement(), items)
.parent(fishyBusiness)
.requirements(AdvancementRequirements.Strategy.OR)
.display(
Items.PUFFERFISH_BUCKET,
Component.translatable("advancements.husbandry.tactical_fishing.title"),
Component.translatable("advancements.husbandry.tactical_fishing.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.save(output, "husbandry/tactical_fishing");
AdvancementHolder theCutestPredetor = Advancement.Builder.advancement()
.parent(tacticalFishing)
.requirements(AdvancementRequirements.Strategy.OR)
.addCriterion(
BuiltInRegistries.ITEM.getKey(Items.AXOLOTL_BUCKET).getPath(),
FilledBucketTrigger.TriggerInstance.filledBucket(ItemPredicate.Builder.item().of(items, Items.AXOLOTL_BUCKET))
)
.display(
Items.AXOLOTL_BUCKET,
Component.translatable("advancements.husbandry.axolotl_in_a_bucket.title"),
Component.translatable("advancements.husbandry.axolotl_in_a_bucket.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.save(output, "husbandry/axolotl_in_a_bucket");
Advancement.Builder.advancement()
.parent(theCutestPredetor)
.addCriterion(
"kill_axolotl_target",
EffectsChangedTrigger.TriggerInstance.gotEffectsFrom(EntityPredicate.Builder.entity().of(entityTypes, EntityType.AXOLOTL))
)
.display(
Items.TROPICAL_FISH_BUCKET,
Component.translatable("advancements.husbandry.kill_axolotl_target.title"),
Component.translatable("advancements.husbandry.kill_axolotl_target.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.save(output, "husbandry/kill_axolotl_target");
addCatVariants(Advancement.Builder.advancement(), catVariants)
.parent(tameAnAnimal)
.display(
Items.COD,
Component.translatable("advancements.husbandry.complete_catalogue.title"),
Component.translatable("advancements.husbandry.complete_catalogue.description"),
null,
AdvancementType.CHALLENGE,
true,
true,
false
)
.rewards(AdvancementRewards.Builder.experience(50))
.save(output, "husbandry/complete_catalogue");
addTamedWolfVariants(Advancement.Builder.advancement(), wolfVariants)
.parent(tameAnAnimal)
.display(
Items.BONE,
Component.translatable("advancements.husbandry.whole_pack.title"),
Component.translatable("advancements.husbandry.whole_pack.description"),
null,
AdvancementType.CHALLENGE,
true,
true,
false
)
.rewards(AdvancementRewards.Builder.experience(50))
.save(output, "husbandry/whole_pack");
AdvancementHolder safelyHarvestHoney = Advancement.Builder.advancement()
.parent(root)
.addCriterion(
"safely_harvest_honey",
ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(
LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(blocks, BlockTags.BEEHIVES)).setSmokey(true),
ItemPredicate.Builder.item().of(items, Items.GLASS_BOTTLE)
)
)
.display(
Items.HONEY_BOTTLE,
Component.translatable("advancements.husbandry.safely_harvest_honey.title"),
Component.translatable("advancements.husbandry.safely_harvest_honey.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.save(output, "husbandry/safely_harvest_honey");
AdvancementHolder waxOn = Advancement.Builder.advancement()
.parent(safelyHarvestHoney)
.display(
Items.HONEYCOMB,
Component.translatable("advancements.husbandry.wax_on.title"),
Component.translatable("advancements.husbandry.wax_on.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.addCriterion(
"wax_on",
ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(
LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(blocks, HoneycombItem.WAXABLES.get().keySet())),
ItemPredicate.Builder.item().of(items, Items.HONEYCOMB)
)
)
.save(output, "husbandry/wax_on");
Advancement.Builder.advancement()
.parent(waxOn)
.display(
Items.STONE_AXE,
Component.translatable("advancements.husbandry.wax_off.title"),
Component.translatable("advancements.husbandry.wax_off.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.addCriterion(
"wax_off",
ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(
LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(blocks, HoneycombItem.WAX_OFF_BY_BLOCK.get().keySet())),
ItemPredicate.Builder.item().of(items, WAX_SCRAPING_TOOLS)
)
)
.save(output, "husbandry/wax_off");
AdvancementHolder tadpoleInABucket = Advancement.Builder.advancement()
.parent(root)
.addCriterion(
BuiltInRegistries.ITEM.getKey(Items.TADPOLE_BUCKET).getPath(),
FilledBucketTrigger.TriggerInstance.filledBucket(ItemPredicate.Builder.item().of(items, Items.TADPOLE_BUCKET))
)
.display(
Items.TADPOLE_BUCKET,
Component.translatable("advancements.husbandry.tadpole_in_a_bucket.title"),
Component.translatable("advancements.husbandry.tadpole_in_a_bucket.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.save(output, "husbandry/tadpole_in_a_bucket");
AdvancementHolder allFrogsOnALeash = addLeashedFrogVariants(entityTypes, items, frogVariants, Advancement.Builder.advancement())
.parent(tadpoleInABucket)
.display(
Items.LEAD,
Component.translatable("advancements.husbandry.leash_all_frog_variants.title"),
Component.translatable("advancements.husbandry.leash_all_frog_variants.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.save(output, "husbandry/leash_all_frog_variants");
Advancement.Builder.advancement()
.parent(allFrogsOnALeash)
.display(
Items.VERDANT_FROGLIGHT,
Component.translatable("advancements.husbandry.froglights.title"),
Component.translatable("advancements.husbandry.froglights.description"),
null,
AdvancementType.CHALLENGE,
true,
true,
false
)
.addCriterion(
"froglights", InventoryChangeTrigger.TriggerInstance.hasItems(Items.OCHRE_FROGLIGHT, Items.PEARLESCENT_FROGLIGHT, Items.VERDANT_FROGLIGHT)
)
.save(output, "husbandry/froglights");
Advancement.Builder.advancement()
.parent(root)
.addCriterion(
"silk_touch_nest",
BeeNestDestroyedTrigger.TriggerInstance.destroyedBeeNest(
Blocks.BEE_NEST,
ItemPredicate.Builder.item()
.withComponents(
DataComponentMatchers.Builder.components()
.partial(
DataComponentPredicates.ENCHANTMENTS,
EnchantmentsPredicate.enchantments(
List.of(new EnchantmentPredicate(enchantments.getOrThrow(Enchantments.SILK_TOUCH), MinMaxBounds.Ints.atLeast(1)))
)
)
.build()
),
MinMaxBounds.Ints.exactly(3)
)
)
.display(
Blocks.BEE_NEST,
Component.translatable("advancements.husbandry.silk_touch_nest.title"),
Component.translatable("advancements.husbandry.silk_touch_nest.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.save(output, "husbandry/silk_touch_nest");
Advancement.Builder.advancement()
.parent(root)
.display(
Items.OAK_BOAT,
Component.translatable("advancements.husbandry.ride_a_boat_with_a_goat.title"),
Component.translatable("advancements.husbandry.ride_a_boat_with_a_goat.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.addCriterion(
"ride_a_boat_with_a_goat",
StartRidingTrigger.TriggerInstance.playerStartsRiding(
EntityPredicate.Builder.entity()
.vehicle(
EntityPredicate.Builder.entity()
.of(entityTypes, EntityTypeTags.BOAT)
.passenger(EntityPredicate.Builder.entity().of(entityTypes, EntityType.GOAT))
)
)
)
.save(output, "husbandry/ride_a_boat_with_a_goat");
Advancement.Builder.advancement()
.parent(root)
.display(
Items.GLOW_INK_SAC,
Component.translatable("advancements.husbandry.make_a_sign_glow.title"),
Component.translatable("advancements.husbandry.make_a_sign_glow.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.addCriterion(
"make_a_sign_glow",
ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(
LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(blocks, BlockTags.ALL_SIGNS)),
ItemPredicate.Builder.item().of(items, Items.GLOW_INK_SAC)
)
)
.save(output, "husbandry/make_a_sign_glow");
AdvancementHolder itemDeliveredToPlayer = Advancement.Builder.advancement()
.parent(root)
.display(
Items.COOKIE,
Component.translatable("advancements.husbandry.allay_deliver_item_to_player.title"),
Component.translatable("advancements.husbandry.allay_deliver_item_to_player.description"),
null,
AdvancementType.TASK,
true,
true,
true
)
.addCriterion(
"allay_deliver_item_to_player",
PickedUpItemTrigger.TriggerInstance.thrownItemPickedUpByPlayer(
Optional.empty(), Optional.empty(), Optional.of(EntityPredicate.wrap(EntityPredicate.Builder.entity().of(entityTypes, EntityType.ALLAY)))
)
)
.save(output, "husbandry/allay_deliver_item_to_player");
Advancement.Builder.advancement()
.parent(itemDeliveredToPlayer)
.display(
Items.NOTE_BLOCK,
Component.translatable("advancements.husbandry.allay_deliver_cake_to_note_block.title"),
Component.translatable("advancements.husbandry.allay_deliver_cake_to_note_block.description"),
null,
AdvancementType.TASK,
true,
true,
true
)
.addCriterion(
"allay_deliver_cake_to_note_block",
ItemUsedOnLocationTrigger.TriggerInstance.allayDropItemOnBlock(
LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(blocks, Blocks.NOTE_BLOCK)),
ItemPredicate.Builder.item().of(items, Items.CAKE)
)
)
.save(output, "husbandry/allay_deliver_cake_to_note_block");
AdvancementHolder obtainSnifferEgg = Advancement.Builder.advancement()
.parent(root)
.display(
Items.SNIFFER_EGG,
Component.translatable("advancements.husbandry.obtain_sniffer_egg.title"),
Component.translatable("advancements.husbandry.obtain_sniffer_egg.description"),
null,
AdvancementType.TASK,
true,
true,
true
)
.addCriterion("obtain_sniffer_egg", InventoryChangeTrigger.TriggerInstance.hasItems(Items.SNIFFER_EGG))
.save(output, "husbandry/obtain_sniffer_egg");
AdvancementHolder feedSnifflet = Advancement.Builder.advancement()
.parent(obtainSnifferEgg)
.display(
Items.TORCHFLOWER_SEEDS,
Component.translatable("advancements.husbandry.feed_snifflet.title"),
Component.translatable("advancements.husbandry.feed_snifflet.description"),
null,
AdvancementType.TASK,
true,
true,
true
)
.addCriterion(
"feed_snifflet",
PlayerInteractTrigger.TriggerInstance.itemUsedOnEntity(
ItemPredicate.Builder.item().of(items, ItemTags.SNIFFER_FOOD),
Optional.of(
EntityPredicate.wrap(
EntityPredicate.Builder.entity().of(entityTypes, EntityType.SNIFFER).flags(EntityFlagsPredicate.Builder.flags().setIsBaby(true))
)
)
)
)
.save(output, "husbandry/feed_snifflet");
Advancement.Builder.advancement()
.parent(feedSnifflet)
.display(
Items.PITCHER_POD,
Component.translatable("advancements.husbandry.plant_any_sniffer_seed.title"),
Component.translatable("advancements.husbandry.plant_any_sniffer_seed.description"),
null,
AdvancementType.TASK,
true,
true,
true
)
.requirements(AdvancementRequirements.Strategy.OR)
.addCriterion("torchflower", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.TORCHFLOWER_CROP))
.addCriterion("pitcher_pod", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.PITCHER_CROP))
.save(output, "husbandry/plant_any_sniffer_seed");
Advancement.Builder.advancement()
.parent(tameAnAnimal)
.display(
Items.SHEARS,
Component.translatable("advancements.husbandry.remove_wolf_armor.title"),
Component.translatable("advancements.husbandry.remove_wolf_armor.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.addCriterion(
"remove_wolf_armor",
PlayerInteractTrigger.TriggerInstance.equipmentSheared(
ItemPredicate.Builder.item().of(items, Items.WOLF_ARMOR),
Optional.of(EntityPredicate.wrap(EntityPredicate.Builder.entity().of(entityTypes, EntityType.WOLF)))
)
)
.save(output, "husbandry/remove_wolf_armor");
Advancement.Builder.advancement()
.parent(tameAnAnimal)
.display(
Items.WOLF_ARMOR,
Component.translatable("advancements.husbandry.repair_wolf_armor.title"),
Component.translatable("advancements.husbandry.repair_wolf_armor.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.addCriterion(
"repair_wolf_armor",
PlayerInteractTrigger.TriggerInstance.itemUsedOnEntity(
ItemPredicate.Builder.item().of(items, Items.ARMADILLO_SCUTE),
Optional.of(
EntityPredicate.wrap(
EntityPredicate.Builder.entity()
.of(entityTypes, EntityType.WOLF)
.equipment(
EntityEquipmentPredicate.Builder.equipment()
.body(
ItemPredicate.Builder.item()
.of(items, Items.WOLF_ARMOR)
.withComponents(
DataComponentMatchers.Builder.components()
.exact(DataComponentExactPredicate.expect(DataComponents.DAMAGE, 0))
.build()
)
)
)
)
)
)
)
.save(output, "husbandry/repair_wolf_armor");
Advancement.Builder.advancement()
.parent(root)
.display(
Items.DRIED_GHAST,
Component.translatable("advancements.husbandry.place_dried_ghast_in_water.title"),
Component.translatable("advancements.husbandry.place_dried_ghast_in_water.description"),
null,
AdvancementType.TASK,
true,
true,
false
)
.addCriterion(
"place_dried_ghast_in_water",
ItemUsedOnLocationTrigger.TriggerInstance.placedBlockWithProperties(Blocks.DRIED_GHAST, BlockStateProperties.WATERLOGGED, true)
)
.save(output, "husbandry/place_dried_ghast_in_water");
}
public static AdvancementHolder createBreedAllAnimalsAdvancement(
AdvancementHolder parent,
Consumer<AdvancementHolder> output,
HolderGetter<EntityType<?>> entityTypes,
Stream<EntityType<?>> breedable,
Stream<EntityType<?>> indirectlyBreedable
) {
return addBreedable(Advancement.Builder.advancement(), breedable, entityTypes, indirectlyBreedable)
.parent(parent)
.display(
Items.GOLDEN_CARROT,
Component.translatable("advancements.husbandry.breed_all_animals.title"),
Component.translatable("advancements.husbandry.breed_all_animals.description"),
null,
AdvancementType.CHALLENGE,
true,
true,
false
)
.rewards(AdvancementRewards.Builder.experience(100))
.save(output, "husbandry/bred_all_animals");
}
private static Advancement.Builder addLeashedFrogVariants(
HolderGetter<EntityType<?>> entityTypes, HolderGetter<Item> items, HolderLookup<FrogVariant> frogVariants, Advancement.Builder advancement
) {
sortedVariants(frogVariants)
.forEach(
frogVariant -> advancement.addCriterion(
frogVariant.key().identifier().toString(),
PlayerInteractTrigger.TriggerInstance.itemUsedOnEntity(
ItemPredicate.Builder.item().of(items, Items.LEAD),
Optional.of(
EntityPredicate.wrap(
EntityPredicate.Builder.entity()
.of(entityTypes, EntityType.FROG)
.components(
DataComponentMatchers.Builder.components()
.exact(DataComponentExactPredicate.expect(DataComponents.FROG_VARIANT, frogVariant))
.build()
)
)
)
)
)
);
return advancement;
}
private static <T> Stream<Holder.Reference<T>> sortedVariants(HolderLookup<T> variants) {
return variants.listElements().sorted(HOLDER_KEY_COMPARATOR);
}
private static Advancement.Builder addFood(Advancement.Builder advancement, HolderGetter<Item> items) {
for (Item food : EDIBLE_ITEMS) {
advancement.addCriterion(BuiltInRegistries.ITEM.getKey(food).getPath(), ConsumeItemTrigger.TriggerInstance.usedItem(items, food));
}
return advancement;
}
private static Advancement.Builder addBreedable(
Advancement.Builder advancement, Stream<EntityType<?>> breedable, HolderGetter<EntityType<?>> entityTypes, Stream<EntityType<?>> indirectlyBreedable
) {
breedable.forEach(
animal -> advancement.addCriterion(
EntityType.getKey((EntityType<?>)animal).toString(),
BredAnimalsTrigger.TriggerInstance.bredAnimals(EntityPredicate.Builder.entity().of(entityTypes, (EntityType<?>)animal))
)
);
indirectlyBreedable.forEach(
animal -> advancement.addCriterion(
EntityType.getKey((EntityType<?>)animal).toString(),
BredAnimalsTrigger.TriggerInstance.bredAnimals(
Optional.of(EntityPredicate.Builder.entity().of(entityTypes, (EntityType<?>)animal).build()),
Optional.of(EntityPredicate.Builder.entity().of(entityTypes, (EntityType<?>)animal).build()),
Optional.empty()
)
)
);
return advancement;
}
private static Advancement.Builder addFishBuckets(Advancement.Builder advancement, HolderGetter<Item> items) {
for (Item bucket : FISH_BUCKETS) {
advancement.addCriterion(
BuiltInRegistries.ITEM.getKey(bucket).getPath(),
FilledBucketTrigger.TriggerInstance.filledBucket(ItemPredicate.Builder.item().of(items, bucket))
);
}
return advancement;
}
private static Advancement.Builder addFish(Advancement.Builder advancement, HolderGetter<Item> items) {
for (Item fish : FISH) {
advancement.addCriterion(
BuiltInRegistries.ITEM.getKey(fish).getPath(),
FishingRodHookedTrigger.TriggerInstance.fishedItem(
Optional.empty(), Optional.empty(), Optional.of(ItemPredicate.Builder.item().of(items, fish).build())
)
);
}
return advancement;
}
private static Advancement.Builder addCatVariants(Advancement.Builder advancement, HolderLookup<CatVariant> catVariants) {
sortedVariants(catVariants)
.forEach(
v -> advancement.addCriterion(
v.key().identifier().toString(),
TameAnimalTrigger.TriggerInstance.tamedAnimal(
EntityPredicate.Builder.entity()
.components(
DataComponentMatchers.Builder.components().exact(DataComponentExactPredicate.expect(DataComponents.CAT_VARIANT, v)).build()
)
)
)
);
return advancement;
}
private static Advancement.Builder addTamedWolfVariants(Advancement.Builder advancement, HolderLookup<WolfVariant> wolfVariants) {
sortedVariants(wolfVariants)
.forEach(
v -> advancement.addCriterion(
v.key().identifier().toString(),
TameAnimalTrigger.TriggerInstance.tamedAnimal(
EntityPredicate.Builder.entity()
.components(
DataComponentMatchers.Builder.components().exact(DataComponentExactPredicate.expect(DataComponents.WOLF_VARIANT, v)).build()
)
)
)
);
return advancement;
}
}引用的其他类
-
- 引用位置:
参数/方法调用/返回值 - 关联成员:
Advancement.Builder.advancement()
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
AdvancementRewards.Builder.experience()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
BeeNestDestroyedTrigger.TriggerInstance.destroyedBeeNest()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
BlockPredicate.Builder.block()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
BredAnimalsTrigger.TriggerInstance.bredAnimals()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ConsumeItemTrigger.TriggerInstance.usedItem()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DataComponentMatchers.Builder.components()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EffectsChangedTrigger.TriggerInstance.gotEffectsFrom()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
EnchantmentPredicate()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EntityEquipmentPredicate.Builder.equipment()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EntityFlagsPredicate.Builder.flags()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EntityPredicate.Builder.entity(), EntityPredicate.wrap()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
FilledBucketTrigger.TriggerInstance.filledBucket()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
FishingRodHookedTrigger.TriggerInstance.fishedItem()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
InventoryChangeTrigger.TriggerInstance.hasItems()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ItemPredicate.Builder.item()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ItemUsedOnLocationTrigger.TriggerInstance.allayDropItemOnBlock(), ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(), ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(), ItemUsedOnLocationTrigger.TriggerInstance.placedBlockWithProperties()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LocationPredicate.Builder.location()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
MinMaxBounds.Ints.atLeast(), MinMaxBounds.Ints.exactly()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PickedUpItemTrigger.TriggerInstance.thrownItemPickedUpByPlayer()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PlayerInteractTrigger.TriggerInstance.equipmentSheared(), PlayerInteractTrigger.TriggerInstance.itemUsedOnEntity()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
StartRidingTrigger.TriggerInstance.playerStartsRiding()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TameAnimalTrigger.TriggerInstance.tamedAnimal()
- 引用位置:
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DataComponentExactPredicate.expect()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EnchantmentsPredicate.enchantments()
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Component.translatable()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Identifier.withDefaultNamespace()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
EntityType.getKey()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: