diff --git a/AATool/AATool.csproj b/AATool/AATool.csproj index 5f7fbf56..3837baee 100644 --- a/AATool/AATool.csproj +++ b/AATool/AATool.csproj @@ -188,6 +188,7 @@ + @@ -515,28 +516,28 @@ PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest @@ -836,6 +837,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -3374,6 +3381,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -3443,6 +3453,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -3584,6 +3597,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -6956,6 +6972,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -6986,6 +7005,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -7112,7 +7134,7 @@ PreserveNewest - + PreserveNewest @@ -7151,16 +7173,16 @@ PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest @@ -7184,10 +7206,10 @@ PreserveNewest - + PreserveNewest - + PreserveNewest diff --git a/AATool/Configuration/PinnedObjectiveSet.cs b/AATool/Configuration/PinnedObjectiveSet.cs index 709ceebd..9de59dca 100644 --- a/AATool/Configuration/PinnedObjectiveSet.cs +++ b/AATool/Configuration/PinnedObjectiveSet.cs @@ -67,7 +67,7 @@ public static List GetAllAvailable() [JsonProperty] public Dictionary> Pinned = new () { - { "All Advancements 1.20 Snapshot", new () { + { "All Advancements 1.20", new () { "AncientDebris", "WitherSkulls", "NautilusShells", "Trident", "EGap", "ArmorTrims", }}, { "All Advancements 1.19", new () { @@ -100,6 +100,9 @@ public static List GetAllAvailable() { "All Achievements 1.11", new () { "GoldBlocks", "WitherSkulls", "Biomes", "EGap", }}, + { "All Blocks 1.20", new () { + "AncientDebris", "DeepslateEmerald", "WitherSkulls", "ShulkerShells", "NautilusShells", "Trident", + }}, { "All Blocks 1.19", new () { "AncientDebris", "DeepslateEmerald", "WitherSkulls", "ShulkerShells", "NautilusShells", "Trident", }}, diff --git a/AATool/Data/Categories/AdventuringTime.cs b/AATool/Data/Categories/AdventuringTime.cs index 0aabd23c..f1c2248f 100644 --- a/AATool/Data/Categories/AdventuringTime.cs +++ b/AATool/Data/Categories/AdventuringTime.cs @@ -8,7 +8,7 @@ public class AdventuringTime : SingleAdvancement private const string Id = "minecraft:adventure/adventuring_time"; public static readonly List SupportedVersions = new () { - "1.20 Snapshot", + "1.20", "1.19", "1.18", "1.16", diff --git a/AATool/Data/Categories/AllAdvancements.cs b/AATool/Data/Categories/AllAdvancements.cs index 81be01c5..69f794af 100644 --- a/AATool/Data/Categories/AllAdvancements.cs +++ b/AATool/Data/Categories/AllAdvancements.cs @@ -6,7 +6,7 @@ namespace AATool.Data.Categories public class AllAdvancements : Category { public static readonly List SupportedVersions = new () { - "1.20 Snapshot", + "1.20", "1.19", "1.18", "1.17", diff --git a/AATool/Data/Categories/AllBlocks.cs b/AATool/Data/Categories/AllBlocks.cs index ac739f4d..0391253c 100644 --- a/AATool/Data/Categories/AllBlocks.cs +++ b/AATool/Data/Categories/AllBlocks.cs @@ -1,6 +1,8 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Text; +using System.Threading; using AATool.Data.Objectives; using AATool.Graphics; using AATool.Net; @@ -14,11 +16,14 @@ public class AllBlocks : Category public const string HelpTextureSet = "ab_guide"; public static readonly List SupportedVersions = new () { + "1.20", "1.19", "1.18", "1.16", }; + private static bool WritingChecklistFile = false; + public override IEnumerable GetSupportedVersions() => SupportedVersions; public override IEnumerable GetOverlayObjectives() => Tracker.Blocks.All.Values; @@ -134,31 +139,46 @@ public void SaveChecklist() this.BlocksHighlightedCount = 0; this.BlocksConfirmedCount = 0; - string path = Paths.System.BlockChecklistFile(ActiveInstance.Number, Tracker.WorldName); - try + var list = new StringBuilder(); + foreach (Block block in Tracker.Blocks.All.Values) { - Directory.CreateDirectory(Paths.System.BlockChecklistsFolder); - using (StreamWriter file = File.CreateText(path)) + if (block.Highlighted) { - foreach (Block block in Tracker.Blocks.All.Values) - { - if (block.Highlighted) - { - file.WriteLine(block.Id); - - //update counts - if (block.IsComplete()) - this.BlocksConfirmedCount++; - else - this.BlocksHighlightedCount++; - } - } + list.AppendLine(block.Id); + + //update counts + if (block.IsComplete()) + this.BlocksConfirmedCount++; + else + this.BlocksHighlightedCount++; } } - catch - { - } + TryWriteChecklist(list.ToString()); + } + + private void TryWriteChecklist(string list) + { + if (WritingChecklistFile) + return; + + WritingChecklistFile = true; + new Thread(() => { + try + { + string path = Paths.System.BlockChecklistFile(ActiveInstance.Number, Tracker.WorldName); + Directory.CreateDirectory(Paths.System.BlockChecklistsFolder); + using (StreamWriter file = File.CreateText(path)) + file.Write(list); + } + catch + { + } + finally + { + WritingChecklistFile = false; + } + }).Start(); } private void TryLoadChecklist() diff --git a/AATool/Data/Credits.cs b/AATool/Data/Credits.cs index 604eb007..5d18024b 100644 --- a/AATool/Data/Credits.cs +++ b/AATool/Data/Credits.cs @@ -69,6 +69,7 @@ public static class Credits new (NetheriteTier, "Deadpool", new Uuid("899c63ac-6590-46c0-b77c-4dae1543f707")), new (NetheriteTier, "merpmerp", new Uuid("fc357f37-ebbb-4687-971f-df8016b41a6f")), new (NetheriteTier, "Oliver", new Uuid("6174765b-7158-4d18-af89-4692b2704ae8")), + new (NetheriteTier, "DCMii", new Uuid("3d71114e-4d3d-469b-8a2c-2aeea4df1e86")), new (DiamondTier, "NiceTwice", new Uuid("e43dad54-4b24-4da9-b690-a12fdc8626dc")), new (DiamondTier, "Cube1337x", new Uuid("1ae14cb9-6a2f-4357-a71e-fac6f7012b59")), diff --git a/AATool/Data/Objectives/Complex/Trident.cs b/AATool/Data/Objectives/Complex/Trident.cs index 6d36057a..9ff0f362 100644 --- a/AATool/Data/Objectives/Complex/Trident.cs +++ b/AATool/Data/Objectives/Complex/Trident.cs @@ -11,6 +11,7 @@ public class Trident : ComplexObjective private const string VVF = "minecraft:adventure/very_very_frightening"; private const string Surge = "minecraft:adventure/lightning_rod_with_villager_no_fire"; + private static readonly Version PiglinHeadAdded = new ("1.20"); private static readonly Version AncientCitySkeletonSkulls = new ("1.19"); private static readonly Version SurgeProtectorAdded = new ("1.17"); @@ -20,6 +21,7 @@ public class Trident : ComplexObjective private bool surgeDone; private bool ignoreSurge; + private bool piglinHead; private bool zombieHead; private bool creeperHead; private bool skeletonSkull; @@ -43,6 +45,9 @@ protected override void UpdateAdvancedState(ProgressState progress) bool ancientCitiesExist = Version.TryParse(Tracker.Category.CurrentVersion, out Version current) && current >= AncientCitySkeletonSkulls; + bool piglinHeadRequired = current is not null + && current >= PiglinHeadAdded; + this.zombieHead = progress.WasUsed("minecraft:zombie_head") || progress.WasPickedUp("minecraft:zombie_head"); @@ -52,7 +57,13 @@ protected override void UpdateAdvancedState(ProgressState progress) this.skeletonSkull = progress.WasUsed("minecraft:skeleton_skull") || progress.WasPickedUp("minecraft:skeleton_skull") || ancientCitiesExist; + this.piglinHead = progress.WasUsed("minecraft:piglin_head") + | progress.WasPickedUp("minecraft:piglin_head"); + this.doneWithHeads = this.zombieHead && this.creeperHead && this.skeletonSkull; + if (piglinHeadRequired) + this.doneWithHeads &= this.piglinHead; + this.CompletionOverride |= this.doneWithHeads; } else @@ -135,8 +146,11 @@ protected override string GetCurrentIcon() { if (Tracker.Category is AllBlocks) { + bool piglinHead = Version.TryParse(Tracker.Category.CurrentVersion, out Version current) + && current >= PiglinHeadAdded; + return this.doneWithHeads - ? "trident_and_heads" + ? (piglinHead ? "trident_and_heads_1.20" : "trident_and_heads") : "trident"; } diff --git a/AATool/Data/Speedrunning/Leaderboard.cs b/AATool/Data/Speedrunning/Leaderboard.cs index aaf2ae95..1088d57f 100644 --- a/AATool/Data/Speedrunning/Leaderboard.cs +++ b/AATool/Data/Speedrunning/Leaderboard.cs @@ -25,18 +25,22 @@ public sealed class Leaderboard public static string RunnerWithMostWorldRecords { get; private set; } = string.Empty; public static LeaderboardSheet History { get; private set; } - public static string RsgRunner { get; private set; } - public static TimeSpan RsgInGameTime { get; private set; } - public static TimeSpan RsgRealTime { get; private set; } + public static string AnyRsgRunner { get; private set; } + public static TimeSpan AnyRsgInGameTime { get; private set; } + public static TimeSpan AnyRsgRealTime { get; private set; } - public static string SsgRunner { get; private set; } - public static TimeSpan SsgInGameTime { get; private set; } - public static TimeSpan SsgRealTime { get; private set; } + public static string AnySsgRunner { get; private set; } + public static TimeSpan AnySsgInGameTime { get; private set; } + public static TimeSpan AnySsgRealTime { get; private set; } + + public static string AASsgRunner { get; private set; } + public static TimeSpan AASsgInGameTime { get; private set; } + public static TimeSpan AASsgRealTime { get; private set; } public static readonly TimeZoneInfo TimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); - public static readonly string[] AAVersions = { "1.19", "1.18", "1.17", "1.16", "1.15", "1.14", "1.13", "1.12", "1.11", "1.6" }; + public static readonly string[] AAVersions = { "1.20", "1.19", "1.18", "1.17", "1.16", "1.15", "1.14", "1.13", "1.12", "1.11", "1.6" }; public string Category { get; private set; } public string Version { get; private set; } @@ -58,8 +62,9 @@ public static void Initialize() { foreach (string version in AAVersions) TryLoadCached("All Advancements", version, out _); - TryLoadCachedAnyPercent(true, "1.16", out _); - TryLoadCachedAnyPercent(false, "1.16", out _); + TryLoadCachedSpeedrunDotComRecord(true, false, "1.16", out _); + TryLoadCachedSpeedrunDotComRecord(false, false, "1.16", out _); + TryLoadCachedSpeedrunDotComRecord(false, true, "1.16", out _); UpdateMostWorldRecords(); } @@ -218,8 +223,10 @@ public static bool SyncRecords(string sheetId, string pageId, string csv) versions = new() { "1.18" }; else if (pageId is Paths.Web.ABPage19) versions = new() { "1.19" }; + else if (pageId is Paths.Web.ABPage20) + versions = new() { "1.20" }; else - versions = new () { "1.19", "1.18", "1.17", "1.15", "1.14", "1.13", "1.12", "1.11", "1.6" }; + versions = new () { "1.20", "1.19", "1.18", "1.17", "1.15", "1.14", "1.13", "1.12", "1.11", "1.6" }; //parse all the leaderboards foreach (string version in versions) @@ -253,7 +260,7 @@ public static bool SyncNicknames(string csv) return NickNamesLoaded; } - public static bool SyncAnyPercentRecord(string jsonString, bool rsg) + public static bool SyncSpeedrunDotComRecord(string jsonString, bool rsg, bool aa) { try { @@ -273,15 +280,21 @@ public static bool SyncAnyPercentRecord(string jsonString, bool rsg) if (rsg) { - RsgRunner = runner; - RsgInGameTime = igt; - RsgRealTime = rta; + AnyRsgRunner = runner; + AnyRsgInGameTime = igt; + AnyRsgRealTime = rta; + } + else if (aa) + { + AASsgRunner = runner; + AASsgInGameTime = igt; + AASsgRealTime = rta; } else { - SsgRunner = runner; - SsgInGameTime = igt; - SsgRealTime = rta; + AnySsgRunner = runner; + AnySsgInGameTime = igt; + AnySsgRealTime = rta; } return true; } @@ -308,14 +321,14 @@ public static string GetPlace(int rank) } } - public static void SaveAnyPercentRecordToCache(string jsonString, bool rsg) + public static void SaveSpeedrunDotComRecordToCache(string jsonString, bool rsg, bool aa) { try { //cache leaderboard so it loads instantly next launch //overwrite to keep leaderboard up to date Directory.CreateDirectory(Paths.System.LeaderboardsFolder); - string path = Paths.System.AnyPercentRecordFile(rsg, "1.16"); + string path = Paths.System.SpeedrunDotComRecordFile(rsg, aa, "1.16"); File.WriteAllText(path, jsonString); } catch @@ -363,16 +376,16 @@ private static bool TryLoadCached(string category, string version, out Leaderboa return leaderboard is not null; } - private static bool TryLoadCachedAnyPercent(bool rsg, string version, out string jsonString) + private static bool TryLoadCachedSpeedrunDotComRecord(bool rsg, bool aa, string version, out string jsonString) { jsonString = string.Empty; - string leaderboardFile = Paths.System.AnyPercentRecordFile(rsg, version); + string leaderboardFile = Paths.System.SpeedrunDotComRecordFile(rsg, aa, version); if (File.Exists(leaderboardFile)) { try { jsonString = File.ReadAllText(leaderboardFile); - SyncAnyPercentRecord(jsonString, rsg); + SyncSpeedrunDotComRecord(jsonString, rsg, aa); } catch { @@ -388,29 +401,33 @@ private static void UpdateMostWorldRecords() foreach (string version in AAVersions) { if (!TryGetWorldRecord("All Advancements", version, out Run wr)) - return; + continue; if (!recordHolders.TryGetValue(wr.Runner, out List records)) recordHolders[wr.Runner] = records = new List(); records.Add(wr); } + Version mostLatestVersion = default; int mostRecordsCount = 0; foreach (KeyValuePair> recordHolder in recordHolders) { - bool foundNew = recordHolder.Value.Count > mostRecordsCount - || (recordHolder.Value.Count == mostRecordsCount && recordHolder.Value.LastOrDefault().GameVersion > mostLatestVersion); - - if (foundNew) + int count = recordHolder.Value.Count; + Run newestVersion = recordHolder.Value.FirstOrDefault(); + + bool foundNewLeader = count > mostRecordsCount + || (count == mostRecordsCount && newestVersion.GameVersion > mostLatestVersion); + + if (foundNewLeader) { - mostRecordsCount = recordHolder.Value.Count; - RunnerWithMostWorldRecords = recordHolder.Value.LastOrDefault().Runner; - mostLatestVersion = recordHolder.Value.LastOrDefault().GameVersion; + mostRecordsCount = count; + RunnerWithMostWorldRecords = newestVersion.Runner; + mostLatestVersion = newestVersion.GameVersion; } } ListOfMostRecords.Clear(); - foreach (Run run in recordHolders[RunnerWithMostWorldRecords]) - ListOfMostRecords.Add(run); + if (recordHolders.TryGetValue(RunnerWithMostWorldRecords, out List runs)) + ListOfMostRecords.AddRange(runs); /* UIAvatar avatar = this.Root().First("most_records_avatar"); diff --git a/AATool/Net/Requests/AASsgRequest.cs b/AATool/Net/Requests/AASsgRequest.cs new file mode 100644 index 00000000..6c0c7c8c --- /dev/null +++ b/AATool/Net/Requests/AASsgRequest.cs @@ -0,0 +1,64 @@ +using System; +using System.Net.Http; +using System.Threading.Tasks; +using AATool.Data.Speedrunning; + +namespace AATool.Net.Requests +{ + public sealed class AASsgRequest : NetRequest + { + public const string SetSeed = "SSG"; + + public AASsgRequest() : base (Paths.Web.AASsgRecord) + { + } + + public override async Task DownloadAsync() + { + Debug.Log(Debug.RequestSection, $"Requested AA SSG (1.16) WR from speedrun.com"); + this.BeginTiming(); + + using var client = new HttpClient() { + Timeout = TimeSpan.FromMilliseconds(Protocol.Requests.TimeoutMs) + }; + try + { + //get minecraft name and add to cache + string response = await client.GetStringAsync(this.Url); + this.EndTiming(); + return this.HandleResponse(response); + } + catch (OperationCanceledException) + { + Debug.Log(Debug.RequestSection, $"-- AA SSG (1.16) WR request cancelled"); + //request canceled, nothing left to do here + } + catch (HttpRequestException e) + { + Debug.Log(Debug.RequestSection, $"-- AA SSG (1.16) WR request failed: {e.Message}"); + //error getting response, safely move on + } + this.EndTiming(); + return false; + } + + private bool HandleResponse(string response) + { + response = response?.Trim(); + if (string.IsNullOrEmpty(response)) + return false; + + if (Leaderboard.SyncSpeedrunDotComRecord(response, false, true)) + { + Leaderboard.SaveSpeedrunDotComRecordToCache(response, false, true); + Debug.Log(Debug.RequestSection, $"{Incoming} Received AA SSG (1.16) WR from speedrun.com"); + return true; + } + else + { + Debug.Log(Debug.RequestSection, $"-- Received invalid Any% RSG (1.16) WR data"); + return false; + } + } + } +} diff --git a/AATool/Net/Requests/AnyRsgRequest.cs b/AATool/Net/Requests/AnyRsgRequest.cs index 5acd03ea..943aaa0d 100644 --- a/AATool/Net/Requests/AnyRsgRequest.cs +++ b/AATool/Net/Requests/AnyRsgRequest.cs @@ -52,9 +52,9 @@ private bool HandleResponse(string response) if (string.IsNullOrEmpty(response)) return false; - if (Leaderboard.SyncAnyPercentRecord(response, this.subCategory is RandomSeed)) + if (Leaderboard.SyncSpeedrunDotComRecord(response, this.subCategory is RandomSeed, false)) { - Leaderboard.SaveAnyPercentRecordToCache(response, this.subCategory is RandomSeed); + Leaderboard.SaveSpeedrunDotComRecordToCache(response, this.subCategory is RandomSeed, false); Debug.Log(Debug.RequestSection, $"{Incoming} Received Any% {this.subCategory} (1.16) WR from speedrun.com"); return true; } diff --git a/AATool/Paths.cs b/AATool/Paths.cs index ab863f4e..2cf051c2 100644 --- a/AATool/Paths.cs +++ b/AATool/Paths.cs @@ -86,8 +86,11 @@ public static string BlockChecklistFile(int instance, string worldName) : Path.Combine(BlockChecklistsFolder, $"instance_{instance}-{worldName}.txt"); } - public static string AnyPercentRecordFile(bool rsg, string version) + public static string SpeedrunDotComRecordFile(bool rsg, bool aa, string version) { + if (aa) + return Path.Combine(LeaderboardsFolder, $"aa_wr_ssg_{version}.txt"); + return rsg ? Path.Combine(LeaderboardsFolder, $"any_percent_wr_rsg_{version}.txt") : Path.Combine(LeaderboardsFolder, $"any_percent_wr_ssg_{version}.txt"); @@ -142,6 +145,7 @@ public static class Web public const string AAPageOthers = "1283472797"; public const string ABSheet = "1RnN6lE3yi5S_5PBuxMXdWNvN3HayP3054M3Qud_p9BU"; + public const string ABPage20 = "1664598957"; public const string ABPage19 = "1912774860"; public const string ABPage18 = "1706556435"; public const string ABPage16 = "1572184167"; @@ -151,6 +155,7 @@ public static class Web public const string AnyRsgRecord = "https://www.speedrun.com/api/v1/leaderboards/j1npme6p/category/mkeyl926?top=1&embed=players&var-jlzkwql2=mln68v0q&var-r8rg67rn=21d4zvp1"; public const string AnySsgRecord = "https://www.speedrun.com/api/v1/leaderboards/j1npme6p/category/mkeyl926?top=1&embed=players&var-wl33kewl=4qye4731&var-r8rg67rn=klrzpjo1"; + public const string AASsgRecord = "https://www.speedrun.com/api/v1/leaderboards/j1npme6p/category/xk9gz16d?top=1&embed=players&var-38do09zl=5q8rd731&var-r8rg67rn=klrzpjo1"; public static string GetUuidUrl(string name) => $"https://minecraft-api.com/api/uuid/{name}"; diff --git a/AATool/Properties/AssemblyInfo.cs b/AATool/Properties/AssemblyInfo.cs index 297eefab..c0c8611b 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.2.0")] -[assembly: AssemblyFileVersion("1.6.2.0")] +[assembly: AssemblyVersion("1.6.3.0")] +[assembly: AssemblyFileVersion("1.6.3.0")] [assembly: NeutralResourcesLanguage("en")] diff --git a/AATool/Saves/AchievementsFolder.cs b/AATool/Saves/AchievementsFolder.cs index 89c3d21d..e1b2bf9f 100644 --- a/AATool/Saves/AchievementsFolder.cs +++ b/AATool/Saves/AchievementsFolder.cs @@ -73,17 +73,16 @@ protected override void Update(JsonStream json, WorldState state, Contribution c { if (IsCompleted(achievement.Id, json)) { - state.Advancements.Add(achievement.Id, new Completion(json.Player, default)); - contribution.Advancements.Add(achievement.Id, new Completion(json.Player, default)); + state.Advancements[achievement.Id] = new Completion(json.Player, default); + contribution.Advancements[achievement.Id] = new Completion(json.Player, default); } if (achievement.HasCriteria) { foreach (string criterion in this.GetCompletedCriteria(achievement, json)) { - state.Criteria.Add(criterion, new Completion(json.Player, default)); - contribution.Criteria.Add(criterion, - new Completion(json.Player, default)); + state.Criteria[criterion] = new Completion(json.Player, default); + contribution.Criteria[criterion] = new Completion(json.Player, default); } } } diff --git a/AATool/Saves/MinecraftServer.cs b/AATool/Saves/MinecraftServer.cs index 1b9e7f19..79993518 100644 --- a/AATool/Saves/MinecraftServer.cs +++ b/AATool/Saves/MinecraftServer.cs @@ -27,6 +27,7 @@ public static class MinecraftServer public static SyncState State { get; private set; } public static string MessageOfTheDay { get; private set; } public static string WorldName { get; private set; } + public static bool LinuxMode { get; private set; } private static readonly Utilities.Timer RefreshTimer = new (); @@ -47,6 +48,9 @@ public static DateTime GetRefreshEstimate() => IsEnabled ? LastWorldSave.Add(TimeSpan.FromSeconds(SaveInterval)) : default; + public static string HostAwarePath(params string[] paths) => + LinuxMode ? Path.Combine(paths).Replace("\\", "/") : Path.Combine(paths); + public static void Update(Time time) { if (LastError is ArgumentException) @@ -276,7 +280,7 @@ private static bool TryDownloadServerProperties(SftpClient sftp, int failures = try { //download server properties - string path = Path.Combine(Config.Sftp.ServerRoot, "server.properties"); + string path = HostAwarePath(Config.Sftp.ServerRoot, "server.properties"); string[] properties = sftp.ReadAllText(path).Split('\n'); if (TryGetProperty(properties, "level-name", out string world)) WorldName = world.TrimEnd(); @@ -304,12 +308,11 @@ private static bool TryDownloadServerProperties(SftpClient sftp, int failures = private static bool TryGetWorldSaveTime(SftpClient sftp, out DateTime lastWorldSave, int failures = 0) { SetState(SyncState.LastAutoSave); - string remote = Path.Combine(Config.Sftp.ServerRoot, WorldName, "level.dat"); - lastWorldSave = default; - + string remotePath = HostAwarePath(Config.Sftp.ServerRoot, WorldName, "level.dat"); + lastWorldSave = default; try { - lastWorldSave = sftp.GetLastWriteTimeUtc(remote); + lastWorldSave = sftp.GetLastWriteTimeUtc(remotePath); return true; } catch (Exception exception) @@ -318,8 +321,16 @@ private static bool TryGetWorldSaveTime(SftpClient sftp, out DateTime lastWorldS { if (exception is SftpPathNotFoundException) { + if (!LinuxMode) + { + //try switching to linux mode + LinuxMode = true; + Thread.Sleep(AttemptIntervalMs); + return TryGetWorldSaveTime(sftp, out lastWorldSave, failures + 1); + } + //folder not found, world name might be wrong. refresh it next time - LastError = new SftpPathNotFoundException($"File not found: \"{remote}\"."); + LastError = new SftpPathNotFoundException($"File not found: \"{remotePath}\"."); InvalidateWorld(); return false; } @@ -346,7 +357,7 @@ public static bool TryDownloadFolder(SftpClient sftp, string name, int failures SmoothDownloadPercent = 0; string localPath = Path.Combine(Paths.System.SftpWorldsFolder, WorldName, name); - string remotePath = Path.Combine(Config.Sftp.ServerRoot, WorldName, name); + string remotePath = HostAwarePath(Config.Sftp.ServerRoot, WorldName, name); try { //make sure directory exists diff --git a/AATool/UI/Badges/Badge.cs b/AATool/UI/Badges/Badge.cs index f0052d6e..63033a5e 100644 --- a/AATool/UI/Badges/Badge.cs +++ b/AATool/UI/Badges/Badge.cs @@ -79,14 +79,18 @@ private static void TryGiveLegendaryBadge(Uuid uuid, string name, ref Badge badg { badge = new MostRecordsBadge(); } - else if (name == Leaderboard.RsgRunner?.ToLower()) + else if (name == Leaderboard.AnyRsgRunner?.ToLower()) { badge = new RankBadge(1, $"Any% RSG", "1.16", true); } - else if (name == Leaderboard.SsgRunner?.ToLower()) + else if (name == Leaderboard.AnySsgRunner?.ToLower()) { badge = new RankBadge(1, $"Any% SSG", "1.16", true); } + else if (name == Leaderboard.AASsgRunner?.ToLower()) + { + badge = new RankBadge(1, $"AA SSG", "1.16", true); + } else { string player = uuid != Uuid.Empty ? uuid.String : name; diff --git a/AATool/UI/Badges/HalfHeartHardcoreBadge.cs b/AATool/UI/Badges/HalfHeartHardcoreBadge.cs index d93945a6..0d50f8dd 100644 --- a/AATool/UI/Badges/HalfHeartHardcoreBadge.cs +++ b/AATool/UI/Badges/HalfHeartHardcoreBadge.cs @@ -29,7 +29,7 @@ public HalfHeartHardcoreBadge() this.Glow.SetTexture(HeartGlow); this.Glow.SkipToBrightness(0.6f); - this.Description.SetText("Completed AA on Hardcore\nwith half a heart (twice)"); + this.Description.SetText("Completed AA on Hardcore\nwith half a heart (4 times)"); } protected override void UpdateThis(Time time) diff --git a/AATool/UI/Badges/MostRecordsBadge.cs b/AATool/UI/Badges/MostRecordsBadge.cs index 7878a081..27fa21f4 100644 --- a/AATool/UI/Badges/MostRecordsBadge.cs +++ b/AATool/UI/Badges/MostRecordsBadge.cs @@ -27,7 +27,7 @@ public MostRecordsBadge() } this.Description.SetTextColor(RankBadge.PopupGoldText); - this.Description.SetText($"Holds the most AA records\n ({versionList})"); + this.Description.SetText($"Most concurrent AA WRs\n ({versionList})"); this.BackTexture = $"badge_most_records"; this.Glow.SetTexture("badge_large_gold_glow"); diff --git a/AATool/UI/Controls/UIAchievementTree.cs b/AATool/UI/Controls/UIAchievementTree.cs index 9d73337b..a5cf51ba 100644 --- a/AATool/UI/Controls/UIAchievementTree.cs +++ b/AATool/UI/Controls/UIAchievementTree.cs @@ -47,9 +47,6 @@ public override void ResizeRecursive(Rectangle rectangle) private void GeneratePaths() { this.paths = new List>(); - if (Peer.IsRunning) - return; - foreach (UIObjectiveFrame achievement in this.achievements) { //iterate each direct descendant and construct an arrow to it diff --git a/AATool/UI/Controls/UILeaderboard.cs b/AATool/UI/Controls/UILeaderboard.cs index 683e0e08..3e035f2b 100644 --- a/AATool/UI/Controls/UILeaderboard.cs +++ b/AATool/UI/Controls/UILeaderboard.cs @@ -160,6 +160,7 @@ private void RequestRefresh() "1.16" => Paths.Web.ABPage16, "1.18" => Paths.Web.ABPage18, "1.19" => Paths.Web.ABPage19, + "1.20" => Paths.Web.ABPage20, _ => string.Empty }; } @@ -323,17 +324,23 @@ private void PopuplateMultiboard() this.Root().First("most_records_runner")?.SetText(Leaderboard.RunnerWithMostWorldRecords); this.Root().First("most_records_list")?.SetText(mostRecordsList); - if (!string.IsNullOrEmpty(Leaderboard.RsgRunner)) + if (!string.IsNullOrEmpty(Leaderboard.AnyRsgRunner)) { - this.Root().First("any%_rsg_avatar")?.SetPlayer(Leaderboard.RsgRunner); - this.Root().First("any%_rsg_runner")?.SetText(Leaderboard.RsgRunner); - this.Root().First("any%_rsg_time")?.SetText($"{Leaderboard.RsgInGameTime:m':'ss} IGT {Leaderboard.RsgRealTime:m':'ss} RTA"); + this.Root().First("any%_rsg_avatar")?.SetPlayer(Leaderboard.AnyRsgRunner); + this.Root().First("any%_rsg_runner")?.SetText(Leaderboard.AnyRsgRunner); + this.Root().First("any%_rsg_time")?.SetText($"{Leaderboard.AnyRsgInGameTime:m':'ss} IGT {Leaderboard.AnyRsgRealTime:m':'ss} RTA"); } - if (!string.IsNullOrEmpty(Leaderboard.SsgRunner)) + if (!string.IsNullOrEmpty(Leaderboard.AnySsgRunner)) { - this.Root().First("any%_ssg_avatar")?.SetPlayer(Leaderboard.SsgRunner); - this.Root().First("any%_ssg_runner")?.SetText(Leaderboard.SsgRunner); - this.Root().First("any%_ssg_time")?.SetText($"{Leaderboard.SsgInGameTime:m':'ss} IGT {Leaderboard.SsgRealTime:m':'ss} RTA"); + this.Root().First("any%_ssg_avatar")?.SetPlayer(Leaderboard.AnySsgRunner); + this.Root().First("any%_ssg_runner")?.SetText(Leaderboard.AnySsgRunner); + this.Root().First("any%_ssg_time")?.SetText($"{Leaderboard.AnySsgInGameTime:m':'ss} IGT {Leaderboard.AnySsgRealTime:m':'ss} RTA"); + } + if (!string.IsNullOrEmpty(Leaderboard.AASsgRunner)) + { + this.Root().First("aa_ssg_avatar")?.SetPlayer(Leaderboard.AASsgRunner); + this.Root().First("aa_ssg_runner")?.SetText(Leaderboard.AASsgRunner); + this.Root().First("aa_ssg_time")?.SetText($"{Leaderboard.AASsgInGameTime:h':'mm':'ss} IGT {Leaderboard.AASsgRealTime:h':'mm':'ss} RTA"); } } diff --git a/AATool/UI/Controls/UIPinnedObjectiveFrame.cs b/AATool/UI/Controls/UIPinnedObjectiveFrame.cs index 16c7528d..1f6987dd 100644 --- a/AATool/UI/Controls/UIPinnedObjectiveFrame.cs +++ b/AATool/UI/Controls/UIPinnedObjectiveFrame.cs @@ -45,7 +45,6 @@ public override void InitializeRecursive(UIScreen screen) FlexHeight = new (16 * this.Scale), }; this.Frame.AddControl(this.foregroundIcon); - this.Layer = Layer.Fore; } public override void ResizeThis(Rectangle parent) diff --git a/AATool/UI/Screens/UIMainScreen.cs b/AATool/UI/Screens/UIMainScreen.cs index c31254aa..1aca8834 100644 --- a/AATool/UI/Screens/UIMainScreen.cs +++ b/AATool/UI/Screens/UIMainScreen.cs @@ -214,6 +214,7 @@ public override void ResizeRecursive(Rectangle rectangle) { //this.First("main_player_avatar")?.SetTexture(Tracker.GetMainPlayer().ToString().Replace("-", "")); this.Root().First("100hc_avatar")?.SetBadge(new HundredHardcoreBadge()); + this.Root().First("hhhaa_avatar")?.SetBadge(new HalfHeartHardcoreBadge()); } } @@ -356,6 +357,7 @@ public override void Click(UIControl sender) { new AnyPercentRecordRequest(true).EnqueueOnce(); new AnyPercentRecordRequest(false).EnqueueOnce(); + new AASsgRequest().EnqueueOnce(); } ForceLayoutRefresh(); } diff --git a/AATool/UI/Screens/UIUpdateScreen.cs b/AATool/UI/Screens/UIUpdateScreen.cs index 6e2de412..e7ed2a22 100644 --- a/AATool/UI/Screens/UIUpdateScreen.cs +++ b/AATool/UI/Screens/UIUpdateScreen.cs @@ -20,6 +20,7 @@ public class UIUpdateScreen : UIScreen private UIButton nowButton; private UIButton laterButton; private UIButton githubButton; + private UIButton patreonButton; private UIButton closeButton; private UIFlowPanel upgrades; @@ -99,7 +100,7 @@ public override void InitializeThis(UIScreen screen) if (this.nowButton is not null) { this.nowButton.OnClick += this.OnClick; - this.textTinted.Add(this.nowButton?.First()); + this.textTinted.Add(this.nowButton.First()); } //remind me later button @@ -107,7 +108,7 @@ public override void InitializeThis(UIScreen screen) if (this.laterButton is not null) { this.laterButton.OnClick += this.OnClick; - this.textTinted.Add(this.laterButton?.First()); + this.textTinted.Add(this.laterButton.First()); } //github link button @@ -115,15 +116,23 @@ public override void InitializeThis(UIScreen screen) if (this.githubButton is not null) { this.githubButton.OnClick += this.OnClick; - this.textTinted.Add(this.githubButton?.First()); + this.textTinted.Add(this.githubButton.First()); } + //patreon link button + this.patreonButton = this.First("patreon"); + if (this.patreonButton is not null) + { + this.patreonButton.OnClick += this.OnClick; + this.textTinted.Add(this.patreonButton.First()); + } + //close button this.closeButton = this.First("close"); if (this.closeButton is not null) { this.closeButton.OnClick += this.OnClick; - this.textTinted.Add(this.closeButton?.First()); + this.textTinted.Add(this.closeButton.First()); } this.upgrades = this.First("upgrades"); @@ -216,12 +225,15 @@ public override void Prepare() public override void DrawThis(Canvas canvas) { - var centered = new Rectangle( - this.thumbnailBounds.Left, - this.thumbnailBounds.Top, - UpdateRequest.LatestThumb.Width, - UpdateRequest.LatestThumb.Height); - canvas.Draw(UpdateRequest.LatestThumb, centered, Color.White, Layer.Fore); + if (UpdateRequest.LatestThumb is not null && this.thumbnailBounds is not null) + { + var centered = new Rectangle( + this.thumbnailBounds.Left, + this.thumbnailBounds.Top, + UpdateRequest.LatestThumb.Width, + UpdateRequest.LatestThumb.Height); + canvas.Draw(UpdateRequest.LatestThumb, centered, Color.White, Layer.Fore); + } base.DrawThis(canvas); } @@ -248,6 +260,8 @@ private void OnClick(UIControl sender) this.Form.Close(); else if (sender == this.githubButton) _ = Process.Start(Paths.Web.LatestRelease); + else if (sender == this.patreonButton) + _ = Process.Start(Paths.Web.PatreonFull); } } } diff --git a/AATool/Winforms/Controls/CTrackerSettings.Designer.cs b/AATool/Winforms/Controls/CTrackerSettings.Designer.cs index b7d87f60..12856356 100644 --- a/AATool/Winforms/Controls/CTrackerSettings.Designer.cs +++ b/AATool/Winforms/Controls/CTrackerSettings.Designer.cs @@ -346,7 +346,7 @@ private void InitializeComponent() this.label13.Size = new System.Drawing.Size(234, 42); this.label13.TabIndex = 71; this.label13.Text = "🛈 If you\'re connecting to a survival server and would like to only see your own " + - "advancements, set progress filtering to \"Solo\""; + "advancements, set Player Filtering to \"Solo\""; // // sftpCompatibility // @@ -652,8 +652,8 @@ private void InitializeComponent() this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); this.Controls.Add(this.groupBox3); - this.Controls.Add(this.localGroup); this.Controls.Add(this.remoteGroup); + this.Controls.Add(this.localGroup); this.Name = "CTrackerSettings"; this.Size = new System.Drawing.Size(538, 307); this.localGroup.ResumeLayout(false); diff --git a/AATool/Winforms/Forms/FStyleDialog.Designer.cs b/AATool/Winforms/Forms/FStyleDialog.Designer.cs index cf57fe14..b6310121 100644 --- a/AATool/Winforms/Forms/FStyleDialog.Designer.cs +++ b/AATool/Winforms/Forms/FStyleDialog.Designer.cs @@ -40,7 +40,7 @@ private void InitializeComponent() this.frames.Location = new System.Drawing.Point(0, 0); this.frames.Margin = new System.Windows.Forms.Padding(0); this.frames.Name = "frames"; - this.frames.Size = new System.Drawing.Size(809, 621); + this.frames.Size = new System.Drawing.Size(809, 681); this.frames.TabIndex = 0; // // closeOnSelect @@ -59,7 +59,7 @@ private void InitializeComponent() // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(809, 621); + this.ClientSize = new System.Drawing.Size(809, 681); this.Controls.Add(this.closeOnSelect); this.Controls.Add(this.frames); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; diff --git a/AATool/Winforms/Forms/FStyleDialog.cs b/AATool/Winforms/Forms/FStyleDialog.cs index 83f135ed..e274de65 100644 --- a/AATool/Winforms/Forms/FStyleDialog.cs +++ b/AATool/Winforms/Forms/FStyleDialog.cs @@ -49,7 +49,6 @@ public FStyleDialog(bool overlay) this.Text = this.isOverlay ? "Overlay Frame Style" : "Main Window Frame Style"; this.Width = this.isOverlay ? 945 : 825; - this.Height = this.isOverlay ? 710 : 610; this.style = this.isOverlay ? Config.Overlay.FrameStyle : Config.Main.FrameStyle; string prideList = this.isOverlay ? Config.Overlay.PrideFrameList : Config.Main.PrideFrameList; diff --git a/AATool/assets/objectives/1.19/advancements/adventure.xml b/AATool/assets/objectives/1.19/advancements/adventure.xml index 296ed22c..32f7efc3 100644 --- a/AATool/assets/objectives/1.19/advancements/adventure.xml +++ b/AATool/assets/objectives/1.19/advancements/adventure.xml @@ -28,6 +28,8 @@ + + @@ -127,6 +129,4 @@ - - \ No newline at end of file diff --git a/AATool/assets/objectives/1.20 Snapshot/advancements/adventure.xml b/AATool/assets/objectives/1.20/advancements/adventure.xml similarity index 99% rename from AATool/assets/objectives/1.20 Snapshot/advancements/adventure.xml rename to AATool/assets/objectives/1.20/advancements/adventure.xml index fa333c44..0782a500 100644 --- a/AATool/assets/objectives/1.20 Snapshot/advancements/adventure.xml +++ b/AATool/assets/objectives/1.20/advancements/adventure.xml @@ -21,7 +21,7 @@ - + @@ -53,6 +53,8 @@ + + @@ -153,6 +155,4 @@ - - \ No newline at end of file diff --git a/AATool/assets/objectives/1.20 Snapshot/advancements/end.xml b/AATool/assets/objectives/1.20/advancements/end.xml similarity index 100% rename from AATool/assets/objectives/1.20 Snapshot/advancements/end.xml rename to AATool/assets/objectives/1.20/advancements/end.xml diff --git a/AATool/assets/objectives/1.20 Snapshot/advancements/husbandry.xml b/AATool/assets/objectives/1.20/advancements/husbandry.xml similarity index 100% rename from AATool/assets/objectives/1.20 Snapshot/advancements/husbandry.xml rename to AATool/assets/objectives/1.20/advancements/husbandry.xml diff --git a/AATool/assets/objectives/1.20 Snapshot/advancements/minecraft.xml b/AATool/assets/objectives/1.20/advancements/minecraft.xml similarity index 100% rename from AATool/assets/objectives/1.20 Snapshot/advancements/minecraft.xml rename to AATool/assets/objectives/1.20/advancements/minecraft.xml diff --git a/AATool/assets/objectives/1.20 Snapshot/advancements/nether.xml b/AATool/assets/objectives/1.20/advancements/nether.xml similarity index 100% rename from AATool/assets/objectives/1.20 Snapshot/advancements/nether.xml rename to AATool/assets/objectives/1.20/advancements/nether.xml diff --git a/AATool/assets/objectives/1.20 Snapshot/blocks.xml b/AATool/assets/objectives/1.20/blocks.xml similarity index 99% rename from AATool/assets/objectives/1.20 Snapshot/blocks.xml rename to AATool/assets/objectives/1.20/blocks.xml index 8b36c4dc..c35cd317 100644 --- a/AATool/assets/objectives/1.20 Snapshot/blocks.xml +++ b/AATool/assets/objectives/1.20/blocks.xml @@ -362,9 +362,9 @@ - + @@ -576,10 +576,6 @@ - - - - @@ -694,25 +690,27 @@ - - + + + + + + - - - - - + + + @@ -973,9 +971,10 @@ - + + - + \ No newline at end of file diff --git a/AATool/assets/objectives/1.20 Snapshot/potions.xml b/AATool/assets/objectives/1.20/potions.xml similarity index 100% rename from AATool/assets/objectives/1.20 Snapshot/potions.xml rename to AATool/assets/objectives/1.20/potions.xml diff --git a/AATool/assets/objectives/1.20 Snapshot/trims.xml b/AATool/assets/objectives/1.20/trims.xml similarity index 100% rename from AATool/assets/objectives/1.20 Snapshot/trims.xml rename to AATool/assets/objectives/1.20/trims.xml diff --git a/AATool/assets/sprites/blocks/misc/trident_and_heads_1.20^32.png b/AATool/assets/sprites/blocks/misc/trident_and_heads_1.20^32.png new file mode 100644 index 00000000..4c30a78d Binary files /dev/null and b/AATool/assets/sprites/blocks/misc/trident_and_heads_1.20^32.png differ diff --git a/AATool/assets/sprites/blocks/misc/trident_and_heads_1.20^48.png b/AATool/assets/sprites/blocks/misc/trident_and_heads_1.20^48.png new file mode 100644 index 00000000..9d508577 Binary files /dev/null and b/AATool/assets/sprites/blocks/misc/trident_and_heads_1.20^48.png differ diff --git a/AATool/assets/sprites/blocks/sandstone/decorated_pot^32.png b/AATool/assets/sprites/blocks/sandstone/decorated_pot^32.png index 4be7aa79..de08e140 100644 Binary files a/AATool/assets/sprites/blocks/sandstone/decorated_pot^32.png and b/AATool/assets/sprites/blocks/sandstone/decorated_pot^32.png differ diff --git a/AATool/assets/sprites/global/gui/frames/flags/frame_flag_aroace.png b/AATool/assets/sprites/global/gui/frames/flags/frame_flag_aroace.png new file mode 100644 index 00000000..4e766d99 Binary files /dev/null and b/AATool/assets/sprites/global/gui/frames/flags/frame_flag_aroace.png differ diff --git a/AATool/assets/sprites/global/gui/icons/patreon.png b/AATool/assets/sprites/global/gui/icons/patreon.png new file mode 100644 index 00000000..246554dd Binary files /dev/null and b/AATool/assets/sprites/global/gui/icons/patreon.png differ diff --git a/AATool/assets/sprites/global/items/old_local_brewery.png b/AATool/assets/sprites/global/items/old_local_brewery.png new file mode 100644 index 00000000..cf97c3c9 Binary files /dev/null and b/AATool/assets/sprites/global/items/old_local_brewery.png differ diff --git a/AATool/assets/sprites/winforms/frames_main/Pride Flags/Aroace Pride.png b/AATool/assets/sprites/winforms/frames_main/Pride Flags/Aroace Pride.png new file mode 100644 index 00000000..0a1a6545 Binary files /dev/null and b/AATool/assets/sprites/winforms/frames_main/Pride Flags/Aroace Pride.png differ diff --git a/AATool/assets/sprites/winforms/frames_overlay/Pride Flags/Aroace Pride.png b/AATool/assets/sprites/winforms/frames_overlay/Pride Flags/Aroace Pride.png new file mode 100644 index 00000000..6e16db31 Binary files /dev/null and b/AATool/assets/sprites/winforms/frames_overlay/Pride Flags/Aroace Pride.png differ diff --git a/AATool/assets/templates/screen_update.xml b/AATool/assets/templates/screen_update.xml index 4ab9b175..f8c7c2e2 100644 --- a/AATool/assets/templates/screen_update.xml +++ b/AATool/assets/templates/screen_update.xml @@ -63,6 +63,9 @@ + diff --git a/AATool/assets/views/adventuring_time/1.20 Snapshot/main.xml b/AATool/assets/views/adventuring_time/1.20/main.xml similarity index 100% rename from AATool/assets/views/adventuring_time/1.20 Snapshot/main.xml rename to AATool/assets/views/adventuring_time/1.20/main.xml diff --git a/AATool/assets/views/all_advancements/1.20 Snapshot/main_compact.xml b/AATool/assets/views/all_advancements/1.20/main_compact.xml similarity index 100% rename from AATool/assets/views/all_advancements/1.20 Snapshot/main_compact.xml rename to AATool/assets/views/all_advancements/1.20/main_compact.xml diff --git a/AATool/assets/views/all_advancements/1.20 Snapshot/main_optimized.xml b/AATool/assets/views/all_advancements/1.20/main_optimized.xml similarity index 98% rename from AATool/assets/views/all_advancements/1.20 Snapshot/main_optimized.xml rename to AATool/assets/views/all_advancements/1.20/main_optimized.xml index 6963169e..74199ede 100644 --- a/AATool/assets/views/all_advancements/1.20 Snapshot/main_optimized.xml +++ b/AATool/assets/views/all_advancements/1.20/main_optimized.xml @@ -101,7 +101,7 @@ - + diff --git a/AATool/assets/views/all_advancements/1.20 Snapshot/main_relaxed.xml b/AATool/assets/views/all_advancements/1.20/main_relaxed.xml similarity index 98% rename from AATool/assets/views/all_advancements/1.20 Snapshot/main_relaxed.xml rename to AATool/assets/views/all_advancements/1.20/main_relaxed.xml index 53e00348..f84cee33 100644 --- a/AATool/assets/views/all_advancements/1.20 Snapshot/main_relaxed.xml +++ b/AATool/assets/views/all_advancements/1.20/main_relaxed.xml @@ -54,7 +54,7 @@ - + diff --git a/AATool/assets/views/all_advancements/1.20 Snapshot/main_vertical.xml b/AATool/assets/views/all_advancements/1.20/main_vertical.xml similarity index 98% rename from AATool/assets/views/all_advancements/1.20 Snapshot/main_vertical.xml rename to AATool/assets/views/all_advancements/1.20/main_vertical.xml index a5316018..afc1f882 100644 --- a/AATool/assets/views/all_advancements/1.20 Snapshot/main_vertical.xml +++ b/AATool/assets/views/all_advancements/1.20/main_vertical.xml @@ -59,7 +59,7 @@ - + diff --git a/AATool/assets/views/all_blocks/1.20 Snapshot/help.xml b/AATool/assets/views/all_blocks/1.20/help.xml similarity index 95% rename from AATool/assets/views/all_blocks/1.20 Snapshot/help.xml rename to AATool/assets/views/all_blocks/1.20/help.xml index c8a25be6..9df2cd84 100644 --- a/AATool/assets/views/all_blocks/1.20 Snapshot/help.xml +++ b/AATool/assets/views/all_blocks/1.20/help.xml @@ -118,7 +118,7 @@ - + @@ -307,7 +307,7 @@ - + @@ -325,7 +325,7 @@ - + @@ -343,7 +343,7 @@ - + @@ -361,7 +361,7 @@ - + @@ -379,7 +379,7 @@ - + @@ -543,14 +543,14 @@ - + - + @@ -627,58 +627,58 @@ - + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + diff --git a/AATool/assets/views/all_blocks/1.20 Snapshot/main.xml b/AATool/assets/views/all_blocks/1.20/main.xml similarity index 97% rename from AATool/assets/views/all_blocks/1.20 Snapshot/main.xml rename to AATool/assets/views/all_blocks/1.20/main.xml index bcdbdb50..5f65f1bd 100644 --- a/AATool/assets/views/all_blocks/1.20 Snapshot/main.xml +++ b/AATool/assets/views/all_blocks/1.20/main.xml @@ -136,8 +136,8 @@ width="3 * 38" height="4 * 38"/> + margin_left="0" margin_top="9 * 38" + width="6 * 38" height="38"/> + margin_left="3 * 38" margin_top="8 * 38" + width="38" height="2 * 38"/> - + + + + margin_left="10 * 38" margin_top="9 * 38" + width="2 * 38" height="38"/> @@ -432,7 +436,7 @@ - + diff --git a/AATool/assets/views/other/multiboard.xml b/AATool/assets/views/other/multiboard.xml index 4f96d081..94ccb826 100644 --- a/AATool/assets/views/other/multiboard.xml +++ b/AATool/assets/views/other/multiboard.xml @@ -9,7 +9,7 @@ - + @@ -42,30 +42,15 @@ - + - - - - - - - - - - - - - - - - - - - + + + + - - + + @@ -81,15 +66,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -150,6 +173,10 @@ + + + + @@ -189,48 +216,31 @@ - - - - - - - - - - - - - - - - - - - - + + + - + - + - + - + - + - + - + - + - +