diff --git a/src/main/java/electroblob/wizardry/advancement/ArcaneWorkbenchTrigger.java b/src/main/java/electroblob/wizardry/advancement/WizardryContainerTrigger.java similarity index 62% rename from src/main/java/electroblob/wizardry/advancement/ArcaneWorkbenchTrigger.java rename to src/main/java/electroblob/wizardry/advancement/WizardryContainerTrigger.java index 175f9cdf..73513efe 100644 --- a/src/main/java/electroblob/wizardry/advancement/ArcaneWorkbenchTrigger.java +++ b/src/main/java/electroblob/wizardry/advancement/WizardryContainerTrigger.java @@ -17,14 +17,14 @@ import java.util.List; import java.util.Map; import java.util.Set; -/** Advancement trigger for things done in the arcane workbench. The majority of any +/** Advancement trigger for things done in the arcane workbench or imbuement altar. The majority of any * ICriterionTrigger class is just boilerplate, and this is no exception. */ -public class ArcaneWorkbenchTrigger implements ICriterionTrigger { +public class WizardryContainerTrigger implements ICriterionTrigger { private final ResourceLocation id; - private final Map listeners = Maps.newHashMap(); + private final Map listeners = Maps.newHashMap(); - public ArcaneWorkbenchTrigger(ResourceLocation id){ + public WizardryContainerTrigger(ResourceLocation id){ this.id = id; } @@ -32,21 +32,21 @@ public class ArcaneWorkbenchTrigger implements ICriterionTrigger listener){ + public void addListener(PlayerAdvancements advancements, Listener listener){ - ArcaneWorkbenchTrigger.Listeners listeners = this.listeners.get(advancements); + WizardryContainerTrigger.Listeners listeners = this.listeners.get(advancements); if(listeners == null){ - listeners = new ArcaneWorkbenchTrigger.Listeners(advancements); + listeners = new WizardryContainerTrigger.Listeners(advancements); this.listeners.put(advancements, listeners); } listeners.add(listener); } - public void removeListener(PlayerAdvancements advancements, Listener listener){ + public void removeListener(PlayerAdvancements advancements, Listener listener){ - ArcaneWorkbenchTrigger.Listeners listeners = this.listeners.get(advancements); + WizardryContainerTrigger.Listeners listeners = this.listeners.get(advancements); if(listeners != null){ listeners.remove(listener); @@ -61,13 +61,13 @@ public class ArcaneWorkbenchTrigger implements ICriterionTrigger> listeners = Sets.newHashSet(); + private final Set> listeners = Sets.newHashSet(); public Listeners(PlayerAdvancements advancements){ this.playerAdvancements = advancements; @@ -101,19 +101,19 @@ public class ArcaneWorkbenchTrigger implements ICriterionTrigger listener){ + public void add(Listener listener){ this.listeners.add(listener); } - public void remove(Listener listener){ + public void remove(Listener listener){ this.listeners.remove(listener); } public void trigger(ItemStack stack){ - List> list = null; + List> list = null; - for(Listener listener : this.listeners){ + for(Listener listener : this.listeners){ if(listener.getCriterionInstance().test(stack)){ @@ -126,7 +126,7 @@ public class ArcaneWorkbenchTrigger implements ICriterionTrigger listener : list){ + for(Listener listener : list){ listener.grantCriterion(this.playerAdvancements); } } diff --git a/src/main/java/electroblob/wizardry/block/BlockImbuementAltar.java b/src/main/java/electroblob/wizardry/block/BlockImbuementAltar.java index 21353d94..6d46f27b 100644 --- a/src/main/java/electroblob/wizardry/block/BlockImbuementAltar.java +++ b/src/main/java/electroblob/wizardry/block/BlockImbuementAltar.java @@ -1,7 +1,5 @@ package electroblob.wizardry.block; -import electroblob.wizardry.item.ItemWizardArmour; -import electroblob.wizardry.registry.WizardryAdvancementTriggers; import electroblob.wizardry.registry.WizardryBlocks; import electroblob.wizardry.registry.WizardryTabs; import electroblob.wizardry.tileentity.TileEntityImbuementAltar; @@ -150,11 +148,6 @@ public class BlockImbuementAltar extends Block implements ITileEntityProvider { ((TileEntityImbuementAltar)tileEntity).setStack(ItemStack.EMPTY); ((TileEntityImbuementAltar)tileEntity).setLastUser(null); - - if(currentStack.getItem() instanceof ItemWizardArmour && ((ItemWizardArmour)currentStack.getItem()).element != null){ - // Not perfect since we don't know if the player actually imbued the armour, but it's good enough for now - WizardryAdvancementTriggers.create_elemental_armour.triggerFor(player); - } } return true; diff --git a/src/main/java/electroblob/wizardry/registry/WizardryAdvancementTriggers.java b/src/main/java/electroblob/wizardry/registry/WizardryAdvancementTriggers.java index ae6537bd..0d40c928 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryAdvancementTriggers.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryAdvancementTriggers.java @@ -26,13 +26,12 @@ public final class WizardryAdvancementTriggers { public static final CustomAdvancementTrigger spell_failure = new CustomAdvancementTrigger("trigger_spell_failure"); public static final CustomAdvancementTrigger wand_levelup = new CustomAdvancementTrigger("trigger_wand_levelup"); public static final CustomAdvancementTrigger restore_imbuement_altar = new CustomAdvancementTrigger("restore_imbuement_altar"); - // TODO: Make a proper imbuement altar trigger like the arcane workbench one - public static final CustomAdvancementTrigger create_elemental_armour = new CustomAdvancementTrigger("create_elemental_armour"); public static final StructureTrigger visit_structure = new StructureTrigger(new ResourceLocation(Wizardry.MODID, "visit_structure")); - public static final ArcaneWorkbenchTrigger arcane_workbench = new ArcaneWorkbenchTrigger(new ResourceLocation(Wizardry.MODID, "arcane_workbench")); + public static final WizardryContainerTrigger arcane_workbench = new WizardryContainerTrigger(new ResourceLocation(Wizardry.MODID, "arcane_workbench")); public static final SpellCastTrigger cast_spell = new SpellCastTrigger(new ResourceLocation(Wizardry.MODID, "cast_spell")); public static final SpellDiscoveryTrigger discover_spell = new SpellDiscoveryTrigger(new ResourceLocation(Wizardry.MODID, "discover_spell")); + public static final WizardryContainerTrigger imbuement_altar = new WizardryContainerTrigger(new ResourceLocation(Wizardry.MODID, "imbuement_altar")); public static void register(){ @@ -45,11 +44,11 @@ public final class WizardryAdvancementTriggers { CriteriaTriggers.register(spell_failure); CriteriaTriggers.register(wand_levelup); CriteriaTriggers.register(restore_imbuement_altar); - CriteriaTriggers.register(create_elemental_armour); CriteriaTriggers.register(visit_structure); CriteriaTriggers.register(arcane_workbench); CriteriaTriggers.register(cast_spell); CriteriaTriggers.register(discover_spell); + CriteriaTriggers.register(imbuement_altar); } } \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/tileentity/TileEntityImbuementAltar.java b/src/main/java/electroblob/wizardry/tileentity/TileEntityImbuementAltar.java index a2a4741f..919699cf 100644 --- a/src/main/java/electroblob/wizardry/tileentity/TileEntityImbuementAltar.java +++ b/src/main/java/electroblob/wizardry/tileentity/TileEntityImbuementAltar.java @@ -4,14 +4,12 @@ import electroblob.wizardry.block.BlockReceptacle; import electroblob.wizardry.constants.Element; import electroblob.wizardry.item.IManaStoringItem; import electroblob.wizardry.item.ItemWizardArmour; -import electroblob.wizardry.registry.WizardryBlocks; -import electroblob.wizardry.registry.WizardryItems; -import electroblob.wizardry.registry.WizardryLoot; -import electroblob.wizardry.registry.WizardrySounds; +import electroblob.wizardry.registry.*; import electroblob.wizardry.util.GeometryUtils; import electroblob.wizardry.util.ParticleBuilder; import electroblob.wizardry.util.ParticleBuilder.Type; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -98,6 +96,9 @@ public class TileEntityImbuementAltar extends TileEntity implements ITickable { consumeReceptacleContents(); imbuementTimer = 0; displayElement = null; + if(lastUser instanceof EntityPlayerMP){ + WizardryAdvancementTriggers.imbuement_altar.trigger((EntityPlayerMP)lastUser, this.stack); + } } if(world.isRemote && world.rand.nextInt(2) == 0){ diff --git a/src/main/resources/assets/ebwizardry/advancements/create_elemental_armour.json b/src/main/resources/assets/ebwizardry/advancements/create_elemental_armour.json index 1eb7bf95..1ad9e35f 100644 --- a/src/main/resources/assets/ebwizardry/advancements/create_elemental_armour.json +++ b/src/main/resources/assets/ebwizardry/advancements/create_elemental_armour.json @@ -12,8 +12,261 @@ }, "parent": "ebwizardry:restore_imbuement_altar", "criteria": { - "criteria_0": { - "trigger": "ebwizardry:create_elemental_armour" + "fire_hat": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_hat_fire" + } + } + }, + "fire_robe": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_robe_fire" + } + } + }, + "fire_leggings": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_leggings_fire" + } + } + }, + "fire_boots": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_boots_fire" + } + } + }, + "ice_hat": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_hat_ice" + } + } + }, + "ice_robe": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_robe_ice" + } + } + }, + "ice_leggings": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_leggings_ice" + } + } + }, + "ice_boots": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_boots_ice" + } + } + }, + "lightning_hat": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_hat_lightning" + } + } + }, + "lightning_robe": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_robe_lightning" + } + } + }, + "lightning_leggings": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_leggings_lightning" + } + } + }, + "lightning_boots": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_boots_lightning" + } + } + }, + "necromancy_hat": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_hat_necromancy" + } + } + }, + "necromancy_robe": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_robe_necromancy" + } + } + }, + "necromancy_leggings": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_leggings_necromancy" + } + } + }, + "necromancy_boots": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_boots_necromancy" + } + } + }, + "earth_hat": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_hat_earth" + } + } + }, + "earth_robe": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_robe_earth" + } + } + }, + "earth_leggings": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_leggings_earth" + } + } + }, + "earth_boots": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_boots_earth" + } + } + }, + "sorcery_hat": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_hat_sorcery" + } + } + }, + "sorcery_robe": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_robe_sorcery" + } + } + }, + "sorcery_leggings": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_leggings_sorcery" + } + } + }, + "sorcery_boots": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_boots_sorcery" + } + } + }, + "healing_hat": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_hat_healing" + } + } + }, + "healing_robe": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_robe_healing" + } + } + }, + "healing_leggings": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_leggings_healing" + } + } + }, + "healing_boots": { + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:wizard_boots_healing" + } + } } - } + }, + "requirements": [ + [ + "fire_hat", + "fire_robe", + "fire_leggings", + "fire_boots", + "ice_hat", + "ice_robe", + "ice_leggings", + "ice_boots", + "lightning_hat", + "lightning_robe", + "lightning_leggings", + "lightning_boots", + "necromancy_hat", + "necromancy_robe", + "necromancy_leggings", + "necromancy_boots", + "earth_hat", + "earth_robe", + "earth_leggings", + "earth_boots", + "sorcery_hat", + "sorcery_robe", + "sorcery_leggings", + "sorcery_boots", + "healing_hat", + "healing_robe", + "healing_leggings", + "healing_boots" + ] + ] } \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/advancements/restore_ruined_book.json b/src/main/resources/assets/ebwizardry/advancements/restore_ruined_book.json index f6030f15..95934434 100644 --- a/src/main/resources/assets/ebwizardry/advancements/restore_ruined_book.json +++ b/src/main/resources/assets/ebwizardry/advancements/restore_ruined_book.json @@ -13,7 +13,12 @@ "parent": "ebwizardry:restore_imbuement_altar", "criteria": { "criteria_0": { - "trigger": "ebwizardry:restore_ruined_book" + "trigger": "ebwizardry:imbuement_altar", + "conditions": { + "item": { + "item": "ebwizardry:spell_book" + } + } } } } \ No newline at end of file