diff --git a/AATool/AATool.csproj b/AATool/AATool.csproj
index 37172e4f..5f7fbf56 100644
--- a/AATool/AATool.csproj
+++ b/AATool/AATool.csproj
@@ -106,6 +106,7 @@
+
@@ -117,9 +118,15 @@
+
+
+
+
+
+
@@ -231,6 +238,7 @@
+
@@ -522,12 +530,24 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
@@ -816,16 +836,16 @@
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
@@ -2742,7 +2762,7 @@
PreserveNewest
-
+
PreserveNewest
@@ -2823,6 +2843,30 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
@@ -2907,7 +2951,7 @@
PreserveNewest
-
+
PreserveNewest
@@ -2922,6 +2966,57 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
@@ -3348,6 +3443,12 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
@@ -3483,6 +3584,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
@@ -6984,6 +7088,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
@@ -7005,6 +7112,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
@@ -7110,6 +7220,12 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
diff --git a/AATool/Configuration/PinnedObjectiveSet.cs b/AATool/Configuration/PinnedObjectiveSet.cs
index d6656275..709ceebd 100644
--- a/AATool/Configuration/PinnedObjectiveSet.cs
+++ b/AATool/Configuration/PinnedObjectiveSet.cs
@@ -13,7 +13,7 @@ public class PinnedObjectiveSet
public static readonly List AllAA = new (){
"EGap", "Trident", "NautilusShells", "WitherSkulls",
"AncientDebris", "GoldBlocks", "Bees",
- "Cats", "Foods", "Animals", "Monsters", "Biomes", "Cauldrons"
+ "Cats", "Foods", "Animals", "Monsters", "Biomes", "Cauldrons", "ArmorTrims"
};
public static readonly List AllAB = new (){
@@ -37,6 +37,8 @@ public static List GetAllAvailable()
if (Version.TryParse(Tracker.CurrentVersion, out Version current))
{
+ if (current < new Version("1.20"))
+ available.Remove("ArmorTrims");
if (current < new Version("1.19"))
available.Remove("SculkBlocks");
if (current != new Version("1.17"))
@@ -45,6 +47,8 @@ public static List GetAllAvailable()
available.Remove("DeepslateEmerald");
if (current < new Version("1.16"))
available.Remove("AncientDebris");
+ if (current < new Version("1.15"))
+ available.Remove("Bees");
if (current < new Version("1.14"))
available.Remove("Cats");
if (current < new Version("1.13"))
@@ -64,7 +68,7 @@ public static List GetAllAvailable()
[JsonProperty]
public Dictionary> Pinned = new () {
{ "All Advancements 1.20 Snapshot", new () {
- "AncientDebris", "WitherSkulls", "NautilusShells", "Trident", "EGap",
+ "AncientDebris", "WitherSkulls", "NautilusShells", "Trident", "EGap", "ArmorTrims",
}},
{ "All Advancements 1.19", new () {
"AncientDebris", "WitherSkulls", "NautilusShells", "Trident", "EGap",
diff --git a/AATool/Data/Categories/AdventuringTime.cs b/AATool/Data/Categories/AdventuringTime.cs
index 3fc97717..0aabd23c 100644
--- a/AATool/Data/Categories/AdventuringTime.cs
+++ b/AATool/Data/Categories/AdventuringTime.cs
@@ -8,6 +8,7 @@ public class AdventuringTime : SingleAdvancement
private const string Id = "minecraft:adventure/adventuring_time";
public static readonly List SupportedVersions = new () {
+ "1.20 Snapshot",
"1.19",
"1.18",
"1.16",
diff --git a/AATool/Data/Categories/AllSmithingTemplates.cs b/AATool/Data/Categories/AllSmithingTemplates.cs
new file mode 100644
index 00000000..e63a6955
--- /dev/null
+++ b/AATool/Data/Categories/AllSmithingTemplates.cs
@@ -0,0 +1,51 @@
+using System.Collections.Generic;
+using System.Xml;
+using AATool.Data.Objectives;
+using AATool.Data.Objectives.Complex;
+using AATool.Utilities;
+
+namespace AATool.Data.Categories
+{
+ public class AllSmithingTemplates : SingleAdvancement
+ {
+ private const string Id = "custom:all_smithing_templates";
+
+ public static readonly List SupportedVersions = new () {
+ "1.20 Snapshot",
+ };
+
+ public override IEnumerable GetSupportedVersions() => SupportedVersions;
+ public override int GetCompletedCount() => this.RecipesObtained;
+
+ public int RecipesObtained { get; private set; }
+
+ public AllSmithingTemplates() : base()
+ {
+ this.Name = "All Smithing Templates";
+ this.Acronym = "AST";
+ this.Objective = "Templates";
+ this.Action = "Obtained";
+ }
+
+ public override void LoadObjectives()
+ {
+ Tracker.Advancements.RefreshObjectives();
+ Tracker.Advancements.TryGet(Id, out Advancement allSmithingTemplates);
+ this.Requirement = allSmithingTemplates;
+ }
+
+ public override void Update()
+ {
+ base.Update();
+ RecipesObtained = 0;
+ if (this.Requirement?.Criteria is not CriteriaSet trims)
+ return;
+
+ foreach (ArmorTrimCriterion criterion in trims.All.Values)
+ {
+ if (criterion.Obtained)
+ RecipesObtained++;
+ }
+ }
+ }
+}
diff --git a/AATool/Data/Objectives/AdvancementManifest.cs b/AATool/Data/Objectives/AdvancementManifest.cs
index 776aabe3..01e74de1 100644
--- a/AATool/Data/Objectives/AdvancementManifest.cs
+++ b/AATool/Data/Objectives/AdvancementManifest.cs
@@ -54,6 +54,12 @@ public virtual void RefreshObjectives()
if (Tracker.Category is AllAchievements)
return;
+ if (Tracker.Category is AllSmithingTemplates)
+ {
+ this.ParseFile(Paths.System.ArmorTrimsFile);
+ return;
+ }
+
//try to get list of all advancement objective files
bool filesExist = Paths.TryGetAllFiles(Paths.System.AdvancementsFolder, "*.xml",
SearchOption.TopDirectoryOnly, out IEnumerable files);
diff --git a/AATool/Data/Objectives/ArmorTrimCriterion.cs b/AATool/Data/Objectives/ArmorTrimCriterion.cs
new file mode 100644
index 00000000..7a7366d0
--- /dev/null
+++ b/AATool/Data/Objectives/ArmorTrimCriterion.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using AATool.Data.Progress;
+using AATool.Utilities;
+
+namespace AATool.Data.Objectives
+{
+ internal class ArmorTrimCriterion : Criterion
+ {
+ public string Recipe { get; private set; }
+ public bool Obtained { get; private set; }
+ public bool Applied => base.CompletedByDesignated();
+
+ public override bool CompletedByDesignated() => this.Obtained || base.CompletedByDesignated();
+ public override bool IsComplete() => this.Obtained || this.Applied;
+
+ private string plainName;
+
+ public ArmorTrimCriterion(XmlNode node, Advancement advancement) : base(node, advancement)
+ {
+ this.Recipe = XmlObject.Attribute(node, "recipe", string.Empty);
+ this.plainName = this.Name;
+ }
+
+ public override void UpdateState(ProgressState progress)
+ {
+ base.UpdateState(progress);
+ Obtained = progress.Recipes.ContainsKey(this.Recipe);
+ //this.Name = Applied ? $"{this.plainName} (Applied)" : this.plainName;
+ //progress.Recipes.TryGetValue();
+ }
+ }
+}
diff --git a/AATool/Data/Objectives/Complex/ArmorTrims.cs b/AATool/Data/Objectives/Complex/ArmorTrims.cs
new file mode 100644
index 00000000..ebb43f2b
--- /dev/null
+++ b/AATool/Data/Objectives/Complex/ArmorTrims.cs
@@ -0,0 +1,151 @@
+using System.Collections.Generic;
+using System.Linq;
+using AATool.Data.Progress;
+
+namespace AATool.Data.Objectives.Complex
+{
+ class ArmorTrims : ComplexObjective
+ {
+ public static readonly List Recipes = new () {
+ //required for all advancements
+ "minecraft:recipes/misc/silence_armor_trim_smithing_template",
+ "minecraft:recipes/misc/wayfinder_armor_trim_smithing_template",
+ "minecraft:recipes/misc/tide_armor_trim_smithing_template",
+ "minecraft:recipes/misc/spire_armor_trim_smithing_template",
+ "minecraft:recipes/misc/vex_armor_trim_smithing_template",
+ "minecraft:recipes/misc/ward_armor_trim_smithing_template",
+ "minecraft:recipes/misc/rib_armor_trim_smithing_template",
+ "minecraft:recipes/misc/snout_armor_trim_smithing_template",
+ //others
+ "minecraft:recipes/misc/raiser_armor_trim_smithing_template",
+ "minecraft:recipes/misc/sentry_armor_trim_smithing_template",
+ "minecraft:recipes/misc/host_armor_trim_smithing_template",
+ "minecraft:recipes/misc/wild_armor_trim_smithing_template",
+ "minecraft:recipes/misc/eye_armor_trim_smithing_template",
+ "minecraft:recipes/misc/shaper_armor_trim_smithing_template",
+ "minecraft:recipes/misc/dune_armor_trim_smithing_template",
+ "minecraft:recipes/misc/coast_armor_trim_smithing_template",
+ "minecraft:recipes/misc/netherite_upgrade_smithing_template",
+ };
+
+ public const string AdvancementId = "minecraft:adventure/trim_with_all_exclusive_armor_patterns";
+ public const string CategoryId = "custom:all_smithing_templates";
+
+ public List Required = new ();
+ public List Remaining = new ();
+ public List Obtained = new ();
+ public List Applied = new ();
+
+ private bool AllObtained => this.Obtained.Count >= Required.Count && Required.Count > 0;
+ private bool AllApplied => this.Applied.Count >= Required.Count && Required.Count > 0;
+ private bool OnLast => this.Remaining.Count is 1;
+
+ public ArmorTrims() : base()
+ {
+ }
+
+ protected override void UpdateAdvancedState(ProgressState progress)
+ {
+ this.Required.Clear();
+ if (!Tracker.TryGetAdvancement(AdvancementId, out Advancement adv) || !adv.HasCriteria)
+ return;
+
+ this.Remaining.Clear();
+ this.Obtained.Clear();
+ this.Applied.Clear();
+ foreach (ArmorTrimCriterion criterion in adv.Criteria.All.Values)
+ {
+ this.Required.Add(criterion.Id);
+ if (criterion.Obtained)
+ this.Obtained.Add(criterion.Id);
+ if (criterion.Applied)
+ this.Applied.Add(criterion.Id);
+ if (!criterion.IsComplete())
+ this.Remaining.Add(criterion.Id);
+ }
+ this.CompletionOverride = adv.IsComplete() || this.AllApplied || this.AllObtained;
+ }
+
+ protected override void ClearAdvancedState()
+ {
+ this.Required.Clear();
+ if (Tracker.TryGetAdvancement(AdvancementId, out Advancement adv) && adv.HasCriteria)
+ {
+ foreach (ArmorTrimCriterion criterion in adv.Criteria.All.Values)
+ this.Required.Add(criterion.Id);
+ }
+
+ this.Remaining.Clear();
+ this.Remaining.AddRange(this.Required);
+ this.Obtained.Clear();
+ this.Applied.Clear();
+ }
+
+ protected override string GetShortStatus() =>
+ $"{this.Obtained.Count}\0/\0{this.Required.Count}";
+
+ protected override string GetLongStatus()
+ {
+ if (this.AllApplied)
+ return "All\0Trims\nApplied";
+
+ if (this.AllObtained)
+ return "Obtained\nAll\0Trims";
+
+ if (this.OnLast)
+ return $"Still\0Needs\n{FriendlyName(this.Remaining.First())}";
+
+ return $"Trims\n{this.Obtained.Count}\0/\0{this.Required.Count}";
+ }
+
+ protected override string GetCurrentIcon()
+ {
+ if (this.OnLast)
+ return IconName(this.Remaining.First());
+ return this.Icon;
+ }
+
+ internal void UpdateDynamicIcon(Time time)
+ {
+ if (this.Remaining.Count > 1)
+ {
+ const float SecondsBetweenSwaps = 5;
+ int ticks = (int)(time.TotalSeconds / SecondsBetweenSwaps);
+ int wrappedIndex = ticks % this.Remaining.Count;
+ this.Icon = IconName(this.Remaining[wrappedIndex]);
+ }
+ else if (this.Remaining.Count is 0 && this.Required.Count > 0)
+ {
+ const float SecondsBetweenSwaps = 5;
+ int ticks = (int)(time.TotalSeconds / SecondsBetweenSwaps);
+ int wrappedIndex = ticks % this.Required.Count;
+ this.Icon = IconName(this.Required[wrappedIndex]);
+ }
+ }
+
+ public static string IconName(string id)
+ {
+ if (string.IsNullOrEmpty(id))
+ return string.Empty;
+
+ string fullName = id.Split(':').Last();
+ string shortName = fullName.Split('_').First();
+ return $"trim_{shortName}";
+ }
+
+ public static string FriendlyName(string id)
+ {
+ if (string.IsNullOrEmpty(id))
+ return string.Empty;
+
+ string fullName = id.Split(':').Last();
+ string shortName = fullName.Split('_').First();
+ if (string.IsNullOrEmpty(shortName))
+ return string.Empty;
+
+ char[] letters = shortName.ToCharArray();
+ letters[0] = char.ToUpper(letters[0]);
+ return new string(letters);
+ }
+ }
+}
diff --git a/AATool/Data/Objectives/Complex/Biomes.cs b/AATool/Data/Objectives/Complex/Biomes.cs
index 86fef084..25eb41a3 100644
--- a/AATool/Data/Objectives/Complex/Biomes.cs
+++ b/AATool/Data/Objectives/Complex/Biomes.cs
@@ -39,7 +39,10 @@ class Biomes : MultipartObjective
protected readonly HashSet RemainingIds = new ();
- public override string AdvancementId => "minecraft:adventure/adventuring_time";
+ public override string AdvancementId => Tracker.CurrentVersion is "1.11"
+ ? "achievement.exploreAllBiomes"
+ : "minecraft:adventure/adventuring_time";
+
public override string Criterion => "Biome";
public override string Action => "Visit";
public override string PastAction => "Visited";
@@ -78,7 +81,7 @@ protected override void BuildRemainingCriteriaList(CriteriaSet criteria)
private bool OnlyGroupRemaining(string[] group, int maxRemaining)
{
- if (Tracker.Category is not AllAdvancements or AllAchievements)
+ if (Tracker.Category is not (AllAdvancements or AllAchievements))
return false;
if (this.RemainingCriteria.Count is 0)
return false;
@@ -161,9 +164,19 @@ protected override string GetCurrentIcon()
}
else
{
- return this.OnLastCriterion
- ? this.LastCriterionIcon
- : this.OldBaseTexture;
+ if (this.OnLastCriterion)
+ return this.LastCriterionIcon;
+
+ if (this.onlyMegaTaigaLeft)
+ return "giant_tree_taiga";
+ if (this.onlyMushroomLeft)
+ return "mushroom_fields";
+ if (this.onlyBadlandsLeft)
+ return "badlands";
+ if (this.onlyBambooLeft)
+ return "bamboo_jungle";
+
+ return this.OldBaseTexture;
}
}
}
diff --git a/AATool/Data/Objectives/Complex/NetheriteUpgrade.cs b/AATool/Data/Objectives/Complex/NetheriteUpgrade.cs
new file mode 100644
index 00000000..81dc9897
--- /dev/null
+++ b/AATool/Data/Objectives/Complex/NetheriteUpgrade.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using AATool.Data.Progress;
+
+namespace AATool.Data.Objectives.Complex
+{
+ internal class NetheriteUpgrade : ComplexObjective
+ {
+ public const string Recipe = "minecraft:recipes/misc/netherite_upgrade_smithing_template";
+
+ public bool Obtained { get; private set; }
+
+ public NetheriteUpgrade() : base()
+ {
+ this.Icon = "upgrade_netherite";
+ }
+
+ protected override void UpdateAdvancedState(ProgressState progress)
+ {
+ this.CompletionOverride = progress.Recipes.ContainsKey(Recipe);
+ }
+
+ protected override void ClearAdvancedState()
+ {
+ }
+
+ protected override string GetLongStatus() => "Netherite Up";
+ protected override string GetShortStatus() => "Netherite Up";
+ }
+}
diff --git a/AATool/Data/Objectives/Complex/PotteryShards.cs b/AATool/Data/Objectives/Complex/PotteryShards.cs
new file mode 100644
index 00000000..8d44bcb8
--- /dev/null
+++ b/AATool/Data/Objectives/Complex/PotteryShards.cs
@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using AATool.Data.Categories;
+using AATool.Data.Progress;
+
+namespace AATool.Data.Objectives.Complex
+{
+ class PotteryShards : ComplexObjective
+ {
+ public const string BrushAdvancement = "minecraft:nether/all_effects";
+ public const string PotAdvancement = "minecraft:husbandry/balanced_diet";
+
+ public const int Required = 4;
+
+ public readonly HashSet All = new() {
+ "minecraft:angler_pottery_sherd",
+ "minecraft:archer_pottery_sherd",
+ "minecraft:arms_up_pottery_sherd",
+ "minecraft:blade_pottery_sherd",
+ "minecraft:brewer_pottery_sherd",
+ "minecraft:burn_pottery_sherd",
+ "minecraft:danger_pottery_sherd",
+ "minecraft:explorer_pottery_sherd",
+ "minecraft:friend_pottery_sherd",
+ "minecraft:heart_pottery_sherd",
+ "minecraft:heartbreak_pottery_sherd",
+ "minecraft:howl_pottery_sherd",
+ "minecraft:miner_pottery_sherd",
+ "minecraft:mourner_pottery_sherd",
+ "minecraft:plenty_pottery_sherd",
+ "minecraft:prize_pottery_sherd",
+ "minecraft:sheaf_pottery_sherd",
+ "minecraft:shelter_pottery_sherd",
+ "minecraft:skull_pottery_sherd",
+ "minecraft:snort_pottery_sherd",
+ };
+
+ public int Obtained { get; private set; }
+
+ private bool advancementsComplete;
+
+ public PotteryShards() : base()
+ {
+ }
+
+ protected override void UpdateAdvancedState(ProgressState progress)
+ {
+ this.Obtained = 0;
+ foreach (string id in All)
+ this.Obtained += GetCount(id, progress);
+
+ this.advancementsComplete = progress.AdvancementCompleted(BrushAdvancement)
+ && progress.AdvancementCompleted(PotAdvancement);
+
+ this.CompletionOverride = this.advancementsComplete || this.Obtained >= Required;
+ }
+
+ private int GetCount(string id, ProgressState progress) =>
+ Math.Max(0, progress.TimesPickedUp(id) - progress.TimesDropped(id));
+
+ protected override void ClearAdvancedState()
+ {
+ this.Obtained = 0;
+ this.advancementsComplete = false;
+ }
+
+ protected override string GetShortStatus()
+ {
+ if (this.Obtained < Required && this.advancementsComplete)
+ return "Done";
+ return $"{this.Obtained}\0/\0{Required} Shards";
+ }
+
+ protected override string GetLongStatus() => GetShortStatus();
+
+ protected override string GetCurrentIcon() => "pottery_shard";
+ }
+}
diff --git a/AATool/Data/Objectives/Complex/SnifferEgg.cs b/AATool/Data/Objectives/Complex/SnifferEgg.cs
new file mode 100644
index 00000000..31affc5a
--- /dev/null
+++ b/AATool/Data/Objectives/Complex/SnifferEgg.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using AATool.Data.Progress;
+
+namespace AATool.Data.Objectives.Complex
+{
+ internal class SnifferEgg : ComplexObjective
+ {
+ public const string ItemId = "minecraft:sniffer_egg";
+
+ public bool Obtained { get; private set; }
+
+ public SnifferEgg() : base()
+ {
+ this.Icon = "obtain_sniffer_egg";
+ }
+
+ protected override void UpdateAdvancedState(ProgressState progress)
+ {
+ this.CompletionOverride = progress.WasPickedUp(ItemId);
+ }
+
+ protected override void ClearAdvancedState()
+ {
+ }
+
+ protected override string GetLongStatus() => "Sniffer Egg";
+ protected override string GetShortStatus() => "Sniffer Egg";
+ }
+}
diff --git a/AATool/Data/Objectives/Complex/WaxOnOff.cs b/AATool/Data/Objectives/Complex/WaxOnOff.cs
new file mode 100644
index 00000000..444eee6b
--- /dev/null
+++ b/AATool/Data/Objectives/Complex/WaxOnOff.cs
@@ -0,0 +1,47 @@
+using AATool.Data.Progress;
+
+namespace AATool.Data.Objectives.Complex
+{
+ public class WaxOnOff : ComplexObjective
+ {
+ private const string WaxOn = "minecraft:husbandry/wax_on";
+ private const string WaxOff = "minecraft:husbandry/wax_off";
+
+ bool waxOnComplete;
+ bool waxOffComplete;
+
+ public WaxOnOff()
+ {
+ this.Icon = "wax_on";
+ }
+
+ protected override void UpdateAdvancedState(ProgressState progress)
+ {
+ this.waxOnComplete = progress.AdvancementCompleted(WaxOn);
+ this.waxOffComplete = progress.AdvancementCompleted(WaxOff);
+ this.CompletionOverride = this.waxOnComplete && this.waxOffComplete;
+ }
+
+ protected override void ClearAdvancedState()
+ {
+ this.waxOnComplete = false;
+ this.waxOffComplete = false;
+ }
+
+ protected override string GetLongStatus() => this.GetShortStatus();
+
+ protected override string GetShortStatus()
+ {
+ if (this.waxOnComplete && !this.waxOffComplete)
+ return "Wax Off";
+
+ if (this.waxOffComplete && !this.waxOnComplete)
+ return "Wax On";
+
+ return "Wax On+Off";
+ }
+
+ protected override string GetCurrentIcon()
+ => this.waxOnComplete && !this.waxOffComplete ? "wax_off" : "wax_on";
+ }
+}
diff --git a/AATool/Data/Objectives/ComplexObjectiveManifest.cs b/AATool/Data/Objectives/ComplexObjectiveManifest.cs
index 387b094c..801ff13d 100644
--- a/AATool/Data/Objectives/ComplexObjectiveManifest.cs
+++ b/AATool/Data/Objectives/ComplexObjectiveManifest.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Security.AccessControl;
+using AATool.Data.Objectives.Complex;
using AATool.Data.Progress;
namespace AATool.Data.Objectives
@@ -36,6 +37,8 @@ public void RefreshObjectives()
this.AddPickup("minecraft:azure_bluet", "Azure Bluet", 1);
this.AddPickup("minecraft:rabbit_foot", "Rabbit's Foot", 1);
this.AddPickup("minecraft:fermented_spider_eye", "Fermented Eye", 1);
+ this.AddPickup("minecraft:pottery_sherd", "Pottery Shard", 4);
+ this.AddPickup("minecraft:sniffer_egg", "Sniffer Egg", 1);
}
private void AddPickup(string id, string name, int required)
@@ -48,5 +51,11 @@ public void UpdateState(ProgressState progress)
foreach (ComplexObjective objective in this.AllByName.Values)
objective.UpdateState(progress);
}
+
+ public void UpdateDynamicIcons(Time time)
+ {
+ if (AllByName.TryGetValue(nameof(ArmorTrims).ToLower(), out ComplexObjective trims))
+ (trims as ArmorTrims)?.UpdateDynamicIcon(time);
+ }
}
}
diff --git a/AATool/Data/Objectives/CriteriaSet.cs b/AATool/Data/Objectives/CriteriaSet.cs
index a6425cb5..0bf7f056 100644
--- a/AATool/Data/Objectives/CriteriaSet.cs
+++ b/AATool/Data/Objectives/CriteriaSet.cs
@@ -1,4 +1,5 @@
-using AATool.Data.Progress;
+using AATool.Data.Objectives.Complex;
+using AATool.Data.Progress;
using AATool.Net;
using AATool.Utilities;
using System.Collections.Generic;
@@ -28,7 +29,18 @@ public CriteriaSet(XmlNode node, Advancement owner)
this.ClosestToCompletion = Uuid.Empty;
this.Goal = XmlObject.Attribute(node, "goal", "Completed");
- if (node is not null)
+ if (node is null)
+ return;
+
+ if (this.Owner.Id is ArmorTrims.AdvancementId or ArmorTrims.CategoryId)
+ {
+ foreach (XmlNode criterionNode in node.ChildNodes)
+ {
+ var criterion = new ArmorTrimCriterion(criterionNode, owner);
+ this.All[criterion.Id] = criterion;
+ }
+ }
+ else
{
foreach (XmlNode criterionNode in node.ChildNodes)
{
diff --git a/AATool/Data/Objectives/Criterion.cs b/AATool/Data/Objectives/Criterion.cs
index 497af30a..912ae218 100644
--- a/AATool/Data/Objectives/Criterion.cs
+++ b/AATool/Data/Objectives/Criterion.cs
@@ -14,7 +14,7 @@ public class Criterion : Objective
public Uuid DesignatedPlayer => this.Owner.DesignatedPlayer;
public string OwnerId => this.Owner.Id;
- public bool CompletedByDesignated() => this.CompletedBy(this.DesignatedPlayer);
+ public virtual bool CompletedByDesignated() => this.CompletedBy(this.DesignatedPlayer);
public override bool IsComplete() => this.CompletedByDesignated();
diff --git a/AATool/Paths.cs b/AATool/Paths.cs
index c5e51fdb..ab863f4e 100644
--- a/AATool/Paths.cs
+++ b/AATool/Paths.cs
@@ -69,6 +69,7 @@ public static class System
public static string AdvancementsFolder => Path.Combine(ObjectiveFolder, "advancements/");
public static string AchievementsFile => Path.Combine(ObjectiveFolder, "achievements.xml");
public static string DeathMessagesFile => Path.Combine(ObjectiveFolder, "deaths.xml");
+ public static string ArmorTrimsFile => Path.Combine(ObjectiveFolder, "trims.xml");
public static string PotionsFile => Path.Combine(ObjectiveFolder, "potions.xml");
//file getters
diff --git a/AATool/Properties/AssemblyInfo.cs b/AATool/Properties/AssemblyInfo.cs
index 8fd8a8f7..297eefab 100644
--- a/AATool/Properties/AssemblyInfo.cs
+++ b/AATool/Properties/AssemblyInfo.cs
@@ -33,6 +33,6 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.6.1.0")]
-[assembly: AssemblyFileVersion("1.6.1.0")]
+[assembly: AssemblyVersion("1.6.2.0")]
+[assembly: AssemblyFileVersion("1.6.2.0")]
[assembly: NeutralResourcesLanguage("en")]
diff --git a/AATool/Saves/AdvancementsFolder.cs b/AATool/Saves/AdvancementsFolder.cs
index 00c2bf01..db2f4393 100644
--- a/AATool/Saves/AdvancementsFolder.cs
+++ b/AATool/Saves/AdvancementsFolder.cs
@@ -94,6 +94,13 @@ protected override void Update(JsonStream json, WorldState state, Contribution c
contribution.ObtainedGodApple = true;
}
+ foreach (var recipe in ArmorTrims.Recipes)
+ {
+ //detect collection of armor trims
+ if (this.TryGetCompletionOf(recipe, json, out AdvancementCompletion trim))
+ state.Recipes[recipe] = new Completion(trim.Player, trim.Timestamp);
+ }
+
//detect lapis from chest using lapis block recipe
if (this.TryGetCompletionOf("minecraft:recipes/building_blocks/lapis_block", json, out _))
{
diff --git a/AATool/Tracker.cs b/AATool/Tracker.cs
index cb0a516a..6c52c30e 100644
--- a/AATool/Tracker.cs
+++ b/AATool/Tracker.cs
@@ -254,6 +254,7 @@ public static bool TrySetCategory(string category)
"alldeaths" => new AllDeaths(),
"halfdeaths" => new HalfDeaths(),
"allportals" => new AllPortals(),
+ "allsmithingtemplates" => new AllSmithingTemplates(),
_ => throw new ArgumentException($"Category not supported: \"{category}\"."),
};
@@ -320,6 +321,7 @@ public static void Update(Time time)
UpdateFileSystemWatchers();
}
Category.Update();
+ ComplexObjectives.UpdateDynamicIcons(time);
}
private static void UpdateFileSystemWatchers()
diff --git a/AATool/UI/Controls/UIArmorTrimCriterion.cs b/AATool/UI/Controls/UIArmorTrimCriterion.cs
new file mode 100644
index 00000000..39a45eaf
--- /dev/null
+++ b/AATool/UI/Controls/UIArmorTrimCriterion.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using AATool.Data.Objectives;
+using AATool.UI.Screens;
+using Microsoft.Xna.Framework;
+
+namespace AATool.UI.Controls
+{
+ internal class UIArmorTrimCriterion : UICriterion
+ {
+ UIPicture smithingIcon;
+
+ float smithingBrightness;
+
+ public UIArmorTrimCriterion() : base()
+ {
+ }
+
+ public override void InitializeThis(UIScreen screen)
+ {
+ base.InitializeThis(screen);
+ smithingIcon = this.First("smithing_icon");
+ }
+
+ protected override void UpdateThis(Time time)
+ {
+ base.UpdateThis(time);
+ if (this.Objective is not ArmorTrimCriterion trim)
+ return;
+
+ float smithingTarget = trim.Applied ? 1f : 0;
+ this.smithingBrightness = MathHelper.Lerp(this.smithingBrightness, smithingTarget, (float)(10 * time.Delta));
+ this.smithingIcon?.SetTint(Color.White * this.smithingBrightness);
+ }
+ }
+}
diff --git a/AATool/UI/Controls/UIBlockPopup.cs b/AATool/UI/Controls/UIBlockPopup.cs
index 476bdb5f..31810fc7 100644
--- a/AATool/UI/Controls/UIBlockPopup.cs
+++ b/AATool/UI/Controls/UIBlockPopup.cs
@@ -74,7 +74,9 @@ public void Finalize(Time time)
x = MathHelper.Clamp(x, -32, this.Root().Width - 32);
this.MoveTo(new Point(x, nextLocation.Y + 8));
this.previousLocation = nextLocation;
+
}
+ this.preview?.SetBlockOpacity(1f);
}
public override void InitializeThis(UIScreen screen)
diff --git a/AATool/UI/Controls/UIBlockTile.cs b/AATool/UI/Controls/UIBlockTile.cs
index 1ab5d444..cf2d84ce 100644
--- a/AATool/UI/Controls/UIBlockTile.cs
+++ b/AATool/UI/Controls/UIBlockTile.cs
@@ -72,6 +72,7 @@ public UIBlockTile(int scale = 2) : this()
}
public void SetActiveState(bool isActive) => this.IsActive = isActive;
+ public void SetBlockOpacity(float value) => this.opacityBlock = value;
public bool TryToggleHighlight()
{
diff --git a/AATool/UI/Controls/UICriteriaGroup.cs b/AATool/UI/Controls/UICriteriaGroup.cs
index e20dc624..e480c590 100644
--- a/AATool/UI/Controls/UICriteriaGroup.cs
+++ b/AATool/UI/Controls/UICriteriaGroup.cs
@@ -5,6 +5,7 @@
using AATool.Configuration;
using AATool.Data.Categories;
using AATool.Data.Objectives;
+using AATool.Data.Objectives.Complex;
using AATool.Net;
using AATool.UI.Screens;
using Microsoft.Xna.Framework;
@@ -32,6 +33,7 @@ class UICriteriaGroup : UIPanel
private int playersLoggedIn;
private bool largePlayers;
private int cellWidth;
+ private int spacerCells;
public UICriteriaGroup()
{
@@ -107,13 +109,23 @@ private void PopulateCriteria()
if (!Config.Main.UseCompactStyling && !Config.Main.UseVerticalStyling)
this.criteriaPanel.AddControl(spacer);
+ for (int i = 0; i < this.spacerCells; i++)
+ {
+ this.criteriaPanel.AddControl(new UIPanel() {
+ FlexWidth = new(this.cellWidth),
+ FlexHeight = new(16),
+ DrawMode = DrawMode.None,
+ });
+ }
+
foreach (KeyValuePair criterion in this.advancement.Criteria.All)
{
- var crit = new UICriterion {
- HorizontalAlign = HorizontalAlign.Left,
- };
+ UICriterion crit = advancement.Id is ArmorTrims.AdvancementId
+ ? new UIArmorTrimCriterion { HorizontalAlign = HorizontalAlign.Left }
+ : new UICriterion { HorizontalAlign = HorizontalAlign.Left };
+
crit.SetObjective(criterion.Value);
- if (Config.Main.UseVerticalStyling && this.cellWidth is not 0)
+ if (this.cellWidth is not 0)
{
crit.FlexWidth = new (this.cellWidth);
}
@@ -360,6 +372,7 @@ public override void ReadNode(XmlNode node)
base.ReadNode(node);
this.advancementName = Attribute(node, "advancement", string.Empty);
this.cellWidth = Attribute(node, "cell_width", 0);
+ this.spacerCells = Attribute(node, "spacers", 0);
}
}
}
diff --git a/AATool/UI/Controls/UILeaderboard.cs b/AATool/UI/Controls/UILeaderboard.cs
index c6aa6997..683e0e08 100644
--- a/AATool/UI/Controls/UILeaderboard.cs
+++ b/AATool/UI/Controls/UILeaderboard.cs
@@ -315,11 +315,11 @@ private void PopuplateMultiboard()
if (i < Leaderboard.ListOfMostRecords.Count - 1)
mostRecordsList += ", ";
}
+ //UIAvatar allBlocks20 = this.Root().First("ab_wr_1.20_avatar");
+ //allBlocks20.SetBadge(new RankBadge(1, "All Blocks", "1.20", false));
- UIAvatar avatar = this.Root().First("most_records_avatar");
- avatar?.SetPlayer(Leaderboard.RunnerWithMostWorldRecords);
- //avatar?.RegisterOnLeaderboard(this.board);
- //avatar?.RefreshBadge();
+ UIAvatar mostRecords = this.Root().First("most_records_avatar");
+ mostRecords?.SetPlayer(Leaderboard.RunnerWithMostWorldRecords);
this.Root().First("most_records_runner")?.SetText(Leaderboard.RunnerWithMostWorldRecords);
this.Root().First("most_records_list")?.SetText(mostRecordsList);
diff --git a/AATool/UI/Controls/UIObjectiveFrame.cs b/AATool/UI/Controls/UIObjectiveFrame.cs
index 9b305a8d..14dd519e 100644
--- a/AATool/UI/Controls/UIObjectiveFrame.cs
+++ b/AATool/UI/Controls/UIObjectiveFrame.cs
@@ -29,7 +29,7 @@ public class UIObjectiveFrame : UIObjectiveControl
};
private static Color ActiveTint = Color.White;
private static Color InactiveTint = Color.Gray * 0.25f;
- private static Color InactiveIconTint = ColorHelper.Fade(Color.DarkGray, 0.1f);
+ private static Color InactiveIconTint = ColorHelper.Fade(Color.DarkGray, 0.25f);
public bool IsActive { get; private set; }
public float OverlayCoverPosition { get; set; }
@@ -231,7 +231,7 @@ private void UpdateAppearance(bool forceUpdate = false)
{
if (this.onMainScreen)
{
- this.Label?.SetTextColor(this.IsActive ? Config.Main.TextColor : Config.Main.TextColor.Value * 0.4f);
+ this.Label?.SetTextColor(this.IsActive ? Config.Main.TextColor : Config.Main.TextColor.Value * 0.6f);
}
else
{
diff --git a/AATool/assets/objectives/1.17/advancements/adventure.xml b/AATool/assets/objectives/1.17/advancements/adventure.xml
index c58e34ab..b7d82ec4 100644
--- a/AATool/assets/objectives/1.17/advancements/adventure.xml
+++ b/AATool/assets/objectives/1.17/advancements/adventure.xml
@@ -12,9 +12,9 @@
-
-
-
+
+
+
diff --git a/AATool/assets/objectives/1.17/advancements/husbandry.xml b/AATool/assets/objectives/1.17/advancements/husbandry.xml
index 99b5efbd..7fdcce9d 100644
--- a/AATool/assets/objectives/1.17/advancements/husbandry.xml
+++ b/AATool/assets/objectives/1.17/advancements/husbandry.xml
@@ -13,7 +13,7 @@
-
+
diff --git a/AATool/assets/objectives/1.18/advancements/adventure.xml b/AATool/assets/objectives/1.18/advancements/adventure.xml
index c68c09a8..c60d0eda 100644
--- a/AATool/assets/objectives/1.18/advancements/adventure.xml
+++ b/AATool/assets/objectives/1.18/advancements/adventure.xml
@@ -17,9 +17,9 @@
-
-
-
+
+
+
diff --git a/AATool/assets/objectives/1.18/advancements/husbandry.xml b/AATool/assets/objectives/1.18/advancements/husbandry.xml
index 898c37fb..2d32e0a4 100644
--- a/AATool/assets/objectives/1.18/advancements/husbandry.xml
+++ b/AATool/assets/objectives/1.18/advancements/husbandry.xml
@@ -13,7 +13,7 @@
-
+
diff --git a/AATool/assets/objectives/1.19/advancements/adventure.xml b/AATool/assets/objectives/1.19/advancements/adventure.xml
index 9869cdc1..296ed22c 100644
--- a/AATool/assets/objectives/1.19/advancements/adventure.xml
+++ b/AATool/assets/objectives/1.19/advancements/adventure.xml
@@ -17,9 +17,9 @@
-
-
-
+
+
+
diff --git a/AATool/assets/objectives/1.19/advancements/husbandry.xml b/AATool/assets/objectives/1.19/advancements/husbandry.xml
index 9a1957fd..c1b4ee10 100644
--- a/AATool/assets/objectives/1.19/advancements/husbandry.xml
+++ b/AATool/assets/objectives/1.19/advancements/husbandry.xml
@@ -13,7 +13,7 @@
-
+
diff --git a/AATool/assets/objectives/1.20 Snapshot/advancements/adventure.xml b/AATool/assets/objectives/1.20 Snapshot/advancements/adventure.xml
index 2c19ecda..fa333c44 100644
--- a/AATool/assets/objectives/1.20 Snapshot/advancements/adventure.xml
+++ b/AATool/assets/objectives/1.20 Snapshot/advancements/adventure.xml
@@ -4,22 +4,47 @@
+
-
+
-
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AATool/assets/objectives/1.20 Snapshot/advancements/husbandry.xml b/AATool/assets/objectives/1.20 Snapshot/advancements/husbandry.xml
index 33356be3..c9a60eca 100644
--- a/AATool/assets/objectives/1.20 Snapshot/advancements/husbandry.xml
+++ b/AATool/assets/objectives/1.20 Snapshot/advancements/husbandry.xml
@@ -9,11 +9,18 @@
-
-
+
+
+
+
+
+
+
+
+
@@ -103,9 +110,6 @@
-
-
-
diff --git a/AATool/assets/objectives/1.20 Snapshot/blocks.xml b/AATool/assets/objectives/1.20 Snapshot/blocks.xml
index 5b89e78e..8b36c4dc 100644
--- a/AATool/assets/objectives/1.20 Snapshot/blocks.xml
+++ b/AATool/assets/objectives/1.20 Snapshot/blocks.xml
@@ -206,7 +206,6 @@
-
@@ -372,7 +371,7 @@
-
+
@@ -593,7 +592,7 @@
-
+
@@ -607,7 +606,7 @@
-
+
@@ -700,16 +699,20 @@
-
+
-
+
+
+
+
+
diff --git a/AATool/assets/objectives/1.20 Snapshot/trims.xml b/AATool/assets/objectives/1.20 Snapshot/trims.xml
new file mode 100644
index 00000000..1ca50f71
--- /dev/null
+++ b/AATool/assets/objectives/1.20 Snapshot/trims.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AATool/assets/sprites/ab_guide/all_heads_1.20$4x4x30.png b/AATool/assets/sprites/ab_guide/all_heads_1.20$4x4x30.png
new file mode 100644
index 00000000..e5b3ae81
Binary files /dev/null and b/AATool/assets/sprites/ab_guide/all_heads_1.20$4x4x30.png differ
diff --git a/AATool/assets/sprites/ab_guide/all_suspicious_blocks$2x2x30.png b/AATool/assets/sprites/ab_guide/all_suspicious_blocks$2x2x30.png
new file mode 100644
index 00000000..e0f1a7e6
Binary files /dev/null and b/AATool/assets/sprites/ab_guide/all_suspicious_blocks$2x2x30.png differ
diff --git a/AATool/assets/sprites/ab_guide/frogspawn.png b/AATool/assets/sprites/ab_guide/frogspawn.png
new file mode 100644
index 00000000..a6adac47
Binary files /dev/null and b/AATool/assets/sprites/ab_guide/frogspawn.png differ
diff --git a/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^32$96x24x1.25.png b/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^32$96x24x1.25.png
deleted file mode 100644
index a601b609..00000000
Binary files a/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^32$96x24x1.25.png and /dev/null differ
diff --git a/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^48$152x24x1.png b/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^48$152x24x1.png
deleted file mode 100644
index ea6ae52c..00000000
Binary files a/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^48$152x24x1.png and /dev/null differ
diff --git a/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^48$16x16x1.png b/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^48$16x16x1.png
new file mode 100644
index 00000000..f7849b00
Binary files /dev/null and b/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^48$16x16x1.png differ
diff --git a/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^48$96x24x1.25.png b/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^48$96x24x1.25.png
deleted file mode 100644
index 53205ac1..00000000
Binary files a/AATool/assets/sprites/blocks/sculk/calibrated_sculk_sensor^48$96x24x1.25.png and /dev/null differ
diff --git a/AATool/assets/sprites/blocks/bamboo/chiseled_bookshelf^32.png b/AATool/assets/sprites/blocks/special/chiseled_bookshelf^32.png
similarity index 100%
rename from AATool/assets/sprites/blocks/bamboo/chiseled_bookshelf^32.png
rename to AATool/assets/sprites/blocks/special/chiseled_bookshelf^32.png
diff --git a/AATool/assets/sprites/blocks/bamboo/chiseled_bookshelf^48.png b/AATool/assets/sprites/blocks/special/chiseled_bookshelf^48.png
similarity index 100%
rename from AATool/assets/sprites/blocks/bamboo/chiseled_bookshelf^48.png
rename to AATool/assets/sprites/blocks/special/chiseled_bookshelf^48.png
diff --git a/AATool/assets/sprites/blocks/bamboo/chiseled_bookshelf_full^32.png b/AATool/assets/sprites/blocks/special/chiseled_bookshelf_full^32.png
similarity index 100%
rename from AATool/assets/sprites/blocks/bamboo/chiseled_bookshelf_full^32.png
rename to AATool/assets/sprites/blocks/special/chiseled_bookshelf_full^32.png
diff --git a/AATool/assets/sprites/blocks/bamboo/chiseled_bookshelf_full^48.png b/AATool/assets/sprites/blocks/special/chiseled_bookshelf_full^48.png
similarity index 100%
rename from AATool/assets/sprites/blocks/bamboo/chiseled_bookshelf_full^48.png
rename to AATool/assets/sprites/blocks/special/chiseled_bookshelf_full^48.png
diff --git a/AATool/assets/sprites/blocks/special/smithing_table^48.png b/AATool/assets/sprites/blocks/special/smithing_table^48.png
index e057ebcb..481bba23 100644
Binary files a/AATool/assets/sprites/blocks/special/smithing_table^48.png and b/AATool/assets/sprites/blocks/special/smithing_table^48.png differ
diff --git a/AATool/assets/sprites/global/advancements/adventure/chiseled_bookshelf^32.png b/AATool/assets/sprites/global/advancements/adventure/chiseled_bookshelf^32.png
new file mode 100644
index 00000000..5dac06f5
Binary files /dev/null and b/AATool/assets/sprites/global/advancements/adventure/chiseled_bookshelf^32.png differ
diff --git a/AATool/assets/sprites/global/advancements/adventure/chiseled_bookshelf^48.png b/AATool/assets/sprites/global/advancements/adventure/chiseled_bookshelf^48.png
new file mode 100644
index 00000000..365a8a1a
Binary files /dev/null and b/AATool/assets/sprites/global/advancements/adventure/chiseled_bookshelf^48.png differ
diff --git a/AATool/assets/sprites/global/advancements/adventure/craft_decorated_pot^32.png b/AATool/assets/sprites/global/advancements/adventure/craft_decorated_pot^32.png
new file mode 100644
index 00000000..223d969a
Binary files /dev/null and b/AATool/assets/sprites/global/advancements/adventure/craft_decorated_pot^32.png differ
diff --git a/AATool/assets/sprites/global/advancements/adventure/craft_decorated_pot^48.png b/AATool/assets/sprites/global/advancements/adventure/craft_decorated_pot^48.png
new file mode 100644
index 00000000..79cd0acf
Binary files /dev/null and b/AATool/assets/sprites/global/advancements/adventure/craft_decorated_pot^48.png differ
diff --git a/AATool/assets/sprites/global/advancements/adventure/salvage_sherd.png b/AATool/assets/sprites/global/advancements/adventure/salvage_sherd.png
new file mode 100644
index 00000000..37faf3e4
Binary files /dev/null and b/AATool/assets/sprites/global/advancements/adventure/salvage_sherd.png differ
diff --git a/AATool/assets/sprites/global/advancements/husbandry/feed_snifflet.png b/AATool/assets/sprites/global/advancements/husbandry/feed_snifflet.png
new file mode 100644
index 00000000..69a2ffc0
Binary files /dev/null and b/AATool/assets/sprites/global/advancements/husbandry/feed_snifflet.png differ
diff --git a/AATool/assets/sprites/global/advancements/husbandry/obtain_sniffer_egg.png b/AATool/assets/sprites/global/advancements/husbandry/obtain_sniffer_egg.png
new file mode 100644
index 00000000..727c1993
Binary files /dev/null and b/AATool/assets/sprites/global/advancements/husbandry/obtain_sniffer_egg.png differ
diff --git a/AATool/assets/sprites/global/advancements/husbandry/plant_any_sniffer_seed.png b/AATool/assets/sprites/global/advancements/husbandry/plant_any_sniffer_seed.png
new file mode 100644
index 00000000..9a2fa402
Binary files /dev/null and b/AATool/assets/sprites/global/advancements/husbandry/plant_any_sniffer_seed.png differ
diff --git a/AATool/assets/sprites/global/criteria/biomes/1.19/mangrove_swamp.png b/AATool/assets/sprites/global/criteria/biomes/1.19/mangrove_swamp.png
index 86074268..53836a6d 100644
Binary files a/AATool/assets/sprites/global/criteria/biomes/1.19/mangrove_swamp.png and b/AATool/assets/sprites/global/criteria/biomes/1.19/mangrove_swamp.png differ
diff --git a/AATool/assets/sprites/global/criteria/biomes/cherry_grove.png b/AATool/assets/sprites/global/criteria/biomes/1.20/cherry_grove.png
similarity index 100%
rename from AATool/assets/sprites/global/criteria/biomes/cherry_grove.png
rename to AATool/assets/sprites/global/criteria/biomes/1.20/cherry_grove.png
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_coast.png b/AATool/assets/sprites/global/criteria/trims/trim_coast.png
new file mode 100644
index 00000000..9a055e70
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_coast.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_dune.png b/AATool/assets/sprites/global/criteria/trims/trim_dune.png
new file mode 100644
index 00000000..046f7c30
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_dune.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_eye.png b/AATool/assets/sprites/global/criteria/trims/trim_eye.png
new file mode 100644
index 00000000..b2186f42
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_eye.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_host.png b/AATool/assets/sprites/global/criteria/trims/trim_host.png
new file mode 100644
index 00000000..6bdc74a3
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_host.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_raiser.png b/AATool/assets/sprites/global/criteria/trims/trim_raiser.png
new file mode 100644
index 00000000..804973a6
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_raiser.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_rib.png b/AATool/assets/sprites/global/criteria/trims/trim_rib.png
new file mode 100644
index 00000000..a48f4d66
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_rib.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_sentry.png b/AATool/assets/sprites/global/criteria/trims/trim_sentry.png
new file mode 100644
index 00000000..e00aaad4
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_sentry.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_shaper.png b/AATool/assets/sprites/global/criteria/trims/trim_shaper.png
new file mode 100644
index 00000000..e49b86a2
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_shaper.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_silence.png b/AATool/assets/sprites/global/criteria/trims/trim_silence.png
new file mode 100644
index 00000000..5a1b2ba5
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_silence.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_snout.png b/AATool/assets/sprites/global/criteria/trims/trim_snout.png
new file mode 100644
index 00000000..cae955a9
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_snout.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_spire.png b/AATool/assets/sprites/global/criteria/trims/trim_spire.png
new file mode 100644
index 00000000..6aff46d6
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_spire.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_tide.png b/AATool/assets/sprites/global/criteria/trims/trim_tide.png
new file mode 100644
index 00000000..e532040a
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_tide.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_vex.png b/AATool/assets/sprites/global/criteria/trims/trim_vex.png
new file mode 100644
index 00000000..85421cdf
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_vex.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_ward.png b/AATool/assets/sprites/global/criteria/trims/trim_ward.png
new file mode 100644
index 00000000..ca14b44f
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_ward.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_wayfinder.png b/AATool/assets/sprites/global/criteria/trims/trim_wayfinder.png
new file mode 100644
index 00000000..c21506de
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_wayfinder.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/trim_wild.png b/AATool/assets/sprites/global/criteria/trims/trim_wild.png
new file mode 100644
index 00000000..549ae142
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/trim_wild.png differ
diff --git a/AATool/assets/sprites/global/criteria/trims/upgrade_netherite.png b/AATool/assets/sprites/global/criteria/trims/upgrade_netherite.png
new file mode 100644
index 00000000..226bbbfa
Binary files /dev/null and b/AATool/assets/sprites/global/criteria/trims/upgrade_netherite.png differ
diff --git a/AATool/assets/sprites/global/gui/icons/smithing_applied.png b/AATool/assets/sprites/global/gui/icons/smithing_applied.png
new file mode 100644
index 00000000..503a3864
Binary files /dev/null and b/AATool/assets/sprites/global/gui/icons/smithing_applied.png differ
diff --git a/AATool/assets/sprites/global/gui/icons/smithing_unapplied.png b/AATool/assets/sprites/global/gui/icons/smithing_unapplied.png
new file mode 100644
index 00000000..8e10c41f
Binary files /dev/null and b/AATool/assets/sprites/global/gui/icons/smithing_unapplied.png differ
diff --git a/AATool/assets/sprites/global/items/pottery_shard.png b/AATool/assets/sprites/global/items/pottery_shard.png
new file mode 100644
index 00000000..da5d373d
Binary files /dev/null and b/AATool/assets/sprites/global/items/pottery_shard.png differ
diff --git a/AATool/assets/templates/control_armor_trim_criterion.xml b/AATool/assets/templates/control_armor_trim_criterion.xml
new file mode 100644
index 00000000..00b78381
--- /dev/null
+++ b/AATool/assets/templates/control_armor_trim_criterion.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AATool/assets/views/adventuring_time/1.16/main.xml b/AATool/assets/views/adventuring_time/1.16/main.xml
index 0254d507..448cc093 100644
--- a/AATool/assets/views/adventuring_time/1.16/main.xml
+++ b/AATool/assets/views/adventuring_time/1.16/main.xml
@@ -70,18 +70,22 @@
-
-
+
+
-
-
+
+
+
+
+
+
diff --git a/AATool/assets/views/adventuring_time/1.20 Snapshot/main.xml b/AATool/assets/views/adventuring_time/1.20 Snapshot/main.xml
new file mode 100644
index 00000000..b51514d8
--- /dev/null
+++ b/AATool/assets/views/adventuring_time/1.20 Snapshot/main.xml
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AATool/assets/views/all_advancements/1.17/main_optimized.xml b/AATool/assets/views/all_advancements/1.17/main_optimized.xml
index 16b35bc5..a943e378 100644
--- a/AATool/assets/views/all_advancements/1.17/main_optimized.xml
+++ b/AATool/assets/views/all_advancements/1.17/main_optimized.xml
@@ -66,7 +66,7 @@
-
+
diff --git a/AATool/assets/views/all_advancements/1.18/main_optimized.xml b/AATool/assets/views/all_advancements/1.18/main_optimized.xml
index 90167c95..e2dc312d 100644
--- a/AATool/assets/views/all_advancements/1.18/main_optimized.xml
+++ b/AATool/assets/views/all_advancements/1.18/main_optimized.xml
@@ -58,7 +58,7 @@
-
+
diff --git a/AATool/assets/views/all_advancements/1.19/main_optimized.xml b/AATool/assets/views/all_advancements/1.19/main_optimized.xml
index da9e225a..9114241e 100644
--- a/AATool/assets/views/all_advancements/1.19/main_optimized.xml
+++ b/AATool/assets/views/all_advancements/1.19/main_optimized.xml
@@ -59,10 +59,10 @@
-
-
+
+
@@ -70,7 +70,7 @@
-
+
@@ -103,7 +103,7 @@
-
+
diff --git a/AATool/assets/views/all_advancements/1.20 Snapshot/main_compact.xml b/AATool/assets/views/all_advancements/1.20 Snapshot/main_compact.xml
index 047dc1ad..015fc286 100644
--- a/AATool/assets/views/all_advancements/1.20 Snapshot/main_compact.xml
+++ b/AATool/assets/views/all_advancements/1.20 Snapshot/main_compact.xml
@@ -8,7 +8,7 @@
-
+
@@ -22,10 +22,11 @@
-
-
-
+
+
+
+
@@ -35,7 +36,10 @@
-
+
+
+
+
diff --git a/AATool/assets/views/all_advancements/1.20 Snapshot/main_optimized.xml b/AATool/assets/views/all_advancements/1.20 Snapshot/main_optimized.xml
index 44f13c39..6963169e 100644
--- a/AATool/assets/views/all_advancements/1.20 Snapshot/main_optimized.xml
+++ b/AATool/assets/views/all_advancements/1.20 Snapshot/main_optimized.xml
@@ -8,7 +8,7 @@
-
+
@@ -19,7 +19,7 @@
-
+
@@ -30,8 +30,8 @@
-
+
@@ -41,9 +41,9 @@
-
+
@@ -52,6 +52,9 @@
+
+
+
@@ -59,18 +62,20 @@
-
-
+
+
+
+
-
+
@@ -103,13 +108,32 @@
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AATool/assets/views/all_advancements/1.20 Snapshot/main_relaxed.xml b/AATool/assets/views/all_advancements/1.20 Snapshot/main_relaxed.xml
index 5581732d..53e00348 100644
--- a/AATool/assets/views/all_advancements/1.20 Snapshot/main_relaxed.xml
+++ b/AATool/assets/views/all_advancements/1.20 Snapshot/main_relaxed.xml
@@ -8,7 +8,7 @@
-
+
@@ -26,6 +26,7 @@
+
@@ -33,27 +34,28 @@
-
-
-
+
+
+
+
-
+
-
+
-
-
+
+
@@ -62,8 +64,11 @@
-
-
+
+
+
+
+
diff --git a/AATool/assets/views/all_advancements/1.20 Snapshot/main_vertical.xml b/AATool/assets/views/all_advancements/1.20 Snapshot/main_vertical.xml
index cf629fd0..a5316018 100644
--- a/AATool/assets/views/all_advancements/1.20 Snapshot/main_vertical.xml
+++ b/AATool/assets/views/all_advancements/1.20 Snapshot/main_vertical.xml
@@ -3,7 +3,7 @@
-
+
@@ -39,10 +39,15 @@
-
-
+
+
+
-
+
+
+
+
+
@@ -60,15 +65,16 @@
-
-
+
+
+
-
-
+
+
diff --git a/AATool/assets/views/all_blocks/1.19/help.xml b/AATool/assets/views/all_blocks/1.19/help.xml
index c1acd83b..27c970a6 100644
--- a/AATool/assets/views/all_blocks/1.19/help.xml
+++ b/AATool/assets/views/all_blocks/1.19/help.xml
@@ -669,7 +669,7 @@
-
+
@@ -677,7 +677,11 @@
-
+
+
+
+
+
@@ -692,8 +696,11 @@
-
-
+
+
+
+
+
diff --git a/AATool/assets/views/all_blocks/1.20 Snapshot/help.xml b/AATool/assets/views/all_blocks/1.20 Snapshot/help.xml
index 66d7c7b8..c8a25be6 100644
--- a/AATool/assets/views/all_blocks/1.20 Snapshot/help.xml
+++ b/AATool/assets/views/all_blocks/1.20 Snapshot/help.xml
@@ -60,11 +60,11 @@
-
+
to
-
+
@@ -111,23 +111,23 @@
-
+
-
+
-
-
-
+
+
+
-
- t
+
+
@@ -143,7 +143,7 @@
-
+
@@ -160,7 +160,7 @@
-
+
@@ -551,69 +551,73 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -660,7 +664,7 @@
-
+
@@ -668,7 +672,11 @@
-
+
+
+
+
+
@@ -683,8 +691,11 @@
-
-
+
+
+
+
+
diff --git a/AATool/assets/views/all_blocks/1.20 Snapshot/main.xml b/AATool/assets/views/all_blocks/1.20 Snapshot/main.xml
index 8e092b5a..bcdbdb50 100644
--- a/AATool/assets/views/all_blocks/1.20 Snapshot/main.xml
+++ b/AATool/assets/views/all_blocks/1.20 Snapshot/main.xml
@@ -385,6 +385,14 @@
margin_left="12 * 38" margin_top="9 * 38"
width="8 * 38" height="38"/>
+
+
+
+
@@ -424,13 +432,13 @@
-
+
-
+
diff --git a/AATool/assets/views/all_smithing_templates/1.20 Snapshot/main.xml b/AATool/assets/views/all_smithing_templates/1.20 Snapshot/main.xml
new file mode 100644
index 00000000..41dc883d
--- /dev/null
+++ b/AATool/assets/views/all_smithing_templates/1.20 Snapshot/main.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AATool/assets/views/all_smithing_templates/overlay.xml b/AATool/assets/views/all_smithing_templates/overlay.xml
new file mode 100644
index 00000000..8155f722
--- /dev/null
+++ b/AATool/assets/views/all_smithing_templates/overlay.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file