diff --git a/src/main/java/org/betterx/betterend/complexmaterials/MetalMaterial.java b/src/main/java/org/betterx/betterend/complexmaterials/MetalMaterial.java index 45f1458c..09c65eb5 100644 --- a/src/main/java/org/betterx/betterend/complexmaterials/MetalMaterial.java +++ b/src/main/java/org/betterx/betterend/complexmaterials/MetalMaterial.java @@ -169,6 +169,8 @@ public class MetalMaterial { ); } + public final String name; + private MetalMaterial( String name, boolean hasOre, @@ -185,6 +187,7 @@ public class MetalMaterial { .lightLevel((bs) -> 15) .sound(SoundType.LANTERN); final int level = material.getLevel(); + this.name = name; this.swordHandleTemplate = swordHandleTemplate; rawOre = hasOre ? EndItems.registerEndItem(name + "_raw", new ModelProviderItem(itemSettings)) : null; ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(() -> rawOre, 1, 3, 1)) : null; diff --git a/src/main/java/org/betterx/datagen/betterend/advancement/EndAdvancementDataProvider.java b/src/main/java/org/betterx/datagen/betterend/advancement/EndAdvancementDataProvider.java index 1c7ca7f8..53c71436 100644 --- a/src/main/java/org/betterx/datagen/betterend/advancement/EndAdvancementDataProvider.java +++ b/src/main/java/org/betterx/datagen/betterend/advancement/EndAdvancementDataProvider.java @@ -2,11 +2,14 @@ package org.betterx.datagen.betterend.advancement; import org.betterx.bclib.api.v2.advancement.AdvancementManager; import org.betterx.bclib.api.v3.datagen.AdvancementDataProvider; +import org.betterx.bclib.complexmaterials.set.wood.WoodSlots; import org.betterx.betterend.BetterEnd; import org.betterx.betterend.advancements.BECriteria; +import org.betterx.betterend.complexmaterials.MetalMaterial; import org.betterx.betterend.registry.EndBlocks; import org.betterx.betterend.registry.EndItems; import org.betterx.betterend.registry.EndStructures; +import org.betterx.betterend.registry.EndTemplates; import org.betterx.betterend.world.biome.EndBiome; import net.minecraft.advancements.FrameType; @@ -61,7 +64,7 @@ public class EndAdvancementDataProvider extends AdvancementDataProvider { ResourceLocation portal = AdvancementManager.Builder .create(BetterEnd.makeID("portal")) - .parent(root) + .parent(enterEnd) .startDisplay(EndBlocks.ETERNAL_PEDESTAL) .frame(FrameType.GOAL) .endDisplay() @@ -99,9 +102,19 @@ public class EndAdvancementDataProvider extends AdvancementDataProvider { .rewardXP(1500) .build(); + ResourceLocation village = AdvancementManager.Builder + .create(BetterEnd.makeID("village")) + .parent(allTheBiomes) + .startDisplay(EndBlocks.TENANEA.getBlock(WoodSlots.DOOR)) + .frame(FrameType.GOAL) + .endDisplay() + .addAtStructureCriterion("end_village", EndStructures.END_VILLAGE) + .requirements(RequirementsStrategy.OR) + .build(); + ResourceLocation allElytras = AdvancementManager.Builder .create(BetterEnd.makeID("all_elytras")) - .parent(root) + .parent(enterEnd) .startDisplay(EndItems.CRYSTALITE_ELYTRA) .frame(FrameType.GOAL) .endDisplay() @@ -113,7 +126,7 @@ public class EndAdvancementDataProvider extends AdvancementDataProvider { ResourceLocation infusion = AdvancementManager.Builder .create(BetterEnd.makeID("infusion")) - .parent(root) + .parent(enterEnd) .startDisplay(EndBlocks.INFUSION_PEDESTAL) .endDisplay() .addInventoryChangedCriterion("infusion_pedestal", EndBlocks.INFUSION_PEDESTAL) @@ -129,5 +142,225 @@ public class EndAdvancementDataProvider extends AdvancementDataProvider { .addCriterion("finished", BECriteria.INFUSION_FINISHED_TRIGGER) .requirements(RequirementsStrategy.OR) .build(); + + + ResourceLocation allTheTemplates = AdvancementManager.Builder + .create(BetterEnd.makeID("all_the_templates")) + .parent(enterEnd) + .startDisplay(EndTemplates.TOOL_ASSEMBLY) + .frame(FrameType.CHALLENGE) + .endDisplay() + .addInventoryChangedAnyCriterion("got_handle", EndTemplates.HANDLE_ATTACHMENT) + .addInventoryChangedAnyCriterion("got_tool", EndTemplates.TOOL_ASSEMBLY) + .addInventoryChangedAnyCriterion("got_leather", EndTemplates.LEATHER_HANDLE_ATTACHMENT) + .addInventoryChangedAnyCriterion("got_plate", EndTemplates.PLATE_UPGRADE) + .addInventoryChangedAnyCriterion("got_terminite", EndTemplates.TERMINITE_UPGRADE) + .addInventoryChangedAnyCriterion("got_aeternium", EndTemplates.AETERNIUM_UPGRADE) + .addInventoryChangedAnyCriterion("got_thallasium", EndTemplates.THALLASIUM_UPGRADE) + .addInventoryChangedAnyCriterion("got_netherite", EndTemplates.NETHERITE_UPGRADE) + .requirements(RequirementsStrategy.AND) + .rewardXP(1500) + .build(); + + ResourceLocation hammer = AdvancementManager.Builder + .create(BetterEnd.makeID("hammer")) + .parent(enterEnd) + .startDisplay(EndItems.DIAMOND_HAMMER) + .endDisplay() + .addInventoryChangedCriterion("got_diamond_hammer", EndItems.DIAMOND_HAMMER) + .addInventoryChangedCriterion("got_thalassium_hammer", EndBlocks.THALLASIUM.hammer) + .addInventoryChangedCriterion("got_terminite_hammer", EndBlocks.TERMINITE.hammer) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation thalassiumAnvil = AdvancementManager.Builder + .create(BetterEnd.makeID("thalassium_anvil")) + .parent(hammer) + .startDisplay(EndBlocks.THALLASIUM.anvilBlock) + .endDisplay() + .addInventoryChangedCriterion("got_thalassium_anvil", EndBlocks.THALLASIUM.anvilBlock) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation thalassiumPlate = AdvancementManager.Builder + .create(BetterEnd.makeID("thalassium_plate")) + .parent(thalassiumAnvil) + .startDisplay(EndBlocks.THALLASIUM.forgedPlate) + .endDisplay() + .addInventoryChangedCriterion("got_thalassium_plate", EndBlocks.THALLASIUM.forgedPlate) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation terminiteAnvil = AdvancementManager.Builder + .create(BetterEnd.makeID("terminite_anvil")) + .parent(thalassiumAnvil) + .startDisplay(EndBlocks.TERMINITE.anvilBlock) + .endDisplay() + .addInventoryChangedCriterion("got_terminite_anvil", EndBlocks.TERMINITE.anvilBlock) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation terminitePlate = AdvancementManager.Builder + .create(BetterEnd.makeID("terminite_plate")) + .parent(terminiteAnvil) + .startDisplay(EndBlocks.TERMINITE.forgedPlate) + .endDisplay() + .addInventoryChangedCriterion("got_erminite_plate", EndBlocks.TERMINITE.forgedPlate) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation aeterniumAnvil = AdvancementManager.Builder + .create(BetterEnd.makeID("aeternium_anvil")) + .parent(terminiteAnvil) + .startDisplay(EndBlocks.AETERNIUM_ANVIL) + .frame(FrameType.CHALLENGE) + .endDisplay() + .addInventoryChangedCriterion("got_aeternium_anvil", EndBlocks.AETERNIUM_ANVIL) + .requirements(RequirementsStrategy.OR) + .rewardXP(500) + .build(); + + ResourceLocation aeterniumHammerHead = AdvancementManager.Builder + .create(BetterEnd.makeID("aeternium_hammer_head")) + .parent(aeterniumAnvil) + .startDisplay(EndItems.AETERNIUM_HAMMER_HEAD) + .endDisplay() + .addInventoryChangedCriterion("got_aeternium_hammer_head", EndItems.AETERNIUM_HAMMER_HEAD) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation aeterniumHammer = AdvancementManager.Builder + .create(BetterEnd.makeID("aeternium_hammer")) + .parent(aeterniumHammerHead) + .startDisplay(EndItems.AETERNIUM_HAMMER) + .endDisplay() + .addInventoryChangedCriterion("got_aeternium_hammer", EndItems.AETERNIUM_HAMMER) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation aeterniumPlate = AdvancementManager.Builder + .create(BetterEnd.makeID("aeternium_plate")) + .parent(aeterniumHammer) + .startDisplay(EndItems.AETERNIUM_FORGED_PLATE) + .frame(FrameType.GOAL) + .endDisplay() + .addInventoryChangedCriterion("got_aeternium_plate", EndItems.AETERNIUM_FORGED_PLATE) + .requirements(RequirementsStrategy.OR) + .rewardXP(200) + .build(); + + ResourceLocation thallasiumArmor = addArmor(EndBlocks.THALLASIUM) + .parent(thalassiumPlate) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation thallasiumHead = addToolHeads(EndBlocks.THALLASIUM) + .parent(thalassiumAnvil) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation thallasium = addTools(EndBlocks.THALLASIUM) + .parent(thallasiumHead) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation terminiteHead = addToolHeads(EndBlocks.TERMINITE) + .parent(terminiteAnvil) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation terminite = addTools(EndBlocks.TERMINITE) + .parent(terminiteHead) + .requirements(RequirementsStrategy.OR) + .build(); + + ResourceLocation terminiteArmor = addArmor(EndBlocks.TERMINITE) + .parent(terminitePlate) + .requirements(RequirementsStrategy.OR) + .build(); + + + ResourceLocation aeterniumHead = AdvancementManager.Builder + .create(BetterEnd.makeID("aeternium_tool_head")) + .startDisplay(EndItems.AETERNIUM_PICKAXE_HEAD) + .frame(FrameType.GOAL) + .endDisplay() + .parent(aeterniumHammer) + .addInventoryChangedCriterion("got_aeternium_pickaxe_head", EndItems.AETERNIUM_PICKAXE_HEAD) + .addInventoryChangedCriterion("got_aeternium_hoe_head", EndItems.AETERNIUM_HOE_HEAD) + .addInventoryChangedCriterion("got_aeternium_axe_head", EndItems.AETERNIUM_AXE_HEAD) + .addInventoryChangedCriterion("got_aeternium_shovel_head", EndItems.AETERNIUM_SHOVEL_HEAD) + .addInventoryChangedCriterion( + "got_aeternium_sword_head", + EndItems.AETERNIUM_SWORD_BLADE, + EndItems.AETERNIUM_SWORD_HANDLE + ) + .requirements(RequirementsStrategy.AND) + .rewardXP(200) + .build(); + + ResourceLocation aeternium = AdvancementManager.Builder + .create(BetterEnd.makeID("aeternium_tool")) + .startDisplay(EndItems.AETERNIUM_PICKAXE) + .frame(FrameType.CHALLENGE) + .endDisplay() + .parent(aeterniumHead) + .addInventoryChangedCriterion("got_aeternium_pickaxe", EndItems.AETERNIUM_PICKAXE) + .addInventoryChangedCriterion("got_aeternium_hoe", EndItems.AETERNIUM_HOE) + .addInventoryChangedCriterion("got_aeternium_axe", EndItems.AETERNIUM_AXE) + .addInventoryChangedCriterion("got_aeternium_shovel", EndItems.AETERNIUM_SHOVEL) + .addInventoryChangedCriterion("got_aeternium_sword", EndItems.AETERNIUM_SWORD) + .requirements(RequirementsStrategy.AND) + .rewardXP(2000) + .build(); + + ResourceLocation aeterniumArmor = AdvancementManager.Builder + .create(BetterEnd.makeID("aeternium_armor")) + .startDisplay(EndItems.AETERNIUM_CHESTPLATE) + .frame(FrameType.CHALLENGE) + .endDisplay() + .parent(aeterniumPlate) + .addInventoryChangedCriterion("got_aeternium_helmet", EndItems.AETERNIUM_HELMET) + .addInventoryChangedCriterion("got_aeternium_chestplate", EndItems.AETERNIUM_CHESTPLATE) + .addInventoryChangedCriterion("got_aeternium_leggings", EndItems.AETERNIUM_LEGGINGS) + .addInventoryChangedCriterion("got_aeternium_boots", EndItems.AETERNIUM_BOOTS) + .requirements(RequirementsStrategy.AND) + .rewardXP(2000) + .build(); + } + + AdvancementManager.Builder addTools(MetalMaterial mat) { + return AdvancementManager.Builder + .create(BetterEnd.makeID(mat.name + "_tool")) + .startDisplay(mat.pickaxe) + .endDisplay() + .addInventoryChangedCriterion("got_" + mat.name + "_pickaxe", mat.pickaxe) + .addInventoryChangedCriterion("got_" + mat.name + "_hoe", mat.hoe) + .addInventoryChangedCriterion("got_" + mat.name + "_axe", mat.axe) + .addInventoryChangedCriterion("got_" + mat.name + "_shovel", mat.shovel) + .addInventoryChangedCriterion("got_" + mat.name + "_sword", mat.sword); + } + + AdvancementManager.Builder addToolHeads(MetalMaterial mat) { + return AdvancementManager.Builder + .create(BetterEnd.makeID(mat.name + "_tool_head")) + .startDisplay(mat.pickaxeHead) + .endDisplay() + .addInventoryChangedCriterion("got_" + mat.name + "_pickaxe_head", mat.pickaxeHead) + .addInventoryChangedCriterion("got_" + mat.name + "_hoe_head", mat.hoeHead) + .addInventoryChangedCriterion("got_" + mat.name + "_axe_head", mat.axeHead) + .addInventoryChangedCriterion("got_" + mat.name + "_shovel_head", mat.shovelHead) + .addInventoryChangedCriterion("got_" + mat.name + "_sword_head", mat.swordBlade, mat.swordHandle); + } + + AdvancementManager.Builder addArmor(MetalMaterial mat) { + return AdvancementManager.Builder + .create(BetterEnd.makeID(mat.name + "_armor")) + .startDisplay(mat.chestplate) + .endDisplay() + .addInventoryChangedCriterion("got_" + mat.name + "_helmet", mat.helmet) + .addInventoryChangedCriterion("got_" + mat.name + "_chestplate", mat.chestplate) + .addInventoryChangedCriterion("got_" + mat.name + "_leggings", mat.leggings) + .addInventoryChangedCriterion("got_" + mat.name + "_boots", mat.boots); } }