566 lines
21 KiB
Java
566 lines
21 KiB
Java
package net.minecraft.data.advancements.packs;
|
|
|
|
import java.util.Optional;
|
|
import java.util.function.Consumer;
|
|
import net.minecraft.advancements.Advancement;
|
|
import net.minecraft.advancements.AdvancementHolder;
|
|
import net.minecraft.advancements.AdvancementRequirements;
|
|
import net.minecraft.advancements.AdvancementRewards;
|
|
import net.minecraft.advancements.AdvancementType;
|
|
import net.minecraft.advancements.critereon.BlockPredicate;
|
|
import net.minecraft.advancements.critereon.BrewedPotionTrigger;
|
|
import net.minecraft.advancements.critereon.ChangeDimensionTrigger;
|
|
import net.minecraft.advancements.critereon.ConstructBeaconTrigger;
|
|
import net.minecraft.advancements.critereon.ContextAwarePredicate;
|
|
import net.minecraft.advancements.critereon.DamageSourcePredicate;
|
|
import net.minecraft.advancements.critereon.DistancePredicate;
|
|
import net.minecraft.advancements.critereon.DistanceTrigger;
|
|
import net.minecraft.advancements.critereon.EffectsChangedTrigger;
|
|
import net.minecraft.advancements.critereon.EntityEquipmentPredicate;
|
|
import net.minecraft.advancements.critereon.EntityFlagsPredicate;
|
|
import net.minecraft.advancements.critereon.EntityPredicate;
|
|
import net.minecraft.advancements.critereon.InventoryChangeTrigger;
|
|
import net.minecraft.advancements.critereon.ItemDurabilityTrigger;
|
|
import net.minecraft.advancements.critereon.ItemPredicate;
|
|
import net.minecraft.advancements.critereon.ItemUsedOnLocationTrigger;
|
|
import net.minecraft.advancements.critereon.KilledTrigger;
|
|
import net.minecraft.advancements.critereon.LocationPredicate;
|
|
import net.minecraft.advancements.critereon.LootTableTrigger;
|
|
import net.minecraft.advancements.critereon.MinMaxBounds;
|
|
import net.minecraft.advancements.critereon.MobEffectsPredicate;
|
|
import net.minecraft.advancements.critereon.PickedUpItemTrigger;
|
|
import net.minecraft.advancements.critereon.PlayerInteractTrigger;
|
|
import net.minecraft.advancements.critereon.PlayerTrigger;
|
|
import net.minecraft.advancements.critereon.StatePropertiesPredicate;
|
|
import net.minecraft.advancements.critereon.SummonedEntityTrigger;
|
|
import net.minecraft.advancements.critereon.TagPredicate;
|
|
import net.minecraft.core.HolderLookup;
|
|
import net.minecraft.core.registries.Registries;
|
|
import net.minecraft.data.advancements.AdvancementSubProvider;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.tags.DamageTypeTags;
|
|
import net.minecraft.tags.ItemTags;
|
|
import net.minecraft.world.effect.MobEffects;
|
|
import net.minecraft.world.entity.EntityType;
|
|
import net.minecraft.world.entity.monster.piglin.PiglinAi;
|
|
import net.minecraft.world.item.Items;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterList;
|
|
import net.minecraft.world.level.block.Blocks;
|
|
import net.minecraft.world.level.block.RespawnAnchorBlock;
|
|
import net.minecraft.world.level.levelgen.structure.BuiltinStructures;
|
|
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
|
|
import net.minecraft.world.level.storage.loot.LootContext;
|
|
import net.minecraft.world.level.storage.loot.predicates.LootItemEntityPropertyCondition;
|
|
|
|
public class VanillaNetherAdvancements implements AdvancementSubProvider {
|
|
private static final ContextAwarePredicate DISTRACT_PIGLIN_PLAYER_ARMOR_PREDICATE = ContextAwarePredicate.create(
|
|
LootItemEntityPropertyCondition.hasProperties(
|
|
LootContext.EntityTarget.THIS,
|
|
EntityPredicate.Builder.entity().equipment(EntityEquipmentPredicate.Builder.equipment().head(ItemPredicate.Builder.item().of(Items.GOLDEN_HELMET)))
|
|
)
|
|
.invert()
|
|
.build(),
|
|
LootItemEntityPropertyCondition.hasProperties(
|
|
LootContext.EntityTarget.THIS,
|
|
EntityPredicate.Builder.entity().equipment(EntityEquipmentPredicate.Builder.equipment().chest(ItemPredicate.Builder.item().of(Items.GOLDEN_CHESTPLATE)))
|
|
)
|
|
.invert()
|
|
.build(),
|
|
LootItemEntityPropertyCondition.hasProperties(
|
|
LootContext.EntityTarget.THIS,
|
|
EntityPredicate.Builder.entity().equipment(EntityEquipmentPredicate.Builder.equipment().legs(ItemPredicate.Builder.item().of(Items.GOLDEN_LEGGINGS)))
|
|
)
|
|
.invert()
|
|
.build(),
|
|
LootItemEntityPropertyCondition.hasProperties(
|
|
LootContext.EntityTarget.THIS,
|
|
EntityPredicate.Builder.entity().equipment(EntityEquipmentPredicate.Builder.equipment().feet(ItemPredicate.Builder.item().of(Items.GOLDEN_BOOTS)))
|
|
)
|
|
.invert()
|
|
.build()
|
|
);
|
|
|
|
@Override
|
|
public void generate(HolderLookup.Provider registries, Consumer<AdvancementHolder> writer) {
|
|
AdvancementHolder advancementHolder = Advancement.Builder.advancement()
|
|
.display(
|
|
Blocks.RED_NETHER_BRICKS,
|
|
Component.translatable("advancements.nether.root.title"),
|
|
Component.translatable("advancements.nether.root.description"),
|
|
ResourceLocation.withDefaultNamespace("textures/gui/advancements/backgrounds/nether.png"),
|
|
AdvancementType.TASK,
|
|
false,
|
|
false,
|
|
false
|
|
)
|
|
.addCriterion("entered_nether", ChangeDimensionTrigger.TriggerInstance.changedDimensionTo(Level.NETHER))
|
|
.save(writer, "nether/root");
|
|
AdvancementHolder advancementHolder2 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder)
|
|
.display(
|
|
Items.FIRE_CHARGE,
|
|
Component.translatable("advancements.nether.return_to_sender.title"),
|
|
Component.translatable("advancements.nether.return_to_sender.description"),
|
|
null,
|
|
AdvancementType.CHALLENGE,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.rewards(AdvancementRewards.Builder.experience(50))
|
|
.addCriterion(
|
|
"killed_ghast",
|
|
KilledTrigger.TriggerInstance.playerKilledEntity(
|
|
EntityPredicate.Builder.entity().of(EntityType.GHAST),
|
|
DamageSourcePredicate.Builder.damageType()
|
|
.tag(TagPredicate.is(DamageTypeTags.IS_PROJECTILE))
|
|
.direct(EntityPredicate.Builder.entity().of(EntityType.FIREBALL))
|
|
)
|
|
)
|
|
.save(writer, "nether/return_to_sender");
|
|
AdvancementHolder advancementHolder3 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder)
|
|
.display(
|
|
Blocks.NETHER_BRICKS,
|
|
Component.translatable("advancements.nether.find_fortress.title"),
|
|
Component.translatable("advancements.nether.find_fortress.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion(
|
|
"fortress",
|
|
PlayerTrigger.TriggerInstance.located(
|
|
LocationPredicate.Builder.inStructure(registries.lookupOrThrow(Registries.STRUCTURE).getOrThrow(BuiltinStructures.FORTRESS))
|
|
)
|
|
)
|
|
.save(writer, "nether/find_fortress");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder)
|
|
.display(
|
|
Items.MAP,
|
|
Component.translatable("advancements.nether.fast_travel.title"),
|
|
Component.translatable("advancements.nether.fast_travel.description"),
|
|
null,
|
|
AdvancementType.CHALLENGE,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.rewards(AdvancementRewards.Builder.experience(100))
|
|
.addCriterion("travelled", DistanceTrigger.TriggerInstance.travelledThroughNether(DistancePredicate.horizontal(MinMaxBounds.Doubles.atLeast(7000.0))))
|
|
.save(writer, "nether/fast_travel");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder2)
|
|
.display(
|
|
Items.GHAST_TEAR,
|
|
Component.translatable("advancements.nether.uneasy_alliance.title"),
|
|
Component.translatable("advancements.nether.uneasy_alliance.description"),
|
|
null,
|
|
AdvancementType.CHALLENGE,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.rewards(AdvancementRewards.Builder.experience(100))
|
|
.addCriterion(
|
|
"killed_ghast",
|
|
KilledTrigger.TriggerInstance.playerKilledEntity(
|
|
EntityPredicate.Builder.entity().of(EntityType.GHAST).located(LocationPredicate.Builder.inDimension(Level.OVERWORLD))
|
|
)
|
|
)
|
|
.save(writer, "nether/uneasy_alliance");
|
|
AdvancementHolder advancementHolder4 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder3)
|
|
.display(
|
|
Blocks.WITHER_SKELETON_SKULL,
|
|
Component.translatable("advancements.nether.get_wither_skull.title"),
|
|
Component.translatable("advancements.nether.get_wither_skull.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion("wither_skull", InventoryChangeTrigger.TriggerInstance.hasItems(Blocks.WITHER_SKELETON_SKULL))
|
|
.save(writer, "nether/get_wither_skull");
|
|
AdvancementHolder advancementHolder5 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder4)
|
|
.display(
|
|
Items.NETHER_STAR,
|
|
Component.translatable("advancements.nether.summon_wither.title"),
|
|
Component.translatable("advancements.nether.summon_wither.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion("summoned", SummonedEntityTrigger.TriggerInstance.summonedEntity(EntityPredicate.Builder.entity().of(EntityType.WITHER)))
|
|
.save(writer, "nether/summon_wither");
|
|
AdvancementHolder advancementHolder6 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder3)
|
|
.display(
|
|
Items.BLAZE_ROD,
|
|
Component.translatable("advancements.nether.obtain_blaze_rod.title"),
|
|
Component.translatable("advancements.nether.obtain_blaze_rod.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion("blaze_rod", InventoryChangeTrigger.TriggerInstance.hasItems(Items.BLAZE_ROD))
|
|
.save(writer, "nether/obtain_blaze_rod");
|
|
AdvancementHolder advancementHolder7 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder5)
|
|
.display(
|
|
Blocks.BEACON,
|
|
Component.translatable("advancements.nether.create_beacon.title"),
|
|
Component.translatable("advancements.nether.create_beacon.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion("beacon", ConstructBeaconTrigger.TriggerInstance.constructedBeacon(MinMaxBounds.Ints.atLeast(1)))
|
|
.save(writer, "nether/create_beacon");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder7)
|
|
.display(
|
|
Blocks.BEACON,
|
|
Component.translatable("advancements.nether.create_full_beacon.title"),
|
|
Component.translatable("advancements.nether.create_full_beacon.description"),
|
|
null,
|
|
AdvancementType.GOAL,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion("beacon", ConstructBeaconTrigger.TriggerInstance.constructedBeacon(MinMaxBounds.Ints.exactly(4)))
|
|
.save(writer, "nether/create_full_beacon");
|
|
AdvancementHolder advancementHolder8 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder6)
|
|
.display(
|
|
Items.POTION,
|
|
Component.translatable("advancements.nether.brew_potion.title"),
|
|
Component.translatable("advancements.nether.brew_potion.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion("potion", BrewedPotionTrigger.TriggerInstance.brewedPotion())
|
|
.save(writer, "nether/brew_potion");
|
|
AdvancementHolder advancementHolder9 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder8)
|
|
.display(
|
|
Items.MILK_BUCKET,
|
|
Component.translatable("advancements.nether.all_potions.title"),
|
|
Component.translatable("advancements.nether.all_potions.description"),
|
|
null,
|
|
AdvancementType.CHALLENGE,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.rewards(AdvancementRewards.Builder.experience(100))
|
|
.addCriterion(
|
|
"all_effects",
|
|
EffectsChangedTrigger.TriggerInstance.hasEffects(
|
|
MobEffectsPredicate.Builder.effects()
|
|
.and(MobEffects.MOVEMENT_SPEED)
|
|
.and(MobEffects.MOVEMENT_SLOWDOWN)
|
|
.and(MobEffects.DAMAGE_BOOST)
|
|
.and(MobEffects.JUMP)
|
|
.and(MobEffects.REGENERATION)
|
|
.and(MobEffects.FIRE_RESISTANCE)
|
|
.and(MobEffects.WATER_BREATHING)
|
|
.and(MobEffects.INVISIBILITY)
|
|
.and(MobEffects.NIGHT_VISION)
|
|
.and(MobEffects.WEAKNESS)
|
|
.and(MobEffects.POISON)
|
|
.and(MobEffects.SLOW_FALLING)
|
|
.and(MobEffects.DAMAGE_RESISTANCE)
|
|
.and(MobEffects.OOZING)
|
|
.and(MobEffects.INFESTED)
|
|
.and(MobEffects.WIND_CHARGED)
|
|
.and(MobEffects.WEAVING)
|
|
)
|
|
)
|
|
.save(writer, "nether/all_potions");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder9)
|
|
.display(
|
|
Items.BUCKET,
|
|
Component.translatable("advancements.nether.all_effects.title"),
|
|
Component.translatable("advancements.nether.all_effects.description"),
|
|
null,
|
|
AdvancementType.CHALLENGE,
|
|
true,
|
|
true,
|
|
true
|
|
)
|
|
.rewards(AdvancementRewards.Builder.experience(1000))
|
|
.addCriterion(
|
|
"all_effects",
|
|
EffectsChangedTrigger.TriggerInstance.hasEffects(
|
|
MobEffectsPredicate.Builder.effects()
|
|
.and(MobEffects.MOVEMENT_SPEED)
|
|
.and(MobEffects.MOVEMENT_SLOWDOWN)
|
|
.and(MobEffects.DAMAGE_BOOST)
|
|
.and(MobEffects.JUMP)
|
|
.and(MobEffects.REGENERATION)
|
|
.and(MobEffects.FIRE_RESISTANCE)
|
|
.and(MobEffects.WATER_BREATHING)
|
|
.and(MobEffects.INVISIBILITY)
|
|
.and(MobEffects.NIGHT_VISION)
|
|
.and(MobEffects.WEAKNESS)
|
|
.and(MobEffects.POISON)
|
|
.and(MobEffects.WITHER)
|
|
.and(MobEffects.DIG_SPEED)
|
|
.and(MobEffects.DIG_SLOWDOWN)
|
|
.and(MobEffects.LEVITATION)
|
|
.and(MobEffects.GLOWING)
|
|
.and(MobEffects.ABSORPTION)
|
|
.and(MobEffects.HUNGER)
|
|
.and(MobEffects.CONFUSION)
|
|
.and(MobEffects.DAMAGE_RESISTANCE)
|
|
.and(MobEffects.SLOW_FALLING)
|
|
.and(MobEffects.CONDUIT_POWER)
|
|
.and(MobEffects.DOLPHINS_GRACE)
|
|
.and(MobEffects.BLINDNESS)
|
|
.and(MobEffects.BAD_OMEN)
|
|
.and(MobEffects.HERO_OF_THE_VILLAGE)
|
|
.and(MobEffects.DARKNESS)
|
|
.and(MobEffects.OOZING)
|
|
.and(MobEffects.INFESTED)
|
|
.and(MobEffects.WIND_CHARGED)
|
|
.and(MobEffects.WEAVING)
|
|
.and(MobEffects.TRIAL_OMEN)
|
|
.and(MobEffects.RAID_OMEN)
|
|
)
|
|
)
|
|
.save(writer, "nether/all_effects");
|
|
AdvancementHolder advancementHolder10 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder)
|
|
.display(
|
|
Items.ANCIENT_DEBRIS,
|
|
Component.translatable("advancements.nether.obtain_ancient_debris.title"),
|
|
Component.translatable("advancements.nether.obtain_ancient_debris.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion("ancient_debris", InventoryChangeTrigger.TriggerInstance.hasItems(Items.ANCIENT_DEBRIS))
|
|
.save(writer, "nether/obtain_ancient_debris");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder10)
|
|
.display(
|
|
Items.NETHERITE_CHESTPLATE,
|
|
Component.translatable("advancements.nether.netherite_armor.title"),
|
|
Component.translatable("advancements.nether.netherite_armor.description"),
|
|
null,
|
|
AdvancementType.CHALLENGE,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.rewards(AdvancementRewards.Builder.experience(100))
|
|
.addCriterion(
|
|
"netherite_armor",
|
|
InventoryChangeTrigger.TriggerInstance.hasItems(Items.NETHERITE_HELMET, Items.NETHERITE_CHESTPLATE, Items.NETHERITE_LEGGINGS, Items.NETHERITE_BOOTS)
|
|
)
|
|
.save(writer, "nether/netherite_armor");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder10)
|
|
.display(
|
|
Items.LODESTONE,
|
|
Component.translatable("advancements.nether.use_lodestone.title"),
|
|
Component.translatable("advancements.nether.use_lodestone.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion(
|
|
"use_lodestone",
|
|
ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(
|
|
LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(Blocks.LODESTONE)), ItemPredicate.Builder.item().of(Items.COMPASS)
|
|
)
|
|
)
|
|
.save(writer, "nether/use_lodestone");
|
|
AdvancementHolder advancementHolder11 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder)
|
|
.display(
|
|
Items.CRYING_OBSIDIAN,
|
|
Component.translatable("advancements.nether.obtain_crying_obsidian.title"),
|
|
Component.translatable("advancements.nether.obtain_crying_obsidian.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion("crying_obsidian", InventoryChangeTrigger.TriggerInstance.hasItems(Items.CRYING_OBSIDIAN))
|
|
.save(writer, "nether/obtain_crying_obsidian");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder11)
|
|
.display(
|
|
Items.RESPAWN_ANCHOR,
|
|
Component.translatable("advancements.nether.charge_respawn_anchor.title"),
|
|
Component.translatable("advancements.nether.charge_respawn_anchor.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion(
|
|
"charge_respawn_anchor",
|
|
ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(
|
|
LocationPredicate.Builder.location()
|
|
.setBlock(
|
|
BlockPredicate.Builder.block()
|
|
.of(Blocks.RESPAWN_ANCHOR)
|
|
.setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(RespawnAnchorBlock.CHARGE, 4))
|
|
),
|
|
ItemPredicate.Builder.item().of(Blocks.GLOWSTONE)
|
|
)
|
|
)
|
|
.save(writer, "nether/charge_respawn_anchor");
|
|
AdvancementHolder advancementHolder12 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder)
|
|
.display(
|
|
Items.WARPED_FUNGUS_ON_A_STICK,
|
|
Component.translatable("advancements.nether.ride_strider.title"),
|
|
Component.translatable("advancements.nether.ride_strider.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion(
|
|
"used_warped_fungus_on_a_stick",
|
|
ItemDurabilityTrigger.TriggerInstance.changedDurability(
|
|
Optional.of(EntityPredicate.wrap(EntityPredicate.Builder.entity().vehicle(EntityPredicate.Builder.entity().of(EntityType.STRIDER)))),
|
|
Optional.of(ItemPredicate.Builder.item().of(Items.WARPED_FUNGUS_ON_A_STICK).build()),
|
|
MinMaxBounds.Ints.ANY
|
|
)
|
|
)
|
|
.save(writer, "nether/ride_strider");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder12)
|
|
.display(
|
|
Items.WARPED_FUNGUS_ON_A_STICK,
|
|
Component.translatable("advancements.nether.ride_strider_in_overworld_lava.title"),
|
|
Component.translatable("advancements.nether.ride_strider_in_overworld_lava.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion(
|
|
"ride_entity_distance",
|
|
DistanceTrigger.TriggerInstance.rideEntityInLava(
|
|
EntityPredicate.Builder.entity()
|
|
.located(LocationPredicate.Builder.inDimension(Level.OVERWORLD))
|
|
.vehicle(EntityPredicate.Builder.entity().of(EntityType.STRIDER)),
|
|
DistancePredicate.horizontal(MinMaxBounds.Doubles.atLeast(50.0))
|
|
)
|
|
)
|
|
.save(writer, "nether/ride_strider_in_overworld_lava");
|
|
VanillaAdventureAdvancements.addBiomes(Advancement.Builder.advancement(), registries, MultiNoiseBiomeSourceParameterList.Preset.NETHER.usedBiomes().toList())
|
|
.parent(advancementHolder12)
|
|
.display(
|
|
Items.NETHERITE_BOOTS,
|
|
Component.translatable("advancements.nether.explore_nether.title"),
|
|
Component.translatable("advancements.nether.explore_nether.description"),
|
|
null,
|
|
AdvancementType.CHALLENGE,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.rewards(AdvancementRewards.Builder.experience(500))
|
|
.save(writer, "nether/explore_nether");
|
|
AdvancementHolder advancementHolder13 = Advancement.Builder.advancement()
|
|
.parent(advancementHolder)
|
|
.display(
|
|
Items.POLISHED_BLACKSTONE_BRICKS,
|
|
Component.translatable("advancements.nether.find_bastion.title"),
|
|
Component.translatable("advancements.nether.find_bastion.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion(
|
|
"bastion",
|
|
PlayerTrigger.TriggerInstance.located(
|
|
LocationPredicate.Builder.inStructure(registries.lookupOrThrow(Registries.STRUCTURE).getOrThrow(BuiltinStructures.BASTION_REMNANT))
|
|
)
|
|
)
|
|
.save(writer, "nether/find_bastion");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder13)
|
|
.display(
|
|
Blocks.CHEST,
|
|
Component.translatable("advancements.nether.loot_bastion.title"),
|
|
Component.translatable("advancements.nether.loot_bastion.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.requirements(AdvancementRequirements.Strategy.OR)
|
|
.addCriterion("loot_bastion_other", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.BASTION_OTHER))
|
|
.addCriterion("loot_bastion_treasure", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.BASTION_TREASURE))
|
|
.addCriterion("loot_bastion_hoglin_stable", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.BASTION_HOGLIN_STABLE))
|
|
.addCriterion("loot_bastion_bridge", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.BASTION_BRIDGE))
|
|
.save(writer, "nether/loot_bastion");
|
|
Advancement.Builder.advancement()
|
|
.parent(advancementHolder)
|
|
.requirements(AdvancementRequirements.Strategy.OR)
|
|
.display(
|
|
Items.GOLD_INGOT,
|
|
Component.translatable("advancements.nether.distract_piglin.title"),
|
|
Component.translatable("advancements.nether.distract_piglin.description"),
|
|
null,
|
|
AdvancementType.TASK,
|
|
true,
|
|
true,
|
|
false
|
|
)
|
|
.addCriterion(
|
|
"distract_piglin",
|
|
PickedUpItemTrigger.TriggerInstance.thrownItemPickedUpByEntity(
|
|
DISTRACT_PIGLIN_PLAYER_ARMOR_PREDICATE,
|
|
Optional.of(ItemPredicate.Builder.item().of(ItemTags.PIGLIN_LOVED).build()),
|
|
Optional.of(EntityPredicate.wrap(EntityPredicate.Builder.entity().of(EntityType.PIGLIN).flags(EntityFlagsPredicate.Builder.flags().setIsBaby(false))))
|
|
)
|
|
)
|
|
.addCriterion(
|
|
"distract_piglin_directly",
|
|
PlayerInteractTrigger.TriggerInstance.itemUsedOnEntity(
|
|
Optional.of(DISTRACT_PIGLIN_PLAYER_ARMOR_PREDICATE),
|
|
ItemPredicate.Builder.item().of(PiglinAi.BARTERING_ITEM),
|
|
Optional.of(EntityPredicate.wrap(EntityPredicate.Builder.entity().of(EntityType.PIGLIN).flags(EntityFlagsPredicate.Builder.flags().setIsBaby(false))))
|
|
)
|
|
)
|
|
.save(writer, "nether/distract_piglin");
|
|
}
|
|
}
|