Replace Achievements with Advancements

- Advancements are now in JSON files, converted by the included migration script.
- WizardryAdvancementTrigger is a generic achievement trigger that can be reused throughout the code to trigger custom advancements not covered by the JSON conditions.
- Plus some other small and obvious fixes.
This commit is contained in:
Philipp Rustemeier
2018-03-14 19:12:13 +01:00
parent 62c2a9e9b8
commit 612bbdb64d
48 changed files with 706 additions and 723 deletions
@@ -0,0 +1,33 @@
package electroblob.wizardry.registry;
import electroblob.wizardry.util.CustomAdvancementTrigger;
/**
* This class stores a collection of custom advancement triggers, for advancements that cannot be triggered
* from plain vanilla JSON definitions. It replaces the old WizardryAchievements class.
*
* @author 12foo
* @since Wizardry 3.1.0
*/
public final class WizardryAdvancementTriggers {
public static final CustomAdvancementTrigger armour_set = new CustomAdvancementTrigger("trigger_armour_set");
public static final CustomAdvancementTrigger jam_wizard = new CustomAdvancementTrigger("trigger_jam_wizard");
public static final CustomAdvancementTrigger self_destruct = new CustomAdvancementTrigger("trigger_self_destruct");
public static final CustomAdvancementTrigger all_spells = new CustomAdvancementTrigger("trigger_all_spells");
public static final CustomAdvancementTrigger element_master = new CustomAdvancementTrigger("trigger_element_master");
public static final CustomAdvancementTrigger identify_spell = new CustomAdvancementTrigger("trigger_identify_spell");
public static final CustomAdvancementTrigger elemental = new CustomAdvancementTrigger("trigger_elemental");
public static final CustomAdvancementTrigger legendary = new CustomAdvancementTrigger("trigger_legendary");
public static final CustomAdvancementTrigger max_out_wand = new CustomAdvancementTrigger("trigger_max_out_wand");
public static final CustomAdvancementTrigger special_upgrade = new CustomAdvancementTrigger("trigger_special_upgrade");
public static final CustomAdvancementTrigger pig_tornado = new CustomAdvancementTrigger("trigger_pig_tornado");
public static final CustomAdvancementTrigger master = new CustomAdvancementTrigger("trigger_master");
public static final CustomAdvancementTrigger apprentice = new CustomAdvancementTrigger("trigger_apprentice");
public static final CustomAdvancementTrigger anger_wizard = new CustomAdvancementTrigger("trigger_anger_wizard");
public static final CustomAdvancementTrigger buy_master_spell = new CustomAdvancementTrigger("trigger_buy_master_spell");
public static final CustomAdvancementTrigger wizard_trade = new CustomAdvancementTrigger("trigger_wizard_trade");
public static final CustomAdvancementTrigger slime_skeleton = new CustomAdvancementTrigger("trigger_slime_skeleton");
public static final CustomAdvancementTrigger freeze_blaze = new CustomAdvancementTrigger("trigger_freeze_blaze");
public static final CustomAdvancementTrigger frankenstein = new CustomAdvancementTrigger("trigger_frankenstein");
public static final CustomAdvancementTrigger charge_creeper = new CustomAdvancementTrigger("trigger_charge_creeper");
}
@@ -103,12 +103,7 @@ public final class WizardryItems {
public static final Item spectral_pickaxe = new ItemSpectralPickaxe(ToolMaterial.IRON);
public static final Item spectral_bow = new ItemSpectralBow();
public static final Item mana_flask = new Item(){
@Override
public void onCreated(ItemStack par1ItemStack, World par2World, EntityPlayer player){
AdvancementHelper.grantAdvancement(player, EnumAdvancement.craft_flask);
}
}.setCreativeTab(WizardryTabs.WIZARDRY);
public static final Item mana_flask = new Item().setCreativeTab(WizardryTabs.WIZARDRY);
public static final Item storage_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY);
public static final Item siphon_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY);
@@ -82,7 +82,7 @@ public final class WizardryPotions {
/**
* Sets both the registry and unlocalised names of the given potion, then registers it with the given registry. Use
* this instead of {@link potion#setRegistryName(String)} and {@link potion#setUnlocalizedName(String)} during
* this instead of {@link Potion#setRegistryName(String)} and {@link Potion#setUnlocalizedName(String)} during
* construction, for convenience and consistency.
*
* @param registry The registry to register the given potion to.
@@ -13,6 +13,7 @@ import electroblob.wizardry.loot.RandomSpell;
import electroblob.wizardry.loot.WizardSpell;
import electroblob.wizardry.tileentity.*;
import electroblob.wizardry.util.WizardryUtilities;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.init.Biomes;
@@ -50,6 +51,29 @@ public final class WizardryRegistry {
// NOTE: In 1.12, recipes have a registry (they can still stay here though since we don't keep references to them)
public static void registerAdvancementTriggers(){
CriteriaTriggers.register(WizardryAdvancementTriggers.armour_set);
CriteriaTriggers.register(WizardryAdvancementTriggers.jam_wizard);
CriteriaTriggers.register(WizardryAdvancementTriggers.self_destruct);
CriteriaTriggers.register(WizardryAdvancementTriggers.all_spells);
CriteriaTriggers.register(WizardryAdvancementTriggers.element_master);
CriteriaTriggers.register(WizardryAdvancementTriggers.identify_spell);
CriteriaTriggers.register(WizardryAdvancementTriggers.elemental);
CriteriaTriggers.register(WizardryAdvancementTriggers.legendary);
CriteriaTriggers.register(WizardryAdvancementTriggers.max_out_wand);
CriteriaTriggers.register(WizardryAdvancementTriggers.special_upgrade);
CriteriaTriggers.register(WizardryAdvancementTriggers.pig_tornado);
CriteriaTriggers.register(WizardryAdvancementTriggers.master);
CriteriaTriggers.register(WizardryAdvancementTriggers.apprentice);
CriteriaTriggers.register(WizardryAdvancementTriggers.anger_wizard);
CriteriaTriggers.register(WizardryAdvancementTriggers.buy_master_spell);
CriteriaTriggers.register(WizardryAdvancementTriggers.wizard_trade);
CriteriaTriggers.register(WizardryAdvancementTriggers.slime_skeleton);
CriteriaTriggers.register(WizardryAdvancementTriggers.freeze_blaze);
CriteriaTriggers.register(WizardryAdvancementTriggers.frankenstein);
CriteriaTriggers.register(WizardryAdvancementTriggers.charge_creeper);
}
/** Called from the preInit method in the main mod class to register the custom dungeon loot. */
public static void registerLoot(){