From 30e12fb69ab633a337ba64b569ee31fd08c0adcd Mon Sep 17 00:00:00 2001 From: Slackow <32826498+Slackow@users.noreply.github.com> Date: Sun, 29 Dec 2024 03:17:39 -0500 Subject: [PATCH 1/7] Add 1.21 and 1.21.4 support --- SwiftAA.xcodeproj/project.pbxproj | 28 +++ SwiftAA/Enums/LayoutStyle.swift | 2 + SwiftAA/Enums/StatusType.swift | 1 + SwiftAA/Enums/Version.swift | 2 + .../Indicators/Status/HeavyCore.swift | 22 +++ .../Advancements/1.21.4/adventure.xml | 166 ++++++++++++++++++ SwiftAA/Resources/Advancements/1.21.4/end.xml | 13 ++ .../Advancements/1.21.4/husbandry.xml | 135 ++++++++++++++ .../Advancements/1.21.4/minecraft.xml | 19 ++ .../Advancements/1.21.4/minimal.json | 66 +++++++ .../Resources/Advancements/1.21.4/nether.xml | 37 ++++ .../Resources/Advancements/1.21/adventure.xml | 164 +++++++++++++++++ SwiftAA/Resources/Advancements/1.21/end.xml | 13 ++ .../Resources/Advancements/1.21/husbandry.xml | 135 ++++++++++++++ .../Resources/Advancements/1.21/minecraft.xml | 19 ++ .../Resources/Advancements/1.21/minimal.json | 66 +++++++ .../Resources/Advancements/1.21/nether.xml | 37 ++++ .../Adventure/blowback.imageset/Contents.json | 21 +++ .../Adventure/blowback.imageset/blowback.png | Bin 0 -> 273 bytes .../brush_armadillo.imageset/Contents.json | 21 +++ .../brush_armadillo.imageset/Image.png | Bin 0 -> 423 bytes .../Contents.json | 23 +++ .../crafters_crafting_crafters^16.png | Bin 0 -> 984 bytes .../crafters_crafting_crafters^32.png | Bin 0 -> 2798 bytes .../crafters_crafting_crafters^48.png | Bin 0 -> 4693 bytes .../heavy_core.imageset/Contents.json | 23 +++ .../heavy_core.imageset/heavy_core@3x.png | Bin 0 -> 1466 bytes .../heavy_core.imageset/heavy_core^16.png | Bin 0 -> 861 bytes .../heavy_core.imageset/heavy_core^32.png | Bin 0 -> 1977 bytes .../lighten_up.imageset/Contents.json | 23 +++ .../lighten_up.imageset/lighten_up@2x.png | Bin 0 -> 2980 bytes .../lighten_up.imageset/lighten_up@3x.png | Bin 0 -> 4941 bytes .../lighten_up.imageset/lighten_up^16.png | Bin 0 -> 951 bytes .../Contents.json | 23 +++ .../Image.png | Bin 0 -> 1048 bytes .../minecraft_trials_edition@2x.png | Bin 0 -> 2859 bytes .../minecraft_trials_edition@3x.png | Bin 0 -> 4742 bytes .../overoverkill.imageset/Contents.json | 21 +++ .../Adventure/overoverkill.imageset/Image.png | Bin 0 -> 580 bytes .../remove_wolf_armor.imageset/Contents.json | 21 +++ .../remove_wolf_armor.imageset/shears.png | Bin 0 -> 195 bytes .../repair_wolf_armor.imageset/Contents.json | 21 +++ .../repair_wolf_armor.imageset/Image.png | Bin 0 -> 488 bytes .../revaulting.imageset/Contents.json | 21 +++ .../Adventure/revaulting.imageset/Image.png | Bin 0 -> 651 bytes .../under_lock_and_key.imageset/Contents.json | 21 +++ .../under_lock_and_key.imageset/Image.png | Bin 0 -> 559 bytes .../who_needs_rockets.imageset/Contents.json | 21 +++ .../who_needs_rockets.imageset/Image.png | Bin 0 -> 541 bytes .../whole_pack.imageset/Contents.json | 21 +++ .../Husbandry/whole_pack.imageset/Image.png | Bin 0 -> 435 bytes .../Animals/armadillo.imageset/Contents.json | 21 +++ .../Animals/armadillo.imageset/Image.png | Bin 0 -> 557 bytes .../1-1/pale_garden.imageset/Contents.json | 21 +++ .../1-1/pale_garden.imageset/pale_garden.png | Bin 0 -> 1563 bytes .../Icons/Criteria/Dogs/Contents.json | 6 + .../Dogs/wolf_ashen.imageset/Contents.json | 21 +++ .../Dogs/wolf_ashen.imageset/Image.png | Bin 0 -> 457 bytes .../Dogs/wolf_black.imageset/Contents.json | 21 +++ .../Dogs/wolf_black.imageset/Image.png | Bin 0 -> 445 bytes .../Dogs/wolf_chestnut.imageset/Contents.json | 21 +++ .../Dogs/wolf_chestnut.imageset/Image.png | Bin 0 -> 463 bytes .../Dogs/wolf_pale.imageset/Contents.json | 21 +++ .../Dogs/wolf_pale.imageset/Image.png | Bin 0 -> 441 bytes .../Dogs/wolf_rusty.imageset/Contents.json | 21 +++ .../Dogs/wolf_rusty.imageset/Image.png | Bin 0 -> 472 bytes .../Dogs/wolf_snowy.imageset/Contents.json | 21 +++ .../Dogs/wolf_snowy.imageset/Image.png | Bin 0 -> 435 bytes .../Dogs/wolf_spotted.imageset/Contents.json | 21 +++ .../Dogs/wolf_spotted.imageset/Image.png | Bin 0 -> 469 bytes .../Dogs/wolf_striped.imageset/Contents.json | 21 +++ .../Dogs/wolf_striped.imageset/Image.png | Bin 0 -> 471 bytes .../Dogs/wolf_woods.imageset/Contents.json | 21 +++ .../Dogs/wolf_woods.imageset/Image.png | Bin 0 -> 475 bytes .../Mobs/bogged.imageset/Contents.json | 21 +++ .../Criteria/Mobs/bogged.imageset/bogged.png | Bin 0 -> 263 bytes .../Mobs/breeze.imageset/Contents.json | 21 +++ .../Criteria/Mobs/breeze.imageset/breeze.png | Bin 0 -> 232 bytes .../Mobs/creaking.imageset/Contents.json | 21 +++ .../Mobs/creaking.imageset/creaking.png | Bin 0 -> 1631 bytes SwiftAA/Resources/Generated/Strings.swift | 16 +- .../Resources/Indicators/major_biomes.json | 6 + .../Resources/en.lproj/Localizable.strings | 6 +- SwiftAA/Utils/Constants.swift | 11 +- .../Managers/LeaderboardManager.swift | 2 + .../View/VersionFrameModifier.swift | 10 ++ .../Components/Panels/InfoPanelView.swift | 2 +- SwiftAA/Views/ContentView.swift | 1 + SwiftAA/Views/Versions/1_21/L1_21.swift | 29 +++ SwiftAA/Views/Versions/1_21/L1_21M.swift | 66 +++++++ SwiftAA/Views/Versions/1_21/L1_21S.swift | 83 +++++++++ SwiftAA/Views/Versions/1_21/L1_21V.swift | 77 ++++++++ 92 files changed, 1806 insertions(+), 9 deletions(-) create mode 100644 SwiftAA/Models/Constants/Indicators/Status/HeavyCore.swift create mode 100644 SwiftAA/Resources/Advancements/1.21.4/adventure.xml create mode 100644 SwiftAA/Resources/Advancements/1.21.4/end.xml create mode 100644 SwiftAA/Resources/Advancements/1.21.4/husbandry.xml create mode 100644 SwiftAA/Resources/Advancements/1.21.4/minecraft.xml create mode 100644 SwiftAA/Resources/Advancements/1.21.4/minimal.json create mode 100644 SwiftAA/Resources/Advancements/1.21.4/nether.xml create mode 100644 SwiftAA/Resources/Advancements/1.21/adventure.xml create mode 100644 SwiftAA/Resources/Advancements/1.21/end.xml create mode 100644 SwiftAA/Resources/Advancements/1.21/husbandry.xml create mode 100644 SwiftAA/Resources/Advancements/1.21/minecraft.xml create mode 100644 SwiftAA/Resources/Advancements/1.21/minimal.json create mode 100644 SwiftAA/Resources/Advancements/1.21/nether.xml create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/blowback.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/blowback.imageset/blowback.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/brush_armadillo.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/brush_armadillo.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^16.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^32.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^48.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core@3x.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^16.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^32.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/lighten_up@2x.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/lighten_up@3x.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/lighten_up^16.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/minecraft_trials_edition@2x.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/minecraft_trials_edition@3x.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/overoverkill.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/overoverkill.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/remove_wolf_armor.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/remove_wolf_armor.imageset/shears.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/repair_wolf_armor.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/repair_wolf_armor.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/revaulting.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/revaulting.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/under_lock_and_key.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/under_lock_and_key.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/who_needs_rockets.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/who_needs_rockets.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Husbandry/whole_pack.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Husbandry/whole_pack.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Animals/armadillo.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Animals/armadillo.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Biomes/1-1/pale_garden.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Biomes/1-1/pale_garden.imageset/pale_garden.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_ashen.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_ashen.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_black.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_black.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_chestnut.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_chestnut.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_pale.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_pale.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_rusty.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_rusty.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_snowy.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_snowy.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_spotted.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_spotted.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_striped.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_striped.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_woods.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_woods.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/bogged.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/bogged.imageset/bogged.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/breeze.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/breeze.imageset/breeze.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/creaking.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/creaking.imageset/creaking.png create mode 100644 SwiftAA/Views/Versions/1_21/L1_21.swift create mode 100644 SwiftAA/Views/Versions/1_21/L1_21M.swift create mode 100644 SwiftAA/Views/Versions/1_21/L1_21S.swift create mode 100644 SwiftAA/Views/Versions/1_21/L1_21V.swift diff --git a/SwiftAA.xcodeproj/project.pbxproj b/SwiftAA.xcodeproj/project.pbxproj index 500ac74..37befe8 100644 --- a/SwiftAA.xcodeproj/project.pbxproj +++ b/SwiftAA.xcodeproj/project.pbxproj @@ -9,6 +9,11 @@ /* Begin PBXBuildFile section */ 490D35042B942F7300342D04 /* enchanted_netherite_boots.gif in Resources */ = {isa = PBXBuildFile; fileRef = 490D35032B942F7300342D04 /* enchanted_netherite_boots.gif */; }; 490F121E2AD3701300BC30DD /* L1_16V.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490F121D2AD3701300BC30DD /* L1_16V.swift */; }; + 498A3E842D20FA7500F0A345 /* L1_21.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498A3E832D20FA6A00F0A345 /* L1_21.swift */; }; + 498A3E8A2D21153100F0A345 /* L1_21S.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498A3E872D21153100F0A345 /* L1_21S.swift */; }; + 498A3E8B2D21153100F0A345 /* L1_21M.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498A3E882D21153100F0A345 /* L1_21M.swift */; }; + 498A3E8C2D21153100F0A345 /* L1_21V.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498A3E892D21153100F0A345 /* L1_21V.swift */; }; + 498A3E8E2D21191300F0A345 /* HeavyCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498A3E8D2D21191300F0A345 /* HeavyCore.swift */; }; 49CCDF812B7C4AF400DFE65D /* major_biomes.json in Resources */ = {isa = PBXBuildFile; fileRef = 49CCDF802B7C4AF400DFE65D /* major_biomes.json */; }; B608417D2AB3E37800E064E7 /* TrackerAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = B608417C2AB3E37800E064E7 /* TrackerAlert.swift */; }; B60C6BAF2ABA6B7300A79D4E /* LeaderboardPlaceholderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B60C6BAE2ABA6B7300A79D4E /* LeaderboardPlaceholderView.swift */; }; @@ -205,6 +210,11 @@ /* Begin PBXFileReference section */ 490D35032B942F7300342D04 /* enchanted_netherite_boots.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = enchanted_netherite_boots.gif; sourceTree = ""; }; 490F121D2AD3701300BC30DD /* L1_16V.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_16V.swift; sourceTree = ""; }; + 498A3E832D20FA6A00F0A345 /* L1_21.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_21.swift; sourceTree = ""; }; + 498A3E872D21153100F0A345 /* L1_21S.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_21S.swift; sourceTree = ""; }; + 498A3E882D21153100F0A345 /* L1_21M.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_21M.swift; sourceTree = ""; }; + 498A3E892D21153100F0A345 /* L1_21V.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_21V.swift; sourceTree = ""; }; + 498A3E8D2D21191300F0A345 /* HeavyCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeavyCore.swift; sourceTree = ""; }; 49CCDF7B2B7C1FD200DFE65D /* MinecraftFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MinecraftFont.swift; sourceTree = ""; }; 49CCDF802B7C4AF400DFE65D /* major_biomes.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = major_biomes.json; sourceTree = ""; }; B608417C2AB3E37800E064E7 /* TrackerAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackerAlert.swift; sourceTree = ""; }; @@ -414,6 +424,17 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 498A3E822D20FA2D00F0A345 /* 1_21 */ = { + isa = PBXGroup; + children = ( + 498A3E872D21153100F0A345 /* L1_21S.swift */, + 498A3E882D21153100F0A345 /* L1_21M.swift */, + 498A3E892D21153100F0A345 /* L1_21V.swift */, + 498A3E832D20FA6A00F0A345 /* L1_21.swift */, + ); + path = 1_21; + sourceTree = ""; + }; 49CCDF7F2B7C4A8500DFE65D /* Indicators */ = { isa = PBXGroup; children = ( @@ -743,6 +764,7 @@ B687E17E28B3E37F002CF5D7 /* Versions */ = { isa = PBXGroup; children = ( + 498A3E822D20FA2D00F0A345 /* 1_21 */, B6EEBAD22AC4F854001CF4D0 /* 1_16 */, B6EEBAD32AC4F8B1001CF4D0 /* 1_19 */, B6D67AE52B744A61007AA80C /* 1_20 */, @@ -772,6 +794,7 @@ B697E0F22B844C4600932278 /* Beehives.swift */, B697E0EA2B844B9700932278 /* Trident.swift */, B697E0EC2B844BD100932278 /* Shells.swift */, + 498A3E8D2D21191300F0A345 /* HeavyCore.swift */, ); path = Status; sourceTree = ""; @@ -1301,6 +1324,7 @@ B6EEBAD72AC4F9B7001CF4D0 /* LayoutStyle.swift in Sources */, B6E3310D2AA7FF1F001D7FF2 /* SettingsBarItem.swift in Sources */, B676BDAB2AA7A85B008BD8A9 /* Optional+Ext.swift in Sources */, + 498A3E842D20FA7500F0A345 /* L1_21.swift in Sources */, 490F121E2AD3701300BC30DD /* L1_16V.swift in Sources */, B6F92E9D28B739C9000B6D06 /* OverlayShimmerView.swift in Sources */, B683A12D2ABD54A900162E7C /* WorldNote+CoreDataClass.swift in Sources */, @@ -1348,6 +1372,9 @@ B697E1062B844D8300932278 /* GhastTears.swift in Sources */, B697E0F32B844C4600932278 /* Beehives.swift in Sources */, B65B074D28AFDD1600E10EC5 /* UpdateManager.swift in Sources */, + 498A3E8A2D21153100F0A345 /* L1_21S.swift in Sources */, + 498A3E8B2D21153100F0A345 /* L1_21M.swift in Sources */, + 498A3E8C2D21153100F0A345 /* L1_21V.swift in Sources */, B6A772E62888FBA600436551 /* ContentView.swift in Sources */, B6DFEE442B8C3EEC0009C541 /* RefreshStyle.swift in Sources */, B66A07722887A2C900DC0A2C /* CriterionView.swift in Sources */, @@ -1370,6 +1397,7 @@ B6EEBAD52AC4F8DB001CF4D0 /* L1_16S.swift in Sources */, B6DD182B2BAE778600C963AE /* ModernProgressBar.swift in Sources */, B6F1B48A2AAEAAA500422D8E /* OverlayStyle.swift in Sources */, + 498A3E8E2D21191300F0A345 /* HeavyCore.swift in Sources */, B65AB3532AA96D66001F4FE6 /* CustomThemeView.swift in Sources */, B6F208912B8EC18C0025A914 /* IndicatorTickerTapeViewModel.swift in Sources */, B6E331102AA80811001D7FF2 /* TrackingSettingsView.swift in Sources */, diff --git a/SwiftAA/Enums/LayoutStyle.swift b/SwiftAA/Enums/LayoutStyle.swift index 0f38876..33ece3f 100644 --- a/SwiftAA/Enums/LayoutStyle.swift +++ b/SwiftAA/Enums/LayoutStyle.swift @@ -28,6 +28,8 @@ enum LayoutStyle: String, SettingsOption { return [.standard] case .v1_20: return LayoutStyle.allCases + case .v1_21, .v1_21_4: + return LayoutStyle.allCases } } } diff --git a/SwiftAA/Enums/StatusType.swift b/SwiftAA/Enums/StatusType.swift index d044b54..0606917 100644 --- a/SwiftAA/Enums/StatusType.swift +++ b/SwiftAA/Enums/StatusType.swift @@ -17,4 +17,5 @@ enum StatusType { case goldBlocks case snifferEggs case majorBiomes + case heavyCore } diff --git a/SwiftAA/Enums/Version.swift b/SwiftAA/Enums/Version.swift index ce48e73..cb8a5ec 100644 --- a/SwiftAA/Enums/Version.swift +++ b/SwiftAA/Enums/Version.swift @@ -12,6 +12,8 @@ enum Version: String, SettingsOption { case v1_16_5 = "1.16.5" case v1_19 = "1.19" case v1_20 = "1.20" + case v1_21 = "1.21" + case v1_21_4 = "1.21.4" var id: Self { return self diff --git a/SwiftAA/Models/Constants/Indicators/Status/HeavyCore.swift b/SwiftAA/Models/Constants/Indicators/Status/HeavyCore.swift new file mode 100644 index 0000000..f93dab6 --- /dev/null +++ b/SwiftAA/Models/Constants/Indicators/Status/HeavyCore.swift @@ -0,0 +1,22 @@ +// +// HeavyCore.swift +// SwiftAA +// +// Created by Andrew on 12/29/24. +// + +class HeavyCore: TransferableIndicator, StatusIndicator { + var type: StatusType = .heavyCore + var id: String = "minecraft:heavy_core" + var key: String = L10n.Statistic.Trident.obtain + var name: String = "Obtain\nHeavy Core" + var icon: String = "heavy_core" + var frameStyle: String = "statistic" + var completed: Bool = false + var tooltip: String = "" + + func update(progress: ProgressManager) { + completed = progress.timesPickedUp(id) > 0 + key = completed ? L10n.Statistic.HeavyCore.obtained : L10n.Statistic.HeavyCore.obtain + } +} diff --git a/SwiftAA/Resources/Advancements/1.21.4/adventure.xml b/SwiftAA/Resources/Advancements/1.21.4/adventure.xml new file mode 100644 index 0000000..70d5e43 --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21.4/adventure.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SwiftAA/Resources/Advancements/1.21.4/end.xml b/SwiftAA/Resources/Advancements/1.21.4/end.xml new file mode 100644 index 0000000..ec6f59b --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21.4/end.xml @@ -0,0 +1,13 @@ + + + diff --git a/SwiftAA/Resources/Advancements/1.21.4/husbandry.xml b/SwiftAA/Resources/Advancements/1.21.4/husbandry.xml new file mode 100644 index 0000000..3d3ec35 --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21.4/husbandry.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SwiftAA/Resources/Advancements/1.21.4/minecraft.xml b/SwiftAA/Resources/Advancements/1.21.4/minecraft.xml new file mode 100644 index 0000000..56b012c --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21.4/minecraft.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/SwiftAA/Resources/Advancements/1.21.4/minimal.json b/SwiftAA/Resources/Advancements/1.21.4/minimal.json new file mode 100644 index 0000000..712c261 --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21.4/minimal.json @@ -0,0 +1,66 @@ +{ + "categories": [ + "adventure", "end", "husbandry", "minecraft", "nether" + ], + "advancements": [ + {"id":"story/upgrade_tools"}, + {"id":"story/iron_tools"}, + {"id":"story/lava_bucket"}, + {"id":"nether/distract_piglin"}, + {"id":"nether/charge_respawn_anchor"}, + {"id":"end/dragon_breath"}, + {"id":"end/kill_dragon"}, + {"id":"story/obtain_armor"}, + {"id":"end/levitate"}, + {"id":"end/dragon_egg"}, + {"id":"story/enchant_item"}, + + {"id":"adventure/trade_at_world_height"}, + {"id":"husbandry/fishy_business"}, + {"id":"husbandry/make_a_sign_glow"}, + {"id":"adventure/spyglass_at_parrot"}, + {"id":"husbandry/ride_a_boat_with_a_goat"}, + {"id":"husbandry/kill_axolotl_target"}, + {"id":"adventure/sniper_duel"}, + {"id":"husbandry/silk_touch_nest"}, + {"id":"husbandry/allay_deliver_cake_to_note_block"}, + {"id":"adventure/bullseye"}, + {"id":"adventure/summon_iron_golem"}, + + {"id":"story/cure_zombie_villager"}, + {"id":"adventure/walk_on_powder_snow_with_leather_boots"}, + {"id":"adventure/throw_trident+adventure/very_very_frightening","name":"ATJ + VVF"}, + {"id":"adventure/lightning_rod_with_villager_no_fire"}, + {"id":"adventure/sleep_in_bed"}, + {"id":"adventure/arbalistic"}, + {"id":"adventure/two_birds_one_arrow"}, + {"id":"adventure/play_jukebox_in_meadows"}, + {"id":"adventure/craft_decorated_pot_using_only_sherds"}, + {"id":"husbandry/feed_snifflet"}, + {"id":"husbandry/plant_any_sniffer_seed"}, + + {"id":"nether/ride_strider_in_overworld_lava"}, + {"id":"adventure/spyglass_at_ghast"}, + {"id":"nether/return_to_sender"}, + {"id":"nether/fast_travel"}, + {"id":"nether/uneasy_alliance"}, + {"id":"nether/use_lodestone"}, + {"id":"adventure/read_power_of_chiseled_bookshelf"}, + {"id":"husbandry/leash_all_frog_variants"}, + {"id":"husbandry/froglights"}, + {"id":"adventure/avoid_vibration"}, + {"id":"adventure/kill_mob_near_sculk_catalyst"}, + + {"id":"adventure/trim_with_all_exclusive_armor_patterns"}, + {"id":"nether/create_full_beacon"}, + {"id":"adventure/whos_the_pillager_now"}, + {"id":"story/deflect_arrow"}, + {"id":"nether/all_effects"}, + {"id":"adventure/totem_of_undying"}, + {"id":"adventure/honey_block_slide"}, + {"id":"husbandry/wax_on+husbandry/wax_off","name":"Wax On+Off"}, + {"id":"adventure/fall_from_world_height"}, + {"id":"end/respawn_dragon"}, + {"id":"adventure/spyglass_at_dragon"} + ] +} diff --git a/SwiftAA/Resources/Advancements/1.21.4/nether.xml b/SwiftAA/Resources/Advancements/1.21.4/nether.xml new file mode 100644 index 0000000..62a6c77 --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21.4/nether.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SwiftAA/Resources/Advancements/1.21/adventure.xml b/SwiftAA/Resources/Advancements/1.21/adventure.xml new file mode 100644 index 0000000..c16c86c --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21/adventure.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SwiftAA/Resources/Advancements/1.21/end.xml b/SwiftAA/Resources/Advancements/1.21/end.xml new file mode 100644 index 0000000..ec6f59b --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21/end.xml @@ -0,0 +1,13 @@ + + + diff --git a/SwiftAA/Resources/Advancements/1.21/husbandry.xml b/SwiftAA/Resources/Advancements/1.21/husbandry.xml new file mode 100644 index 0000000..3d3ec35 --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21/husbandry.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SwiftAA/Resources/Advancements/1.21/minecraft.xml b/SwiftAA/Resources/Advancements/1.21/minecraft.xml new file mode 100644 index 0000000..56b012c --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21/minecraft.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/SwiftAA/Resources/Advancements/1.21/minimal.json b/SwiftAA/Resources/Advancements/1.21/minimal.json new file mode 100644 index 0000000..712c261 --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21/minimal.json @@ -0,0 +1,66 @@ +{ + "categories": [ + "adventure", "end", "husbandry", "minecraft", "nether" + ], + "advancements": [ + {"id":"story/upgrade_tools"}, + {"id":"story/iron_tools"}, + {"id":"story/lava_bucket"}, + {"id":"nether/distract_piglin"}, + {"id":"nether/charge_respawn_anchor"}, + {"id":"end/dragon_breath"}, + {"id":"end/kill_dragon"}, + {"id":"story/obtain_armor"}, + {"id":"end/levitate"}, + {"id":"end/dragon_egg"}, + {"id":"story/enchant_item"}, + + {"id":"adventure/trade_at_world_height"}, + {"id":"husbandry/fishy_business"}, + {"id":"husbandry/make_a_sign_glow"}, + {"id":"adventure/spyglass_at_parrot"}, + {"id":"husbandry/ride_a_boat_with_a_goat"}, + {"id":"husbandry/kill_axolotl_target"}, + {"id":"adventure/sniper_duel"}, + {"id":"husbandry/silk_touch_nest"}, + {"id":"husbandry/allay_deliver_cake_to_note_block"}, + {"id":"adventure/bullseye"}, + {"id":"adventure/summon_iron_golem"}, + + {"id":"story/cure_zombie_villager"}, + {"id":"adventure/walk_on_powder_snow_with_leather_boots"}, + {"id":"adventure/throw_trident+adventure/very_very_frightening","name":"ATJ + VVF"}, + {"id":"adventure/lightning_rod_with_villager_no_fire"}, + {"id":"adventure/sleep_in_bed"}, + {"id":"adventure/arbalistic"}, + {"id":"adventure/two_birds_one_arrow"}, + {"id":"adventure/play_jukebox_in_meadows"}, + {"id":"adventure/craft_decorated_pot_using_only_sherds"}, + {"id":"husbandry/feed_snifflet"}, + {"id":"husbandry/plant_any_sniffer_seed"}, + + {"id":"nether/ride_strider_in_overworld_lava"}, + {"id":"adventure/spyglass_at_ghast"}, + {"id":"nether/return_to_sender"}, + {"id":"nether/fast_travel"}, + {"id":"nether/uneasy_alliance"}, + {"id":"nether/use_lodestone"}, + {"id":"adventure/read_power_of_chiseled_bookshelf"}, + {"id":"husbandry/leash_all_frog_variants"}, + {"id":"husbandry/froglights"}, + {"id":"adventure/avoid_vibration"}, + {"id":"adventure/kill_mob_near_sculk_catalyst"}, + + {"id":"adventure/trim_with_all_exclusive_armor_patterns"}, + {"id":"nether/create_full_beacon"}, + {"id":"adventure/whos_the_pillager_now"}, + {"id":"story/deflect_arrow"}, + {"id":"nether/all_effects"}, + {"id":"adventure/totem_of_undying"}, + {"id":"adventure/honey_block_slide"}, + {"id":"husbandry/wax_on+husbandry/wax_off","name":"Wax On+Off"}, + {"id":"adventure/fall_from_world_height"}, + {"id":"end/respawn_dragon"}, + {"id":"adventure/spyglass_at_dragon"} + ] +} diff --git a/SwiftAA/Resources/Advancements/1.21/nether.xml b/SwiftAA/Resources/Advancements/1.21/nether.xml new file mode 100644 index 0000000..62a6c77 --- /dev/null +++ b/SwiftAA/Resources/Advancements/1.21/nether.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/blowback.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/blowback.imageset/Contents.json new file mode 100644 index 0000000..6b18bb9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/blowback.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "blowback.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/blowback.imageset/blowback.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/blowback.imageset/blowback.png new file mode 100644 index 0000000000000000000000000000000000000000..a71ec05954f7460d9f6bb29bb8cc2c0436c1a9c5 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}T0G|-oX^VGWzWx98`~TN(KRtf>%J$ty9z6TMdgJcBC;zuhSr1gz87y%c zNO6}0`33)n0|qaD#!oO=u<5X=vX`tXyPZ!4!3&G?BiBAoJ z)A?uF*!(;E+o}bp56TO6JFSta5&qBiSMcU$#v6_N1^%4)hQBOje3seEJqn~w%y-V%${>#`}+6* zp4P$u9tKXO+kBfOmk2{z?t=hSQ&(8M|O^S|5X1qW8HTw!3dqnv-8V9JY)+T{|{ zV)i*$@HliOu4~9-iEQ#U_K-Pz#L0U1{}X;kmkKVa6mf83V2D{39IDr_Hvr^YPgg&e IbxsLQ0G>E;GXMYp literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/Contents.json new file mode 100644 index 0000000..6b55055 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "crafters_crafting_crafters^16.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "crafters_crafting_crafters^32.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "crafters_crafting_crafters^48.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^16.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^16.png new file mode 100644 index 0000000000000000000000000000000000000000..51a37747b24a327fab81c5384b975f81bc3e8a29 GIT binary patch literal 984 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 ArT_o{ literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^48.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^48.png new file mode 100644 index 0000000000000000000000000000000000000000..f799a67f30cc12c371c53b8466e3680b69a4364a GIT binary patch literal 4693 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 K2P6&QoBR(!W{#Tx literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^16.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^16.png new file mode 100644 index 0000000000000000000000000000000000000000..dd328f2b87984188f654b7db28fda9eda8d5d411 GIT binary patch literal 861 zcmV-j1ETziP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz0`f^jK~y+TZBt83 z6HyesZ>BTDOhd7>#r~)TY#^YbhD2jb3@bMVF~Nzm zr{1u;85CJWnyy1ljbqAGWxjjjWY>#&JCd&U52K=k(_QBo&b;HTtVqWe7iNLargXQ* zr`0tylWw;cD4JFSGhYco6j1Ad!w`=}Ki;`LbR1K~qCoeh>t;!k!q{Ggs%r{~2tzCu z0*loScDoA%ArF1Z zY&JW{vJ8?a!LOe)@aEN1a&GoJh@zOsWUat03Q!acs-_azTpDHr-(dRldx%FvkjrLZ zCAb71-o1v2mt&C4u7QDKK$Zl;W-=A1>jFZK$A@VUB>^`~1wNO748Ht(J^)LL^O!^d zXEXsp7@&gX0NVwM;Wh=bnKY=Xsu2VUsbr#PpEFhhpU(nK(;!JAXqo~fNdje{Kv85Z zos4b@gySJ1nM$w}&a~6zQE8e1jx%DC3X&{gaT$LKFbu2WNhy@T(k63}Tl}#c%jeRm z={%oXYJfdY)kW z0W9e>kd!B%=ZVzcgpTdvmk{y85C}JM>Q6j0V6i%GL?X*ljorRJNLzp`wyKV5v!fRe zUwff`oN-duRDUcM8^`Bmqr8E=tp`zKQ%l)0xt#7!x7$;;Om>HpwAyU{OT3P@Lr2lR n{cYRU*;TuXtgH8JAp-mZpO#bHS*99500000NkvXXu0mjfhA4HH literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^32.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^32.png new file mode 100644 index 0000000000000000000000000000000000000000..c65d753e922bc5f991528f10648076d1afd1620a GIT binary patch literal 1977 zcmV;q2S)gbP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz2Tn;uK~z{r?N(cC z9A_0iGqbbn_1?VRwRhKEukB4D$8`~D6N;4w;DLa6;i0Ms71UHs6wwFLkPws?pjD){ zG)fijpeio~DMCm{h!>LyMcU)T2fviHl(&V}#%o~-Jun~EoR=$EW^ zJ@e0hzVn^$ocZY!{I4N7-w(u#uUwQCGqdt9FPt@i$4YwOpFCEbCk%9liAI zH@+?cU-;GU6?|Dc5osat)RE(^-(LLbR>obV9y@$yth>ASl%~~&@7#Hxrl%&&a$$oK zsXa;}IY7Z+2dRomON%q6EGaa&YgkDQ>>{t%H)R;c`IY5`*I##?qLI>yoS}hYPul z@Qru=W!${>Px6PNO0s{q})SgG>hS8w><{BXz zu}+p{f=Z;gT!aAR_OwwIO3mG!rp3A2)EP<0u~?tW9|&2RRyS|oy3u?2&A+@V9{vzo zN-*}!aYG_WvL%qiT}hV6G!5EVTczd2yQD$tzQG~thV$dyNd)R5x7$sb%pBc#?<(%s zX#ZoMr>^cEDi-pTS(+E6$t=uTaG?Fc)VnSxl)z2|Y+cs~^(R$zQx%TqOyh|@3ZnLl z3o~@%`W15H-tfo)LaEq*Snr~TM)p%Ol_p)U)9lPNy*GJsS9FIiB?w@pp`^@som7k5hcUWX)U`OelP4jbiAbU=%kx{y0VH0X-C`YgOu2sueGqWvbOBd{Wbo6;%3=ax-vz)bB zS*XETxm+qf3gvU_)M)6GMaEa&`kTlcElc%Ug$ns~(zQDFu*7=!NhD(9Qz+zKa6$>R zb^#=lpxYTH{6`MMpxhZJJ#7Ss|+K~(#FP$P^!Yu zU{ZR}9g>7F*mozi5a3o~*VnbG$bdK2wHjsS@1o^YYHRn2%z2%r*U0A&iuJm#lZ-$T zrXd@bRcnKP0>Q8o8$GZCi53F9k%0}l3j{*jmJ_RgY&Yd;H^Jqhd3U$BTO)38FSmCTH2r z<3tlJ1oEYv$j(9;m^~g7GP5#Xub0|U2B9c#j2|3?2bH+Sz;!0b24?3ocrO#9T$u4b zv|PbL(=Zwqw~-q!m~OoBIQV9+B>J1Z!9h7M26uyHTKL6eWMu9_$5cpxa_zo=Si`|V z2LI6>_o0OV4jD?lT9xtAVSTN>zBGOI;2|14_ys|v=?e$k5u7b6z!Q=`v3QDxAO4IO z!I%ve{9&R@vaV?@bEky>YI_orEun{%&9zmzSj-!!zcoDa2n7NmF>HhaXi+wysI$-? z3Vu!eiB)Jeq&4ah7>qSH z*?=g4lwHkW2Gj{k;lSY$Q?G%)*`zS7Wi)gvpI=w-@{t=2Z3fT$2+BOOmR~ThCky$_(|WzS&(qe< za&xBGK@rEX25QV+kY(2-PDkgWU5QIq-@Ysi6HoLoBWqlAA0!HkE1lF8@fKq<5qQhVML7;7>7yEEoYXR$MRHa&{eBf%(ZN`CGdZR{f`}# zP?~Li8BFg!)YH>D(chn*NTvo3IhO_c2X-j~gS#J?+$Z=y0nvW|D+93<*^1Mz00000 LNkvXXu0mjfV|TmT literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/Contents.json new file mode 100644 index 0000000..fb3ecd0 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lighten_up^16.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lighten_up@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lighten_up@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/lighten_up@2x.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/lighten_up@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..711f8317a3d44f8c7d513029edc0ab2e4f5628c6 GIT binary patch literal 2980 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 ZJO#Qgir@e%oCp8_002ovPDHLkV1fYuu6_Uj literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Contents.json new file mode 100644 index 0000000..8a1ffc7 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "minecraft_trials_edition@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "minecraft_trials_edition@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..e1456d438f5e482d5050c6f44d2e79a02ecc38a3 GIT binary patch literal 1048 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX$A&nGfx-C5DP)uAn$CI zP?3M{)<$3b`s!VY`o#>NTjFez^O>2s&K+7R#p2kc@hELtQ@5eyk;F|CS*pyE%bFhe z#c(v8`O_46CN98Z&P0!n$uGYwp0{${s_Oj8RmVR%6OJhPs_y79(l>f2G-O#ATPj|<^eRJo>Ov7cbe?8T=H=iaZ{`J|^w_UNne$;;Z z+rK}obfMkt>t^;HmvV{?WcJMT;l8nr|NOQKnN{UFmv`*jUHy1^dp*;1ySoW*0yos= zX4`f=*42D^)N_)v=*(wr36&F_wPGdP9u)hEzg<>;TWHb!_wVnnxxeZBz1q9cR^PAr zPgaT3-{LThEov2)-{D7x1Ue=Oe7zHuWvlB|vWt7q>)RW63P0c8``#{T{+`dTF7tRaI-&3Nsm+^23S}qob@BKj$rc8;%{}0v`8d!<0Xeiakd%bkQ)F-LaoGwHc}@GVV~$jT9E%r7Chf?GpXY zB~iIIrmQcIeZN-Y>6>Rh4dSkBLJ~d2H(G*^{Iii~9IVTiPZpeI66|(E=8!=-kw#!k|(jORDrmy)lyRWq^ zbye50k236=bUHlWGVm$-bg6dLMCH3yuIqL?{4w+FoYh$+Rua8=Pb>S%PK%%R?%wsy zX6O2A*>1CBJg4Qo_~{pIy-n4N$^Y_`Y0oW}|Bv4J{m-difBqa2)2t5^s6V!YuSrmv zPhBNp@wI+$Av3Q@w=ZYjlfNT>W=+nX@86_;e=cY#kdeJ(Z}(Gi{i*vFk5^x*omzNs zS>&-(L7Pmx-?0S#IBM^%9)3y1R>5J%IcWLhxO-?P%{PrXM+0t48`z+bDpzP)8>gTe~DWM4f`&hmV literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/minecraft_trials_edition@2x.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/minecraft_trials_edition@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fafe6e7ca4cb85afbb7b48161ef9dda3765f2503 GIT binary patch literal 2859 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 AbN~PV literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/minecraft_trials_edition@3x.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/minecraft_trials_edition@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..856dd41c9d244b5361313745b40e6583a4be9752 GIT binary patch literal 4742 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 MQeCc6#x&@E07vTM1ONa4 literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/overoverkill.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/overoverkill.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/overoverkill.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/overoverkill.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/overoverkill.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..e7740c17f09c4cb78308931d79033879fc02cebd GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`pFIo-U3d7J|tM3QQI| z+5fU9Dosh!V$7Vgv*7Okzt86#=H=`?*|Is(V5@?Q!>q%LlO(>qxyLKECU^d+g6H49 z{x@GApY-FyKiP;L&V@2lTh~Y~dHC`1ah~mZ^63#f(&QsPFRs2W>1cI;WmOm(Tgut| z`28sxHf>FxFm-Bbz~!we8SBoZ35bcNTU5SbU_K!*C(fe!7fFB{mbv9VDEYH!EzWjOkO4m z!H#w3W?RpH_-^0Jie$FCtPdPQ0D(|_K6e5L0)!;EJVv6UM>Z_GUQ znl*(vA?bu3qhyzkdw?;=ff%Mq$5%>PKA0fdcqBn$ecFuRM6-hiCmc$g3$xtHj5fJ7 s%}Sh=kfW}y{>W5`d4iijngq~s-M@EguWHB;0=kO9)78&qol`;+06+FfO8@`> literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/repair_wolf_armor.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/repair_wolf_armor.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/repair_wolf_armor.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/repair_wolf_armor.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/repair_wolf_armor.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb119c6b2564679a8040854404e9f86a6ea6940 GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`pFro-U3d7J|tM5}z6b zZ?gN!$^Cy__9h`FddBbnpP!%SNqUsTbANwr`hzErQa)t8bqeIZe4Ht%!K6W?QRKKy zE#tL6Z(oZq=#gMPp)et)XWhYi(@ah_;bhykaQ%406)RU5M1)>3XyRqiWNMtQKd(7c z;N!Eu;%ux6yhbmsdQaeBKKwiX{()JFZO%t#ID{OU!`h>8R>4<+A*kT>OYRLx8yLhM z9e(bg5V(O+A?(^G)1LcB|24BFvNc*9Uw4PGyRqZ?dwau}J*E6Q+kSuG++i`taI+O- z4%3PKFC><&Fghoj#O=c%-|K65MyTeO#^l*zlAq*fpEU^PJZan@B~6@vd$@?2>{59k;ni5 literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/revaulting.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/revaulting.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/revaulting.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/revaulting.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/revaulting.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..cf6054cd06e4bf9c3a565bedd64e953051e47864 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`pE3o+UC4&D}9o;(o|aoi@l)P==S=;EaF z2J>dw@yZ;!SNHJvC^tjX}V3~JL4H9 z2CnJ3k(q3HD#Y*XBr!DuKt=x67uvYb$>!FY*S0cL>-aMjJx5z?(W8&F$ z6JCFqv+aHN9nras%O{)b^saN$6yZ4~`n#p^^xHdYudb^36UP&L>DS5Z7hl;PufHiE zdRodcSoigk%v*9tikM`~99`-_gzSx3KyZpVc`Z?d_`>SReu9XrO#T)x*uBX=>ExPnHaeew*RU&mDQ zuQg23eo#<7b>ev`&fl|>?f6CGLjPpFK6NC2g7ys0#<_9k2bWyGZsxfB!o$Kz-@ZA1 z+bQ7s=J20yFOPK25&AWcO~B`zzoMYzWE*w8s2d{xO*B@{(y6i7oAa7){ya8~W7{`u sKDwGmGW$<;tJ_k)>%WiZT+sf*PO=u<5X=vX`pGoo-U3d7J|ts2bf~^ z&iS{P+kWTwo`=7BrF&jH(s{w8aCQ&VAD(}D=Mq+``_DJDssBEaQH71=|3%(|1`JD1 zMFdZN_~q$q1vMFuPH)2)cBhg9EqV-(nser?`PlRDrZ-31#*HhFW-)jqesE;lVD4bn zd_zG>`T&Q>1f}Ba%l|KZGUD-O=u<5X=vX`pG=o-U3d7J^p;9lZ_* z2-ND{JtEdAljeBCNmRz(r%S^2rQ zdM*BaKh1ye2y=KewRn;-r$dKQipMn@_H(5{&%ZV8Fu@x01t4 zbI-TrClf_32UqOdnZH<`Y2Ne0n!gL~s{Y*(5vh|T&{^Oh6})NsYxaq|k1xyAQFK@@ zeshxI%CPMM{*9}{j8A@^Ah1U7{HLj`?%sVo9g8Fk)K1Zr>-F2{^4+*H#vV46E>Sp5MExGFeTzc+1fN4&*n}~kq?I~YO=u<5X=vX`tXmPZ!4!3&G@s1?m=+ zDIfnY??3mS{h~qj%mf}M6OYL~bNHG&W|$m4Hut#Xs;tci+BOJW>d@i8bmolGfq?kC z2R=Nz8a&}j{i0X~;}`Ge^Cz73my2cOHaw*A;iAHG=@~nkrr^A$_lg9o0HDI6iP7QMn#Jw8bIY!P8N XqqFGIg_N>)AfJ1>`njxgN@xNA`g?vD literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Animals/armadillo.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Animals/armadillo.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Animals/armadillo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Animals/armadillo.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Animals/armadillo.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b6dba28abb0cbd34959aec821eedad8b59db32 GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`pG|o-U3d7J|ul!eYP8 zXXMyd|C?`-fkVOn6t@`U(;<9U85)ex37k27fa@OJt7 z0}{))o(VDQy3P=ovCnv=+)+`NoeWEg%h&1OX!!p>@Qbm*u@_Pcx*Db$8gy`dYK;8b z&S!XUUPSw%XP+m3=W)9`!G?+7Wrf`u5oKkiw+$xB%p1;Zd=?}ky(Vk7pw)s^iR&D; t$*Qypu`Q~ZbE0kWhS1Nm4R}~J85kUvHnCmlEqo6Ob5B=4mvv4FO#m5isPq5; literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Biomes/1-1/pale_garden.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Biomes/1-1/pale_garden.imageset/Contents.json new file mode 100644 index 0000000..a64af53 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Biomes/1-1/pale_garden.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "pale_garden.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Biomes/1-1/pale_garden.imageset/pale_garden.png b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Biomes/1-1/pale_garden.imageset/pale_garden.png new file mode 100644 index 0000000000000000000000000000000000000000..09684f5cf1ad38cd4a781962898b7804a729ef00 GIT binary patch literal 1563 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|mZe5`ruq6Z zXaU(A3~Y=-49p-UK*+!-#lQ+?GcbfPO2gT4j2ciiKrlv zAI<`g$YKTtz9S&aI8~cZ8fZptW=KRygs+cPa(=E}VoH8es$NBI0Z12vO@$SZnVVXY zs8ErclUHn2VXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7QL^bGV2l1AfjnEKjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7US zFmqf|i<65o3raHc^AtelCMM;Vme?vOfh>Xph&xj&G7&cA6+^uR^q@XSM&D4+Kp&en zpl9LkL(x@{Sb$SgNoE=jyFfA!ZQ#IwxX}jW0xNKYM!IC?rsfp`{bOfnW&?H_h6KWM zNE#z>X+)Ah(g^gHm2*)lDEWls=jYgAO-(lX=*rMc@CC+qN@7W(OJYf?osof&iLRlM zu90Pkfw7f=xs{29u7RnQfdRxA6tzg^fI`G7A}F;uKc^HFk9L-320);12qJCtF{IJ8 zB6No4WtP|(LA9U>qw9)9$YZk*SsGode^F*CFg1eRY6!IrSq!S)Mjwr7?~sGY+ub&&y|Yc492QlV|57~>ceGVH zCd))H`Rv-;bO5Ungm=RIdvGH})B#l*BjR$9l|0r8-e?HOE z`?z}g(@SiId;uDrO^cSu99Q+wQM=t&{W)5F)dZg-D+{$Gzc(K+a1;6XM`8Zy304yu zo?Avvv$_AijD5;;b`O!(vgP7RQ%)`sXQ^0M`oQs3<-f4Zxm~%pBLzO#_*dR~tNP`_ z&v)ih?bokAcky{I8$0XC)?a~JgG|mAZjJi$loI(es=jWv#8D<<_!-c%-xnG zmzv(snHQwRxyajo|CxKg{dO}MD>ZMqE&VUiS&GxeQ9-KVz>b)EJckXYhfd?>*jg8$ zd^~}NfBUj^8+3NZIIMh9VY9KSHg?jHg?T}YYtO%X|29bEpMn#|EXJ0{i}E~mypzopr0Mh;V AK>z>% literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_ashen.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_ashen.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_ashen.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_ashen.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_ashen.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..44fcf32690e45a917f6ef3f91514725b3ec5d426 GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`tY9PZ!4!3&G@+hNk}x z49U$IZVC?19#2Yl3UlF`&ARO6=l=49XOqR}Cpu}E=v8*bGJH?3^)b>7J~m8+d>7y>Z%j^4<}NGxcAe@y=*lD*S5agIj;uKTKJ%l7W*wF|cq$ZhriJ zmdn@WZCEZVIC%#)p4#}~%R}xBFBe>xHt_-LW_g=^e9ID7ez-Hyo9D$w=R%1Cml<{D uIfm`p&DNOfroQQNx8#JYjZZYo7#S+g`|O@M-N*^(Wd=`IKbLh*2~7Z#C5h7j literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_black.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_black.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_black.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_black.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_black.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..44666d0dad20a1c0f4199653e56f13636299edf1 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`tY3PZ!4!3&G@+2BvWK z>HiJPI_}jb@GBe1Pqz`?q*Qc6$G|s!-`@tqjhA*jS^2!FfByc4+-J|9GG3mRX7<3~ z;loD^pA+>ORyJEsuF`9m$+4O7nNZ2>n>Q>Hy$+fj)oVEZwO)Zi^5h8)!Jxnp=GzC3 z9b{d$K6XFDvW2G{ULD|C`J74Dm$|}gikLX#Z8o3Y1gRNZ2ftjNo`1lkgJD;Pm0rX0 zBk}h88h!tNd~3|C!`6_=sKeIX>Hj{?sG#6u)6oQ$qlpaVj3?3r7;YB)xgt1&Rl`Ih hE#XyykjQQZ1}OzEmjth~?}6TA@O1TaS?83{1OR`(e_sFq literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_chestnut.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_chestnut.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_chestnut.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_chestnut.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_chestnut.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..8141d141cc7bc52e9f279778bcf64c1c2bad9abe GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`tX+PZ!4!3&G@+hNkbg z&HuG;blkFFxxKQH{B#@PO-e;KbPRmM-`lnrZoIVP$;#(V^-KbrpDbN^K<|ad8K(Bm z4GQuz^jGULFO#>cZF}VOY9~Y5n|03151i39mp|ANkP&QaDq?q3ui^ODdIbi_vxiQx zZ95p_&F)jYX>;?-zv+HWFZcid*O=+1z+kxIc~jdOkqz8@^Y1>{QFi~a{6FRreY!6467MTUCE3L4`w*0aO=u<5X=vX`tYBPZ!4!3&G@+hNj)y z^ZvJQblkFOmX@-S{B#@PO-e;KbPRm&@2hJx+<0lnlaC0O3EDQHppE4or0^??7?%69IGgWx8 z+~i@Z*_4(b<#HgWjkDp&JUa{4$4!}ChZ){6%{V*l+&i9ynwc8g4p?kf^G~qYCw?s2 cT~?fdp-I-&yNM}O9_U2|Pgg&ebxsLQ0JV;K%K!iX literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_rusty.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_rusty.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_rusty.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_rusty.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_rusty.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..6113ef82da821b135ac27923d5c1ea68c8530c5e GIT binary patch literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`tXYPZ!4!3&G@+hNl1j z>;JZIbTm;`mR2^BpKc?(NvY_Dj)8CfygRJM`)mGi2sQ zm}IQ~JKx~{Xa6vRzaM||8`zfKm)sE770bZSEXkO*;ba$6O~S8Br~MP8(l*btaQX9( zy`%fUB!{LX@dJk+*b6lHh>D4_OTSyM#irCuH(5O=u<5X=vX`tXmPZ!4!3&G@+hNl1j z>;JZIbTm;`mR2^BpKc?(NvY_Dj)Cv}eYGuy8!zp6vhsP;ZU1|VZ|uqat~kZOaeBMv zvU%JIYIfCMn2xbrmba^MdiYvWW8nwQGDe$q|Ct$2WO%ZcZs4u8t<^Alntr7D=lXkl z7%%rYFeC+>XBE%8$F!Tlk|#;Y`M@^a$bD=+%^aGRoCdcYVtcLh8kW1vIIAzeKP};T zD*J7t)L%9RyxpDi=hrv=Ji&4_k)fRNM4AA@O}ok@^G&J+WqEa)%s#R{6OzOk7z|dq V{(WrJ@CE2O22WQ%mvv4FO#tH$ce?-p literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_spotted.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_spotted.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_spotted.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_spotted.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_spotted.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..f709e2eea4cf40e94b03a824b99d6e17060f4e50 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`tX|PZ!4!3&G@+hNk!V z_y4tTbTnDM!9dwae!7kDCZ(bqItIS+`|6mC{bj9Lg`E}_o(w+E>KGkCiCxvXO=u<5X=vX`tX&PZ!4!3&G@+hNkzk z)Bm(@bTnC>&!%i7Kix)nlTy(Q9Rpu}dHZI=jhA*jS^2!_dDH%bW~aS88(z-L^?YC; zDEf%?bEHY@!7q=~^$(czESSfgp!UwTO7M(L%_}`04xjyX-z9ydUu!Jr2!6v<5%Zs& zX~IRFH8}~=I=mqVP1xDBXWT3QA~fUQ@AvXE(pZ=Tnyd6ObUB%KC;ac6%_F45ln^~F z&x&W+;=efuzjT|+OUUS6Ir!$)ywH%c#@gAZIa=-t50a0k0Rw=+)78&q Iol`;+0A+8CYybcN literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_woods.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_woods.imageset/Contents.json new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_woods.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_woods.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Dogs/wolf_woods.imageset/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..2bc34bc9a04a603aaf998e4935e67473671ec23a GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX`tXwPZ!4!3&G@+h9>>< zdVkwDI-2xPkyAF3pKc?(NvY_Dj)AX!{9Xp*`}=Eog`E}_o(z7&w8P$Z?bZW{2hJbv zN-~x=H=gnT&6qH+Cj~-Need1F?W}Y6OLG7n!(guIOef2gt%fX_+_BF;}@d@#HLZK?H z2e!48=CNO1eaiOWm$}d1A28`S@#40RtoVUsM~BN&IlpF?%S(vF&OPwv^16!&Qf_x{ z?Cf`R@nAT0muHzKAM*}w2eW2|6Kyl*gc(TBJ<NS%G}x0G|-okYxS&6>%}S=392mJAGz%PMz!gh4pc{h7FAceRC7t!=yq}G^S3g zc>nKEdYM&1y04il=X8G_4WM?;0*}aI1_r(ZAk3I`t&rbwpb9!p;<*KG5pTGVO&zYN3w))ncR}r~$e_l<|whpq3 zYkzF~+YhLPv%n*=n1O-s00=W?UF+lo3VM0EIEF}EPEHUI5lKl12y!y$={+dJrqU)f zA;iecEosLNiDrW)L8)2O!s6tlx)MrS+Wfq^dEYu1guS(6X4xICD3QK^;gm%&8$+?C VZm0I_c0r)244$rjF6*2UngIJyOuYaA literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/creaking.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/creaking.imageset/Contents.json new file mode 100644 index 0000000..efab94f --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/creaking.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "creaking.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/creaking.imageset/creaking.png b/SwiftAA/Resources/Assets.xcassets/Icons/Criteria/Mobs/creaking.imageset/creaking.png new file mode 100644 index 0000000000000000000000000000000000000000..bc26dd0d8929564d219af4287adc7707f777c4b6 GIT binary patch literal 1631 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|j-^I;ruq6Z zXaU(A3~Y=-49p-UK*+!-#lQ+?GcbfPO2gT4j2ciiOh7e;3_y}W42aX(GZ|Q*>T7^B z2zUT7&?E>QkXezMlbcwQU!)LFl&@f{XQpRp!oa{Xfdy=a2vFUo1&j#$7cjxi6Ij5E zU<1`L7#SFuSQ#2w8CfbA7+INES{axzT#jC;50v68@Q5sCVBi)8VMc~ob0ioTm^WsI zM3hAM`dB6B=jtV<jfNYSkzLEl1 zNlCV?QiN}Sf^&XRs)CuGfu4bq9hZWFf=y9MnpKdC8&o@xXRDM^Qc_^0uU}qXu2*iX zmtT~wZ)j<0sc&GUZ)BtkRH0j3nOBlnp_^B%3^4>|j!SBBa#3bMNoIbY0?6FNr2Ntn zTO}osMQ{LdXGvxn!lt}psJDO~)CbAv8|oS8W7C#ek%>baNCu}iU>L!@g<@GnVgW=G zI4~e?v;n!mDl#awI6tQpV#!SJFW!d zTz+5yQtIjA7-AuqoUlOb#hfeunDmw8v(j7K{jH2e=c*7o1AW`@Kr zMjeGlb^dt^x{Vu5xH-5CJ8FI$04B-<9~eE7nSBf#Q^GyGJAiWa7618kc$4b?eiU9N za`b4A!Nog^-u(BMvrnEdaca_v^oWxOa#o!A@cmD0+cN(;9{zXtnWZ;;e^I!jYC`MN z%BejC;y&+YpIWhU?JPANlzRcaul0EHOFzao`BGD5Q^lm7g9$$j{6clbfZ;W=*JL;%r*P^CV>gqY;-8kH7w1Hg=7U^QVs=zHsdV=XLfzw+U(`7u4%n zUVWL$Pnp3=mt7pC(v^zEEIiSu@h9;l4;boFyt=akR{ E01V{##Q*>R literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Generated/Strings.swift b/SwiftAA/Resources/Generated/Strings.swift index 59797dd..dff6396 100644 --- a/SwiftAA/Resources/Generated/Strings.swift +++ b/SwiftAA/Resources/Generated/Strings.swift @@ -753,8 +753,9 @@ internal enum L10n { /// A Seedy /// Place internal static let plantSeed = L10n.tr("Localizable", "advancement.husbandry.plant_seed", fallback: "A Seedy\nPlace") - /// Whatever Floats Your Goat! - internal static let rideABoatWithAGoat = L10n.tr("Localizable", "advancement.husbandry.ride_a_boat_with_a_goat", fallback: "Whatever Floats Your Goat!") + /// What Floats + /// Your Goat! + internal static let rideABoatWithAGoat = L10n.tr("Localizable", "advancement.husbandry.ride_a_boat_with_a_goat", fallback: "What Floats\nYour Goat!") /// Husbandry internal static let root = L10n.tr("Localizable", "advancement.husbandry.root", fallback: "Husbandry") /// Bee Our @@ -1114,6 +1115,8 @@ internal enum L10n { internal static let biomesVisited = L10n.tr("Localizable", "goal.biomes_visited", fallback: "Biomes Visited") /// Cats internal static let cats = L10n.tr("Localizable", "goal.cats", fallback: "Cats") + /// Dogs + internal static let dogs = L10n.tr("Localizable", "goal.dogs", fallback: "Dogs") /// Foods Eaten internal static let foodsEaten = L10n.tr("Localizable", "goal.foods_eaten", fallback: "Foods Eaten") /// Monsters Killed @@ -1415,6 +1418,8 @@ internal enum L10n { internal static func goldBlocks(_ p1: Int) -> String { return L10n.tr("Localizable", "statistic.gold_blocks", p1, fallback: "Gold Blocks\n%d / 164") } + /// Heavy Core + internal static let heavyCore = L10n.tr("Localizable", "statistic.heavy_core", fallback: "Heavy Core") /// Major Biomes /// %d / %d internal static func majorBiomes(_ p1: Int, _ p2: Int) -> String { @@ -1462,6 +1467,13 @@ internal enum L10n { /// Beaconator Complete internal static let beaconator = L10n.tr("Localizable", "statistic.gold_blocks.beaconator", fallback: "Beaconator Complete") } + internal enum HeavyCore { + /// Obtain + /// Heavy Core + internal static let obtain = L10n.tr("Localizable", "statistic.heavy_core.obtain", fallback: "Obtain\nHeavy Core") + /// Obtained Heavy Core + internal static let obtained = L10n.tr("Localizable", "statistic.heavy_core.obtained", fallback: "Obtained Heavy Core") + } internal enum Shells { /// Conduit Crafted internal static let crafted = L10n.tr("Localizable", "statistic.shells.crafted", fallback: "Conduit Crafted") diff --git a/SwiftAA/Resources/Indicators/major_biomes.json b/SwiftAA/Resources/Indicators/major_biomes.json index f2fb208..d17491f 100644 --- a/SwiftAA/Resources/Indicators/major_biomes.json +++ b/SwiftAA/Resources/Indicators/major_biomes.json @@ -17,5 +17,11 @@ ["stony_peaks"], ["frozen_peaks", "jagged_peaks"], ["mushroom_fields"] + ], + "1.21": [ + ["windswept_gravelly_hills"], + ["stony_peaks"], + ["frozen_peaks", "jagged_peaks"], + ["mushroom_fields"] ] } diff --git a/SwiftAA/Resources/en.lproj/Localizable.strings b/SwiftAA/Resources/en.lproj/Localizable.strings index 1b4f13f..1d190cd 100644 --- a/SwiftAA/Resources/en.lproj/Localizable.strings +++ b/SwiftAA/Resources/en.lproj/Localizable.strings @@ -26,6 +26,7 @@ "goal.animals_bred" = "Animals Bred"; "goal.biomes_visited" = "Biomes Visited"; "goal.cats" = "Cats"; +"goal.dogs" = "Dogs"; "goal.foods_eaten" = "Foods Eaten"; "goal.monsters_killed" = "Monsters Killed"; "goal.nether" = "Visited"; @@ -210,6 +211,9 @@ "statistic.upgrade_netherite" = "Netherite Up"; "statistic.wither.killed" = "Wither Has Been Killed"; "statistic.wither.skulls" = "Skulls\n%d / 3"; +"statistic.heavy_core" = "Heavy Core"; +"statistic.heavy_core.obtain" = "Obtain\nHeavy Core"; +"statistic.heavy_core.obtained" = "Obtained Heavy Core"; "advancement.adventure.root" = "Adventure"; "advancement.adventure.sleep_in_bed" = "Sweet\nDreams"; @@ -270,7 +274,7 @@ "advancement.husbandry.wax_on" = "Wax On"; "advancement.husbandry.wax_off" = "Wax Off"; "advancement.husbandry.silk_touch_nest" = "Total Beelocation"; -"advancement.husbandry.ride_a_boat_with_a_goat" = "Whatever Floats Your Goat!"; +"advancement.husbandry.ride_a_boat_with_a_goat" = "What Floats\nYour Goat!"; "advancement.husbandry.allay_deliver_item_to_player" = "You've Got a Friend in Me"; "advancement.husbandry.allay_deliver_cake_to_note_block" = "Birthday\nSong"; "advancement.husbandry.obtain_sniffer_egg" = "Smells Interesting"; diff --git a/SwiftAA/Utils/Constants.swift b/SwiftAA/Utils/Constants.swift index e16319b..c63ff15 100644 --- a/SwiftAA/Utils/Constants.swift +++ b/SwiftAA/Utils/Constants.swift @@ -17,7 +17,8 @@ class Constants { Beehives(), GoldBlocks(), SnifferEggs(), - MajorBiomes() + MajorBiomes(), + HeavyCore(), ] static let statisticIndicators: [StatisticIndicator] = [ @@ -29,7 +30,7 @@ class Constants { AzureBluet.shared, FermentedEye.shared, NetheriteUpgrade.shared, - PotterySherds.shared + PotterySherds.shared, ] static let finalStatistics: [FinalStatistic] = [ @@ -47,13 +48,13 @@ class Constants { FinalStatistic(id: "minecraft:gold_block", type: "minecraft:mined", icon: "diamond_pickaxe", secondaryIcon: "gold_block"), FinalStatistic(id: "minecraft:ender_chest", type: "minecraft:mined", icon: "diamond_pickaxe", secondaryIcon: "ender_chest"), FinalStatistic(id: "minecraft:lectern", type: "minecraft:mined", icon: "diamond_axe", secondaryIcon: "lectern"), - FinalStatistic(id: "minecraft:sugar_cane", type: "minecraft:picked_up", icon: "diamond_axe", secondaryIcon: "sugarcane") + FinalStatistic(id: "minecraft:sugar_cane", type: "minecraft:picked_up", icon: "diamond_axe", secondaryIcon: "sugarcane"), ] static let ambiguousCriteria = [ "hoglin", "tuxedo", - "cat" + "cat", ] static let animatedIcons = [ @@ -62,7 +63,7 @@ class Constants { "enchant_item", "sculk_sensor", "summon_wither", - "enchanted_netherite_boots" + "enchanted_netherite_boots", ] static var gifCache: [String: (frames: [NSImage], durations: [TimeInterval])] = [:] diff --git a/SwiftAA/ViewModels/Managers/LeaderboardManager.swift b/SwiftAA/ViewModels/Managers/LeaderboardManager.swift index f65f6d5..e1a6336 100644 --- a/SwiftAA/ViewModels/Managers/LeaderboardManager.swift +++ b/SwiftAA/ViewModels/Managers/LeaderboardManager.swift @@ -34,6 +34,8 @@ class LeaderboardManager: ObservableObject { getEntriesForOtherVersions(version: .v1_19) case .v1_20: getEntriesForOtherVersions(version: .v1_20) + case .v1_21, .v1_21_4: + getEntriesForOtherVersions(version: .v1_21) } } diff --git a/SwiftAA/ViewModifiers/View/VersionFrameModifier.swift b/SwiftAA/ViewModifiers/View/VersionFrameModifier.swift index 9f14d4f..3535e8e 100644 --- a/SwiftAA/ViewModifiers/View/VersionFrameModifier.swift +++ b/SwiftAA/ViewModifiers/View/VersionFrameModifier.swift @@ -40,6 +40,16 @@ struct VersionFrameModifier: ViewModifier { case (.v1_20, .minimalist): content .frame(minWidth: 350, idealWidth: 1488, maxWidth: 1488, minHeight: 260, idealHeight: 674, maxHeight: 674, alignment: .center) + case (.v1_21, .standard), (.v1_21_4, .standard): + content + .frame(minWidth: 350, idealWidth: 1672, maxWidth: 1672, minHeight: 260, idealHeight: 852, maxHeight: 852, alignment: .center) + case (.v1_21, .vertical), (.v1_21_4, .vertical): + content + .frame(minWidth: 350, idealWidth: 680, maxWidth: 680, minHeight: 260, idealHeight: 1391, maxHeight: 1391, alignment: .center) + case (.v1_21, .minimalist), (.v1_21_4, .minimalist): + content + .frame(minWidth: 350, idealWidth: 1488, maxWidth: 1488, minHeight: 260, idealHeight: 674, maxHeight: 674, alignment: .center) + } } .frame(maxHeight: heightFrame) diff --git a/SwiftAA/Views/Components/Panels/InfoPanelView.swift b/SwiftAA/Views/Components/Panels/InfoPanelView.swift index 13795be..6c15c11 100644 --- a/SwiftAA/Views/Components/Panels/InfoPanelView.swift +++ b/SwiftAA/Views/Components/Panels/InfoPanelView.swift @@ -23,7 +23,7 @@ struct InfoPanelView: View { PotionPanelView() } } - .frame(maxHeight: 506) + .frame(maxHeight: 514) } Button { diff --git a/SwiftAA/Views/ContentView.swift b/SwiftAA/Views/ContentView.swift index c8f23db..ca391b0 100644 --- a/SwiftAA/Views/ContentView.swift +++ b/SwiftAA/Views/ContentView.swift @@ -27,6 +27,7 @@ struct ContentView: View { case .v1_16, .v1_16_5 : L1_16() case .v1_19 : L1_19() case .v1_20: L1_20() + case .v1_21, .v1_21_4: L1_21() } RoundedCornersShape(radius: 10, corners: [.bottomLeft, .bottomRight]) diff --git a/SwiftAA/Views/Versions/1_21/L1_21.swift b/SwiftAA/Views/Versions/1_21/L1_21.swift new file mode 100644 index 0000000..9569013 --- /dev/null +++ b/SwiftAA/Views/Versions/1_21/L1_21.swift @@ -0,0 +1,29 @@ +// +// L1_21.swift +// SwiftAA +// +// Created by Andrew on 12/28/24. +// + +import SwiftUI + +struct L1_21: View { + @ObservedObject private var trackerManager = TrackerManager.shared + + var body: some View { + if [.v1_21, .v1_21_4].contains(trackerManager.gameVersion) { + switch trackerManager.layoutStyle { + case .standard: + L1_21S() + case .vertical: + L1_21V() + case .minimalist: + L1_21M() + } + } + } +} + +#Preview { + L1_21() +} diff --git a/SwiftAA/Views/Versions/1_21/L1_21M.swift b/SwiftAA/Views/Versions/1_21/L1_21M.swift new file mode 100644 index 0000000..880e6ab --- /dev/null +++ b/SwiftAA/Views/Versions/1_21/L1_21M.swift @@ -0,0 +1,66 @@ +// +// L1_21M.swift +// SwiftAA +// +// Created by Slackow on 12/29/24. +// + +import SwiftUI + +struct L1_21M: View { + private var dataManager = DataManager.shared + + @State private var statusIndicators = Utilities.getSpecificStats(types: [.trident, .snifferEggs, .shells, .goldBlocks, .witherSkulls, .beehives, .ancientDebris]) + + @State private var statisticIndicators: [StatisticIndicator] = [GodlyApple.shared, EnderPearls.shared, NetherWart.shared, GhastTears.shared, Pufferfish.shared, AzureBluet.shared, FermentedEye.shared, NetheriteUpgrade.shared, PotterySherds.shared] + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + HStack(spacing: 0) { + AdvPanelView(indicators: .constant(dataManager.minimalisticAdvancements), columnCount: 11, isMinimal: true) + .frame(width: 814) + + AdvPanelView(indicators: $statusIndicators, columnCount: 2, isStat: true) + .frame(width: 148) + + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/balanced_diet"), rowCount: 15, goal: L10n.Goal.foodsEaten, isMinimal: true) + .frame(width: 330) + + InfoPanelView() + .frame(width: 196) + } + .frame(height: 364) + + HStack(spacing: 0) { + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/adventuring_time"), rowCount: 14, goal: L10n.Goal.biomesVisited, isMinimal: true) + .frame(width: 534) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/kill_all_mobs"), rowCount: 14, goal: L10n.Goal.monstersKilled, isMinimal: true) + .frame(width: 335) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/bred_all_animals"), rowCount: 14, goal: L10n.Goal.animalsBred, isMinimal: true) + .frame(width: 201) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/complete_catalogue"), rowCount: 14, goal: L10n.Goal.cats, isMinimal: true) + .frame(width: 139) + + VStack(spacing: 0) { + HStack(spacing: 0) { + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/trim_with_all_exclusive_armor_patterns"), rowCount: 8, goal: L10n.Goal.trims, isMinimal: true, hidePercentage: true) + .frame(width: 145) + + StatisticPanelView(statistics: $statisticIndicators, rowCount: 9) + .frame(width: 134) + } + .frame(height: 193) + + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:nether/explore_nether"), rowCount: 3, goal: L10n.Goal.nether, isMinimal: true) + .frame(height: 117) + } + .frame(width: 279) + } + .frame(width: 1488, height: 310) + } + } +} + +#Preview { + L1_20M() +} diff --git a/SwiftAA/Views/Versions/1_21/L1_21S.swift b/SwiftAA/Views/Versions/1_21/L1_21S.swift new file mode 100644 index 0000000..67c2e83 --- /dev/null +++ b/SwiftAA/Views/Versions/1_21/L1_21S.swift @@ -0,0 +1,83 @@ +// +// L1_21S.swift +// SwiftAA +// +// Created by Slackow on 12/29/24. +// + +import SwiftUI + +struct L1_21S: View { + @State private var topStats = Utilities.getSpecificStats(types: [.trident, .shells, .snifferEggs]) + @State private var bottomStats = Utilities.getSpecificStats(types: [.witherSkulls, .goldBlocks, .heavyCore]) + + private var dataManager = DataManager.shared + + var body: some View { + HStack(spacing: 0) { + VStack(alignment: .leading, spacing: 0) { + HStack(spacing: 0) { + VStack(spacing: 0) { + HStack(spacing: 0) { + AdvPanelView(indicators: dataManager.getCategoryAdvancements(category: "minecraft", start: "minecraft:story/mine_stone"), columnCount: 5) + .frame(width: 350) + AdvPanelView(indicators: dataManager.getCategoryAdvancements(category: "nether"), columnCount: 8) + .frame(width: 558) + AdvPanelView(indicators: dataManager.getCategoryAdvancements(category: "adventure", start: "minecraft:adventure/root", end: "minecraft:adventure/trim_with_all_exclusive_armor_patterns"), columnCount: 7) + .frame(width: 480) + AdvPanelView(indicators: $topStats, columnCount: 1, isStat: true) + .frame(width: 75) + } + + HStack(spacing: 0) { + AdvPanelView(indicators: dataManager.getCategoryAdvancements(category: "end", start: "minecraft:end/root"), columnCount: 3) + .frame(width: 212) + AdvPanelView(indicators: dataManager.getCategoryAdvancements(category: "husbandry", start: "minecraft:husbandry/plant_seed", end: "minecraft:husbandry/obtain_netherite_hoe"), columnCount: 8) + .frame(width: 548) + AdvPanelView(indicators: dataManager.getCategoryAdvancements(category: "husbandry", start: "minecraft:husbandry/froglights"), columnCount: 1) + .frame(width: 74) + AdvPanelView(indicators: dataManager.getCategoryAdvancements(category: "adventure", start: "minecraft:adventure/spyglass_at_parrot", end: "minecraft:adventure/spyglass_at_dragon"), columnCount: 1) + .frame(width: 74) + AdvPanelView(indicators: dataManager.getCategoryAdvancements(category: "adventure", start: "minecraft:adventure/avoid_vibration"), columnCount: 7) + .frame(width: 480) + AdvPanelView(indicators: $bottomStats, columnCount: 1, isStat: true) + .frame(width: 75) + } + } + + InfoPanelView() + .frame(width: 209, height: 514) + } + + HStack(spacing: 0) { + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/adventuring_time"), rowCount: 16, goal: L10n.Goal.biomesVisited) + .frame(width: 497) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/kill_all_mobs"), rowCount: 16, goal: L10n.Goal.monstersKilled) + .frame(width: 306) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/balanced_diet"), rowCount: 16, goal: L10n.Goal.foodsEaten) + .frame(width: 315) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/bred_all_animals"), rowCount: 16, goal: L10n.Goal.animalsBred) + .frame(width: 168) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/complete_catalogue"), rowCount: 16, goal: "", hidePercentage: true) + .frame(width: 90) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/whole_pack"), rowCount: 16, goal: L10n.Goal.dogs, hidePercentage: true) + .frame(width: 90) + + VStack(spacing: 0) { + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/trim_with_all_exclusive_armor_patterns"), rowCount: 8, goal: L10n.Goal.trims, isAdjacent: true) + .frame(height: 193) + + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:nether/explore_nether"), rowCount: 5, goal: L10n.Goal.nether, isAdjacent: true) + .frame(height: 145) + } + .frame(width: 206) + } + .frame(width: 1672, height: 338) + } + } + } +} + +#Preview { + L1_20S() +} diff --git a/SwiftAA/Views/Versions/1_21/L1_21V.swift b/SwiftAA/Views/Versions/1_21/L1_21V.swift new file mode 100644 index 0000000..14db2a4 --- /dev/null +++ b/SwiftAA/Views/Versions/1_21/L1_21V.swift @@ -0,0 +1,77 @@ +// +// L1_20V.swift +// SwiftAA +// +// Created by Slackow on 12/29/24. +// + +import SwiftUI + +struct L1_21V: View { + private var dataManager = DataManager.shared + + @State private var statusIndicators = Utilities.getSpecificStats(types: [.trident, .shells, .snifferEggs, .witherSkulls, .goldBlocks]) + + @State private var statisticIndicators: [StatisticIndicator] = [GodlyApple.shared, EnderPearls.shared, NetherWart.shared, GhastTears.shared, Pufferfish.shared, AzureBluet.shared, FermentedEye.shared, NetheriteUpgrade.shared, PotterySherds.shared] + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + HStack(spacing: 0) { + AdvPanelView(indicators: .constant(dataManager.minimalisticAdvancements), columnCount: 5, isMinimal: true) + .frame(width: 370) + + VStack(spacing: 0) { + HStack(spacing: 0) { + AdvPanelView(indicators: $statusIndicators, columnCount: 1, isStat: true) + .frame(width: 74) + + VStack(spacing: 0) { + InfoPanelView() + .frame(height: 341) + + StatisticPanelView(statistics: $statisticIndicators, rowCount: 5) + .frame(height: 90) + } + .frame(width: 236) + } + .frame(height: 431) + + HStack(spacing: 0) { + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/complete_catalogue"), rowCount: 6, goal: L10n.Goal.cats, isMinimal: true) + .frame(width: 155) + + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:nether/explore_nether"), rowCount: 6, goal: L10n.Goal.nether, isMinimal: true) + .frame(width: 155) + } + .frame(height: 165) + + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/bred_all_animals"), rowCount: 8, goal: L10n.Goal.animalsBred, isMinimal: true) + .frame(height: 200) + } + .frame(width: 310) + } + .frame(height: 796) + + HStack(spacing: 0) { + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/adventuring_time"), rowCount: 14, goal: L10n.Goal.biomesVisited, isMinimal: true) + .frame(width: 534) + + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/trim_with_all_exclusive_armor_patterns"), rowCount: 14, goal: L10n.Goal.trims, isMinimal: true, hidePercentage: true) + } + .frame(height: 310) + + HStack(spacing: 0) { + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/kill_all_mobs"), rowCount: 12, goal: L10n.Goal.monstersKilled, isMinimal: true) + .frame(width: 343) + + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/balanced_diet"), rowCount: 14, goal: L10n.Goal.foodsEaten, isMinimal: true) + .frame(width: 337) + } + .frame(height: 285) + } + } +} + +#Preview { + L1_20V() +} From 7e93184eb2099649607cbd639d74356507be1a78 Mon Sep 17 00:00:00 2001 From: Kihron Date: Sun, 29 Dec 2024 01:43:06 -0500 Subject: [PATCH 2/7] - Added ability to switch between multiple players if multiple UUIDs exist within the world folder - Code cleanup --- SwiftAA.xcodeproj/project.pbxproj | 15 ++-- .../xcschemes/SwiftAA (ES).xcscheme | 2 +- .../xcshareddata/xcschemes/SwiftAA.xcscheme | 2 +- SwiftAA/Extensions/Color+Ext.swift | 2 +- SwiftAA/Extensions/Optional+Ext.swift | 2 +- SwiftAA/Extensions/UUID+Ext.swift | 2 +- SwiftAA/Models/Player.swift | 2 +- .../ViewModels/Managers/PlayerManager.swift | 46 +++++++----- .../Windows/Main/AppViewModel.swift | 28 ++++--- .../Panels/Notes/NotesPanelView.swift | 6 +- .../Settings/Main/SettingsAccountView.swift | 36 +++++---- SwiftAA/Views/Toolbar/ToolbarPlayerHead.swift | 74 ++++++++++++++++--- 12 files changed, 139 insertions(+), 78 deletions(-) diff --git a/SwiftAA.xcodeproj/project.pbxproj b/SwiftAA.xcodeproj/project.pbxproj index 37befe8..62c9259 100644 --- a/SwiftAA.xcodeproj/project.pbxproj +++ b/SwiftAA.xcodeproj/project.pbxproj @@ -698,7 +698,6 @@ B65FE5952AA6DEE400C30A8F /* ApplyTheme.swift */, B6CFEAE22B7C266E0008542B /* MinecraftFont.swift */, B68CFE0A2AD259770046AFB7 /* RemoveSidebar.swift */, - 49CCDF7B2B7C1FD200DFE65D /* MinecraftFont.swift */, ); path = Style; sourceTree = ""; @@ -1159,7 +1158,7 @@ attributes = { BuildIndependentTargetsInParallel = 1; LastSwiftUpdateCheck = 1340; - LastUpgradeCheck = 1530; + LastUpgradeCheck = 1620; TargetAttributes = { B65AE1BC2886F401006EC138 = { CreatedOnToolsVersion = 13.4.1; @@ -1572,10 +1571,10 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 240409; + CURRENT_PROJECT_VERSION = 241228; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_ASSET_PATHS = "\"SwiftAA/Resources/Preview Content\""; - DEVELOPMENT_TEAM = 94CLS492CD; + DEVELOPMENT_TEAM = D64G2TTYWM; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -1588,7 +1587,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.1.2; + MARKETING_VERSION = 1.1.3; PRODUCT_BUNDLE_IDENTIFIER = com.ks.SwiftAA; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1608,10 +1607,10 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 240409; + CURRENT_PROJECT_VERSION = 241228; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_ASSET_PATHS = "\"SwiftAA/Resources/Preview Content\""; - DEVELOPMENT_TEAM = 94CLS492CD; + DEVELOPMENT_TEAM = D64G2TTYWM; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -1624,7 +1623,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.1.2; + MARKETING_VERSION = 1.1.3; PRODUCT_BUNDLE_IDENTIFIER = com.ks.SwiftAA; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/SwiftAA.xcodeproj/xcshareddata/xcschemes/SwiftAA (ES).xcscheme b/SwiftAA.xcodeproj/xcshareddata/xcschemes/SwiftAA (ES).xcscheme index 480b38a..32f3dd1 100644 --- a/SwiftAA.xcodeproj/xcshareddata/xcschemes/SwiftAA (ES).xcscheme +++ b/SwiftAA.xcodeproj/xcshareddata/xcschemes/SwiftAA (ES).xcscheme @@ -1,6 +1,6 @@ URL? { + guard let id = player?.id else { return nil } + return getPlayerImageURL(for: id) } - - var imageURL: URL? { - let id = player?.id ?? "" - return URL(string: "https://cravatar.eu/helmhead/\(id)/64.png") + + func getPlayerImageURL(for uuid: String?) -> URL? { + guard let uuid else { return nil } + return URL(string: "https://cravatar.eu/helmhead/\(uuid)/64.png") } - - func updatePlayerUUID(uuid: String) { + + func updatePlayerUUID(uuid: String?) { + guard let uuid else { return } + if self.uuid != uuid { self.uuid = uuid } } - - @MainActor private func updatePlayer(uuid: String) async { - guard let url = URL(string: "https://api.mojang.com/user/profile/\(uuid)") else { return } - + + func updateAvailablePlayers(uuids: [String]) { + self.availablePlayers = uuids + } + + @MainActor private func fetchPlayer(for uuid: String) async -> Player? { + guard let url = URL(string: "https://api.mojang.com/user/profile/\(uuid)") else { return nil } + do { let player = try await URLSession.shared.decode(Player.self, from: url) - self.player = player + return player } catch { - print(error.localizedDescription) + print("Failed to decode Player for UUID \(uuid): \(error.localizedDescription)") + return nil } } } diff --git a/SwiftAA/ViewModels/Windows/Main/AppViewModel.swift b/SwiftAA/ViewModels/Windows/Main/AppViewModel.swift index 389557a..5e234cb 100644 --- a/SwiftAA/ViewModels/Windows/Main/AppViewModel.swift +++ b/SwiftAA/ViewModels/Windows/Main/AppViewModel.swift @@ -67,17 +67,20 @@ class AppViewModel: ObservableObject { } return } - - if (try fileManager.contentsOfDirectory(atPath: "\(worldPath)/advancements").isEmpty || fileManager.contentsOfDirectory(atPath: "\(worldPath)/stats").isEmpty) { + + let files = try fileManager.contentsOfDirectory(atPath: "\(worldPath)/advancements") + let stats = try fileManager.contentsOfDirectory(atPath: "\(worldPath)/stats") + + if (files.isEmpty || stats.isEmpty) { if trackerManager.updateErrorAlert(alert: .invalidDirectory) { progressManager.clearProgressState() } return } - - let fileName = try fileManager.contentsOfDirectory(atPath: "\(worldPath)/advancements")[0] + + let fileName = playerManager.player.flatMap({ player in files.first(where: { $0.replacingOccurrences(of: "-", with: "") == "\(player.id).json" })}) ?? files[0] let lastUpdate = try getModifiedTime("\(worldPath)/advancements/\(fileName)", fileManager: fileManager) ?? Date.now - + if (dataManager.lastModified != lastUpdate) { dataManager.lastModified = lastUpdate var advFileContents = try String(contentsOf: URL(fileURLWithPath: "\(worldPath)/advancements/\(fileName)")) @@ -89,6 +92,7 @@ class AppViewModel: ObservableObject { let uuid = String(fileName.dropLast(5)) playerManager.updatePlayerUUID(uuid: uuid) + playerManager.updateAvailablePlayers(uuids: files.map({ ($0 as NSString).deletingPathExtension })) progressManager.updateProgressState(advancements: advancements, statistics: statistics.stats) trackerManager.updateErrorAlert(alert: .none) } @@ -175,13 +179,15 @@ class AppViewModel: ObservableObject { activeWindows[pid] = (info, version) return (info, version) } - + if let nativesArg = arguments.first(where: { $0.starts(with: "-Djava.library.path=") }) { - var info = "\(nativesArg.dropFirst(20).dropLast("natives".count))/.minecraft/saves" - let info2 = "\(nativesArg.dropFirst(20).dropLast("natives".count))/minecraft/saves" - info = fileManager.fileExists(atPath: info) ? info : info2 - activeWindows[pid] = (info, version) - return (info, version) + let basePath = nativesArg.dropFirst(20).replacingOccurrences(of: "natives", with: "") + let possiblePaths = ["\(basePath).minecraft/saves", "\(basePath)/minecraft/saves"] + + if let validPath = possiblePaths.first(where: { fileManager.fileExists(atPath: $0) }) { + activeWindows[pid] = (validPath, version) + return (validPath, version) + } } activeWindows[pid] = ("", nil) diff --git a/SwiftAA/Views/Components/Panels/Notes/NotesPanelView.swift b/SwiftAA/Views/Components/Panels/Notes/NotesPanelView.swift index 3960d96..1b9a05a 100644 --- a/SwiftAA/Views/Components/Panels/Notes/NotesPanelView.swift +++ b/SwiftAA/Views/Components/Panels/Notes/NotesPanelView.swift @@ -14,7 +14,9 @@ struct NotesPanelView: View { @State private var currentNote: Note = Note.newNote @State private var userInteracted: Bool = false - + + private let f3CRegex = #//execute in [^/]*(overworld|nether|end) run tp @s (-?\d+\.\d+) (-?\d+\.\d+) (-?\d+\.\d+) -?\d+\.\d+ -?\d+\.\d+/# + var body: some View { VStack(alignment: .leading) { VStack(alignment: .leading) { @@ -80,8 +82,6 @@ struct NotesPanelView: View { } } - private let f3CRegex = #//execute in [^/]*(overworld|nether|end) run tp @s (-?\d+\.\d+) (-?\d+\.\d+) (-?\d+\.\d+) -?\d+\.\d+ -?\d+\.\d+/# - private func checkF3C(input: String) -> String { if let match = input.firstMatch(of: f3CRegex), case let (_, world, xStr, yStr, zStr) = match.output { diff --git a/SwiftAA/Views/Settings/Main/SettingsAccountView.swift b/SwiftAA/Views/Settings/Main/SettingsAccountView.swift index 22e6f13..1106a63 100644 --- a/SwiftAA/Views/Settings/Main/SettingsAccountView.swift +++ b/SwiftAA/Views/Settings/Main/SettingsAccountView.swift @@ -21,29 +21,27 @@ struct SettingsAccountView: View { Divider() HStack(alignment: .center) { - if playerManager.playerHasLoaded { - CachedAsyncImage(url: playerManager.imageURL, urlCache: .imageCache) { phase in - switch phase { - case .empty: - ProgressView() - case .success(let image): - image.interpolation(.none) - .resizable() - .frame(width: 26, height: 26) - case .failure: - EmptyView() - @unknown default: - EmptyView() - } + CachedAsyncImage(url: playerManager.getActivePlayerImageURL(), urlCache: .imageCache) { phase in + switch phase { + case .empty: + ProgressView() + case .success(let image): + image.interpolation(.none) + .resizable() + .frame(width: 26, height: 26) + case .failure: + Image("steve") + .interpolation(.none) + .resizable() + .frame(width: 26, height: 26) + @unknown default: + EmptyView() } - } else { - Image("steve") - .interpolation(.none) - .resizable() - .frame(width: 26, height: 26) } Text(player.name) + .contentTransition(.numericText()) + .animation(.smooth, value: player) } .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) .padding(.leading, 17) diff --git a/SwiftAA/Views/Toolbar/ToolbarPlayerHead.swift b/SwiftAA/Views/Toolbar/ToolbarPlayerHead.swift index 73e35c8..a975cd9 100644 --- a/SwiftAA/Views/Toolbar/ToolbarPlayerHead.swift +++ b/SwiftAA/Views/Toolbar/ToolbarPlayerHead.swift @@ -10,33 +10,83 @@ import CachedAsyncImage struct ToolbarPlayerHead: View { @ObservedObject private var playerManager = PlayerManager.shared - + @State private var showPlayerList: Bool = false + var body: some View { - VStack { - if playerManager.playerHasLoaded { - CachedAsyncImage(url: playerManager.imageURL, urlCache: .imageCache) { phase in + Button(action: { showPlayerList.toggle() }) { + VStack { + CachedAsyncImage(url: playerManager.getActivePlayerImageURL(), urlCache: .imageCache) { phase in switch phase { case .empty: - ProgressView() + Image("steve") + .resizable() + .interpolation(.none) + .frame(width: 32, height: 32) case .success(let image): image .resizable() .interpolation(.none) .frame(width: 32, height: 32) case .failure: - EmptyView() + Image("steve") + .resizable() + .interpolation(.none) + .frame(width: 32, height: 32) @unknown default: EmptyView() } } - } else { - Image("steve") - .resizable() - .interpolation(.none) - .frame(width: 32, height: 32) } } - .animation(.linear, value: playerManager.playerHasLoaded) + .buttonStyle(.plain) + .allowsHitTesting(playerManager.availablePlayers.count > 1) + .animation(.easeInOut, value: playerManager.player) + .popover(isPresented: $showPlayerList) { + availablePlayers + } + } + + @ViewBuilder var availablePlayers: some View { + ScrollView { + LazyVStack(alignment: .leading) { + ForEach(playerManager.availablePlayers, id: \.self) { player in + Button(action: { + playerManager.updatePlayerUUID(uuid: player) + showPlayerList.toggle() + }) { + HStack { + CachedAsyncImage(url: playerManager.getPlayerImageURL(for: player), urlCache: .imageCache) { phase in + switch phase { + case .empty: + ProgressView() + case .success(let image): + image + .resizable() + .interpolation(.none) + .frame(width: 32, height: 32) + case .failure: + Image("steve") + .resizable() + .interpolation(.none) + .frame(width: 32, height: 32) + @unknown default: + EmptyView() + } + } + + Text(player) + .lineLimit(1) + } + .contentShape(.rect) + } + .buttonStyle(.plain) + } + } + .padding(12) + } + .frame(width: 135) + .frame(maxHeight: 300) + .scrollIndicators(.hidden) } } From f0e817c39bd44c529f7b174d9dc3a86b52c1681b Mon Sep 17 00:00:00 2001 From: Kihron Date: Sun, 29 Dec 2024 15:48:03 -0500 Subject: [PATCH 3/7] - Fixed GoalPanelView not updating properly --- SwiftAA/Views/Components/Panels/GoalPanelView.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SwiftAA/Views/Components/Panels/GoalPanelView.swift b/SwiftAA/Views/Components/Panels/GoalPanelView.swift index 868a54d..00da5c1 100644 --- a/SwiftAA/Views/Components/Panels/GoalPanelView.swift +++ b/SwiftAA/Views/Components/Panels/GoalPanelView.swift @@ -45,6 +45,7 @@ struct GoalPanelView: View { if !isMinimal { IndicatorView(indicator: $advancement.asIndicator) .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + .id(advancement.completed) } LazyHGrid(rows: Array(repeating: GridItem(.adaptive(minimum: 16), spacing: horizontalSpacing, alignment: .leading), count: rowCount), spacing: columnSpacing) { @@ -57,7 +58,7 @@ struct GoalPanelView: View { Spacer() } - ForEach($advancement.criteria, id: \.self.id) { item in + ForEach($advancement.criteria, id: \.self) { item in CriterionView(criterion: item) } .frame(alignment: .leading) @@ -73,11 +74,12 @@ struct GoalPanelView: View { HStack(alignment: .top) { if !isMinimal { IndicatorView(indicator: $advancement.asIndicator) + .id(advancement.completed) } LazyHGrid(rows: Array(repeating: GridItem(.adaptive(minimum: 16), spacing: horizontalSpacing, alignment: .leading), count: rowCount), spacing: columnSpacing) { - ForEach($advancement.criteria, id: \.self.id) { item in + ForEach($advancement.criteria, id: \.self) { item in CriterionView(criterion: item) } .frame(alignment: .leading) From 49d1814e3086c816408c8331e1c2674552a2045c Mon Sep 17 00:00:00 2001 From: Kihron Date: Sun, 29 Dec 2024 16:15:53 -0500 Subject: [PATCH 4/7] - Fixed several visual bugs --- SwiftAA.xcodeproj/project.pbxproj | 3 +-- .../Constants/Indicators/Status/HeavyCore.swift | 8 ++++++-- .../Contents.json | 2 +- .../crafters_crafting_crafters^16.png | Bin 984 -> 0 bytes .../crafters_crafting_crafters^32 1.png | Bin 0 -> 2798 bytes .../Adventure/heavy_core.imageset/Contents.json | 2 +- .../heavy_core.imageset/heavy_core^16.png | Bin 861 -> 0 bytes .../heavy_core.imageset/heavy_core^32 1.png | Bin 0 -> 1977 bytes .../Adventure/lighten_up.imageset/Contents.json | 2 +- .../lighten_up.imageset/lighten_up@2x 1.png | Bin 0 -> 2980 bytes .../lighten_up.imageset/lighten_up^16.png | Bin 951 -> 0 bytes .../Contents.json | 2 +- .../minecraft_trials_edition.imageset/Image.png | Bin 1048 -> 0 bytes .../minecraft_trials_edition@2x 1.png | Bin 0 -> 2859 bytes SwiftAA/Views/Versions/1_21/L1_21S.swift | 4 ++-- 15 files changed, 13 insertions(+), 10 deletions(-) delete mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^16.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^32 1.png delete mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^16.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^32 1.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/lighten_up@2x 1.png delete mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/lighten_up^16.png delete mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Image.png create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/minecraft_trials_edition@2x 1.png diff --git a/SwiftAA.xcodeproj/project.pbxproj b/SwiftAA.xcodeproj/project.pbxproj index 62c9259..fbd06f1 100644 --- a/SwiftAA.xcodeproj/project.pbxproj +++ b/SwiftAA.xcodeproj/project.pbxproj @@ -215,7 +215,6 @@ 498A3E882D21153100F0A345 /* L1_21M.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_21M.swift; sourceTree = ""; }; 498A3E892D21153100F0A345 /* L1_21V.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_21V.swift; sourceTree = ""; }; 498A3E8D2D21191300F0A345 /* HeavyCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeavyCore.swift; sourceTree = ""; }; - 49CCDF7B2B7C1FD200DFE65D /* MinecraftFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MinecraftFont.swift; sourceTree = ""; }; 49CCDF802B7C4AF400DFE65D /* major_biomes.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = major_biomes.json; sourceTree = ""; }; B608417C2AB3E37800E064E7 /* TrackerAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackerAlert.swift; sourceTree = ""; }; B60C6BAE2ABA6B7300A79D4E /* LeaderboardPlaceholderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeaderboardPlaceholderView.swift; sourceTree = ""; }; @@ -763,10 +762,10 @@ B687E17E28B3E37F002CF5D7 /* Versions */ = { isa = PBXGroup; children = ( - 498A3E822D20FA2D00F0A345 /* 1_21 */, B6EEBAD22AC4F854001CF4D0 /* 1_16 */, B6EEBAD32AC4F8B1001CF4D0 /* 1_19 */, B6D67AE52B744A61007AA80C /* 1_20 */, + 498A3E822D20FA2D00F0A345 /* 1_21 */, ); path = Versions; sourceTree = ""; diff --git a/SwiftAA/Models/Constants/Indicators/Status/HeavyCore.swift b/SwiftAA/Models/Constants/Indicators/Status/HeavyCore.swift index f93dab6..14c41b6 100644 --- a/SwiftAA/Models/Constants/Indicators/Status/HeavyCore.swift +++ b/SwiftAA/Models/Constants/Indicators/Status/HeavyCore.swift @@ -14,9 +14,13 @@ class HeavyCore: TransferableIndicator, StatusIndicator { var frameStyle: String = "statistic" var completed: Bool = false var tooltip: String = "" - + + private let overkill = "minecraft:adventure/overoverkill" + func update(progress: ProgressManager) { - completed = progress.timesPickedUp(id) > 0 + let overkillCompleted = progress.advancementCompleted(overkill) + + completed = overkillCompleted || progress.timesPickedUp(id) > 0 key = completed ? L10n.Statistic.HeavyCore.obtained : L10n.Statistic.HeavyCore.obtain } } diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/Contents.json index 6b55055..3278849 100644 --- a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/Contents.json +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "crafters_crafting_crafters^16.png", + "filename" : "crafters_crafting_crafters^32 1.png", "idiom" : "universal", "scale" : "1x" }, diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^16.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/crafters_crafting_crafters.imageset/crafters_crafting_crafters^16.png deleted file mode 100644 index 51a37747b24a327fab81c5384b975f81bc3e8a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984 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 ArT_o{ literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/Contents.json index 96e6c08..4eb46b6 100644 --- a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/Contents.json +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "heavy_core^16.png", + "filename" : "heavy_core^32 1.png", "idiom" : "universal", "scale" : "1x" }, diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^16.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^16.png deleted file mode 100644 index dd328f2b87984188f654b7db28fda9eda8d5d411..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmV-j1ETziP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz0`f^jK~y+TZBt83 z6HyesZ>BTDOhd7>#r~)TY#^YbhD2jb3@bMVF~Nzm zr{1u;85CJWnyy1ljbqAGWxjjjWY>#&JCd&U52K=k(_QBo&b;HTtVqWe7iNLargXQ* zr`0tylWw;cD4JFSGhYco6j1Ad!w`=}Ki;`LbR1K~qCoeh>t;!k!q{Ggs%r{~2tzCu z0*loScDoA%ArF1Z zY&JW{vJ8?a!LOe)@aEN1a&GoJh@zOsWUat03Q!acs-_azTpDHr-(dRldx%FvkjrLZ zCAb71-o1v2mt&C4u7QDKK$Zl;W-=A1>jFZK$A@VUB>^`~1wNO748Ht(J^)LL^O!^d zXEXsp7@&gX0NVwM;Wh=bnKY=Xsu2VUsbr#PpEFhhpU(nK(;!JAXqo~fNdje{Kv85Z zos4b@gySJ1nM$w}&a~6zQE8e1jx%DC3X&{gaT$LKFbu2WNhy@T(k63}Tl}#c%jeRm z={%oXYJfdY)kW z0W9e>kd!B%=ZVzcgpTdvmk{y85C}JM>Q6j0V6i%GL?X*ljorRJNLzp`wyKV5v!fRe zUwff`oN-duRDUcM8^`Bmqr8E=tp`zKQ%l)0xt#7!x7$;;Om>HpwAyU{OT3P@Lr2lR n{cYRU*;TuXtgH8JAp-mZpO#bHS*99500000NkvXXu0mjfhA4HH diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^32 1.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/heavy_core.imageset/heavy_core^32 1.png new file mode 100644 index 0000000000000000000000000000000000000000..c65d753e922bc5f991528f10648076d1afd1620a GIT binary patch literal 1977 zcmV;q2S)gbP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz2Tn;uK~z{r?N(cC z9A_0iGqbbn_1?VRwRhKEukB4D$8`~D6N;4w;DLa6;i0Ms71UHs6wwFLkPws?pjD){ zG)fijpeio~DMCm{h!>LyMcU)T2fviHl(&V}#%o~-Jun~EoR=$EW^ zJ@e0hzVn^$ocZY!{I4N7-w(u#uUwQCGqdt9FPt@i$4YwOpFCEbCk%9liAI zH@+?cU-;GU6?|Dc5osat)RE(^-(LLbR>obV9y@$yth>ASl%~~&@7#Hxrl%&&a$$oK zsXa;}IY7Z+2dRomON%q6EGaa&YgkDQ>>{t%H)R;c`IY5`*I##?qLI>yoS}hYPul z@Qru=W!${>Px6PNO0s{q})SgG>hS8w><{BXz zu}+p{f=Z;gT!aAR_OwwIO3mG!rp3A2)EP<0u~?tW9|&2RRyS|oy3u?2&A+@V9{vzo zN-*}!aYG_WvL%qiT}hV6G!5EVTczd2yQD$tzQG~thV$dyNd)R5x7$sb%pBc#?<(%s zX#ZoMr>^cEDi-pTS(+E6$t=uTaG?Fc)VnSxl)z2|Y+cs~^(R$zQx%TqOyh|@3ZnLl z3o~@%`W15H-tfo)LaEq*Snr~TM)p%Ol_p)U)9lPNy*GJsS9FIiB?w@pp`^@som7k5hcUWX)U`OelP4jbiAbU=%kx{y0VH0X-C`YgOu2sueGqWvbOBd{Wbo6;%3=ax-vz)bB zS*XETxm+qf3gvU_)M)6GMaEa&`kTlcElc%Ug$ns~(zQDFu*7=!NhD(9Qz+zKa6$>R zb^#=lpxYTH{6`MMpxhZJJ#7Ss|+K~(#FP$P^!Yu zU{ZR}9g>7F*mozi5a3o~*VnbG$bdK2wHjsS@1o^YYHRn2%z2%r*U0A&iuJm#lZ-$T zrXd@bRcnKP0>Q8o8$GZCi53F9k%0}l3j{*jmJ_RgY&Yd;H^Jqhd3U$BTO)38FSmCTH2r z<3tlJ1oEYv$j(9;m^~g7GP5#Xub0|U2B9c#j2|3?2bH+Sz;!0b24?3ocrO#9T$u4b zv|PbL(=Zwqw~-q!m~OoBIQV9+B>J1Z!9h7M26uyHTKL6eWMu9_$5cpxa_zo=Si`|V z2LI6>_o0OV4jD?lT9xtAVSTN>zBGOI;2|14_ys|v=?e$k5u7b6z!Q=`v3QDxAO4IO z!I%ve{9&R@vaV?@bEky>YI_orEun{%&9zmzSj-!!zcoDa2n7NmF>HhaXi+wysI$-? z3Vu!eiB)Jeq&4ah7>qSH z*?=g4lwHkW2Gj{k;lSY$Q?G%)*`zS7Wi)gvpI=w-@{t=2Z3fT$2+BOOmR~ThCky$_(|WzS&(qe< za&xBGK@rEX25QV+kY(2-PDkgWU5QIq-@Ysi6HoLoBWqlAA0!HkE1lF8@fKq<5qQhVML7;7>7yEEoYXR$MRHa&{eBf%(ZN`CGdZR{f`}# zP?~Li8BFg!)YH>D(chn*NTvo3IhO_c2X-j~gS#J?+$Z=y0nvW|D+93<*^1Mz00000 LNkvXXu0mjfV|TmT literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/Contents.json index fb3ecd0..9fddc1a 100644 --- a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/Contents.json +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "lighten_up^16.png", + "filename" : "lighten_up@2x 1.png", "idiom" : "universal", "scale" : "1x" }, diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/lighten_up@2x 1.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/lighten_up.imageset/lighten_up@2x 1.png new file mode 100644 index 0000000000000000000000000000000000000000..711f8317a3d44f8c7d513029edc0ab2e4f5628c6 GIT binary patch literal 2980 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 ZJO#Qgir@e%oCp8_002ovPDHLkV1fYuu6_Uj diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Contents.json index 8a1ffc7..0881fa9 100644 --- a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Contents.json +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "Image.png", + "filename" : "minecraft_trials_edition@2x 1.png", "idiom" : "universal", "scale" : "1x" }, diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Image.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/Image.png deleted file mode 100644 index e1456d438f5e482d5050c6f44d2e79a02ecc38a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjttDvaWVhZDuDco)CkWs zUtb0-Ae)1Mg;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%hRpSSwK_CH$L3$uG^8!Yw zYM|HxCb(*W1O=u<5X=vX$A&nGfx-C5DP)uAn$CI zP?3M{)<$3b`s!VY`o#>NTjFez^O>2s&K+7R#p2kc@hELtQ@5eyk;F|CS*pyE%bFhe z#c(v8`O_46CN98Z&P0!n$uGYwp0{${s_Oj8RmVR%6OJhPs_y79(l>f2G-O#ATPj|<^eRJo>Ov7cbe?8T=H=iaZ{`J|^w_UNne$;;Z z+rK}obfMkt>t^;HmvV{?WcJMT;l8nr|NOQKnN{UFmv`*jUHy1^dp*;1ySoW*0yos= zX4`f=*42D^)N_)v=*(wr36&F_wPGdP9u)hEzg<>;TWHb!_wVnnxxeZBz1q9cR^PAr zPgaT3-{LThEov2)-{D7x1Ue=Oe7zHuWvlB|vWt7q>)RW63P0c8``#{T{+`dTF7tRaI-&3Nsm+^23S}qob@BKj$rc8;%{}0v`8d!<0Xeiakd%bkQ)F-LaoGwHc}@GVV~$jT9E%r7Chf?GpXY zB~iIIrmQcIeZN-Y>6>Rh4dSkBLJ~d2H(G*^{Iii~9IVTiPZpeI66|(E=8!=-kw#!k|(jORDrmy)lyRWq^ zbye50k236=bUHlWGVm$-bg6dLMCH3yuIqL?{4w+FoYh$+Rua8=Pb>S%PK%%R?%wsy zX6O2A*>1CBJg4Qo_~{pIy-n4N$^Y_`Y0oW}|Bv4J{m-difBqa2)2t5^s6V!YuSrmv zPhBNp@wI+$Av3Q@w=ZYjlfNT>W=+nX@86_;e=cY#kdeJ(Z}(Gi{i*vFk5^x*omzNs zS>&-(L7Pmx-?0S#IBM^%9)3y1R>5J%IcWLhxO-?P%{PrXM+0t48`z+bDpzP)8>gTe~DWM4f`&hmV diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/minecraft_trials_edition@2x 1.png b/SwiftAA/Resources/Assets.xcassets/Icons/Advancements/Adventure/minecraft_trials_edition.imageset/minecraft_trials_edition@2x 1.png new file mode 100644 index 0000000000000000000000000000000000000000..fafe6e7ca4cb85afbb7b48161ef9dda3765f2503 GIT binary patch literal 2859 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 AbN~PV literal 0 HcmV?d00001 diff --git a/SwiftAA/Views/Versions/1_21/L1_21S.swift b/SwiftAA/Views/Versions/1_21/L1_21S.swift index 67c2e83..8db6bfe 100644 --- a/SwiftAA/Views/Versions/1_21/L1_21S.swift +++ b/SwiftAA/Views/Versions/1_21/L1_21S.swift @@ -51,7 +51,7 @@ struct L1_21S: View { HStack(spacing: 0) { GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/adventuring_time"), rowCount: 16, goal: L10n.Goal.biomesVisited) - .frame(width: 497) + .frame(width: 494) GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/kill_all_mobs"), rowCount: 16, goal: L10n.Goal.monstersKilled) .frame(width: 306) GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/balanced_diet"), rowCount: 16, goal: L10n.Goal.foodsEaten) @@ -70,7 +70,7 @@ struct L1_21S: View { GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:nether/explore_nether"), rowCount: 5, goal: L10n.Goal.nether, isAdjacent: true) .frame(height: 145) } - .frame(width: 206) + .frame(width: 209) } .frame(width: 1672, height: 338) } From 0414d51f863587859ca281a932012f88ab2a7847 Mon Sep 17 00:00:00 2001 From: Slackow <32826498+Slackow@users.noreply.github.com> Date: Sun, 29 Dec 2024 16:57:30 -0500 Subject: [PATCH 5/7] Minimal layout for 1.21 --- SwiftAA.xcodeproj/project.pbxproj | 4 ++-- .../Resources/Advancements/1.21.4/minimal.json | 16 ++++++++++++++-- .../Resources/Advancements/1.21/minimal.json | 16 ++++++++++++++-- .../View/VersionFrameModifier.swift | 2 +- SwiftAA/Views/Versions/1_21/L1_21M.swift | 18 ++++++++++-------- SwiftAA/Views/Versions/1_21/L1_21S.swift | 2 +- SwiftAA/Views/Versions/1_21/L1_21V.swift | 6 +++--- 7 files changed, 45 insertions(+), 19 deletions(-) diff --git a/SwiftAA.xcodeproj/project.pbxproj b/SwiftAA.xcodeproj/project.pbxproj index fbd06f1..d0c1c6e 100644 --- a/SwiftAA.xcodeproj/project.pbxproj +++ b/SwiftAA.xcodeproj/project.pbxproj @@ -1573,7 +1573,7 @@ CURRENT_PROJECT_VERSION = 241228; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_ASSET_PATHS = "\"SwiftAA/Resources/Preview Content\""; - DEVELOPMENT_TEAM = D64G2TTYWM; + DEVELOPMENT_TEAM = 94CLS492CD; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -1609,7 +1609,7 @@ CURRENT_PROJECT_VERSION = 241228; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_ASSET_PATHS = "\"SwiftAA/Resources/Preview Content\""; - DEVELOPMENT_TEAM = D64G2TTYWM; + DEVELOPMENT_TEAM = 94CLS492CD; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; diff --git a/SwiftAA/Resources/Advancements/1.21.4/minimal.json b/SwiftAA/Resources/Advancements/1.21.4/minimal.json index 712c261..12a3380 100644 --- a/SwiftAA/Resources/Advancements/1.21.4/minimal.json +++ b/SwiftAA/Resources/Advancements/1.21.4/minimal.json @@ -10,6 +10,7 @@ {"id":"nether/charge_respawn_anchor"}, {"id":"end/dragon_breath"}, {"id":"end/kill_dragon"}, + {"id":"end/enter_end_gateway"}, {"id":"story/obtain_armor"}, {"id":"end/levitate"}, {"id":"end/dragon_egg"}, @@ -26,8 +27,8 @@ {"id":"husbandry/allay_deliver_cake_to_note_block"}, {"id":"adventure/bullseye"}, {"id":"adventure/summon_iron_golem"}, - {"id":"story/cure_zombie_villager"}, + {"id":"adventure/walk_on_powder_snow_with_leather_boots"}, {"id":"adventure/throw_trident+adventure/very_very_frightening","name":"ATJ + VVF"}, {"id":"adventure/lightning_rod_with_villager_no_fire"}, @@ -38,24 +39,35 @@ {"id":"adventure/craft_decorated_pot_using_only_sherds"}, {"id":"husbandry/feed_snifflet"}, {"id":"husbandry/plant_any_sniffer_seed"}, - {"id":"nether/ride_strider_in_overworld_lava"}, {"id":"adventure/spyglass_at_ghast"}, + {"id":"nether/return_to_sender"}, {"id":"nether/fast_travel"}, {"id":"nether/uneasy_alliance"}, {"id":"nether/use_lodestone"}, {"id":"adventure/read_power_of_chiseled_bookshelf"}, + {"id":"adventure/brush_armadillo"}, + {"id":"husbandry/repair_wolf_armor"}, + {"id":"husbandry/remove_wolf_armor"}, {"id":"husbandry/leash_all_frog_variants"}, {"id":"husbandry/froglights"}, {"id":"adventure/avoid_vibration"}, {"id":"adventure/kill_mob_near_sculk_catalyst"}, {"id":"adventure/trim_with_all_exclusive_armor_patterns"}, + {"id":"adventure/crafters_crafting_crafters"}, + {"id":"adventure/lighten_up"}, + {"id":"adventure/who_needs_rockets"}, + {"id":"adventure/blowback"}, + {"id":"adventure/under_lock_and_key"}, + {"id":"adventure/revaulting"}, + {"id":"adventure/overoverkill"}, {"id":"nether/create_full_beacon"}, {"id":"adventure/whos_the_pillager_now"}, {"id":"story/deflect_arrow"}, {"id":"nether/all_effects"}, + {"id":"adventure/totem_of_undying"}, {"id":"adventure/honey_block_slide"}, {"id":"husbandry/wax_on+husbandry/wax_off","name":"Wax On+Off"}, diff --git a/SwiftAA/Resources/Advancements/1.21/minimal.json b/SwiftAA/Resources/Advancements/1.21/minimal.json index 712c261..12a3380 100644 --- a/SwiftAA/Resources/Advancements/1.21/minimal.json +++ b/SwiftAA/Resources/Advancements/1.21/minimal.json @@ -10,6 +10,7 @@ {"id":"nether/charge_respawn_anchor"}, {"id":"end/dragon_breath"}, {"id":"end/kill_dragon"}, + {"id":"end/enter_end_gateway"}, {"id":"story/obtain_armor"}, {"id":"end/levitate"}, {"id":"end/dragon_egg"}, @@ -26,8 +27,8 @@ {"id":"husbandry/allay_deliver_cake_to_note_block"}, {"id":"adventure/bullseye"}, {"id":"adventure/summon_iron_golem"}, - {"id":"story/cure_zombie_villager"}, + {"id":"adventure/walk_on_powder_snow_with_leather_boots"}, {"id":"adventure/throw_trident+adventure/very_very_frightening","name":"ATJ + VVF"}, {"id":"adventure/lightning_rod_with_villager_no_fire"}, @@ -38,24 +39,35 @@ {"id":"adventure/craft_decorated_pot_using_only_sherds"}, {"id":"husbandry/feed_snifflet"}, {"id":"husbandry/plant_any_sniffer_seed"}, - {"id":"nether/ride_strider_in_overworld_lava"}, {"id":"adventure/spyglass_at_ghast"}, + {"id":"nether/return_to_sender"}, {"id":"nether/fast_travel"}, {"id":"nether/uneasy_alliance"}, {"id":"nether/use_lodestone"}, {"id":"adventure/read_power_of_chiseled_bookshelf"}, + {"id":"adventure/brush_armadillo"}, + {"id":"husbandry/repair_wolf_armor"}, + {"id":"husbandry/remove_wolf_armor"}, {"id":"husbandry/leash_all_frog_variants"}, {"id":"husbandry/froglights"}, {"id":"adventure/avoid_vibration"}, {"id":"adventure/kill_mob_near_sculk_catalyst"}, {"id":"adventure/trim_with_all_exclusive_armor_patterns"}, + {"id":"adventure/crafters_crafting_crafters"}, + {"id":"adventure/lighten_up"}, + {"id":"adventure/who_needs_rockets"}, + {"id":"adventure/blowback"}, + {"id":"adventure/under_lock_and_key"}, + {"id":"adventure/revaulting"}, + {"id":"adventure/overoverkill"}, {"id":"nether/create_full_beacon"}, {"id":"adventure/whos_the_pillager_now"}, {"id":"story/deflect_arrow"}, {"id":"nether/all_effects"}, + {"id":"adventure/totem_of_undying"}, {"id":"adventure/honey_block_slide"}, {"id":"husbandry/wax_on+husbandry/wax_off","name":"Wax On+Off"}, diff --git a/SwiftAA/ViewModifiers/View/VersionFrameModifier.swift b/SwiftAA/ViewModifiers/View/VersionFrameModifier.swift index 3535e8e..232012b 100644 --- a/SwiftAA/ViewModifiers/View/VersionFrameModifier.swift +++ b/SwiftAA/ViewModifiers/View/VersionFrameModifier.swift @@ -48,7 +48,7 @@ struct VersionFrameModifier: ViewModifier { .frame(minWidth: 350, idealWidth: 680, maxWidth: 680, minHeight: 260, idealHeight: 1391, maxHeight: 1391, alignment: .center) case (.v1_21, .minimalist), (.v1_21_4, .minimalist): content - .frame(minWidth: 350, idealWidth: 1488, maxWidth: 1488, minHeight: 260, idealHeight: 674, maxHeight: 674, alignment: .center) + .frame(minWidth: 350, idealWidth: 1488, maxWidth: 1488, minHeight: 260, idealHeight: 748, maxHeight: 748, alignment: .center) } } diff --git a/SwiftAA/Views/Versions/1_21/L1_21M.swift b/SwiftAA/Views/Versions/1_21/L1_21M.swift index 880e6ab..38969f9 100644 --- a/SwiftAA/Views/Versions/1_21/L1_21M.swift +++ b/SwiftAA/Views/Versions/1_21/L1_21M.swift @@ -10,36 +10,38 @@ import SwiftUI struct L1_21M: View { private var dataManager = DataManager.shared - @State private var statusIndicators = Utilities.getSpecificStats(types: [.trident, .snifferEggs, .shells, .goldBlocks, .witherSkulls, .beehives, .ancientDebris]) + @State private var statusIndicators = Utilities.getSpecificStats(types: [.trident, .snifferEggs, .shells, .goldBlocks, .witherSkulls, .beehives, .ancientDebris, .heavyCore]) @State private var statisticIndicators: [StatisticIndicator] = [GodlyApple.shared, EnderPearls.shared, NetherWart.shared, GhastTears.shared, Pufferfish.shared, AzureBluet.shared, FermentedEye.shared, NetheriteUpgrade.shared, PotterySherds.shared] var body: some View { VStack(alignment: .leading, spacing: 0) { HStack(spacing: 0) { - AdvPanelView(indicators: .constant(dataManager.minimalisticAdvancements), columnCount: 11, isMinimal: true) + AdvPanelView(indicators: .constant(dataManager.minimalisticAdvancements), columnCount: 12, isMinimal: true) .frame(width: 814) AdvPanelView(indicators: $statusIndicators, columnCount: 2, isStat: true) .frame(width: 148) - GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/balanced_diet"), rowCount: 15, goal: L10n.Goal.foodsEaten, isMinimal: true) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/balanced_diet"), rowCount: 18, goal: L10n.Goal.foodsEaten, isMinimal: true) .frame(width: 330) InfoPanelView() .frame(width: 196) } - .frame(height: 364) + .frame(height: 438) HStack(spacing: 0) { GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/adventuring_time"), rowCount: 14, goal: L10n.Goal.biomesVisited, isMinimal: true) - .frame(width: 534) + .frame(width: 514) GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/kill_all_mobs"), rowCount: 14, goal: L10n.Goal.monstersKilled, isMinimal: true) .frame(width: 335) GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/bred_all_animals"), rowCount: 14, goal: L10n.Goal.animalsBred, isMinimal: true) - .frame(width: 201) - GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/complete_catalogue"), rowCount: 14, goal: L10n.Goal.cats, isMinimal: true) - .frame(width: 139) + .frame(width: 180) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/complete_catalogue"), rowCount: 14, goal: "", isMinimal: true, hidePercentage: true) + .frame(width: 90) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/whole_pack"), rowCount: 14, goal: L10n.Goal.dogs, isMinimal: true, hidePercentage: true) + .frame(width: 90) VStack(spacing: 0) { HStack(spacing: 0) { diff --git a/SwiftAA/Views/Versions/1_21/L1_21S.swift b/SwiftAA/Views/Versions/1_21/L1_21S.swift index 8db6bfe..7c8f343 100644 --- a/SwiftAA/Views/Versions/1_21/L1_21S.swift +++ b/SwiftAA/Views/Versions/1_21/L1_21S.swift @@ -56,7 +56,7 @@ struct L1_21S: View { .frame(width: 306) GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/balanced_diet"), rowCount: 16, goal: L10n.Goal.foodsEaten) .frame(width: 315) - GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/bred_all_animals"), rowCount: 16, goal: L10n.Goal.animalsBred) + GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/bred_all_animals"), rowCount: 16, goal: L10n.Goal.animalsBred, hidePercentage: true) .frame(width: 168) GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/complete_catalogue"), rowCount: 16, goal: "", hidePercentage: true) .frame(width: 90) diff --git a/SwiftAA/Views/Versions/1_21/L1_21V.swift b/SwiftAA/Views/Versions/1_21/L1_21V.swift index 14db2a4..11aced4 100644 --- a/SwiftAA/Views/Versions/1_21/L1_21V.swift +++ b/SwiftAA/Views/Versions/1_21/L1_21V.swift @@ -17,7 +17,7 @@ struct L1_21V: View { var body: some View { VStack(alignment: .leading, spacing: 0) { HStack(spacing: 0) { - AdvPanelView(indicators: .constant(dataManager.minimalisticAdvancements), columnCount: 5, isMinimal: true) + AdvPanelView(indicators: .constant(dataManager.minimalisticAdvancements), columnCount: 6, isMinimal: true) .frame(width: 370) VStack(spacing: 0) { @@ -34,7 +34,7 @@ struct L1_21V: View { } .frame(width: 236) } - .frame(height: 431) + .frame(height: 505) HStack(spacing: 0) { GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:husbandry/complete_catalogue"), rowCount: 6, goal: L10n.Goal.cats, isMinimal: true) @@ -50,7 +50,7 @@ struct L1_21V: View { } .frame(width: 310) } - .frame(height: 796) + .frame(height: 870) HStack(spacing: 0) { GoalPanelView(advancement: dataManager.getGoalAdvancement(id: "minecraft:adventure/adventuring_time"), rowCount: 14, goal: L10n.Goal.biomesVisited, isMinimal: true) From 7240bd80e8d8f6f098ae8482bc062e1d863bfca5 Mon Sep 17 00:00:00 2001 From: Slackow <32826498+Slackow@users.noreply.github.com> Date: Mon, 30 Dec 2024 00:42:07 -0500 Subject: [PATCH 6/7] 1.21 vertical support add translations for 1.21 add heavy core stat --- SwiftAA.xcodeproj/project.pbxproj | 4 + .../Indicators/Statistic/HeavilyCore.swift | 21 ++++ .../heavy_core_stat.imageset/Contents.json | 21 ++++ .../heavy_core_stat.png | Bin 0 -> 1288 bytes SwiftAA/Resources/Generated/Strings.swift | 102 ++++++++++++++++++ .../Resources/en.lproj/Localizable.strings | 39 +++++++ SwiftAA/Utils/Constants.swift | 1 + .../View/VersionFrameModifier.swift | 2 +- SwiftAA/Views/Versions/1_21/L1_21V.swift | 32 +++--- 9 files changed, 206 insertions(+), 16 deletions(-) create mode 100644 SwiftAA/Models/Constants/Indicators/Statistic/HeavilyCore.swift create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/Contents.json create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/heavy_core_stat.png diff --git a/SwiftAA.xcodeproj/project.pbxproj b/SwiftAA.xcodeproj/project.pbxproj index d0c1c6e..151ff00 100644 --- a/SwiftAA.xcodeproj/project.pbxproj +++ b/SwiftAA.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 490D35042B942F7300342D04 /* enchanted_netherite_boots.gif in Resources */ = {isa = PBXBuildFile; fileRef = 490D35032B942F7300342D04 /* enchanted_netherite_boots.gif */; }; 490F121E2AD3701300BC30DD /* L1_16V.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490F121D2AD3701300BC30DD /* L1_16V.swift */; }; + 498147892D224C2300606027 /* HeavilyCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498147882D224C0F00606027 /* HeavilyCore.swift */; }; 498A3E842D20FA7500F0A345 /* L1_21.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498A3E832D20FA6A00F0A345 /* L1_21.swift */; }; 498A3E8A2D21153100F0A345 /* L1_21S.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498A3E872D21153100F0A345 /* L1_21S.swift */; }; 498A3E8B2D21153100F0A345 /* L1_21M.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498A3E882D21153100F0A345 /* L1_21M.swift */; }; @@ -210,6 +211,7 @@ /* Begin PBXFileReference section */ 490D35032B942F7300342D04 /* enchanted_netherite_boots.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = enchanted_netherite_boots.gif; sourceTree = ""; }; 490F121D2AD3701300BC30DD /* L1_16V.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_16V.swift; sourceTree = ""; }; + 498147882D224C0F00606027 /* HeavilyCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeavilyCore.swift; sourceTree = ""; }; 498A3E832D20FA6A00F0A345 /* L1_21.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_21.swift; sourceTree = ""; }; 498A3E872D21153100F0A345 /* L1_21S.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_21S.swift; sourceTree = ""; }; 498A3E882D21153100F0A345 /* L1_21M.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L1_21M.swift; sourceTree = ""; }; @@ -800,6 +802,7 @@ B697E0FD2B844CEF00932278 /* Statistic */ = { isa = PBXGroup; children = ( + 498147882D224C0F00606027 /* HeavilyCore.swift */, B697E1012B844D5500932278 /* EnderPearls.swift */, B697E1032B844D6F00932278 /* NetherWart.swift */, B697E1052B844D8300932278 /* GhastTears.swift */, @@ -1271,6 +1274,7 @@ B62405A32B80167300CAA885 /* L1_20S.swift in Sources */, B687E18B28B3E996002CF5D7 /* L1_19.swift in Sources */, B6A4AF7A2AECC06E00C7B805 /* Utilities.swift in Sources */, + 498147892D224C2300606027 /* HeavilyCore.swift in Sources */, B697E0F92B844C9400932278 /* MajorBiomes.swift in Sources */, B62A00F22AB69F9D007F5B7A /* VerificationStatus.swift in Sources */, B66A07742887A32900DC0A2C /* Criterion.swift in Sources */, diff --git a/SwiftAA/Models/Constants/Indicators/Statistic/HeavilyCore.swift b/SwiftAA/Models/Constants/Indicators/Statistic/HeavilyCore.swift new file mode 100644 index 0000000..503183d --- /dev/null +++ b/SwiftAA/Models/Constants/Indicators/Statistic/HeavilyCore.swift @@ -0,0 +1,21 @@ +// +// HeavilyCore.swift +// SwiftAA +// +// Created by Andrew on 12/29/24. +// + +class HeavilyCore: StatisticIndicator { + var id: String = "minecraft:heavy_core" + var key: String = L10n.Statistic.heavyCore + var name: String = "Heavy Core" + var icon: String = "heavy_core_stat" + var completed: Bool = false + + static let shared = HeavilyCore() + + func update(progress: ProgressManager) { + completed = progress.timesPickedUp(id) >= 1 + print("Updated", completed) + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/Contents.json new file mode 100644 index 0000000..fb7f7c7 --- /dev/null +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "heavy_core_stat.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/heavy_core_stat.png b/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/heavy_core_stat.png new file mode 100644 index 0000000000000000000000000000000000000000..9364240f0b6ab784a0ccb3e14611a3244baef9be GIT binary patch literal 1288 zcmZ`(-A~g{6u+ZpX5Mnj0}*T!(oR#6JFgu${*9503foiwiN(w3}#K!!*N zPq3I61H|wb7>qAInAn)`=9AF}W5T0BU;K!~Cll}O#x@4r=JuT4bAG>b&b{Y$DLQnc z$=T`z05pXMgcy`AG#hK+dnG^RhhkMqgp-j7=!AMBsCS$I7}Ol_0ghHsXX^lrIND13 zZAVAZ2hungfXGh6nOu}XZPEWBlxPgV37HBqDw|SD5e-$tqne6)Nk7T>0I1ohDdAij zSXoB|CwKGhP#nt)jOqX!Z$Z-mR@dDCV2T`17>URrH=!z|IH`_Hq^V>O3It6Ks)}TY zxT&PlI%kFm+k=BTTBZoxb}{aTh(sic_o|wN`$?Ll3Eqk0cu<>6axtO52!~%GV#+Ww z97ScbSu*P-RqYPN1OfqyW+|5SKo5_8FKvjXC#_#7knHgYl0Koy8ADdnIN}w@)oCL{ z5GYV-6!Mfzxg0627t4YLQpiFvBuyO#gT8gB!X;vouBN8ZIr7~s4F|=bcaS<@ zu7;M8H`B7gvqebNay4qSY(FeurMVh9tjQAWMmtxg7_D-x=pUp|Lsm3sq5JJs*#5i| zZp+?P;+^0Be7Oa0*IHP(7VpSUto!sXtkc~6U58=w&tBJ#_*<~0T;1o7^AEbMi?s_| zZnt~;?aY>Cjr}-dS=P^;UuT`Ep8DnX?S&`z`=4fBU41jtH`nCy(sR$}POV=4=I?pe z(2~(K)*8>TZ7YG5&Be#fm(1a0$N9yVxlK2Q^$x}u?ES6_ Date: Mon, 30 Dec 2024 00:50:33 -0500 Subject: [PATCH 7/7] Change Heavy Core Icon, remove unneeded print --- .../Indicators/Statistic/HeavilyCore.swift | 1 - .../Items/heavy_core_stat.imageset/Contents.json | 2 +- .../heavy_core_stat.imageset/heavy_core^16.png | Bin 0 -> 861 bytes .../heavy_core_stat.imageset/heavy_core_stat.png | Bin 1288 -> 0 bytes 4 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/heavy_core^16.png delete mode 100644 SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/heavy_core_stat.png diff --git a/SwiftAA/Models/Constants/Indicators/Statistic/HeavilyCore.swift b/SwiftAA/Models/Constants/Indicators/Statistic/HeavilyCore.swift index 503183d..10cbfcb 100644 --- a/SwiftAA/Models/Constants/Indicators/Statistic/HeavilyCore.swift +++ b/SwiftAA/Models/Constants/Indicators/Statistic/HeavilyCore.swift @@ -16,6 +16,5 @@ class HeavilyCore: StatisticIndicator { func update(progress: ProgressManager) { completed = progress.timesPickedUp(id) >= 1 - print("Updated", completed) } } diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/Contents.json b/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/Contents.json index fb7f7c7..3e2cf34 100644 --- a/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/Contents.json +++ b/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "heavy_core_stat.png", + "filename" : "heavy_core^16.png", "idiom" : "universal", "scale" : "1x" }, diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/heavy_core^16.png b/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/heavy_core^16.png new file mode 100644 index 0000000000000000000000000000000000000000..dd328f2b87984188f654b7db28fda9eda8d5d411 GIT binary patch literal 861 zcmV-j1ETziP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz0`f^jK~y+TZBt83 z6HyesZ>BTDOhd7>#r~)TY#^YbhD2jb3@bMVF~Nzm zr{1u;85CJWnyy1ljbqAGWxjjjWY>#&JCd&U52K=k(_QBo&b;HTtVqWe7iNLargXQ* zr`0tylWw;cD4JFSGhYco6j1Ad!w`=}Ki;`LbR1K~qCoeh>t;!k!q{Ggs%r{~2tzCu z0*loScDoA%ArF1Z zY&JW{vJ8?a!LOe)@aEN1a&GoJh@zOsWUat03Q!acs-_azTpDHr-(dRldx%FvkjrLZ zCAb71-o1v2mt&C4u7QDKK$Zl;W-=A1>jFZK$A@VUB>^`~1wNO748Ht(J^)LL^O!^d zXEXsp7@&gX0NVwM;Wh=bnKY=Xsu2VUsbr#PpEFhhpU(nK(;!JAXqo~fNdje{Kv85Z zos4b@gySJ1nM$w}&a~6zQE8e1jx%DC3X&{gaT$LKFbu2WNhy@T(k63}Tl}#c%jeRm z={%oXYJfdY)kW z0W9e>kd!B%=ZVzcgpTdvmk{y85C}JM>Q6j0V6i%GL?X*ljorRJNLzp`wyKV5v!fRe zUwff`oN-duRDUcM8^`Bmqr8E=tp`zKQ%l)0xt#7!x7$;;Om>HpwAyU{OT3P@Lr2lR n{cYRU*;TuXtgH8JAp-mZpO#bHS*99500000NkvXXu0mjfhA4HH literal 0 HcmV?d00001 diff --git a/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/heavy_core_stat.png b/SwiftAA/Resources/Assets.xcassets/Icons/Items/heavy_core_stat.imageset/heavy_core_stat.png deleted file mode 100644 index 9364240f0b6ab784a0ccb3e14611a3244baef9be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1288 zcmZ`(-A~g{6u+ZpX5Mnj0}*T!(oR#6JFgu${*9503foiwiN(w3}#K!!*N zPq3I61H|wb7>qAInAn)`=9AF}W5T0BU;K!~Cll}O#x@4r=JuT4bAG>b&b{Y$DLQnc z$=T`z05pXMgcy`AG#hK+dnG^RhhkMqgp-j7=!AMBsCS$I7}Ol_0ghHsXX^lrIND13 zZAVAZ2hungfXGh6nOu}XZPEWBlxPgV37HBqDw|SD5e-$tqne6)Nk7T>0I1ohDdAij zSXoB|CwKGhP#nt)jOqX!Z$Z-mR@dDCV2T`17>URrH=!z|IH`_Hq^V>O3It6Ks)}TY zxT&PlI%kFm+k=BTTBZoxb}{aTh(sic_o|wN`$?Ll3Eqk0cu<>6axtO52!~%GV#+Ww z97ScbSu*P-RqYPN1OfqyW+|5SKo5_8FKvjXC#_#7knHgYl0Koy8ADdnIN}w@)oCL{ z5GYV-6!Mfzxg0627t4YLQpiFvBuyO#gT8gB!X;vouBN8ZIr7~s4F|=bcaS<@ zu7;M8H`B7gvqebNay4qSY(FeurMVh9tjQAWMmtxg7_D-x=pUp|Lsm3sq5JJs*#5i| zZp+?P;+^0Be7Oa0*IHP(7VpSUto!sXtkc~6U58=w&tBJ#_*<~0T;1o7^AEbMi?s_| zZnt~;?aY>Cjr}-dS=P^;UuT`Ep8DnX?S&`z`=4fBU41jtH`nCy(sR$}POV=4=I?pe z(2~(K)*8>TZ7YG5&Be#fm(1a0$N9yVxlK2Q^$x}u?ES6_