From f70b061d1a5eeceaabe574eea84d62ca4985ad4b Mon Sep 17 00:00:00 2001 From: xyou Date: Sat, 8 Aug 2026 14:07:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A1=B9=E7=9B=AE=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=20+=203D=E6=96=B9=E5=9D=97=E4=B8=96=E7=95=8C=E5=8E=9F?= =?UTF-8?q?=E5=9E=8B=20+=20AI=E5=8A=A9=E6=90=AD=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器 HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块 Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚 AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI --- .gitignore | 19 +- Makefile | 5 +- .../AIActionExecutor.cs | 140 + .../AIAssistantManager.cs | 134 + .../AIChatController.cs | 91 + .../AICircuitAdvisor.cs | 59 + .../AIContextProvider.cs | 83 + .../RedCircuit.AIAssistant/AIModels.cs | 136 + .../RedCircuit.AIAssistant.asmdef | 10 + docs/AI助搭功能策划文档.md | 292 ++ launcher/MRCC.Launcher.sln | 33 + launcher/MRCC.Launcher/App.xaml | 6 + launcher/MRCC.Launcher/App.xaml.cs | 7 + launcher/MRCC.Launcher/MRCC.Launcher.csproj | 31 + launcher/MRCC.Launcher/MainWindow.xaml | 128 + launcher/MRCC.Launcher/MainWindow.xaml.cs | 29 + launcher/MRCC.Launcher/Program.cs | 26 + .../MRCC.Launcher/ViewModels/MainViewModel.cs | 29 + launcher/MRCC.Launcher/app.manifest | 17 + launcher/MRCC.Launcher/metadata.json | 17 + launcher/PCL-CE/.editorconfig | 4 + launcher/PCL-CE/.gitattributes | 63 + launcher/PCL-CE/.github/FUNDING.yml | 3 + .../PCL-CE/.github/ISSUE_TEMPLATE/1-bug.yml | 52 + .../.github/ISSUE_TEMPLATE/2-game_crash.yml | 47 + .../PCL-CE/.github/ISSUE_TEMPLATE/21-bug.yml | 67 + .../.github/ISSUE_TEMPLATE/22-game_crash.yml | 59 + .../ISSUE_TEMPLATE/23-feature.yml.disabled | 44 + .../.github/ISSUE_TEMPLATE/24-improve.yml | 49 + .../ISSUE_TEMPLATE/3-feature.yml.disabled | 37 + .../ISSUE_TEMPLATE/4-improve.yml.disabled | 45 + .../PCL-CE/.github/ISSUE_TEMPLATE/config.yml | 17 + .../PCL-CE/.github/workflows/build-test.yml | 38 + .../workflows/mirrorchyan_release_note.yml | 22 + .../workflows/mirrorchyan_uploading.yml | 41 + .../workflows/release-beta_publish.yml | 102 + .../workflows/release-stable_publish.yml | 102 + .../.github/workflows/reusable-build.yml | 57 + launcher/PCL-CE/.gitignore | 348 ++ launcher/PCL-CE/CONTRIBUTING.md | 161 + launcher/PCL-CE/GPG-PUBLIC-KEY.asc | Bin 0 -> 1472 bytes launcher/PCL-CE/LICENSE | 207 + .../ConfigGenerator.cs | 746 +++ .../DependencyCollectorGenerator.cs | 350 ++ .../EnvironmentInteropGenerator.cs | 69 + .../LifecycleScopeGenerator.cs | 306 ++ .../LifecycleServiceTypesGenerator.cs | 292 ++ .../PCL.Core.SourceGenerators.csproj | 22 + .../SharedConstants.cs | 14 + .../SharedExtensions.cs | 252 + .../System.Runtime.CompilerServices.cs | 10 + launcher/PCL-CE/PCL.Core/.editorconfig | 177 + launcher/PCL-CE/PCL.Core/.gitignore | 410 ++ launcher/PCL-CE/PCL.Core/App/Basics.cs | 195 + .../PCL.Core/App/Cli/ArgumentValueKind.cs | 8 + .../PCL-CE/PCL.Core/App/Cli/BoolArgument.cs | 37 + .../PCL.Core/App/Cli/CommandArgument.cs | 92 + .../PCL-CE/PCL.Core/App/Cli/CommandLine.cs | 266 + .../PCL.Core/App/Cli/DecimalArgument.cs | 47 + .../PCL.Core/App/Cli/SubcommandDefinition.cs | 44 + .../PCL-CE/PCL.Core/App/Cli/TextArgument.cs | 8 + launcher/PCL-CE/PCL.Core/App/Config.cs | 642 +++ launcher/PCL-CE/PCL.Core/App/ConfigEnums.cs | 116 + .../PCL.Core/App/Configuration/ArgConfig.cs | 13 + .../PCL.Core/App/Configuration/Attributes.cs | 40 + .../PCL.Core/App/Configuration/ConfigEvent.cs | 60 + .../App/Configuration/ConfigEventArgs.cs | 32 + .../App/Configuration/ConfigEventHandler.cs | 7 + .../App/Configuration/ConfigEventRegistry.cs | 24 + .../PCL.Core/App/Configuration/ConfigItem.cs | 369 ++ .../App/Configuration/ConfigMigration.cs | 178 + .../App/Configuration/ConfigObserver.cs | 13 + .../App/Configuration/ConfigService.cs | 364 ++ .../App/Configuration/ConfigSource.cs | 27 + .../App/Configuration/ConfigValueCache.cs | 86 + .../App/Configuration/IConfigProvider.cs | 40 + .../App/Configuration/IConfigScope.cs | 30 + .../Storage/CatIniFileProvider.cs | 55 + .../Storage/CommonFileProvider.cs | 31 + .../Storage/ConfigFileInitException.cs | 12 + .../Configuration/Storage/ConfigStorage.cs | 146 + .../Storage/DynamicCacheConfigStorage.cs | 54 + .../Storage/EncryptedFileConfigStorage.cs | 64 + .../Storage/FileConfigStorage.cs | 153 + .../Storage/IEnumerableKeyProvider.cs | 11 + .../Storage/IKeyValueFileProvider.cs | 37 + .../Configuration/Storage/JsonFileProvider.cs | 108 + .../Storage/JsonToYamlConverter.cs | 105 + .../Configuration/Storage/YamlFileProvider.cs | 117 + .../Storage/YamlNodeConverter.cs | 105 + .../Configuration/Storage/YamlNodeEmitter.cs | 197 + .../PCL.Core/App/Database/DatabaseEntry.cs | 48 + .../PCL.Core/App/Database/DatabaseService.cs | 39 + .../PCL-CE/PCL.Core/App/Database/README.md | 35 + .../App/Essentials/ApplicationService.cs | 65 + .../App/Essentials/MainWindowService.cs | 24 + .../PCL.Core/App/Essentials/PromoteService.cs | 340 ++ .../PCL.Core/App/Essentials/RpcFunction.cs | 9 + .../PCL.Core/App/Essentials/RpcProperty.cs | 58 + .../PCL.Core/App/Essentials/RpcResponse.cs | 73 + .../PCL.Core/App/Essentials/RpcService.cs | 276 + .../App/Essentials/SingleInstanceService.cs | 70 + .../PCL.Core/App/Essentials/StartupService.cs | 159 + .../App/Essentials/StartupValidation.cs | 29 + .../App/Essentials/TelemetryService.cs | 228 + .../PCL.Core/App/Essentials/UpdateHelper.cs | 48 + .../PCL.Core/App/Essentials/UpdateService.cs | 91 + .../PCL.Core/App/EventBus/EventBusService.cs | 261 + .../PCL.Core/App/EventBus/EventDataBase.cs | 5 + .../PCL.Core/App/EventBus/IEventHandler.cs | 14 + .../App/EventBus/IResponsibleEventHandler.cs | 13 + .../PCL-CE/PCL.Core/App/IoC/Attributes.cs | 106 + .../PCL.Core/App/IoC/DependencyArguments.cs | 9 + .../PCL.Core/App/IoC/DependencyGroup.cs | 34 + .../PCL.Core/App/IoC/DependencyGroups.cs | 27 + .../PCL-CE/PCL.Core/App/IoC/GeneralService.cs | 63 + launcher/PCL-CE/PCL.Core/App/IoC/Lifecycle.cs | 26 + .../PCL.Core/App/IoC/LifecycleContext.cs | 132 + .../PCL-CE/PCL.Core/App/IoC/LifecycleFlow.cs | 197 + .../PCL-CE/PCL.Core/App/IoC/LifecycleLogs.cs | 109 + .../PCL.Core/App/IoC/LifecycleProcess.cs | 26 + .../PCL.Core/App/IoC/LifecycleService.cs | 402 ++ .../PCL-CE/PCL.Core/App/IoC/LifecycleState.cs | 177 + .../PCL.Core/App/IoC/PropertyAccessor.cs | 17 + .../PCL-CE/PCL.Core/App/Localization/Lang.cs | 290 ++ .../App/Localization/Languages/en-GB.xaml | 13 + .../App/Localization/Languages/en-US.xaml | 3573 +++++++++++++ .../App/Localization/Languages/es-ES.xaml | 13 + .../App/Localization/Languages/fr-FR.xaml | 13 + .../App/Localization/Languages/ja-JP.xaml | 13 + .../App/Localization/Languages/zh-CN.xaml | 3573 +++++++++++++ .../App/Localization/Languages/zh-TW.xaml | 13 + .../Localization/LocalizationFontProfile.cs | 37 + .../Localization/LocalizationFontService.cs | 158 + .../LocalizationFormatConverter.cs | 101 + .../App/Localization/LocalizationLanguage.cs | 15 + .../App/Localization/LocalizationService.cs | 322 ++ .../App/Localization/WeakLanguageChanged.cs | 57 + launcher/PCL-CE/PCL.Core/App/Metadata.cs | 89 + launcher/PCL-CE/PCL.Core/App/Paths.cs | 92 + launcher/PCL-CE/PCL.Core/App/Secrets.cs | 43 + launcher/PCL-CE/PCL.Core/App/States.cs | 356 ++ launcher/PCL-CE/PCL.Core/App/Tasks/ITask.cs | 35 + .../PCL.Core/App/Tasks/ITaskCancelable.cs | 9 + .../PCL-CE/PCL.Core/App/Tasks/ITaskGroup.cs | 9 + .../PCL.Core/App/Tasks/ITaskPausable.cs | 9 + .../PCL.Core/App/Tasks/ITaskProgressive.cs | 18 + .../PCL-CE/PCL.Core/App/Tasks/TaskCenter.cs | 107 + .../PCL-CE/PCL.Core/App/Tasks/TaskModel.cs | 84 + .../PCL-CE/PCL.Core/App/Tasks/TaskState.cs | 10 + .../App/Tools/DependencyCheckService.cs | 110 + launcher/PCL-CE/PCL.Core/AssemblyInfo.cs | 13 + launcher/PCL-CE/PCL.Core/IO/ByteStream.cs | 52 + launcher/PCL-CE/PCL.Core/IO/Directories.cs | 306 ++ .../PCL.Core/IO/Download/IDlConnection.cs | 29 + .../IO/Download/IDlResourceMapping.cs | 10 + .../PCL-CE/PCL.Core/IO/Download/IDlWriter.cs | 31 + .../PCL.Core/IO/Download/NDlConnectionInfo.cs | 15 + .../PCL-CE/PCL.Core/IO/Download/NDlFactory.cs | 65 + .../PCL.Core/IO/Download/NDlSourceReport.cs | 13 + launcher/PCL-CE/PCL.Core/IO/Files.cs | 948 ++++ .../PCL-CE/PCL.Core/IO/Net/Dns/DnsQuery.cs | 103 + .../PCL.Core/IO/Net/Dns/DnsSrvResource.cs | 67 + .../IO/Net/Dns/WeightedDnsRacerClient.cs | 79 + .../IO/Net/Http/Cache/HttpCacheHandler.cs | 124 + .../IO/Net/Http/Cache/HttpCacheMetadata.cs | 8 + .../IO/Net/Http/HostConnectionHandler.cs | 248 + .../IO/Net/Http/HttpBasicExtension.cs | 16 + .../IO/Net/Http/HttpContentExtension.cs | 56 + .../IO/Net/Http/HttpCookieExtension.cs | 43 + .../IO/Net/Http/HttpHeaderExtension.cs | 49 + .../PCL.Core/IO/Net/Http/HttpProxyManager.cs | 224 + .../PCL.Core/IO/Net/Http/HttpRequest.cs | 49 + .../IO/Net/Http/HttpResponseException.cs | 48 + .../IO/Net/Http/HttpResponseExtension.cs | 144 + .../PCL-CE/PCL.Core/IO/Net/Http/HttpRoute.cs | 10 + .../PCL.Core/IO/Net/Http/HttpRouteResponse.cs | 154 + .../IO/Net/Http/HttpSenderExtension.cs | 67 + .../PCL-CE/PCL.Core/IO/Net/Http/HttpServer.cs | 170 + .../PCL-CE/PCL.Core/IO/Net/NetworkHelper.cs | 22 + .../PCL.Core/IO/Net/NetworkInterfaceUtils.cs | 97 + .../PCL-CE/PCL.Core/IO/Net/NetworkService.cs | 194 + .../PCL-CE/PCL.Core/IO/Net/SocketExtension.cs | 21 + launcher/PCL-CE/PCL.Core/IO/Net/TcpForward.cs | 222 + launcher/PCL-CE/PCL.Core/IO/PipeComm.cs | 128 + .../IO/Storage/Cache/CacheEvictionService.cs | 110 + .../PCL.Core/IO/Storage/Cache/CacheKeys.cs | 98 + .../PCL.Core/IO/Storage/Cache/CacheOptions.cs | 38 + .../PCL.Core/IO/Storage/Cache/CachePolicy.cs | 58 + .../PCL.Core/IO/Storage/Cache/CacheResult.cs | 24 + .../PCL.Core/IO/Storage/Cache/CacheService.cs | 461 ++ .../IO/Storage/Cache/CacheServiceManager.cs | 42 + .../PCL.Core/IO/Storage/Cache/CacheStats.cs | 16 + .../IO/Storage/Cache/FileCacheStora.cs | 95 + .../IO/Storage/Cache/ICacheService.cs | 78 + .../IO/Storage/Cache/Model/CacheEntry.cs | 58 + .../Storage/Cache/Model/ComponentCacheRow.cs | 29 + .../Storage/Cache/Model/InstanceCacheRow.cs | 70 + .../IO/Storage/Cache/SchemaManager.cs | 210 + .../IO/Storage/Cache/SqliteCacheStorage.cs | 619 +++ .../PCL-CE/PCL.Core/IO/Storage/HashStorage.cs | 143 + .../PCL-CE/PCL.Core/Link/BroadcastListener.cs | 129 + .../PCL-CE/PCL.Core/Link/BroadcastLocal.cs | 86 + .../PCL-CE/PCL.Core/Link/BroadcastRecord.cs | 6 + .../PCL.Core/Link/EasyTier/ETController.cs | 228 + .../PCL.Core/Link/EasyTier/ETInfoProvider.cs | 187 + .../PCL.Core/Link/EasyTier/ETPeerInfo.cs | 15 + .../PCL-CE/PCL.Core/Link/EasyTier/ETRelay.cs | 20 + launcher/PCL-CE/PCL.Core/Link/LinkAnnounce.cs | 19 + .../PCL.Core/Link/Lobby/LobbyController.cs | 302 ++ .../PCL.Core/Link/Lobby/LobbyInfoProvider.cs | 131 + .../PCL.Core/Link/Lobby/LobbyService.cs | 564 ++ .../PCL-CE/PCL.Core/Link/Lobby/LobbyState.cs | 52 + .../PCL.Core/Link/Lobby/LobbyTextHandler.cs | 51 + .../PCL.Core/Link/McPing/IMcPingService.cs | 35 + .../Link/McPing/LegacyMcPingService.cs | 113 + .../PCL.Core/Link/McPing/McPingService.cs | 382 ++ .../Link/McPing/McPingServiceFactory.cs | 68 + .../McPing/Model/McPingModInfoModResult.cs | 7 + .../Link/McPing/Model/McPingModInfoResult.cs | 8 + .../Link/McPing/Model/McPingPlayerResult.cs | 9 + .../McPing/Model/McPingPlayerSampleResult.cs | 7 + .../Link/McPing/Model/McPingResult.cs | 12 + .../Link/McPing/Model/McPingVersionResult.cs | 7 + .../Link/Natayark/NatayarkProfileManager.cs | 150 + .../Client/Abstractions/IRequest.cs | 25 + .../Abstractions/ScaffoldingResponse.cs | 5 + .../Client/Framing/ProtocolReader.cs | 89 + .../Client/Framing/ProtocolWriter.cs | 55 + .../Scaffolding/Client/Models/LobbyInfo.cs | 3 + .../Scaffolding/Client/Models/LobbyType.cs | 9 + .../Scaffolding/Client/Models/PlayerKind.cs | 12 + .../Client/Models/PlayerProfile.cs | 14 + .../Requests/GetPlayerProfileListRequest.cs | 35 + .../Client/Requests/GetProtocolsRequest.cs | 37 + .../Client/Requests/GetServerProtRequest.cs | 29 + .../Client/Requests/PingRequest.cs | 35 + .../Client/Requests/PlayerPingRequest.cs | 43 + .../Scaffolding/Client/ScaffoldingClient.cs | 223 + .../Link/Scaffolding/EasyTier/CliNetTest.cs | 111 + .../Scaffolding/EasyTier/EasyPlayerInfo.cs | 23 + .../Scaffolding/EasyTier/EasyTierEntity.cs | 583 +++ .../Scaffolding/EasyTier/EasyTierMetadata.cs | 14 + .../Scaffolding/EasyTier/PublicNodeDto.cs | 22 + .../Link/Scaffolding/EasyTier/StunInfo.cs | 10 + .../Exceptions/FailedToGetPlayerException.cs | 14 + .../Exceptions/ScaffoldingRequestException.cs | 35 + .../Link/Scaffolding/LobbyCodeGenerator.cs | 168 + .../Link/Scaffolding/PlayerListHandler.cs | 24 + .../Link/Scaffolding/ScaffoldingFactory.cs | 105 + .../Server/Abstractions/IRequestHandler.cs | 24 + .../Server/Abstractions/IServerContext.cs | 45 + .../Handlers/GetPlayerProfileListHandler.cs | 43 + .../Server/Handlers/GetProtocolsHandler.cs | 32 + .../Server/Handlers/GetServerPortHandler.cs | 33 + .../Server/Handlers/PingHandler.cs | 19 + .../Server/Handlers/PlayerPingHandler.cs | 72 + .../Scaffolding/Server/ScaffoldingServer.cs | 383 ++ .../Server/ScaffoldingServerContext.cs | 86 + .../Server/TrackedPlayerProfile.cs | 10 + .../PCL-CE/PCL.Core/Logging/ActionLevel.cs | 15 + .../PCL.Core/Logging/ExceptionDetails.cs | 102 + launcher/PCL-CE/PCL.Core/Logging/LogLevel.cs | 52 + .../PCL-CE/PCL.Core/Logging/LogService.cs | 154 + .../PCL-CE/PCL.Core/Logging/LogWrapper.cs | 50 + launcher/PCL-CE/PCL.Core/Logging/Logger.cs | 193 + .../PCL-CE/PCL.Core/Logging/LoggerAdapter.cs | 137 + .../PCL.Core/Logging/LoggerConfiguration.cs | 10 + .../PCL.Core/Logging/LoggerExtensions.cs | 107 + .../PCL.Core/Logging/LoggerFactoryAdapter.cs | 34 + .../PCL-CE/PCL.Core/Minecraft/GameCore.cs | 38 + .../Extensions/JsonWebToken/JsonWebKeys.cs | 9 + .../Extensions/JsonWebToken/JsonWebToken.cs | 273 + .../Extensions/OpenId/OpenIdClient.cs | 95 + .../Extensions/OpenId/OpenIdMetaData.cs | 41 + .../Extensions/OpenId/OpenIdOptions.cs | 120 + .../Extensions/Pkce/PkceChallengeOptions.cs | 7 + .../Extensions/Pkce/PkceClient.cs | 88 + .../YggdrasilConnect/YggdrasilClient.cs | 111 + .../YggdrasilConnectMetaData.cs | 10 + .../YggdrasilConnect/YggdrasilOptions.cs | 61 + .../IdentityModel/IdentityModelException.cs | 47 + .../IdentityModel/OAuth/AuthorizeResult.cs | 40 + .../Minecraft/IdentityModel/OAuth/Client.cs | 155 + .../IdentityModel/OAuth/ClientOptions.cs | 26 + .../IdentityModel/OAuth/DeviceCodeData.cs | 49 + .../IdentityModel/OAuth/EndpointMeta.cs | 17 + .../IdentityModel/OAuth/IOAuthClient.cs | 14 + .../IdentityModel/Yggdrasil/Agent.cs | 12 + .../IdentityModel/Yggdrasil/Client.cs | 167 + .../IdentityModel/Yggdrasil/Options.cs | 30 + .../IdentityModel/Yggdrasil/Profile.cs | 88 + .../Yggdrasil/YggdrasilCredential.cs | 49 + .../PCL.Core/Minecraft/Java/JavaBrandType.cs | 18 + .../PCL.Core/Minecraft/Java/JavaConsts.cs | 20 + .../PCL.Core/Minecraft/Java/JavaEntry.cs | 13 + .../Minecraft/Java/JavaInstallation.cs | 40 + .../PCL.Core/Minecraft/Java/JavaManager.cs | 349 ++ .../PCL.Core/Minecraft/Java/JavaService.cs | 49 + .../PCL.Core/Minecraft/Java/JavaSource.cs | 7 + .../Minecraft/Java/JavaStorageItem.cs | 8 + .../Minecraft/Java/Parser/IJavaParser.cs | 5 + .../Minecraft/Java/Parser/PeHeaderParser.cs | 92 + .../Java/Scanner/DefaultPathsScanner.cs | 157 + .../Minecraft/Java/Scanner/IJavaScanner.cs | 12 + .../Java/Scanner/MicrosoftStoreJavaScanner.cs | 49 + .../Java/Scanner/PathEnvironmentScanner.cs | 30 + .../Java/Scanner/RegistryJavaScanner.cs | 78 + .../Java/Scanner/WhereCommandScanner.cs | 48 + .../Java/UserPreference/AutoSelect.cs | 3 + .../Java/UserPreference/ExistingJava.cs | 3 + .../Java/UserPreference/JavaPreference.cs | 10 + .../UserPreference/UseGlobalPreference.cs | 3 + .../Java/UserPreference/UseRelativePath.cs | 3 + .../Minecraft/Launch/Utils/LaunchEnvUtils.cs | 54 + .../PCL.Core/Minecraft/MavenArtifact.cs | 53 + .../PCL-CE/PCL.Core/Minecraft/McFormatter.cs | 126 + .../PCL.Core/Minecraft/McVersionClassifier.cs | 185 + .../PCL.Core/Minecraft/NbtFileHandler.cs | 97 + .../Curseforge/CurseforgeAuthors.cs | 9 + .../Curseforge/CurseforgeCategories.cs | 17 + .../Curseforge/CurseforgeFile.cs | 15 + .../Curseforge/CurseforgeHashes.cs | 8 + .../Curseforge/CurseforgeLinks.cs | 10 + .../Curseforge/CurseforgePictures.cs | 12 + .../Curseforge/CurseforgeProject.cs | 24 + .../Curseforge/CurseforgeResponseData.cs | 9 + .../Curseforge/CurseforgeScreenshots.cs | 11 + .../ResourceProject/ModDependencyResolver.cs | 316 ++ .../Modrinth/ModrinthDonationUrl.cs | 9 + .../Modrinth/ModrinthGallery.cs | 12 + .../Modrinth/ModrinthLicense.cs | 9 + .../Modrinth/ModrinthModeratorMessage.cs | 8 + .../Modrinth/ModrinthProject.cs | 42 + .../PCL.Core/Minecraft/SaveImportHelper.cs | 24 + .../Minecraft/Saves/DataVersionBoundaries.cs | 20 + .../Minecraft/Saves/Editing/Editable.cs | 40 + .../Minecraft/Saves/Editing/ISaveEditor.cs | 19 + .../Editing/Internal/Pre261SaveEditor.cs | 53 + .../Internal/Version261PlusSaveEditor.cs | 59 + .../Minecraft/Saves/Editing/SaveChanges.cs | 20 + .../Exceptions/SaveCorruptedException.cs | 30 + .../Saves/Exceptions/SaveNotFoundException.cs | 30 + .../PCL.Core/Minecraft/Saves/NBTEnums.cs | 58 + .../Minecraft/Saves/Parsing/ISaveParser.cs | 29 + .../Saves/Parsing/Internal/NbtReadHelper.cs | 84 + .../Parsing/Internal/Pre113SaveParser.cs | 38 + .../Internal/Version113To1152SaveParser.cs | 26 + .../Internal/Version116To1211SaveParser.cs | 43 + .../Internal/Version131To189SaveParser.cs | 38 + .../Internal/Version19To1122SaveParser.cs | 30 + .../Internal/Version261PlusSaveParser.cs | 101 + .../Saves/Parsing/SaveParserFactory.cs | 52 + .../PCL.Core/Minecraft/Saves/SaveInfo.cs | 56 + .../PCL.Core/Minecraft/Saves/SaveManager.cs | 318 ++ .../Minecraft/ServerAddressResolver.cs | 388 ++ .../Minecraft/Yggdrasil/ApiLocation.cs | 34 + .../Model/Homepage/News/ApiResponse.cs | 9 + .../PCL.Core/Model/Homepage/News/NewsItem.cs | 36 + .../PCL.Core/Model/Homepage/News/Result.cs | 14 + launcher/PCL-CE/PCL.Core/NOTICE | 16 + launcher/PCL-CE/PCL.Core/PCL.Core.csproj | 103 + launcher/PCL-CE/PCL.Core/README.md | 7 + .../UI/Animation/Animatable/ClrAnimatable.cs | 28 + .../Animation/Animatable/EmptyAnimatable.cs | 23 + .../UI/Animation/Animatable/IAnimatable.cs | 8 + .../UI/Animation/Animatable/WpfAnimatable.cs | 105 + .../PCL.Core/UI/Animation/Clock/IClock.cs | 32 + .../PCL.Core/UI/Animation/Clock/IUIClock.cs | 9 + .../UI/Animation/Clock/StopwatchClock.cs | 73 + .../PCL.Core/UI/Animation/Clock/WinMMClock.cs | 80 + .../WpfCompositionTargetRenderingClock.cs | 91 + .../UI/Animation/Core/ActionAnimation.cs | 89 + .../UI/Animation/Core/ActionAnimationFrame.cs | 10 + .../UI/Animation/Core/AnimationBase.cs | 30 + .../UI/Animation/Core/AnimationData.cs | 10 + .../UI/Animation/Core/AnimationExtensions.cs | 79 + .../UI/Animation/Core/AnimationFrame.cs | 17 + .../UI/Animation/Core/AnimationGroup.cs | 134 + .../UI/Animation/Core/AnimationService.cs | 245 + .../UI/Animation/Core/AnimationStatus.cs | 21 + .../UI/Animation/Core/AnimationValueType.cs | 16 + .../UI/Animation/Core/FromToAnimationBase.cs | 128 + .../UI/Animation/Core/FromToAnimationFrame.cs | 18 + .../PCL.Core/UI/Animation/Core/IAnimation.cs | 58 + .../UI/Animation/Core/IAnimationData.cs | 6 + .../UI/Animation/Core/IAnimationFrame.cs | 10 + .../UI/Animation/Core/IFromToAnimation.cs | 7 + .../UI/Animation/Core/IImplicitAnimation.cs | 6 + .../UI/Animation/Core/IKeyFrameAnimation.cs | 6 + .../Animation/Core/ParallelAnimationGroup.cs | 71 + .../UI/Animation/Core/RunAnimation.cs | 89 + .../Core/SequentialAnimationGroup.cs | 76 + .../UI/Animation/DoubleFromToAnimation.cs | 20 + .../UI/Animation/Easings/BackEaseIn.cs | 13 + .../UI/Animation/Easings/BackEaseInOut.cs | 22 + .../UI/Animation/Easings/BackEaseOut.cs | 14 + .../Animation/Easings/BackEaseWithPowerIn.cs | 14 + .../Easings/BackEaseWithPowerInOut.cs | 25 + .../Animation/Easings/BackEaseWithPowerOut.cs | 15 + .../UI/Animation/Easings/BounceEaseIn.cs | 13 + .../UI/Animation/Easings/BounceEaseInOut.cs | 18 + .../UI/Animation/Easings/BounceEaseOut.cs | 13 + .../UI/Animation/Easings/CircularEaseIn.cs | 13 + .../UI/Animation/Easings/CircularEaseInOut.cs | 19 + .../UI/Animation/Easings/CircularEaseOut.cs | 13 + .../UI/Animation/Easings/CombinedEasing.cs | 21 + .../UI/Animation/Easings/CompositeEasing.cs | 112 + .../UI/Animation/Easings/CubicEaseIn.cs | 11 + .../UI/Animation/Easings/CubicEaseInOut.cs | 17 + .../UI/Animation/Easings/CubicEaseOut.cs | 12 + .../UI/Animation/Easings/EasePower.cs | 9 + .../PCL.Core/UI/Animation/Easings/Easing.cs | 24 + .../UI/Animation/Easings/ElasticEaseIn.cs | 15 + .../UI/Animation/Easings/ElasticEaseInOut.cs | 25 + .../UI/Animation/Easings/ElasticEaseOut.cs | 15 + .../UI/Animation/Easings/ExponentialEaseIn.cs | 13 + .../Animation/Easings/ExponentialEaseInOut.cs | 18 + .../Animation/Easings/ExponentialEaseOut.cs | 13 + .../PCL.Core/UI/Animation/Easings/IEasing.cs | 26 + .../UI/Animation/Easings/LinearEasing.cs | 11 + .../UI/Animation/Easings/QuadEaseIn.cs | 11 + .../UI/Animation/Easings/QuadEaseInOut.cs | 16 + .../UI/Animation/Easings/QuadEaseOut.cs | 11 + .../UI/Animation/Easings/QuarticEaseIn.cs | 12 + .../UI/Animation/Easings/QuarticEaseInOut.cs | 19 + .../UI/Animation/Easings/QuarticEaseOut.cs | 13 + .../UI/Animation/Easings/QuinticEaseIn.cs | 12 + .../UI/Animation/Easings/QuinticEaseInOut.cs | 19 + .../UI/Animation/Easings/QuinticEaseOut.cs | 13 + .../UI/Animation/Easings/SineEaseIn.cs | 13 + .../UI/Animation/Easings/SineEaseInOut.cs | 13 + .../UI/Animation/Easings/SineEaseOut.cs | 13 + .../UI/Animation/MatrixFromToAnimation.cs | 23 + .../UI/Animation/NColorFromToAnimation.cs | 20 + .../NRotateTransformFromToAnimation.cs | 22 + .../NScaleTransformFromToAnimation.cs | 22 + .../UI/Animation/PointFromToAnimation.cs | 23 + .../UI/Animation/ThicknessFromToAnimation.cs | 23 + .../UIAccessProvider/IUIAccessProvider.cs | 47 + .../UIAccessProvider/WpfUIAccessProvider.cs | 49 + .../ValueProcessor/DoubleValueProcessor.cs | 18 + .../ValueProcessor/IValueProcessor.cs | 52 + .../ValueProcessor/MatrixValueProcessor.cs | 36 + .../ValueProcessor/NColorValueProcessor.cs | 24 + .../NRotateTransformValueProcessor.cs | 16 + .../NScaleTransformValueProcessor.cs | 16 + .../ValueProcessor/PointValueProcessor.cs | 18 + .../ValueProcessor/ThicknessValueProcessor.cs | 36 + .../ValueProcessor/ValueProcessorManager.cs | 90 + .../UI/Assets/IconPacks/lucide/LICENSE.txt | 43 + .../UI/Assets/IconPacks/lucide/anvil.svg | 19 + .../UI/Assets/IconPacks/lucide/arrow-left.svg | 16 + .../IconPacks/lucide/arrow-right-left.svg | 16 + .../Assets/IconPacks/lucide/arrow-right.svg | 16 + .../Assets/IconPacks/lucide/arrow-up-down.svg | 18 + .../IconPacks/lucide/arrow-up-from-line.svg | 15 + .../IconPacks/lucide/arrow-up-to-line.svg | 17 + .../Assets/IconPacks/lucide/book-marked.svg | 14 + .../UI/Assets/IconPacks/lucide/box.svg | 17 + .../UI/Assets/IconPacks/lucide/boxes.svg | 24 + .../UI/Assets/IconPacks/lucide/bubbles.svg | 16 + .../UI/Assets/IconPacks/lucide/cat.svg | 16 + .../Assets/IconPacks/lucide/chevron-left.svg | 15 + .../Assets/IconPacks/lucide/chevron-right.svg | 15 + .../Assets/IconPacks/lucide/chevrons-left.svg | 16 + .../Assets/IconPacks/lucide/circle-check.svg | 16 + .../Assets/IconPacks/lucide/circle-help.svg | 17 + .../Assets/IconPacks/lucide/circle-minus.svg | 16 + .../Assets/IconPacks/lucide/circle-plus.svg | 17 + .../UI/Assets/IconPacks/lucide/coffee.svg | 18 + .../UI/Assets/IconPacks/lucide/copy.svg | 16 + .../UI/Assets/IconPacks/lucide/download.svg | 17 + .../UI/Assets/IconPacks/lucide/earth.svg | 18 + .../UI/Assets/IconPacks/lucide/egg.svg | 13 + .../Assets/IconPacks/lucide/ethernet-port.svg | 17 + .../Assets/IconPacks/lucide/external-link.svg | 17 + .../Assets/IconPacks/lucide/file-archive.svg | 20 + .../UI/Assets/IconPacks/lucide/file-box.svg | 19 + .../UI/Assets/IconPacks/lucide/file-input.svg | 18 + .../UI/Assets/IconPacks/lucide/flag.svg | 15 + .../Assets/IconPacks/lucide/flask-conical.svg | 17 + .../Assets/IconPacks/lucide/folder-input.svg | 15 + .../Assets/IconPacks/lucide/folder-open.svg | 15 + .../Assets/IconPacks/lucide/folder-plus.svg | 17 + .../UI/Assets/IconPacks/lucide/gauge.svg | 16 + .../UI/Assets/IconPacks/lucide/globe.svg | 17 + .../UI/Assets/IconPacks/lucide/grid-2x2.svg | 17 + .../UI/Assets/IconPacks/lucide/hammer.svg | 17 + .../Assets/IconPacks/lucide/heart-filled.svg | 12 + .../UI/Assets/IconPacks/lucide/heart-off.svg | 17 + .../UI/Assets/IconPacks/lucide/heart.svg | 15 + .../UI/Assets/IconPacks/lucide/image.svg | 17 + .../UI/Assets/IconPacks/lucide/info.svg | 17 + .../UI/Assets/IconPacks/lucide/layers.svg | 15 + .../IconPacks/lucide/layout-dashboard.svg | 18 + .../Assets/IconPacks/lucide/layout-list.svg | 18 + .../UI/Assets/IconPacks/lucide/link-2-off.svg | 18 + .../UI/Assets/IconPacks/lucide/link-2.svg | 15 + .../UI/Assets/IconPacks/lucide/list-x.svg | 17 + .../UI/Assets/IconPacks/lucide/list.svg | 20 + .../UI/Assets/IconPacks/lucide/log-out.svg | 17 + .../IconPacks/lucide/message-circle.svg | 15 + .../UI/Assets/IconPacks/lucide/minus.svg | 15 + .../Assets/IconPacks/lucide/monitor-cog.svg | 26 + .../UI/Assets/IconPacks/lucide/move-down.svg | 14 + .../UI/Assets/IconPacks/lucide/move-up.svg | 14 + .../UI/Assets/IconPacks/lucide/music.svg | 17 + .../UI/Assets/IconPacks/lucide/network.svg | 19 + .../Assets/IconPacks/lucide/package-plus.svg | 18 + .../UI/Assets/IconPacks/lucide/package.svg | 18 + .../UI/Assets/IconPacks/lucide/palette.svg | 19 + .../UI/Assets/IconPacks/lucide/pencil.svg | 16 + .../UI/Assets/IconPacks/lucide/play.svg | 15 + .../UI/Assets/IconPacks/lucide/power.svg | 16 + .../UI/Assets/IconPacks/lucide/puzzle.svg | 15 + .../UI/Assets/IconPacks/lucide/refresh-cw.svg | 18 + .../UI/Assets/IconPacks/lucide/rocket.svg | 18 + .../UI/Assets/IconPacks/lucide/rotate-ccw.svg | 16 + .../UI/Assets/IconPacks/lucide/save.svg | 17 + .../Assets/IconPacks/lucide/scroll-text.svg | 18 + .../UI/Assets/IconPacks/lucide/scroll.svg | 14 + .../UI/Assets/IconPacks/lucide/search.svg | 16 + .../UI/Assets/IconPacks/lucide/server.svg | 18 + .../UI/Assets/IconPacks/lucide/settings.svg | 16 + .../UI/Assets/IconPacks/lucide/share-2.svg | 19 + .../Assets/IconPacks/lucide/shield-check.svg | 16 + .../UI/Assets/IconPacks/lucide/shirt.svg | 15 + .../UI/Assets/IconPacks/lucide/sparkles.svg | 18 + .../UI/Assets/IconPacks/lucide/tool-case.svg | 18 + .../UI/Assets/IconPacks/lucide/trash-2.svg | 19 + .../IconPacks/lucide/triangle-alert.svg | 1 + .../UI/Assets/IconPacks/lucide/upload.svg | 17 + .../UI/Assets/IconPacks/lucide/user-plus.svg | 18 + .../UI/Assets/IconPacks/lucide/user.svg | 16 + .../UI/Assets/IconPacks/lucide/wrench.svg | 15 + .../PCL.Core/UI/Assets/IconPacks/lucide/x.svg | 16 + .../UI/Assets/Shaders/AdaptiveBlur.hlsl | 163 + .../UI/Assets/Shaders/AdaptiveBlur.ps | Bin 0 -> 32712 bytes .../UI/Assets/Shaders/CompileShader.bat | 78 + .../PCL-CE/PCL.Core/UI/BackgroundPresenter.cs | 228 + .../PCL-CE/PCL.Core/UI/Controls/BlurBorder.cs | 497 ++ .../PCL.Core/UI/Controls/MotdRenderer.xaml | 8 + .../PCL.Core/UI/Controls/MotdRenderer.xaml.cs | 442 ++ .../PCL.Core/UI/Controls/SvgIcon/SvgIcon.cs | 226 + .../UI/Controls/SvgIcon/SvgIconElement.cs | 157 + .../UI/Controls/SvgIcon/SvgIconElementKind.cs | 12 + .../UI/Controls/SvgIcon/SvgIconLoader.cs | 123 + .../UI/Controls/SvgIcon/SvgIconModel.cs | 12 + .../Controls/SvgIcon/SvgIconPaintOptions.cs | 8 + .../UI/Controls/SvgIcon/SvgIconParser.cs | 280 + .../UI/Controls/SvgIcon/SvgIconStyle.cs | 71 + .../UI/Controls/SvgIcon/SvgNumberParser.cs | 43 + .../UI/Controls/SvgIcon/SvgPaintParser.cs | 95 + .../Controls/SvgIcon/SvgPathGeometryParser.cs | 429 ++ .../PCL-CE/PCL.Core/UI/Controls/Tooltip.cs | 656 +++ .../PCL.Core/UI/Controls/WaterfallPanel.cs | 200 + .../PCL.Core/UI/Converters/EasingConverter.cs | 103 + .../PCL.Core/UI/Converters/NColorConverter.cs | 33 + .../Converters/NullToVisibilityConverter.cs | 22 + .../PCL.Core/UI/Effects/AdaptiveBlurEffect.cs | 453 ++ .../PCL.Core/UI/Effects/EnhancedBlurEffect.cs | 239 + .../UI/Effects/OptimizedBlurEffect.cs | 319 ++ .../UI/Effects/SamplingBlurProcessor.cs | 590 +++ launcher/PCL-CE/PCL.Core/UI/GrayProfile.cs | 36 + .../PCL-CE/PCL.Core/UI/GrayProfileConfig.cs | 30 + launcher/PCL-CE/PCL.Core/UI/HintWrapper.cs | 24 + launcher/PCL-CE/PCL.Core/UI/IconManager.cs | 85 + launcher/PCL-CE/PCL.Core/UI/IconModel.cs | 5 + .../PCL-CE/PCL.Core/UI/ImageLoaderHelper.cs | 160 + .../PCL.Core/UI/Media/ImageConverter.cs | 77 + launcher/PCL-CE/PCL.Core/UI/MsgBoxWrapper.cs | 81 + launcher/PCL-CE/PCL.Core/UI/NColor.cs | 252 + .../PCL-CE/PCL.Core/UI/NRotateTransform.cs | 114 + .../PCL-CE/PCL.Core/UI/NScaleTransform.cs | 120 + launcher/PCL-CE/PCL.Core/UI/SystemDialogs.cs | 150 + .../PCL.Core/UI/Theme/CatColorResource.cs | 56 + launcher/PCL-CE/PCL.Core/UI/Theme/LabColor.cs | 209 + .../PCL.Core/UI/Theme/SystemThemeHelper.cs | 35 + .../PCL-CE/PCL.Core/UI/Theme/ThemeService.cs | 246 + .../PCL-CE/PCL.Core/UI/Theme/ToneProfile.cs | 30 + .../PCL.Core/UI/Theme/ToneProfileConfig.cs | 16 + .../PCL-CE/PCL.Core/UI/ToastNotification.cs | 150 + .../PCL-CE/PCL.Core/Utils/ArgumentsBuilder.cs | 180 + .../PCL-CE/PCL.Core/Utils/AtomicVariable.cs | 31 + .../PCL.Core/Utils/Codecs/EncodingDetector.cs | 109 + .../PCL.Core/Utils/Codecs/EncodingUtils.cs | 51 + .../PCL-CE/PCL.Core/Utils/Codecs/Encodings.cs | 7 + .../PCL-CE/PCL.Core/Utils/ConcurrentSet.cs | 72 + .../PCL.Core/Utils/Diagnostics/StackHelper.cs | 168 + launcher/PCL-CE/PCL.Core/Utils/Diff/BsDiff.cs | 194 + .../PCL-CE/PCL.Core/Utils/Diff/IBinaryDiff.cs | 9 + .../PCL-CE/PCL.Core/Utils/Diff/ItemDiff.cs | 39 + .../PCL.Core/Utils/Diff/ItemDiffResult.cs | 19 + launcher/PCL-CE/PCL.Core/Utils/EaseUtils.cs | 34 + .../Utils/Encryption/AesCbcProvider.cs | 54 + .../Utils/Encryption/AesGcmProvider.cs | 56 + .../Encryption/ChaCha20Poly1305Provider.cs | 84 + .../Encryption/ChaCha20SoftwareProvider.cs | 120 + .../Utils/Encryption/IEncryptionProvider.cs | 11 + .../PCL.Core/Utils/ExpandoObjectConverter.cs | 93 + .../Utils/Exts/AsyncEnumerableExtensions.cs | 117 + .../PCL.Core/Utils/Exts/ByteExtension.cs | 13 + .../Exts/ConcurrentDictionaryExtension.cs | 29 + .../Utils/Exts/HttpRequestExtension.cs | 55 + ...guageSpecificStringDictionaryExtensions.cs | 38 + .../PCL.Core/Utils/Exts/ListExtension.cs | 82 + .../PCL.Core/Utils/Exts/StringExtension.cs | 292 ++ .../PCL.Core/Utils/Exts/TaskExtension.cs | 68 + .../PCL-CE/PCL.Core/Utils/Exts/UiExtension.cs | 57 + launcher/PCL-CE/PCL.Core/Utils/FrameUtils.cs | 61 + .../PCL-CE/PCL.Core/Utils/Hash/HashCache.cs | 231 + .../PCL.Core/Utils/Hash/IHashProvider.cs | 16 + .../PCL-CE/PCL.Core/Utils/Hash/MD5Provider.cs | 33 + .../Utils/Hash/MurmurHash2Provider.cs | 88 + .../PCL.Core/Utils/Hash/SHA1Provider.cs | 40 + .../PCL.Core/Utils/Hash/SHA256Provider.cs | 40 + .../PCL.Core/Utils/Hash/SHA512Provider.cs | 40 + launcher/PCL-CE/PCL.Core/Utils/IconHelper.cs | 28 + launcher/PCL-CE/PCL.Core/Utils/JsonCompat.cs | 237 + .../PCL-CE/PCL.Core/Utils/OS/AumidHelper.cs | 28 + .../PCL.Core/Utils/OS/ClipboardUtils.cs | 20 + .../PCL-CE/PCL.Core/Utils/OS/DragHelper.cs | 202 + .../PCL.Core/Utils/OS/EnvironmentInterop.cs | 60 + .../PCL-CE/PCL.Core/Utils/OS/HardwareInfo.cs | 83 + .../PCL-CE/PCL.Core/Utils/OS/KernelInterop.cs | 269 + .../PCL-CE/PCL.Core/Utils/OS/NetworkUtils.cs | 22 + .../PCL-CE/PCL.Core/Utils/OS/NtInterop.cs | 27 + .../PCL.Core/Utils/OS/ProcessInterop.cs | 225 + .../Utils/OS/RegistryChangeMonitor.cs | 108 + .../PCL-CE/PCL.Core/Utils/OS/SystemInfo.cs | 28 + .../PCL-CE/PCL.Core/Utils/OS/SystemPaths.cs | 11 + .../PCL-CE/PCL.Core/Utils/OS/SystemTheme.cs | 32 + .../PCL-CE/PCL.Core/Utils/OS/WindowInterop.cs | 124 + .../PCL-CE/PCL.Core/Utils/PEHeaderReader.cs | 151 + .../PCL.Core/Utils/ParameterizedProperty.cs | 20 + launcher/PCL-CE/PCL.Core/Utils/RandomUtils.cs | 72 + .../PCL-CE/PCL.Core/Utils/RegexPatterns.cs | 246 + launcher/PCL-CE/PCL.Core/Utils/Result.cs | 150 + .../PCL.Core/Utils/Secret/EncryptHelper.cs | 185 + .../PCL-CE/PCL.Core/Utils/Secret/Identify.cs | 81 + .../PCL.Core/Utils/Secret/IdentifyOld.cs | 103 + launcher/PCL-CE/PCL.Core/Utils/SemVer.cs | 174 + .../PCL-CE/PCL.Core/Utils/SimilaritySearch.cs | 235 + .../PCL-CE/PCL.Core/Utils/StringStream.cs | 49 + .../Utils/Threading/AsyncCountResetEvent.cs | 110 + .../PCL.Core/Utils/Threading/AsyncDebounce.cs | 114 + .../Utils/Threading/AsyncManualResetEvent.cs | 109 + .../Utils/Threading/DualThreadPool.cs | 76 + .../LimitedConcurrencyLevelTaskScheduler.cs | 108 + .../Utils/Threading/LimitedTaskPool.cs | 57 + launcher/PCL-CE/PCL.Core/Utils/TimeUtils.cs | 87 + .../Utils/Validate/BlacklistValidator.cs | 35 + .../Utils/Validate/FileNameValidator.cs | 74 + .../Utils/Validate/FileSystemValidator.cs | 45 + .../Utils/Validate/FolderNameValidator.cs | 69 + .../Utils/Validate/FolderPathValidator.cs | 67 + .../Utils/Validate/HttpAndUncValidator.cs | 34 + .../PCL.Core/Utils/Validate/HttpValidator.cs | 34 + .../PCL.Core/Utils/Validate/IntValidator.cs | 29 + .../Utils/Validate/NullOrEmptyValidator.cs | 12 + .../Validate/NullOrWhiteSpaceValidator.cs | 12 + .../PCL.Core/Utils/Validate/RegexValidator.cs | 30 + .../Utils/Validate/StringLengthValidator.cs | 28 + .../PCL-CE/PCL.Core/Utils/VarIntHelper.cs | 143 + .../PCL-CE/PCL.Core/Utils/VersionRange.cs | 28 + .../PCL-CE/PCL.Core/Utils/WinRT/HString.cs | 15 + .../PCL.Core/Utils/WinRT/HStringHelper.cs | 59 + .../Utils/WinRT/Interface/IInspectable.cs | 21 + .../Windows/Data/Xml/Dom/IXmlDocumentIO.cs | 44 + .../IToastNotificationFactory.cs | 34 + .../IToastNotificationManagerStatics.cs | 44 + .../UI/Notifications/IToastNotifier.cs | 59 + .../PCL.Core/Utils/WinRT/WinRTInterop.cs | 82 + launcher/PCL-CE/PCL.Core/Utils/WpfUtils.cs | 13 + .../ViewModel/Homepage/NewsViewModel.cs | 114 + launcher/PCL-CE/Plain Craft Launcher 2.slnx | 17 + .../Plain Craft Launcher 2/Application.xaml | 670 +++ .../Application.xaml.cs | 208 + .../Controls/AnimatedBackgroundGrid.cs | 76 + .../Behaviors/ClipboardInterceptor.cs | 217 + .../Controls/Behaviors/LazyLoadBehavior.cs | 73 + .../Controls/ControlVisualHelpers.cs | 25 + .../Controls/FontSelector.xaml | 24 + .../Controls/FontSelector.xaml.cs | 234 + .../Controls/IMyRadio.cs | 11 + .../Controls/MinecraftServer.xaml | 24 + .../Controls/MinecraftServer.xaml.cs | 100 + .../Controls/MinecraftServerQuery.xaml | 37 + .../Controls/MinecraftServerQuery.xaml.cs | 24 + .../Controls/MyButton.xaml | 22 + .../Controls/MyButton.xaml.cs | 209 + .../Plain Craft Launcher 2/Controls/MyCard.cs | 499 ++ .../Controls/MyCheckBox.xaml | 30 + .../Controls/MyCheckBox.xaml.cs | 429 ++ .../Controls/MyCollapseBar.cs | 191 + .../Controls/MyComboBox.cs | 243 + .../Controls/MyComboBoxItem.cs | 100 + .../Controls/MyDropShadow.cs | 373 ++ .../Controls/MyExtraButton.xaml | 48 + .../Controls/MyExtraButton.xaml.cs | 323 ++ .../Controls/MyExtraTextButton.xaml | 42 + .../Controls/MyExtraTextButton.xaml.cs | 283 + .../Controls/MyHint.xaml | 21 + .../Controls/MyHint.xaml.cs | 204 + .../Controls/MyIconButton.xaml | 24 + .../Controls/MyIconButton.xaml.cs | 455 ++ .../Controls/MyIconTextButton.xaml | 34 + .../Controls/MyIconTextButton.xaml.cs | 273 + .../Controls/MyImage.cs | 253 + .../Controls/MyListItem.xaml | 39 + .../Controls/MyListItem.xaml.cs | 1112 ++++ .../Controls/MyLoading.xaml | 49 + .../Controls/MyLoading.xaml.cs | 397 ++ .../Controls/MyMenuItem.cs | 145 + .../Controls/MyMsg/MyMsgInput.xaml | 52 + .../Controls/MyMsg/MyMsgInput.xaml.cs | 174 + .../Controls/MyMsg/MyMsgMarkdown.xaml | 52 + .../Controls/MyMsg/MyMsgMarkdown.xaml.cs | 197 + .../Controls/MyMsg/MyMsgSelect.xaml | 45 + .../Controls/MyMsg/MyMsgSelect.xaml.cs | 205 + .../Controls/MyMsg/MyMsgText.xaml | 52 + .../Controls/MyMsg/MyMsgText.xaml.cs | 196 + .../Controls/MyPageLeft.cs | 165 + .../Controls/MyPageRight.cs | 709 +++ .../Controls/MyRadioBox.xaml | 15 + .../Controls/MyRadioBox.xaml.cs | 369 ++ .../Controls/MyRadioButton.xaml | 34 + .../Controls/MyRadioButton.xaml.cs | 509 ++ .../Controls/MyScrollBar.cs | 81 + .../Controls/MyScrollViewer.cs | 81 + .../Controls/MySearchBox.xaml | 26 + .../Controls/MySearchBox.xaml.cs | 91 + .../Controls/MySlider.xaml | 39 + .../Controls/MySlider.xaml.cs | 298 ++ .../Controls/MyTextBox.cs | 416 ++ .../Controls/MyTextButton.cs | 106 + .../Controls/MyToast.xaml | 45 + .../Controls/MyToast.xaml.cs | 431 ++ .../Controls/MyVirtualizingElement.cs | 85 + .../Controls/SvgIconControlHelper.cs | 88 + .../Plain Craft Launcher 2/FormMain.xaml | 263 + .../Plain Craft Launcher 2/FormMain.xaml.cs | 2245 ++++++++ .../Images/Backgrounds/server_bg.png | Bin 0 -> 11165 bytes .../Images/Blocks/Anvil.png | Bin 0 -> 880 bytes .../Images/Blocks/Cleanroom.png | Bin 0 -> 5168 bytes .../Images/Blocks/CobbleStone.png | Bin 0 -> 991 bytes .../Images/Blocks/CommandBlock.png | Bin 0 -> 2785 bytes .../Images/Blocks/Egg.png | Bin 0 -> 231 bytes .../Images/Blocks/Fabric.png | Bin 0 -> 275 bytes .../Images/Blocks/GoldBlock.png | Bin 0 -> 1079 bytes .../Images/Blocks/Grass.png | Bin 0 -> 1467 bytes .../Images/Blocks/GrassPath.png | Bin 0 -> 1370 bytes .../Images/Blocks/LabyMod.png | Bin 0 -> 10536 bytes .../Images/Blocks/NeoForge.png | Bin 0 -> 1412 bytes .../Images/Blocks/OptiFabric.png | Bin 0 -> 521 bytes .../Images/Blocks/Quilt.png | Bin 0 -> 2869 bytes .../Images/Blocks/RedstoneBlock.png | Bin 0 -> 791 bytes .../Images/Blocks/RedstoneLampOff.png | Bin 0 -> 2025 bytes .../Images/Blocks/RedstoneLampOn.png | Bin 0 -> 815 bytes .../Images/Heads/EasyTier.png | Bin 0 -> 5733 bytes .../Images/Heads/Emperormummy.png | Bin 0 -> 10407 bytes .../Images/Heads/LTCat.jpg | Bin 0 -> 1622 bytes .../Images/Heads/Logo-CE.png | Bin 0 -> 175985 bytes .../Images/Heads/Logo.png | Bin 0 -> 2758 bytes .../Images/Heads/PCL-Community.png | Bin 0 -> 547 bytes .../Images/Heads/Pysio.jpg | Bin 0 -> 23364 bytes .../Images/Heads/Yunmoan.jpg | Bin 0 -> 66214 bytes .../Images/Heads/bangbang93.png | Bin 0 -> 2337 bytes .../Images/Heads/wiki.png | Bin 0 -> 345 bytes .../Images/Heads/z0z0r4.png | Bin 0 -> 1967 bytes .../Plain Craft Launcher 2/Images/Icons/A.png | Bin 0 -> 963 bytes .../Plain Craft Launcher 2/Images/Icons/B.png | Bin 0 -> 2200 bytes .../Images/Icons/DefaultServer.png | Bin 0 -> 12499 bytes .../Images/Icons/Disabled.png | Bin 0 -> 1990 bytes .../Images/Icons/Folder.png | Bin 0 -> 2958 bytes .../Images/Icons/NoIcon.png | Bin 0 -> 3841 bytes .../Plain Craft Launcher 2/Images/Icons/R.png | Bin 0 -> 951 bytes .../Images/Icons/Unavailable.png | Bin 0 -> 2277 bytes .../Images/Skins/Alex.png | Bin 0 -> 999 bytes .../Images/Skins/Ari.png | Bin 0 -> 912 bytes .../Images/Skins/Efe.png | Bin 0 -> 1001 bytes .../Images/Skins/Kai.png | Bin 0 -> 1279 bytes .../Images/Skins/Makena.png | Bin 0 -> 1110 bytes .../Images/Skins/Noor.png | Bin 0 -> 861 bytes .../Images/Skins/Steve.png | Bin 0 -> 958 bytes .../Images/Skins/Sunny.png | Bin 0 -> 988 bytes .../Images/Skins/Zuri.png | Bin 0 -> 947 bytes .../Plain Craft Launcher 2/Images/icon.ico | Bin 0 -> 195445 bytes .../Plain Craft Launcher 2/Images/icon.png | Bin 0 -> 31631 bytes .../PCL-CE/Plain Craft Launcher 2/LICENCE | 63 + .../Modules/Base/ModAnimation.cs | 1517 ++++++ .../Modules/Base/ModBase.cs | 3759 ++++++++++++++ .../Modules/Base/ModLoader.cs | 1030 ++++ .../Modules/Base/ModSetup.cs | 676 +++ .../Modules/Base/MyBitmap.cs | 233 + .../Modules/Event/CustomEvent.cs | 369 ++ .../Modules/Event/CustomEventCollection.cs | 16 + .../Modules/Event/CustomEventService.cs | 56 + .../Modules/Event/EventType.cs | 27 + .../Modules/Event/EventTypeMapper.cs | 57 + .../Modules/Event/XamlEventSanitizer.cs | 216 + .../CrashAnalysis/CrashAnalysisContext.cs | 24 + .../CrashAnalysis/CrashAnalysisResult.cs | 66 + .../Minecraft/CrashAnalysis/CrashAnalyzer.cs | 75 + .../Minecraft/CrashAnalysis/CrashCause.cs | 53 + .../Minecraft/CrashAnalysis/CrashEvidence.cs | 19 + .../Minecraft/CrashAnalysis/CrashFileIo.cs | 66 + .../Minecraft/CrashAnalysis/CrashFinding.cs | 39 + .../Minecraft/CrashAnalysis/CrashRegex.cs | 60 + .../Minecraft/CrashAnalysis/CrashText.cs | 75 + .../CrashAnalysis/Detection/CrashDetector.cs | 121 + .../Detection/CrashEvidenceExtractor.cs | 714 +++ .../CrashAnalysis/Detection/CrashModIndex.cs | 255 + .../CrashAnalysis/Detection/CrashRule.cs | 21 + .../Detection/CrashRuleCatalog.cs | 268 + .../Detection/CrashStackAnalyzer.cs | 199 + .../CrashAnalysis/Detection/DetectionPhase.cs | 8 + .../Export/CrashReportExporter.cs | 405 ++ .../CrashAnalysis/Logs/CrashConfidence.cs | 8 + .../CrashAnalysis/Logs/CrashLogCollector.cs | 127 + .../CrashAnalysis/Logs/CrashLogEntry.cs | 14 + .../CrashAnalysis/Logs/CrashLogImporter.cs | 66 + .../CrashAnalysis/Logs/CrashLogKind.cs | 10 + .../CrashAnalysis/Logs/CrashLogPreparer.cs | 416 ++ .../CrashAnalysis/Logs/CrashLogSet.cs | 29 + .../CrashAnalysis/Logs/CrashLogText.cs | 10 + .../Presentation/CrashDialogPresenter.cs | 189 + .../Presentation/CrashMessageSpec.cs | 38 + .../Presentation/CrashResultFormatter.cs | 525 ++ .../Modules/Minecraft/McInstance.cs | 1063 ++++ .../Modules/Minecraft/McInstanceCardType.cs | 13 + .../Modules/Minecraft/McInstanceInfo.cs | 340 ++ .../Modules/Minecraft/McInstanceState.cs | 19 + .../Modules/Minecraft/McLogFilter.cs | 38 + .../Modules/Minecraft/McVersionComparer.cs | 113 + .../Modules/Minecraft/ModAssets.cs | 238 + .../Modules/Minecraft/ModComp.cs | 3823 ++++++++++++++ .../Modules/Minecraft/ModCompDependency.cs | 322 ++ .../Modules/Minecraft/ModDownload.cs | 2502 +++++++++ .../Modules/Minecraft/ModFolder.cs | 230 + .../Modules/Minecraft/ModInstanceList.cs | 636 +++ .../Modules/Minecraft/ModJarInJar.cs | 91 + .../Modules/Minecraft/ModJava.cs | 487 ++ .../Modules/Minecraft/ModLaunch.cs | 3781 ++++++++++++++ .../Modules/Minecraft/ModLibrary.cs | 691 +++ .../Modules/Minecraft/ModLocalComp.cs | 2493 +++++++++ .../Modules/Minecraft/ModModpack.cs | 1724 +++++++ .../Modules/Minecraft/ModProfile.cs | 875 ++++ .../Modules/Minecraft/ModSkin.cs | 192 + .../Modules/Minecraft/ModStyle.cs | 304 ++ .../Modules/Minecraft/ModWatcher.cs | 824 +++ .../Plain Craft Launcher 2/Modules/ModLink.cs | 397 ++ .../Plain Craft Launcher 2/Modules/ModMain.cs | 1089 ++++ .../Modules/ModMusic.cs | 472 ++ .../Modules/ModVideoBack.cs | 172 + .../Modules/ModWebServer.cs | 346 ++ .../Downloader/DownloadRequestFactory.cs | 27 + .../Network/Downloader/FileDownloader.cs | 223 + .../Modules/Network/Facade/ModNet.cs | 130 + .../Modules/Network/Http/RequestSigning.cs | 38 + .../Modules/Network/Http/Requester.cs | 193 + .../Modules/Network/Loaders/LoaderDownload.cs | 237 + .../Network/Loaders/LoaderDownloadUnc.cs | 65 + .../Modules/Network/Management/NetManager.cs | 73 + .../Modules/Network/Models/DownloadFile.cs | 89 + .../Modules/Network/Models/FetchParam.cs | 24 + .../Modules/Network/Models/NetworkEnums.cs | 20 + .../Modules/Network/Models/RequestParam.cs | 19 + .../Modules/UI/HintService.cs | 104 + .../Modules/UI/HintType.cs | 9 + .../Modules/UI/Theme/ThemeManager.cs | 132 + .../Modules/Updates/AnnouncementService.cs | 50 + .../Modules/Updates/EnumUpdateChannel.cs | 13 + .../Modules/Updates/IUpdateSource.cs | 25 + .../Modules/Updates/UpdateEnums.cs | 19 + .../Modules/Updates/UpdateManager.cs | 277 + .../Modules/Updates/UpdatesMinioModel.cs | 283 + .../Updates/UpdatesMirrorChyanModel.cs | 89 + .../Modules/Updates/UpdatesRandomModel.cs | 53 + .../Modules/Updates/UpdatesWrapperModel.cs | 167 + .../Updates/VersionAnnouncementDataModel.cs | 42 + .../Modules/Updates/VersionDataModel.cs | 10 + .../Pages/PageDownload/Comp/MyCompItem.xaml | 145 + .../PageDownload/Comp/MyCompItem.xaml.cs | 467 ++ .../Pages/PageDownload/Comp/PageComp.xaml | 146 + .../Pages/PageDownload/Comp/PageComp.xaml.cs | 389 ++ .../Comp/PageDownloadCompDetail.xaml | 67 + .../Comp/PageDownloadCompDetail.xaml.cs | 1183 +++++ .../Comp/PageDownloadDataPack.xaml | 27 + .../Comp/PageDownloadDataPack.xaml.cs | 9 + .../PageDownload/Comp/PageDownloadMod.xaml | 37 + .../PageDownload/Comp/PageDownloadMod.xaml.cs | 10 + .../PageDownload/Comp/PageDownloadPack.xaml | 29 + .../Comp/PageDownloadPack.xaml.cs | 9 + .../Comp/PageDownloadResourcePack.xaml | 46 + .../Comp/PageDownloadResourcePack.xaml.cs | 9 + .../PageDownload/Comp/PageDownloadShader.xaml | 30 + .../Comp/PageDownloadShader.xaml.cs | 9 + .../PageDownload/Comp/PageDownloadWorld.xaml | 19 + .../Comp/PageDownloadWorld.xaml.cs | 9 + .../Pages/PageDownload/ModDownloadLib.cs | 4578 +++++++++++++++++ .../PageDownload/PageDownloadCleanroom.xaml | 34 + .../PageDownloadCleanroom.xaml.cs | 80 + .../PageDownload/PageDownloadClient.xaml | 21 + .../PageDownload/PageDownloadClient.xaml.cs | 121 + .../PageDownloadCompFavorites.xaml | 104 + .../PageDownloadCompFavorites.xaml.cs | 915 ++++ .../PageDownload/PageDownloadFabric.xaml | 37 + .../PageDownload/PageDownloadFabric.xaml.cs | 57 + .../Pages/PageDownload/PageDownloadForge.xaml | 33 + .../PageDownload/PageDownloadForge.xaml.cs | 114 + .../PageDownload/PageDownloadInstall.xaml | 393 ++ .../PageDownload/PageDownloadInstall.xaml.cs | 2327 +++++++++ .../PageDownload/PageDownloadLabyMod.xaml | 37 + .../PageDownload/PageDownloadLabyMod.xaml.cs | 70 + .../Pages/PageDownload/PageDownloadLeft.xaml | 287 ++ .../PageDownload/PageDownloadLeft.xaml.cs | 406 ++ .../PageDownloadLegacyFabric.xaml | 37 + .../PageDownloadLegacyFabric.xaml.cs | 57 + .../PageDownload/PageDownloadLiteLoader.xaml | 34 + .../PageDownloadLiteLoader.xaml.cs | 102 + .../PageDownload/PageDownloadNeoForge.xaml | 36 + .../PageDownload/PageDownloadNeoForge.xaml.cs | 73 + .../PageDownload/PageDownloadOptiFine.xaml | 33 + .../PageDownload/PageDownloadOptiFine.xaml.cs | 101 + .../PageHomepage/PageHomepageNewsView.xaml | 132 + .../PageHomepage/PageHomepageNewsView.xaml.cs | 12 + .../Pages/PageInstance/MyLocalModItem.xaml | 113 + .../Pages/PageInstance/MyLocalModItem.xaml.cs | 886 ++++ .../PageInstanceCompResource.xaml | 137 + .../PageInstanceCompResource.xaml.cs | 2961 +++++++++++ .../PageInstance/PageInstanceExport.xaml | 292 ++ .../PageInstance/PageInstanceExport.xaml.cs | 1226 +++++ .../PageInstance/PageInstanceInstall.xaml | 422 ++ .../PageInstance/PageInstanceInstall.xaml.cs | 2553 +++++++++ .../Pages/PageInstance/PageInstanceLeft.xaml | 176 + .../PageInstance/PageInstanceLeft.xaml.cs | 339 ++ .../PageInstance/PageInstanceModDisabled.xaml | 40 + .../PageInstanceModDisabled.xaml.cs | 41 + .../PageInstance/PageInstanceOverall.xaml | 132 + .../PageInstance/PageInstanceOverall.xaml.cs | 842 +++ .../Pages/PageInstance/PageInstanceSaves.xaml | 94 + .../PageInstance/PageInstanceSaves.xaml.cs | 573 +++ .../PageInstanceSavesDatapack.xaml | 108 + .../PageInstanceSavesDatapack.xaml.cs | 1698 ++++++ .../PageInstanceSavesInfo.xaml | 33 + .../PageInstanceSavesInfo.xaml.cs | 356 ++ .../PageInstanceSavesLeft.xaml | 31 + .../PageInstanceSavesLeft.xaml.cs | 161 + .../PageInstance/PageInstanceScreenshot.xaml | 69 + .../PageInstanceScreenshot.xaml.cs | 340 ++ .../PageInstance/PageInstanceServer.xaml | 72 + .../PageInstance/PageInstanceServer.xaml.cs | 498 ++ .../Pages/PageInstance/PageInstanceSetup.xaml | 410 ++ .../PageInstance/PageInstanceSetup.xaml.cs | 1053 ++++ .../Pages/PageInstance/ServerCard.xaml | 88 + .../Pages/PageInstance/ServerCard.xaml.cs | 238 + .../Pages/PageLaunch/MyMsgLogin.xaml | 62 + .../Pages/PageLaunch/MyMsgLogin.xaml.cs | 242 + .../Pages/PageLaunch/MySkin.xaml | 31 + .../Pages/PageLaunch/MySkin.xaml.cs | 498 ++ .../Pages/PageLaunch/PageLaunchLeft.xaml | 157 + .../Pages/PageLaunch/PageLaunchLeft.xaml.cs | 1033 ++++ .../Pages/PageLaunch/PageLaunchRight.xaml | 24 + .../Pages/PageLaunch/PageLaunchRight.xaml.cs | 898 ++++ .../Pages/PageLaunch/PageLoginAuth.xaml | 56 + .../Pages/PageLaunch/PageLoginAuth.xaml.cs | 210 + .../Pages/PageLaunch/PageLoginMs.xaml | 45 + .../Pages/PageLaunch/PageLoginMs.xaml.cs | 91 + .../Pages/PageLaunch/PageLoginOffline.xaml | 58 + .../Pages/PageLaunch/PageLoginOffline.xaml.cs | 88 + .../Pages/PageLaunch/PageLoginProfile.xaml | 54 + .../Pages/PageLaunch/PageLoginProfile.xaml.cs | 199 + .../PageLaunch/PageLoginProfileSkin.xaml | 75 + .../PageLaunch/PageLoginProfileSkin.xaml.cs | 159 + .../Pages/PageLogLeft.xaml | 20 + .../Pages/PageLogLeft.xaml.cs | 221 + .../Pages/PageLogRight.xaml | 83 + .../Pages/PageLogRight.xaml.cs | 199 + .../Pages/PageSelectLeft.xaml | 20 + .../Pages/PageSelectLeft.xaml.cs | 901 ++++ .../Pages/PageSelectRight.xaml | 56 + .../Pages/PageSelectRight.xaml.cs | 631 +++ .../Pages/PageSetup/PageSetupAbout.xaml | 506 ++ .../Pages/PageSetup/PageSetupAbout.xaml.cs | 203 + .../Pages/PageSetup/PageSetupFeedback.xaml | 63 + .../Pages/PageSetup/PageSetupFeedback.xaml.cs | 196 + .../Pages/PageSetup/PageSetupGameLink.xaml | 119 + .../Pages/PageSetup/PageSetupGameLink.xaml.cs | 176 + .../Pages/PageSetup/PageSetupGameManage.xaml | 181 + .../PageSetup/PageSetupGameManage.xaml.cs | 158 + .../Pages/PageSetup/PageSetupJava.xaml | 26 + .../Pages/PageSetup/PageSetupJava.xaml.cs | 220 + .../Pages/PageSetup/PageSetupLaunch.xaml | 319 ++ .../Pages/PageSetup/PageSetupLaunch.xaml.cs | 584 +++ .../PageSetup/PageSetupLauncherLanguage.xaml | 187 + .../PageSetupLauncherLanguage.xaml.cs | 225 + .../PageSetup/PageSetupLauncherMisc.xaml | 188 + .../PageSetup/PageSetupLauncherMisc.xaml.cs | 322 ++ .../Pages/PageSetup/PageSetupLeft.xaml | 154 + .../Pages/PageSetup/PageSetupLeft.xaml.cs | 385 ++ .../Pages/PageSetup/PageSetupLog.xaml | 29 + .../Pages/PageSetup/PageSetupLog.xaml.cs | 163 + .../Pages/PageSetup/PageSetupUI.xaml | 482 ++ .../Pages/PageSetup/PageSetupUI.xaml.cs | 957 ++++ .../Pages/PageSetup/PageSetupUpdate.xaml | 172 + .../Pages/PageSetup/PageSetupUpdate.xaml.cs | 284 + .../Pages/PageSpeedLeft.xaml | 64 + .../Pages/PageSpeedLeft.xaml.cs | 412 ++ .../Pages/PageSpeedRight.xaml | 12 + .../Pages/PageSpeedRight.xaml.cs | 15 + .../Pages/PageTools/PageToolsGameLink.xaml | 357 ++ .../Pages/PageTools/PageToolsGameLink.xaml.cs | 1016 ++++ .../Pages/PageTools/PageToolsLeft.xaml | 50 + .../Pages/PageTools/PageToolsLeft.xaml.cs | 168 + .../Pages/PageTools/PageToolsTest.xaml | 235 + .../Pages/PageTools/PageToolsTest.xaml.cs | 761 +++ .../Plain Craft Launcher 2.csproj | 121 + .../PCL-CE/Plain Craft Launcher 2/Program.cs | 44 + .../Plain Craft Launcher 2/Resources/Font.ttf | Bin 0 -> 20188 bytes .../Resources/Markdown.xaml | 152 + .../Resources/forge-installer.jar | Bin 0 -> 3222 bytes .../Resources/hints/en-US.txt | 1050 ++++ .../Resources/hints/zh-CN.txt | 1050 ++++ .../Resources/java-wrapper.jar | Bin 0 -> 15761 bytes .../Resources/legacyfix.jar | Bin 0 -> 997159 bytes .../Resources/log4j2-debug.xml | 38 + .../Resources/log4j2-legacy-debug.xml | 37 + .../Resources/lwjgl-unsafe-agent.jar | Bin 0 -> 9821 bytes .../Resources/mcmod.buf | Bin 0 -> 621377 bytes .../Resources/oauth-complete.html | 144 + .../Resources/transformer.jar | Bin 0 -> 2243 bytes .../Plain Craft Launcher 2/app.manifest | 77 + .../Plain Craft Launcher 2/metadata.json | 131 + launcher/PCL-CE/README-EN.md | 73 + launcher/PCL-CE/README-ZH_TW.md | 73 + launcher/PCL-CE/README.md | 73 + launcher/PCL-CE/cliff.toml | 106 + launcher/build.ps1 | 41 + prototype/redcircuit.html | 691 +++ prototype/textures/acacia_door_bottom.png | Bin 0 -> 252 bytes prototype/textures/acacia_door_top.png | Bin 0 -> 264 bytes prototype/textures/acacia_leaves.png | Bin 0 -> 249 bytes prototype/textures/acacia_log.png | Bin 0 -> 259 bytes prototype/textures/acacia_log_top.png | Bin 0 -> 301 bytes prototype/textures/acacia_planks.png | Bin 0 -> 269 bytes prototype/textures/acacia_sapling.png | Bin 0 -> 232 bytes prototype/textures/acacia_trapdoor.png | Bin 0 -> 172 bytes prototype/textures/activator_rail.png | Bin 0 -> 294 bytes prototype/textures/activator_rail_on.png | Bin 0 -> 295 bytes prototype/textures/allium.png | Bin 0 -> 250 bytes prototype/textures/amethyst_block.png | Bin 0 -> 284 bytes prototype/textures/amethyst_cluster.png | Bin 0 -> 249 bytes prototype/textures/ancient_debris_side.png | Bin 0 -> 276 bytes prototype/textures/ancient_debris_top.png | Bin 0 -> 298 bytes prototype/textures/andesite.png | Bin 0 -> 260 bytes prototype/textures/anvil.png | Bin 0 -> 236 bytes prototype/textures/anvil_top.png | Bin 0 -> 201 bytes prototype/textures/attached_melon_stem.png | Bin 0 -> 146 bytes prototype/textures/attached_pumpkin_stem.png | Bin 0 -> 165 bytes prototype/textures/azalea_leaves.png | Bin 0 -> 265 bytes prototype/textures/azalea_plant.png | Bin 0 -> 287 bytes prototype/textures/azalea_side.png | Bin 0 -> 235 bytes prototype/textures/azalea_top.png | Bin 0 -> 251 bytes prototype/textures/azure_bluet.png | Bin 0 -> 247 bytes prototype/textures/bamboo_block.png | Bin 0 -> 299 bytes prototype/textures/bamboo_block_top.png | Bin 0 -> 198 bytes prototype/textures/bamboo_door_bottom.png | Bin 0 -> 327 bytes prototype/textures/bamboo_door_top.png | Bin 0 -> 304 bytes prototype/textures/bamboo_fence.png | Bin 0 -> 295 bytes prototype/textures/bamboo_fence_gate.png | Bin 0 -> 289 bytes .../textures/bamboo_fence_gate_particle.png | Bin 0 -> 213 bytes prototype/textures/bamboo_fence_particle.png | Bin 0 -> 213 bytes prototype/textures/bamboo_large_leaves.png | Bin 0 -> 290 bytes prototype/textures/bamboo_mosaic.png | Bin 0 -> 303 bytes prototype/textures/bamboo_planks.png | Bin 0 -> 274 bytes prototype/textures/bamboo_singleleaf.png | Bin 0 -> 138 bytes prototype/textures/bamboo_small_leaves.png | Bin 0 -> 255 bytes prototype/textures/bamboo_stage0.png | Bin 0 -> 246 bytes prototype/textures/bamboo_stalk.png | Bin 0 -> 279 bytes prototype/textures/bamboo_trapdoor.png | Bin 0 -> 323 bytes prototype/textures/barrel_bottom.png | Bin 0 -> 270 bytes prototype/textures/barrel_side.png | Bin 0 -> 258 bytes prototype/textures/barrel_top.png | Bin 0 -> 243 bytes prototype/textures/barrel_top_open.png | Bin 0 -> 223 bytes prototype/textures/basalt_side.png | Bin 0 -> 256 bytes prototype/textures/basalt_top.png | Bin 0 -> 279 bytes prototype/textures/beacon.png | Bin 0 -> 211 bytes prototype/textures/bedrock.png | Bin 0 -> 247 bytes prototype/textures/bee_nest_bottom.png | Bin 0 -> 220 bytes prototype/textures/bee_nest_front.png | Bin 0 -> 286 bytes prototype/textures/bee_nest_front_honey.png | Bin 0 -> 315 bytes prototype/textures/bee_nest_side.png | Bin 0 -> 243 bytes prototype/textures/bee_nest_top.png | Bin 0 -> 220 bytes prototype/textures/beehive_end.png | Bin 0 -> 216 bytes prototype/textures/beehive_front.png | Bin 0 -> 250 bytes prototype/textures/beehive_front_honey.png | Bin 0 -> 291 bytes prototype/textures/beehive_side.png | Bin 0 -> 247 bytes prototype/textures/beetroots_stage0.png | Bin 0 -> 118 bytes prototype/textures/beetroots_stage1.png | Bin 0 -> 135 bytes prototype/textures/beetroots_stage2.png | Bin 0 -> 198 bytes prototype/textures/beetroots_stage3.png | Bin 0 -> 219 bytes prototype/textures/bell_bottom.png | Bin 0 -> 145 bytes prototype/textures/bell_side.png | Bin 0 -> 140 bytes prototype/textures/bell_top.png | Bin 0 -> 148 bytes prototype/textures/big_dripleaf_side.png | Bin 0 -> 84 bytes prototype/textures/big_dripleaf_stem.png | Bin 0 -> 195 bytes prototype/textures/big_dripleaf_tip.png | Bin 0 -> 133 bytes prototype/textures/big_dripleaf_top.png | Bin 0 -> 245 bytes prototype/textures/birch_door_bottom.png | Bin 0 -> 297 bytes prototype/textures/birch_door_top.png | Bin 0 -> 274 bytes prototype/textures/birch_leaves.png | Bin 0 -> 231 bytes prototype/textures/birch_log.png | Bin 0 -> 266 bytes prototype/textures/birch_log_top.png | Bin 0 -> 298 bytes prototype/textures/birch_planks.png | Bin 0 -> 268 bytes prototype/textures/birch_sapling.png | Bin 0 -> 223 bytes prototype/textures/birch_trapdoor.png | Bin 0 -> 310 bytes prototype/textures/black_candle.png | Bin 0 -> 127 bytes prototype/textures/black_candle_lit.png | Bin 0 -> 136 bytes prototype/textures/black_concrete.png | Bin 0 -> 228 bytes prototype/textures/black_concrete_powder.png | Bin 0 -> 480 bytes .../textures/black_glazed_terracotta.png | Bin 0 -> 349 bytes prototype/textures/black_shulker_box.png | Bin 0 -> 266 bytes prototype/textures/black_stained_glass.png | Bin 0 -> 105 bytes .../textures/black_stained_glass_pane_top.png | Bin 0 -> 114 bytes prototype/textures/black_terracotta.png | Bin 0 -> 350 bytes prototype/textures/black_wool.png | Bin 0 -> 417 bytes prototype/textures/blackstone.png | Bin 0 -> 290 bytes prototype/textures/blackstone_top.png | Bin 0 -> 288 bytes prototype/textures/blast_furnace_front.png | Bin 0 -> 314 bytes prototype/textures/blast_furnace_front_on.png | Bin 0 -> 369 bytes prototype/textures/blast_furnace_side.png | Bin 0 -> 294 bytes prototype/textures/blast_furnace_top.png | Bin 0 -> 247 bytes prototype/textures/blue_candle.png | Bin 0 -> 128 bytes prototype/textures/blue_candle_lit.png | Bin 0 -> 136 bytes prototype/textures/blue_concrete.png | Bin 0 -> 205 bytes prototype/textures/blue_concrete_powder.png | Bin 0 -> 608 bytes prototype/textures/blue_glazed_terracotta.png | Bin 0 -> 257 bytes prototype/textures/blue_ice.png | Bin 0 -> 248 bytes prototype/textures/blue_orchid.png | Bin 0 -> 186 bytes prototype/textures/blue_shulker_box.png | Bin 0 -> 317 bytes prototype/textures/blue_stained_glass.png | Bin 0 -> 134 bytes .../textures/blue_stained_glass_pane_top.png | Bin 0 -> 120 bytes prototype/textures/blue_terracotta.png | Bin 0 -> 390 bytes prototype/textures/blue_wool.png | Bin 0 -> 463 bytes prototype/textures/bone_block_side.png | Bin 0 -> 167 bytes prototype/textures/bone_block_top.png | Bin 0 -> 242 bytes prototype/textures/bookshelf.png | Bin 0 -> 413 bytes prototype/textures/brain_coral.png | Bin 0 -> 255 bytes prototype/textures/brain_coral_block.png | Bin 0 -> 284 bytes prototype/textures/brain_coral_fan.png | Bin 0 -> 213 bytes prototype/textures/brewing_stand.png | Bin 0 -> 329 bytes prototype/textures/brewing_stand_base.png | Bin 0 -> 256 bytes prototype/textures/bricks.png | Bin 0 -> 266 bytes prototype/textures/brown_candle.png | Bin 0 -> 127 bytes prototype/textures/brown_candle_lit.png | Bin 0 -> 136 bytes prototype/textures/brown_concrete.png | Bin 0 -> 223 bytes prototype/textures/brown_concrete_powder.png | Bin 0 -> 612 bytes .../textures/brown_glazed_terracotta.png | Bin 0 -> 326 bytes prototype/textures/brown_mushroom.png | Bin 0 -> 139 bytes prototype/textures/brown_mushroom_block.png | Bin 0 -> 221 bytes prototype/textures/brown_shulker_box.png | Bin 0 -> 333 bytes prototype/textures/brown_stained_glass.png | Bin 0 -> 105 bytes .../textures/brown_stained_glass_pane_top.png | Bin 0 -> 119 bytes prototype/textures/brown_terracotta.png | Bin 0 -> 385 bytes prototype/textures/brown_wool.png | Bin 0 -> 456 bytes prototype/textures/bubble_coral.png | Bin 0 -> 221 bytes prototype/textures/bubble_coral_block.png | Bin 0 -> 272 bytes prototype/textures/bubble_coral_fan.png | Bin 0 -> 201 bytes prototype/textures/budding_amethyst.png | Bin 0 -> 325 bytes prototype/textures/cactus_bottom.png | Bin 0 -> 225 bytes prototype/textures/cactus_side.png | Bin 0 -> 276 bytes prototype/textures/cactus_top.png | Bin 0 -> 242 bytes prototype/textures/cake_bottom.png | Bin 0 -> 203 bytes prototype/textures/cake_inner.png | Bin 0 -> 200 bytes prototype/textures/cake_side.png | Bin 0 -> 189 bytes prototype/textures/cake_top.png | Bin 0 -> 237 bytes prototype/textures/calcite.png | Bin 0 -> 257 bytes .../calibrated_sculk_sensor_amethyst.png | Bin 0 -> 194 bytes .../calibrated_sculk_sensor_input_side.png | Bin 0 -> 284 bytes .../textures/calibrated_sculk_sensor_top.png | Bin 0 -> 256 bytes prototype/textures/campfire_fire.png | Bin 0 -> 889 bytes prototype/textures/campfire_log.png | Bin 0 -> 271 bytes prototype/textures/campfire_log_lit.png | Bin 0 -> 743 bytes prototype/textures/candle.png | Bin 0 -> 130 bytes prototype/textures/candle_lit.png | Bin 0 -> 135 bytes prototype/textures/carrots_stage0.png | Bin 0 -> 102 bytes prototype/textures/carrots_stage1.png | Bin 0 -> 143 bytes prototype/textures/carrots_stage2.png | Bin 0 -> 191 bytes prototype/textures/carrots_stage3.png | Bin 0 -> 244 bytes .../textures/cartography_table_side1.png | Bin 0 -> 358 bytes .../textures/cartography_table_side2.png | Bin 0 -> 378 bytes .../textures/cartography_table_side3.png | Bin 0 -> 281 bytes prototype/textures/cartography_table_top.png | Bin 0 -> 397 bytes prototype/textures/carved_pumpkin.png | Bin 0 -> 277 bytes prototype/textures/cauldron_bottom.png | Bin 0 -> 136 bytes prototype/textures/cauldron_inner.png | Bin 0 -> 195 bytes prototype/textures/cauldron_side.png | Bin 0 -> 247 bytes prototype/textures/cauldron_top.png | Bin 0 -> 215 bytes prototype/textures/cave_vines.png | Bin 0 -> 288 bytes prototype/textures/cave_vines_lit.png | Bin 0 -> 304 bytes prototype/textures/cave_vines_plant.png | Bin 0 -> 278 bytes prototype/textures/cave_vines_plant_lit.png | Bin 0 -> 302 bytes prototype/textures/chain.png | Bin 0 -> 122 bytes .../textures/chain_command_block_back.png | Bin 0 -> 480 bytes .../chain_command_block_conditional.png | Bin 0 -> 441 bytes .../textures/chain_command_block_front.png | Bin 0 -> 434 bytes .../textures/chain_command_block_side.png | Bin 0 -> 467 bytes prototype/textures/cherry_door_bottom.png | Bin 0 -> 328 bytes prototype/textures/cherry_door_top.png | Bin 0 -> 320 bytes prototype/textures/cherry_leaves.png | Bin 0 -> 339 bytes prototype/textures/cherry_log.png | Bin 0 -> 232 bytes prototype/textures/cherry_log_top.png | Bin 0 -> 293 bytes prototype/textures/cherry_planks.png | Bin 0 -> 270 bytes prototype/textures/cherry_sapling.png | Bin 0 -> 279 bytes prototype/textures/cherry_trapdoor.png | Bin 0 -> 301 bytes prototype/textures/chipped_anvil_top.png | Bin 0 -> 240 bytes .../textures/chiseled_bookshelf_empty.png | Bin 0 -> 232 bytes .../textures/chiseled_bookshelf_occupied.png | Bin 0 -> 393 bytes .../textures/chiseled_bookshelf_side.png | Bin 0 -> 230 bytes prototype/textures/chiseled_bookshelf_top.png | Bin 0 -> 233 bytes prototype/textures/chiseled_deepslate.png | Bin 0 -> 223 bytes prototype/textures/chiseled_nether_bricks.png | Bin 0 -> 285 bytes .../textures/chiseled_polished_blackstone.png | Bin 0 -> 254 bytes prototype/textures/chiseled_quartz_block.png | Bin 0 -> 251 bytes .../textures/chiseled_quartz_block_top.png | Bin 0 -> 259 bytes prototype/textures/chiseled_red_sandstone.png | Bin 0 -> 272 bytes prototype/textures/chiseled_sandstone.png | Bin 0 -> 250 bytes prototype/textures/chiseled_stone_bricks.png | Bin 0 -> 258 bytes prototype/textures/chorus_flower.png | Bin 0 -> 325 bytes prototype/textures/chorus_flower_dead.png | Bin 0 -> 328 bytes prototype/textures/chorus_plant.png | Bin 0 -> 300 bytes prototype/textures/clay.png | Bin 0 -> 278 bytes prototype/textures/coal_block.png | Bin 0 -> 222 bytes prototype/textures/coal_ore.png | Bin 0 -> 301 bytes prototype/textures/coarse_dirt.png | Bin 0 -> 596 bytes prototype/textures/cobbled_deepslate.png | Bin 0 -> 273 bytes prototype/textures/cobblestone.png | Bin 0 -> 265 bytes prototype/textures/cobweb.png | Bin 0 -> 212 bytes prototype/textures/cocoa_stage0.png | Bin 0 -> 178 bytes prototype/textures/cocoa_stage1.png | Bin 0 -> 183 bytes prototype/textures/cocoa_stage2.png | Bin 0 -> 249 bytes prototype/textures/command_block_back.png | Bin 0 -> 477 bytes .../textures/command_block_conditional.png | Bin 0 -> 427 bytes prototype/textures/command_block_front.png | Bin 0 -> 421 bytes prototype/textures/command_block_side.png | Bin 0 -> 455 bytes prototype/textures/comparator.png | Bin 0 -> 279 bytes prototype/textures/comparator_on.png | Bin 0 -> 282 bytes prototype/textures/composter_bottom.png | Bin 0 -> 230 bytes prototype/textures/composter_compost.png | Bin 0 -> 236 bytes prototype/textures/composter_ready.png | Bin 0 -> 274 bytes prototype/textures/composter_side.png | Bin 0 -> 258 bytes prototype/textures/composter_top.png | Bin 0 -> 169 bytes prototype/textures/conduit.png | Bin 0 -> 261 bytes prototype/textures/copper_block.png | Bin 0 -> 268 bytes prototype/textures/copper_ore.png | Bin 0 -> 321 bytes prototype/textures/cornflower.png | Bin 0 -> 178 bytes .../textures/cracked_deepslate_bricks.png | Bin 0 -> 277 bytes .../textures/cracked_deepslate_tiles.png | Bin 0 -> 251 bytes prototype/textures/cracked_nether_bricks.png | Bin 0 -> 299 bytes .../cracked_polished_blackstone_bricks.png | Bin 0 -> 279 bytes prototype/textures/cracked_stone_bricks.png | Bin 0 -> 283 bytes prototype/textures/crafting_table_front.png | Bin 0 -> 351 bytes prototype/textures/crafting_table_side.png | Bin 0 -> 337 bytes prototype/textures/crafting_table_top.png | Bin 0 -> 262 bytes prototype/textures/crimson_door_bottom.png | Bin 0 -> 279 bytes prototype/textures/crimson_door_top.png | Bin 0 -> 274 bytes prototype/textures/crimson_fungus.png | Bin 0 -> 210 bytes prototype/textures/crimson_nylium.png | Bin 0 -> 291 bytes prototype/textures/crimson_nylium_side.png | Bin 0 -> 319 bytes prototype/textures/crimson_planks.png | Bin 0 -> 281 bytes prototype/textures/crimson_roots.png | Bin 0 -> 205 bytes prototype/textures/crimson_roots_pot.png | Bin 0 -> 212 bytes prototype/textures/crimson_stem.png | Bin 0 -> 739 bytes prototype/textures/crimson_stem_top.png | Bin 0 -> 301 bytes prototype/textures/crimson_trapdoor.png | Bin 0 -> 251 bytes prototype/textures/crying_obsidian.png | Bin 0 -> 315 bytes prototype/textures/cut_copper.png | Bin 0 -> 269 bytes prototype/textures/cut_red_sandstone.png | Bin 0 -> 252 bytes prototype/textures/cut_sandstone.png | Bin 0 -> 249 bytes prototype/textures/cyan_candle.png | Bin 0 -> 128 bytes prototype/textures/cyan_candle_lit.png | Bin 0 -> 137 bytes prototype/textures/cyan_concrete.png | Bin 0 -> 233 bytes prototype/textures/cyan_concrete_powder.png | Bin 0 -> 590 bytes prototype/textures/cyan_glazed_terracotta.png | Bin 0 -> 360 bytes prototype/textures/cyan_shulker_box.png | Bin 0 -> 320 bytes prototype/textures/cyan_stained_glass.png | Bin 0 -> 106 bytes .../textures/cyan_stained_glass_pane_top.png | Bin 0 -> 119 bytes prototype/textures/cyan_terracotta.png | Bin 0 -> 444 bytes prototype/textures/cyan_wool.png | Bin 0 -> 443 bytes prototype/textures/damaged_anvil_top.png | Bin 0 -> 252 bytes prototype/textures/dandelion.png | Bin 0 -> 139 bytes prototype/textures/dark_oak_door_bottom.png | Bin 0 -> 257 bytes prototype/textures/dark_oak_door_top.png | Bin 0 -> 271 bytes prototype/textures/dark_oak_leaves.png | Bin 0 -> 243 bytes prototype/textures/dark_oak_log.png | Bin 0 -> 260 bytes prototype/textures/dark_oak_log_top.png | Bin 0 -> 286 bytes prototype/textures/dark_oak_planks.png | Bin 0 -> 263 bytes prototype/textures/dark_oak_sapling.png | Bin 0 -> 243 bytes prototype/textures/dark_oak_trapdoor.png | Bin 0 -> 225 bytes prototype/textures/dark_prismarine.png | Bin 0 -> 238 bytes .../daylight_detector_inverted_top.png | Bin 0 -> 148 bytes prototype/textures/daylight_detector_side.png | Bin 0 -> 138 bytes prototype/textures/daylight_detector_top.png | Bin 0 -> 185 bytes prototype/textures/dead_brain_coral.png | Bin 0 -> 248 bytes prototype/textures/dead_brain_coral_block.png | Bin 0 -> 267 bytes prototype/textures/dead_brain_coral_fan.png | Bin 0 -> 246 bytes prototype/textures/dead_bubble_coral.png | Bin 0 -> 219 bytes .../textures/dead_bubble_coral_block.png | Bin 0 -> 268 bytes prototype/textures/dead_bubble_coral_fan.png | Bin 0 -> 215 bytes prototype/textures/dead_bush.png | Bin 0 -> 197 bytes prototype/textures/dead_fire_coral.png | Bin 0 -> 221 bytes prototype/textures/dead_fire_coral_block.png | Bin 0 -> 262 bytes prototype/textures/dead_fire_coral_fan.png | Bin 0 -> 249 bytes prototype/textures/dead_horn_coral.png | Bin 0 -> 209 bytes prototype/textures/dead_horn_coral_block.png | Bin 0 -> 273 bytes prototype/textures/dead_horn_coral_fan.png | Bin 0 -> 222 bytes prototype/textures/dead_tube_coral.png | Bin 0 -> 248 bytes prototype/textures/dead_tube_coral_block.png | Bin 0 -> 272 bytes prototype/textures/dead_tube_coral_fan.png | Bin 0 -> 230 bytes prototype/textures/debug.png | Bin 0 -> 560 bytes prototype/textures/debug2.png | Bin 0 -> 269 bytes prototype/textures/deepslate.png | Bin 0 -> 240 bytes prototype/textures/deepslate_bricks.png | Bin 0 -> 245 bytes prototype/textures/deepslate_coal_ore.png | Bin 0 -> 289 bytes prototype/textures/deepslate_copper_ore.png | Bin 0 -> 319 bytes prototype/textures/deepslate_diamond_ore.png | Bin 0 -> 329 bytes prototype/textures/deepslate_emerald_ore.png | Bin 0 -> 313 bytes prototype/textures/deepslate_gold_ore.png | Bin 0 -> 298 bytes prototype/textures/deepslate_iron_ore.png | Bin 0 -> 307 bytes prototype/textures/deepslate_lapis_ore.png | Bin 0 -> 332 bytes prototype/textures/deepslate_redstone_ore.png | Bin 0 -> 327 bytes prototype/textures/deepslate_tiles.png | Bin 0 -> 233 bytes prototype/textures/deepslate_top.png | Bin 0 -> 254 bytes prototype/textures/destroy_stage_0.png | Bin 0 -> 102 bytes prototype/textures/destroy_stage_1.png | Bin 0 -> 115 bytes prototype/textures/destroy_stage_2.png | Bin 0 -> 123 bytes prototype/textures/destroy_stage_3.png | Bin 0 -> 145 bytes prototype/textures/destroy_stage_4.png | Bin 0 -> 155 bytes prototype/textures/destroy_stage_5.png | Bin 0 -> 169 bytes prototype/textures/destroy_stage_6.png | Bin 0 -> 177 bytes prototype/textures/destroy_stage_7.png | Bin 0 -> 190 bytes prototype/textures/destroy_stage_8.png | Bin 0 -> 211 bytes prototype/textures/destroy_stage_9.png | Bin 0 -> 218 bytes prototype/textures/detector_rail.png | Bin 0 -> 283 bytes prototype/textures/detector_rail_on.png | Bin 0 -> 297 bytes prototype/textures/diamond_block.png | Bin 0 -> 263 bytes prototype/textures/diamond_ore.png | Bin 0 -> 301 bytes prototype/textures/diorite.png | Bin 0 -> 271 bytes prototype/textures/dirt.png | Bin 0 -> 266 bytes prototype/textures/dirt_path_side.png | Bin 0 -> 289 bytes prototype/textures/dirt_path_top.png | Bin 0 -> 258 bytes prototype/textures/dispenser_front.png | Bin 0 -> 256 bytes .../textures/dispenser_front_vertical.png | Bin 0 -> 282 bytes prototype/textures/dragon_egg.png | Bin 0 -> 192 bytes prototype/textures/dried_kelp_bottom.png | Bin 0 -> 290 bytes prototype/textures/dried_kelp_side.png | Bin 0 -> 289 bytes prototype/textures/dried_kelp_top.png | Bin 0 -> 306 bytes prototype/textures/dripstone_block.png | Bin 0 -> 258 bytes prototype/textures/dropper_front.png | Bin 0 -> 313 bytes prototype/textures/dropper_front_vertical.png | Bin 0 -> 278 bytes prototype/textures/emerald_block.png | Bin 0 -> 250 bytes prototype/textures/emerald_ore.png | Bin 0 -> 310 bytes .../textures/enchanting_table_bottom.png | Bin 0 -> 263 bytes prototype/textures/enchanting_table_side.png | Bin 0 -> 273 bytes prototype/textures/enchanting_table_top.png | Bin 0 -> 199 bytes prototype/textures/end_portal_frame_eye.png | Bin 0 -> 183 bytes prototype/textures/end_portal_frame_side.png | Bin 0 -> 278 bytes prototype/textures/end_portal_frame_top.png | Bin 0 -> 269 bytes prototype/textures/end_rod.png | Bin 0 -> 159 bytes prototype/textures/end_stone.png | Bin 0 -> 270 bytes prototype/textures/end_stone_bricks.png | Bin 0 -> 273 bytes prototype/textures/exposed_copper.png | Bin 0 -> 281 bytes prototype/textures/exposed_cut_copper.png | Bin 0 -> 296 bytes prototype/textures/farmland.png | Bin 0 -> 243 bytes prototype/textures/farmland_moist.png | Bin 0 -> 244 bytes prototype/textures/fern.png | Bin 0 -> 244 bytes prototype/textures/fire_0.png | Bin 0 -> 12500 bytes prototype/textures/fire_1.png | Bin 0 -> 13255 bytes prototype/textures/fire_coral.png | Bin 0 -> 223 bytes prototype/textures/fire_coral_block.png | Bin 0 -> 266 bytes prototype/textures/fire_coral_fan.png | Bin 0 -> 228 bytes prototype/textures/fletching_table_front.png | Bin 0 -> 378 bytes prototype/textures/fletching_table_side.png | Bin 0 -> 444 bytes prototype/textures/fletching_table_top.png | Bin 0 -> 312 bytes prototype/textures/flower_pot.png | Bin 0 -> 149 bytes .../textures/flowering_azalea_leaves.png | Bin 0 -> 297 bytes prototype/textures/flowering_azalea_side.png | Bin 0 -> 268 bytes prototype/textures/flowering_azalea_top.png | Bin 0 -> 286 bytes prototype/textures/frogspawn.png | Bin 0 -> 157 bytes prototype/textures/frosted_ice_0.png | Bin 0 -> 229 bytes prototype/textures/frosted_ice_1.png | Bin 0 -> 279 bytes prototype/textures/frosted_ice_2.png | Bin 0 -> 333 bytes prototype/textures/frosted_ice_3.png | Bin 0 -> 388 bytes prototype/textures/furnace_front.png | Bin 0 -> 294 bytes prototype/textures/furnace_front_on.png | Bin 0 -> 322 bytes prototype/textures/furnace_side.png | Bin 0 -> 280 bytes prototype/textures/furnace_top.png | Bin 0 -> 273 bytes prototype/textures/gilded_blackstone.png | Bin 0 -> 320 bytes prototype/textures/glass.png | Bin 0 -> 147 bytes prototype/textures/glass_pane_top.png | Bin 0 -> 116 bytes prototype/textures/glow_item_frame.png | Bin 0 -> 299 bytes prototype/textures/glow_lichen.png | Bin 0 -> 241 bytes prototype/textures/glowstone.png | Bin 0 -> 307 bytes prototype/textures/gold_block.png | Bin 0 -> 266 bytes prototype/textures/gold_ore.png | Bin 0 -> 305 bytes prototype/textures/granite.png | Bin 0 -> 335 bytes prototype/textures/grass.png | Bin 0 -> 231 bytes prototype/textures/grass_block_side.png | Bin 0 -> 408 bytes .../textures/grass_block_side_overlay.png | Bin 0 -> 177 bytes prototype/textures/grass_block_snow.png | Bin 0 -> 307 bytes prototype/textures/grass_block_top.png | Bin 0 -> 560 bytes prototype/textures/gravel.png | Bin 0 -> 282 bytes prototype/textures/gray_candle.png | Bin 0 -> 127 bytes prototype/textures/gray_candle_lit.png | Bin 0 -> 136 bytes prototype/textures/gray_concrete.png | Bin 0 -> 187 bytes prototype/textures/gray_concrete_powder.png | Bin 0 -> 493 bytes prototype/textures/gray_glazed_terracotta.png | Bin 0 -> 328 bytes prototype/textures/gray_shulker_box.png | Bin 0 -> 306 bytes prototype/textures/gray_stained_glass.png | Bin 0 -> 105 bytes .../textures/gray_stained_glass_pane_top.png | Bin 0 -> 119 bytes prototype/textures/gray_terracotta.png | Bin 0 -> 351 bytes prototype/textures/gray_wool.png | Bin 0 -> 427 bytes prototype/textures/green_candle.png | Bin 0 -> 127 bytes prototype/textures/green_candle_lit.png | Bin 0 -> 135 bytes prototype/textures/green_concrete.png | Bin 0 -> 219 bytes prototype/textures/green_concrete_powder.png | Bin 0 -> 613 bytes .../textures/green_glazed_terracotta.png | Bin 0 -> 363 bytes prototype/textures/green_shulker_box.png | Bin 0 -> 325 bytes prototype/textures/green_stained_glass.png | Bin 0 -> 105 bytes .../textures/green_stained_glass_pane_top.png | Bin 0 -> 119 bytes prototype/textures/green_terracotta.png | Bin 0 -> 394 bytes prototype/textures/green_wool.png | Bin 0 -> 454 bytes prototype/textures/grindstone_pivot.png | Bin 0 -> 141 bytes prototype/textures/grindstone_round.png | Bin 0 -> 186 bytes prototype/textures/grindstone_side.png | Bin 0 -> 206 bytes prototype/textures/hanging_roots.png | Bin 0 -> 213 bytes prototype/textures/hay_block_side.png | Bin 0 -> 274 bytes prototype/textures/hay_block_top.png | Bin 0 -> 267 bytes prototype/textures/honey_block_bottom.png | Bin 0 -> 268 bytes prototype/textures/honey_block_side.png | Bin 0 -> 271 bytes prototype/textures/honey_block_top.png | Bin 0 -> 273 bytes prototype/textures/honeycomb_block.png | Bin 0 -> 264 bytes prototype/textures/hopper_inside.png | Bin 0 -> 195 bytes prototype/textures/hopper_outside.png | Bin 0 -> 220 bytes prototype/textures/hopper_top.png | Bin 0 -> 155 bytes prototype/textures/horn_coral.png | Bin 0 -> 232 bytes prototype/textures/horn_coral_block.png | Bin 0 -> 278 bytes prototype/textures/horn_coral_fan.png | Bin 0 -> 207 bytes prototype/textures/ice.png | Bin 0 -> 249 bytes prototype/textures/iron_bars.png | Bin 0 -> 204 bytes prototype/textures/iron_block.png | Bin 0 -> 193 bytes prototype/textures/iron_door_bottom.png | Bin 0 -> 224 bytes prototype/textures/iron_door_top.png | Bin 0 -> 210 bytes prototype/textures/iron_ore.png | Bin 0 -> 292 bytes prototype/textures/iron_trapdoor.png | Bin 0 -> 207 bytes prototype/textures/item_frame.png | Bin 0 -> 285 bytes prototype/textures/jack_o_lantern.png | Bin 0 -> 301 bytes prototype/textures/jigsaw_bottom.png | Bin 0 -> 116 bytes prototype/textures/jigsaw_lock.png | Bin 0 -> 157 bytes prototype/textures/jigsaw_side.png | Bin 0 -> 237 bytes prototype/textures/jigsaw_top.png | Bin 0 -> 264 bytes prototype/textures/jukebox_side.png | Bin 0 -> 201 bytes prototype/textures/jukebox_top.png | Bin 0 -> 202 bytes prototype/textures/jungle_door_bottom.png | Bin 0 -> 293 bytes prototype/textures/jungle_door_top.png | Bin 0 -> 314 bytes prototype/textures/jungle_leaves.png | Bin 0 -> 298 bytes prototype/textures/jungle_log.png | Bin 0 -> 280 bytes prototype/textures/jungle_log_top.png | Bin 0 -> 297 bytes prototype/textures/jungle_planks.png | Bin 0 -> 267 bytes prototype/textures/jungle_sapling.png | Bin 0 -> 223 bytes prototype/textures/jungle_trapdoor.png | Bin 0 -> 273 bytes prototype/textures/kelp.png | Bin 0 -> 773 bytes prototype/textures/kelp_plant.png | Bin 0 -> 1255 bytes prototype/textures/ladder.png | Bin 0 -> 159 bytes prototype/textures/lantern.png | Bin 0 -> 341 bytes prototype/textures/lapis_block.png | Bin 0 -> 316 bytes prototype/textures/lapis_ore.png | Bin 0 -> 339 bytes prototype/textures/large_amethyst_bud.png | Bin 0 -> 204 bytes prototype/textures/large_fern_bottom.png | Bin 0 -> 254 bytes prototype/textures/large_fern_top.png | Bin 0 -> 179 bytes prototype/textures/lava_flow.png | Bin 0 -> 5603 bytes prototype/textures/lava_still.png | Bin 0 -> 6540 bytes prototype/textures/lectern_base.png | Bin 0 -> 273 bytes prototype/textures/lectern_front.png | Bin 0 -> 312 bytes prototype/textures/lectern_sides.png | Bin 0 -> 202 bytes prototype/textures/lectern_top.png | Bin 0 -> 254 bytes prototype/textures/lever.png | Bin 0 -> 138 bytes prototype/textures/light_blue_candle.png | Bin 0 -> 128 bytes prototype/textures/light_blue_candle_lit.png | Bin 0 -> 137 bytes prototype/textures/light_blue_concrete.png | Bin 0 -> 282 bytes .../textures/light_blue_concrete_powder.png | Bin 0 -> 692 bytes .../textures/light_blue_glazed_terracotta.png | Bin 0 -> 317 bytes prototype/textures/light_blue_shulker_box.png | Bin 0 -> 332 bytes .../textures/light_blue_stained_glass.png | Bin 0 -> 106 bytes .../light_blue_stained_glass_pane_top.png | Bin 0 -> 120 bytes prototype/textures/light_blue_terracotta.png | Bin 0 -> 405 bytes prototype/textures/light_blue_wool.png | Bin 0 -> 491 bytes prototype/textures/light_gray_candle.png | Bin 0 -> 128 bytes prototype/textures/light_gray_candle_lit.png | Bin 0 -> 137 bytes prototype/textures/light_gray_concrete.png | Bin 0 -> 205 bytes .../textures/light_gray_concrete_powder.png | Bin 0 -> 567 bytes .../textures/light_gray_glazed_terracotta.png | Bin 0 -> 349 bytes prototype/textures/light_gray_shulker_box.png | Bin 0 -> 307 bytes .../textures/light_gray_stained_glass.png | Bin 0 -> 106 bytes .../light_gray_stained_glass_pane_top.png | Bin 0 -> 120 bytes prototype/textures/light_gray_terracotta.png | Bin 0 -> 421 bytes prototype/textures/light_gray_wool.png | Bin 0 -> 441 bytes prototype/textures/lightning_rod.png | Bin 0 -> 146 bytes prototype/textures/lightning_rod_on.png | Bin 0 -> 79 bytes prototype/textures/lilac_bottom.png | Bin 0 -> 257 bytes prototype/textures/lilac_top.png | Bin 0 -> 224 bytes prototype/textures/lily_of_the_valley.png | Bin 0 -> 201 bytes prototype/textures/lily_pad.png | Bin 0 -> 203 bytes prototype/textures/lime_candle.png | Bin 0 -> 128 bytes prototype/textures/lime_candle_lit.png | Bin 0 -> 137 bytes prototype/textures/lime_concrete.png | Bin 0 -> 279 bytes prototype/textures/lime_concrete_powder.png | Bin 0 -> 633 bytes prototype/textures/lime_glazed_terracotta.png | Bin 0 -> 308 bytes prototype/textures/lime_shulker_box.png | Bin 0 -> 344 bytes prototype/textures/lime_stained_glass.png | Bin 0 -> 106 bytes .../textures/lime_stained_glass_pane_top.png | Bin 0 -> 119 bytes prototype/textures/lime_terracotta.png | Bin 0 -> 461 bytes prototype/textures/lime_wool.png | Bin 0 -> 448 bytes prototype/textures/lodestone_side.png | Bin 0 -> 283 bytes prototype/textures/lodestone_top.png | Bin 0 -> 238 bytes prototype/textures/loom_bottom.png | Bin 0 -> 126 bytes prototype/textures/loom_front.png | Bin 0 -> 251 bytes prototype/textures/loom_side.png | Bin 0 -> 236 bytes prototype/textures/loom_top.png | Bin 0 -> 261 bytes prototype/textures/magenta_candle.png | Bin 0 -> 128 bytes prototype/textures/magenta_candle_lit.png | Bin 0 -> 137 bytes prototype/textures/magenta_concrete.png | Bin 0 -> 251 bytes .../textures/magenta_concrete_powder.png | Bin 0 -> 684 bytes .../textures/magenta_glazed_terracotta.png | Bin 0 -> 275 bytes prototype/textures/magenta_shulker_box.png | Bin 0 -> 336 bytes prototype/textures/magenta_stained_glass.png | Bin 0 -> 106 bytes .../magenta_stained_glass_pane_top.png | Bin 0 -> 120 bytes prototype/textures/magenta_terracotta.png | Bin 0 -> 467 bytes prototype/textures/magenta_wool.png | Bin 0 -> 477 bytes prototype/textures/magma.png | Bin 0 -> 643 bytes prototype/textures/mangrove_door_bottom.png | Bin 0 -> 278 bytes prototype/textures/mangrove_door_top.png | Bin 0 -> 273 bytes prototype/textures/mangrove_leaves.png | Bin 0 -> 279 bytes prototype/textures/mangrove_log.png | Bin 0 -> 242 bytes prototype/textures/mangrove_log_top.png | Bin 0 -> 285 bytes prototype/textures/mangrove_planks.png | Bin 0 -> 266 bytes prototype/textures/mangrove_propagule.png | Bin 0 -> 160 bytes .../textures/mangrove_propagule_hanging.png | Bin 0 -> 258 bytes prototype/textures/mangrove_roots_side.png | Bin 0 -> 250 bytes prototype/textures/mangrove_roots_top.png | Bin 0 -> 266 bytes prototype/textures/mangrove_trapdoor.png | Bin 0 -> 261 bytes prototype/textures/medium_amethyst_bud.png | Bin 0 -> 146 bytes prototype/textures/melon_side.png | Bin 0 -> 210 bytes prototype/textures/melon_stem.png | Bin 0 -> 189 bytes prototype/textures/melon_top.png | Bin 0 -> 259 bytes prototype/textures/moss_block.png | Bin 0 -> 268 bytes prototype/textures/mossy_cobblestone.png | Bin 0 -> 324 bytes prototype/textures/mossy_stone_bricks.png | Bin 0 -> 333 bytes prototype/textures/mud.png | Bin 0 -> 283 bytes prototype/textures/mud_bricks.png | Bin 0 -> 209 bytes .../textures/muddy_mangrove_roots_side.png | Bin 0 -> 330 bytes .../textures/muddy_mangrove_roots_top.png | Bin 0 -> 336 bytes prototype/textures/mushroom_block_inside.png | Bin 0 -> 250 bytes prototype/textures/mushroom_stem.png | Bin 0 -> 219 bytes prototype/textures/mycelium_side.png | Bin 0 -> 367 bytes prototype/textures/mycelium_top.png | Bin 0 -> 234 bytes prototype/textures/nether_bricks.png | Bin 0 -> 211 bytes prototype/textures/nether_gold_ore.png | Bin 0 -> 335 bytes prototype/textures/nether_portal.png | Bin 0 -> 13586 bytes prototype/textures/nether_quartz_ore.png | Bin 0 -> 343 bytes prototype/textures/nether_sprouts.png | Bin 0 -> 127 bytes prototype/textures/nether_wart_block.png | Bin 0 -> 242 bytes prototype/textures/nether_wart_stage0.png | Bin 0 -> 150 bytes prototype/textures/nether_wart_stage1.png | Bin 0 -> 184 bytes prototype/textures/nether_wart_stage2.png | Bin 0 -> 191 bytes prototype/textures/netherite_block.png | Bin 0 -> 276 bytes prototype/textures/netherrack.png | Bin 0 -> 286 bytes prototype/textures/note_block.png | Bin 0 -> 212 bytes prototype/textures/oak_door_bottom.png | Bin 0 -> 240 bytes prototype/textures/oak_door_top.png | Bin 0 -> 234 bytes prototype/textures/oak_leaves.png | Bin 0 -> 256 bytes prototype/textures/oak_log.png | Bin 0 -> 263 bytes prototype/textures/oak_log_top.png | Bin 0 -> 273 bytes prototype/textures/oak_planks.png | Bin 0 -> 268 bytes prototype/textures/oak_sapling.png | Bin 0 -> 252 bytes prototype/textures/oak_trapdoor.png | Bin 0 -> 225 bytes prototype/textures/observer_back.png | Bin 0 -> 265 bytes prototype/textures/observer_back_on.png | Bin 0 -> 317 bytes prototype/textures/observer_front.png | Bin 0 -> 270 bytes prototype/textures/observer_side.png | Bin 0 -> 230 bytes prototype/textures/observer_top.png | Bin 0 -> 458 bytes prototype/textures/obsidian.png | Bin 0 -> 263 bytes prototype/textures/ochre_froglight_side.png | Bin 0 -> 260 bytes prototype/textures/ochre_froglight_top.png | Bin 0 -> 205 bytes prototype/textures/orange_candle.png | Bin 0 -> 127 bytes prototype/textures/orange_candle_lit.png | Bin 0 -> 136 bytes prototype/textures/orange_concrete.png | Bin 0 -> 291 bytes prototype/textures/orange_concrete_powder.png | Bin 0 -> 669 bytes .../textures/orange_glazed_terracotta.png | Bin 0 -> 332 bytes prototype/textures/orange_shulker_box.png | Bin 0 -> 339 bytes prototype/textures/orange_stained_glass.png | Bin 0 -> 106 bytes .../orange_stained_glass_pane_top.png | Bin 0 -> 120 bytes prototype/textures/orange_terracotta.png | Bin 0 -> 463 bytes prototype/textures/orange_tulip.png | Bin 0 -> 224 bytes prototype/textures/orange_wool.png | Bin 0 -> 507 bytes prototype/textures/oxeye_daisy.png | Bin 0 -> 286 bytes prototype/textures/oxidized_copper.png | Bin 0 -> 281 bytes prototype/textures/oxidized_cut_copper.png | Bin 0 -> 290 bytes prototype/textures/packed_ice.png | Bin 0 -> 242 bytes prototype/textures/packed_mud.png | Bin 0 -> 265 bytes .../textures/pearlescent_froglight_side.png | Bin 0 -> 257 bytes .../textures/pearlescent_froglight_top.png | Bin 0 -> 204 bytes prototype/textures/peony_bottom.png | Bin 0 -> 282 bytes prototype/textures/peony_top.png | Bin 0 -> 243 bytes prototype/textures/pink_candle.png | Bin 0 -> 128 bytes prototype/textures/pink_candle_lit.png | Bin 0 -> 138 bytes prototype/textures/pink_concrete.png | Bin 0 -> 270 bytes prototype/textures/pink_concrete_powder.png | Bin 0 -> 714 bytes prototype/textures/pink_glazed_terracotta.png | Bin 0 -> 250 bytes prototype/textures/pink_petals.png | Bin 0 -> 245 bytes prototype/textures/pink_petals_stem.png | Bin 0 -> 80 bytes prototype/textures/pink_shulker_box.png | Bin 0 -> 349 bytes prototype/textures/pink_stained_glass.png | Bin 0 -> 106 bytes .../textures/pink_stained_glass_pane_top.png | Bin 0 -> 120 bytes prototype/textures/pink_terracotta.png | Bin 0 -> 477 bytes prototype/textures/pink_tulip.png | Bin 0 -> 202 bytes prototype/textures/pink_wool.png | Bin 0 -> 516 bytes prototype/textures/piston_bottom.png | Bin 0 -> 265 bytes prototype/textures/piston_inner.png | Bin 0 -> 295 bytes prototype/textures/piston_side.png | Bin 0 -> 322 bytes prototype/textures/piston_top.png | Bin 0 -> 260 bytes prototype/textures/piston_top_sticky.png | Bin 0 -> 342 bytes prototype/textures/pitcher_crop_bottom.png | Bin 0 -> 159 bytes .../textures/pitcher_crop_bottom_stage_1.png | Bin 0 -> 160 bytes .../textures/pitcher_crop_bottom_stage_2.png | Bin 0 -> 206 bytes .../textures/pitcher_crop_bottom_stage_3.png | Bin 0 -> 190 bytes .../textures/pitcher_crop_bottom_stage_4.png | Bin 0 -> 201 bytes prototype/textures/pitcher_crop_side.png | Bin 0 -> 168 bytes prototype/textures/pitcher_crop_top.png | Bin 0 -> 185 bytes .../textures/pitcher_crop_top_stage_3.png | Bin 0 -> 203 bytes .../textures/pitcher_crop_top_stage_4.png | Bin 0 -> 235 bytes prototype/textures/podzol_side.png | Bin 0 -> 429 bytes prototype/textures/podzol_top.png | Bin 0 -> 273 bytes .../textures/pointed_dripstone_down_base.png | Bin 0 -> 222 bytes .../pointed_dripstone_down_frustum.png | Bin 0 -> 214 bytes .../pointed_dripstone_down_middle.png | Bin 0 -> 220 bytes .../textures/pointed_dripstone_down_tip.png | Bin 0 -> 150 bytes .../pointed_dripstone_down_tip_merge.png | Bin 0 -> 175 bytes .../textures/pointed_dripstone_up_base.png | Bin 0 -> 226 bytes .../textures/pointed_dripstone_up_frustum.png | Bin 0 -> 217 bytes .../textures/pointed_dripstone_up_middle.png | Bin 0 -> 210 bytes .../textures/pointed_dripstone_up_tip.png | Bin 0 -> 149 bytes .../pointed_dripstone_up_tip_merge.png | Bin 0 -> 179 bytes prototype/textures/polished_andesite.png | Bin 0 -> 274 bytes prototype/textures/polished_basalt_side.png | Bin 0 -> 234 bytes prototype/textures/polished_basalt_top.png | Bin 0 -> 266 bytes prototype/textures/polished_blackstone.png | Bin 0 -> 254 bytes .../textures/polished_blackstone_bricks.png | Bin 0 -> 255 bytes prototype/textures/polished_deepslate.png | Bin 0 -> 250 bytes prototype/textures/polished_diorite.png | Bin 0 -> 282 bytes prototype/textures/polished_granite.png | Bin 0 -> 292 bytes prototype/textures/poppy.png | Bin 0 -> 170 bytes prototype/textures/potatoes_stage0.png | Bin 0 -> 115 bytes prototype/textures/potatoes_stage1.png | Bin 0 -> 137 bytes prototype/textures/potatoes_stage2.png | Bin 0 -> 163 bytes prototype/textures/potatoes_stage3.png | Bin 0 -> 222 bytes .../textures/potted_azalea_bush_plant.png | Bin 0 -> 204 bytes .../textures/potted_azalea_bush_side.png | Bin 0 -> 171 bytes prototype/textures/potted_azalea_bush_top.png | Bin 0 -> 154 bytes .../potted_flowering_azalea_bush_plant.png | Bin 0 -> 227 bytes .../potted_flowering_azalea_bush_side.png | Bin 0 -> 195 bytes .../potted_flowering_azalea_bush_top.png | Bin 0 -> 179 bytes prototype/textures/powder_snow.png | Bin 0 -> 205 bytes prototype/textures/powered_rail.png | Bin 0 -> 324 bytes prototype/textures/powered_rail_on.png | Bin 0 -> 324 bytes prototype/textures/prismarine.png | Bin 0 -> 786 bytes prototype/textures/prismarine_bricks.png | Bin 0 -> 286 bytes prototype/textures/pumpkin_side.png | Bin 0 -> 230 bytes prototype/textures/pumpkin_stem.png | Bin 0 -> 148 bytes prototype/textures/pumpkin_top.png | Bin 0 -> 283 bytes prototype/textures/purple_candle.png | Bin 0 -> 128 bytes prototype/textures/purple_candle_lit.png | Bin 0 -> 136 bytes prototype/textures/purple_concrete.png | Bin 0 -> 236 bytes prototype/textures/purple_concrete_powder.png | Bin 0 -> 618 bytes .../textures/purple_glazed_terracotta.png | Bin 0 -> 293 bytes prototype/textures/purple_shulker_box.png | Bin 0 -> 342 bytes prototype/textures/purple_stained_glass.png | Bin 0 -> 106 bytes .../purple_stained_glass_pane_top.png | Bin 0 -> 120 bytes prototype/textures/purple_terracotta.png | Bin 0 -> 476 bytes prototype/textures/purple_wool.png | Bin 0 -> 477 bytes prototype/textures/purpur_block.png | Bin 0 -> 249 bytes prototype/textures/purpur_pillar.png | Bin 0 -> 228 bytes prototype/textures/purpur_pillar_top.png | Bin 0 -> 198 bytes prototype/textures/quartz_block_bottom.png | Bin 0 -> 189 bytes prototype/textures/quartz_block_side.png | Bin 0 -> 212 bytes prototype/textures/quartz_block_top.png | Bin 0 -> 212 bytes prototype/textures/quartz_bricks.png | Bin 0 -> 256 bytes prototype/textures/quartz_pillar.png | Bin 0 -> 199 bytes prototype/textures/quartz_pillar_top.png | Bin 0 -> 246 bytes prototype/textures/rail.png | Bin 0 -> 249 bytes prototype/textures/rail_corner.png | Bin 0 -> 254 bytes prototype/textures/raw_copper_block.png | Bin 0 -> 368 bytes prototype/textures/raw_gold_block.png | Bin 0 -> 279 bytes prototype/textures/raw_iron_block.png | Bin 0 -> 283 bytes prototype/textures/red_candle.png | Bin 0 -> 128 bytes prototype/textures/red_candle_lit.png | Bin 0 -> 136 bytes prototype/textures/red_concrete.png | Bin 0 -> 246 bytes prototype/textures/red_concrete_powder.png | Bin 0 -> 565 bytes prototype/textures/red_glazed_terracotta.png | Bin 0 -> 292 bytes prototype/textures/red_mushroom.png | Bin 0 -> 148 bytes prototype/textures/red_mushroom_block.png | Bin 0 -> 229 bytes prototype/textures/red_nether_bricks.png | Bin 0 -> 251 bytes prototype/textures/red_sand.png | Bin 0 -> 266 bytes prototype/textures/red_sandstone.png | Bin 0 -> 287 bytes prototype/textures/red_sandstone_bottom.png | Bin 0 -> 292 bytes prototype/textures/red_sandstone_top.png | Bin 0 -> 247 bytes prototype/textures/red_shulker_box.png | Bin 0 -> 329 bytes prototype/textures/red_stained_glass.png | Bin 0 -> 134 bytes .../textures/red_stained_glass_pane_top.png | Bin 0 -> 119 bytes prototype/textures/red_terracotta.png | Bin 0 -> 464 bytes prototype/textures/red_tulip.png | Bin 0 -> 192 bytes prototype/textures/red_wool.png | Bin 0 -> 430 bytes prototype/textures/redstone_block.png | Bin 0 -> 195 bytes prototype/textures/redstone_dust_dot.png | Bin 0 -> 126 bytes prototype/textures/redstone_dust_line0.png | Bin 0 -> 125 bytes prototype/textures/redstone_dust_line1.png | Bin 0 -> 130 bytes prototype/textures/redstone_dust_overlay.png | Bin 0 -> 90 bytes prototype/textures/redstone_lamp.png | Bin 0 -> 283 bytes prototype/textures/redstone_lamp_on.png | Bin 0 -> 250 bytes prototype/textures/redstone_ore.png | Bin 0 -> 305 bytes prototype/textures/redstone_torch.png | Bin 0 -> 146 bytes prototype/textures/redstone_torch_off.png | Bin 0 -> 135 bytes .../textures/reinforced_deepslate_bottom.png | Bin 0 -> 273 bytes .../textures/reinforced_deepslate_side.png | Bin 0 -> 321 bytes .../textures/reinforced_deepslate_top.png | Bin 0 -> 299 bytes prototype/textures/repeater.png | Bin 0 -> 269 bytes prototype/textures/repeater_on.png | Bin 0 -> 264 bytes .../textures/repeating_command_block_back.png | Bin 0 -> 480 bytes .../repeating_command_block_conditional.png | Bin 0 -> 432 bytes .../repeating_command_block_front.png | Bin 0 -> 432 bytes .../textures/repeating_command_block_side.png | Bin 0 -> 456 bytes prototype/textures/respawn_anchor_bottom.png | Bin 0 -> 315 bytes prototype/textures/respawn_anchor_side0.png | Bin 0 -> 328 bytes prototype/textures/respawn_anchor_side1.png | Bin 0 -> 340 bytes prototype/textures/respawn_anchor_side2.png | Bin 0 -> 348 bytes prototype/textures/respawn_anchor_side3.png | Bin 0 -> 350 bytes prototype/textures/respawn_anchor_side4.png | Bin 0 -> 352 bytes prototype/textures/respawn_anchor_top.png | Bin 0 -> 9297 bytes prototype/textures/respawn_anchor_top_off.png | Bin 0 -> 203 bytes prototype/textures/rooted_dirt.png | Bin 0 -> 307 bytes prototype/textures/rose_bush_bottom.png | Bin 0 -> 302 bytes prototype/textures/rose_bush_top.png | Bin 0 -> 251 bytes prototype/textures/sand.png | Bin 0 -> 262 bytes prototype/textures/sandstone.png | Bin 0 -> 283 bytes prototype/textures/sandstone_bottom.png | Bin 0 -> 288 bytes prototype/textures/sandstone_top.png | Bin 0 -> 245 bytes prototype/textures/scaffolding_bottom.png | Bin 0 -> 268 bytes prototype/textures/scaffolding_side.png | Bin 0 -> 254 bytes prototype/textures/scaffolding_top.png | Bin 0 -> 311 bytes prototype/textures/sculk.png | Bin 0 -> 370 bytes prototype/textures/sculk_catalyst_bottom.png | Bin 0 -> 274 bytes prototype/textures/sculk_catalyst_side.png | Bin 0 -> 314 bytes .../textures/sculk_catalyst_side_bloom.png | Bin 0 -> 465 bytes prototype/textures/sculk_catalyst_top.png | Bin 0 -> 245 bytes .../textures/sculk_catalyst_top_bloom.png | Bin 0 -> 806 bytes prototype/textures/sculk_sensor_bottom.png | Bin 0 -> 240 bytes prototype/textures/sculk_sensor_side.png | Bin 0 -> 194 bytes .../textures/sculk_sensor_tendril_active.png | Bin 0 -> 533 bytes .../sculk_sensor_tendril_inactive.png | Bin 0 -> 425 bytes prototype/textures/sculk_sensor_top.png | Bin 0 -> 222 bytes prototype/textures/sculk_shrieker_bottom.png | Bin 0 -> 240 bytes .../sculk_shrieker_can_summon_inner_top.png | Bin 0 -> 724 bytes .../textures/sculk_shrieker_inner_top.png | Bin 0 -> 729 bytes prototype/textures/sculk_shrieker_side.png | Bin 0 -> 309 bytes prototype/textures/sculk_shrieker_top.png | Bin 0 -> 125 bytes prototype/textures/sculk_vein.png | Bin 0 -> 423 bytes prototype/textures/sea_lantern.png | Bin 0 -> 2960 bytes prototype/textures/sea_pickle.png | Bin 0 -> 313 bytes prototype/textures/seagrass.png | Bin 0 -> 1770 bytes prototype/textures/shroomlight.png | Bin 0 -> 309 bytes prototype/textures/shulker_box.png | Bin 0 -> 1008 bytes prototype/textures/slime_block.png | Bin 0 -> 202 bytes prototype/textures/small_amethyst_bud.png | Bin 0 -> 125 bytes prototype/textures/small_dripleaf_side.png | Bin 0 -> 81 bytes .../textures/small_dripleaf_stem_bottom.png | Bin 0 -> 159 bytes .../textures/small_dripleaf_stem_top.png | Bin 0 -> 140 bytes prototype/textures/small_dripleaf_top.png | Bin 0 -> 146 bytes prototype/textures/smithing_table_bottom.png | Bin 0 -> 206 bytes prototype/textures/smithing_table_front.png | Bin 0 -> 312 bytes prototype/textures/smithing_table_side.png | Bin 0 -> 315 bytes prototype/textures/smithing_table_top.png | Bin 0 -> 260 bytes prototype/textures/smoker_bottom.png | Bin 0 -> 274 bytes prototype/textures/smoker_front.png | Bin 0 -> 321 bytes prototype/textures/smoker_front_on.png | Bin 0 -> 506 bytes prototype/textures/smoker_side.png | Bin 0 -> 302 bytes prototype/textures/smoker_top.png | Bin 0 -> 276 bytes prototype/textures/smooth_basalt.png | Bin 0 -> 256 bytes prototype/textures/smooth_stone.png | Bin 0 -> 255 bytes prototype/textures/smooth_stone_slab_side.png | Bin 0 -> 258 bytes .../sniffer_egg_not_cracked_bottom.png | Bin 0 -> 207 bytes .../textures/sniffer_egg_not_cracked_east.png | Bin 0 -> 263 bytes .../sniffer_egg_not_cracked_north.png | Bin 0 -> 305 bytes .../sniffer_egg_not_cracked_south.png | Bin 0 -> 295 bytes .../textures/sniffer_egg_not_cracked_top.png | Bin 0 -> 229 bytes .../textures/sniffer_egg_not_cracked_west.png | Bin 0 -> 269 bytes .../sniffer_egg_slightly_cracked_bottom.png | Bin 0 -> 222 bytes .../sniffer_egg_slightly_cracked_east.png | Bin 0 -> 301 bytes .../sniffer_egg_slightly_cracked_north.png | Bin 0 -> 350 bytes .../sniffer_egg_slightly_cracked_south.png | Bin 0 -> 331 bytes .../sniffer_egg_slightly_cracked_top.png | Bin 0 -> 275 bytes .../sniffer_egg_slightly_cracked_west.png | Bin 0 -> 312 bytes .../sniffer_egg_very_cracked_bottom.png | Bin 0 -> 232 bytes .../sniffer_egg_very_cracked_east.png | Bin 0 -> 323 bytes .../sniffer_egg_very_cracked_north.png | Bin 0 -> 365 bytes .../sniffer_egg_very_cracked_south.png | Bin 0 -> 353 bytes .../textures/sniffer_egg_very_cracked_top.png | Bin 0 -> 289 bytes .../sniffer_egg_very_cracked_west.png | Bin 0 -> 332 bytes prototype/textures/snow.png | Bin 0 -> 202 bytes prototype/textures/soul_campfire_fire.png | Bin 0 -> 880 bytes prototype/textures/soul_campfire_log_lit.png | Bin 0 -> 744 bytes prototype/textures/soul_fire_0.png | Bin 0 -> 8841 bytes prototype/textures/soul_fire_1.png | Bin 0 -> 8522 bytes prototype/textures/soul_lantern.png | Bin 0 -> 309 bytes prototype/textures/soul_sand.png | Bin 0 -> 286 bytes prototype/textures/soul_soil.png | Bin 0 -> 247 bytes prototype/textures/soul_torch.png | Bin 0 -> 140 bytes prototype/textures/spawner.png | Bin 0 -> 251 bytes prototype/textures/sponge.png | Bin 0 -> 270 bytes prototype/textures/spore_blossom.png | Bin 0 -> 234 bytes prototype/textures/spore_blossom_base.png | Bin 0 -> 232 bytes prototype/textures/spruce_door_bottom.png | Bin 0 -> 291 bytes prototype/textures/spruce_door_top.png | Bin 0 -> 272 bytes prototype/textures/spruce_leaves.png | Bin 0 -> 228 bytes prototype/textures/spruce_log.png | Bin 0 -> 262 bytes prototype/textures/spruce_log_top.png | Bin 0 -> 264 bytes prototype/textures/spruce_planks.png | Bin 0 -> 263 bytes prototype/textures/spruce_sapling.png | Bin 0 -> 211 bytes prototype/textures/spruce_trapdoor.png | Bin 0 -> 258 bytes prototype/textures/stone.png | Bin 0 -> 215 bytes prototype/textures/stone_bricks.png | Bin 0 -> 242 bytes prototype/textures/stonecutter_bottom.png | Bin 0 -> 201 bytes prototype/textures/stonecutter_saw.png | Bin 0 -> 253 bytes prototype/textures/stonecutter_side.png | Bin 0 -> 208 bytes prototype/textures/stonecutter_top.png | Bin 0 -> 264 bytes prototype/textures/stripped_acacia_log.png | Bin 0 -> 423 bytes .../textures/stripped_acacia_log_top.png | Bin 0 -> 277 bytes prototype/textures/stripped_bamboo_block.png | Bin 0 -> 289 bytes .../textures/stripped_bamboo_block_top.png | Bin 0 -> 221 bytes prototype/textures/stripped_birch_log.png | Bin 0 -> 420 bytes prototype/textures/stripped_birch_log_top.png | Bin 0 -> 269 bytes prototype/textures/stripped_cherry_log.png | Bin 0 -> 258 bytes .../textures/stripped_cherry_log_top.png | Bin 0 -> 279 bytes prototype/textures/stripped_crimson_stem.png | Bin 0 -> 284 bytes .../textures/stripped_crimson_stem_top.png | Bin 0 -> 201 bytes prototype/textures/stripped_dark_oak_log.png | Bin 0 -> 282 bytes .../textures/stripped_dark_oak_log_top.png | Bin 0 -> 275 bytes prototype/textures/stripped_jungle_log.png | Bin 0 -> 287 bytes .../textures/stripped_jungle_log_top.png | Bin 0 -> 280 bytes prototype/textures/stripped_mangrove_log.png | Bin 0 -> 253 bytes .../textures/stripped_mangrove_log_top.png | Bin 0 -> 261 bytes prototype/textures/stripped_oak_log.png | Bin 0 -> 397 bytes prototype/textures/stripped_oak_log_top.png | Bin 0 -> 278 bytes prototype/textures/stripped_spruce_log.png | Bin 0 -> 292 bytes .../textures/stripped_spruce_log_top.png | Bin 0 -> 283 bytes prototype/textures/stripped_warped_stem.png | Bin 0 -> 286 bytes .../textures/stripped_warped_stem_top.png | Bin 0 -> 205 bytes prototype/textures/structure_block.png | Bin 0 -> 254 bytes prototype/textures/structure_block_corner.png | Bin 0 -> 281 bytes prototype/textures/structure_block_data.png | Bin 0 -> 235 bytes prototype/textures/structure_block_load.png | Bin 0 -> 231 bytes prototype/textures/structure_block_save.png | Bin 0 -> 228 bytes prototype/textures/sugar_cane.png | Bin 0 -> 186 bytes prototype/textures/sunflower_back.png | Bin 0 -> 139 bytes prototype/textures/sunflower_bottom.png | Bin 0 -> 183 bytes prototype/textures/sunflower_front.png | Bin 0 -> 153 bytes prototype/textures/sunflower_top.png | Bin 0 -> 140 bytes prototype/textures/suspicious_gravel_0.png | Bin 0 -> 293 bytes prototype/textures/suspicious_gravel_1.png | Bin 0 -> 302 bytes prototype/textures/suspicious_gravel_2.png | Bin 0 -> 302 bytes prototype/textures/suspicious_gravel_3.png | Bin 0 -> 295 bytes prototype/textures/suspicious_sand_0.png | Bin 0 -> 276 bytes prototype/textures/suspicious_sand_1.png | Bin 0 -> 281 bytes prototype/textures/suspicious_sand_2.png | Bin 0 -> 289 bytes prototype/textures/suspicious_sand_3.png | Bin 0 -> 290 bytes .../textures/sweet_berry_bush_stage0.png | Bin 0 -> 162 bytes .../textures/sweet_berry_bush_stage1.png | Bin 0 -> 255 bytes .../textures/sweet_berry_bush_stage2.png | Bin 0 -> 280 bytes .../textures/sweet_berry_bush_stage3.png | Bin 0 -> 294 bytes prototype/textures/tall_grass_bottom.png | Bin 0 -> 255 bytes prototype/textures/tall_grass_top.png | Bin 0 -> 204 bytes prototype/textures/tall_seagrass_bottom.png | Bin 0 -> 1440 bytes prototype/textures/tall_seagrass_top.png | Bin 0 -> 993 bytes prototype/textures/target_side.png | Bin 0 -> 306 bytes prototype/textures/target_top.png | Bin 0 -> 314 bytes prototype/textures/terracotta.png | Bin 0 -> 244 bytes prototype/textures/tinted_glass.png | Bin 0 -> 190 bytes prototype/textures/tnt_bottom.png | Bin 0 -> 108 bytes prototype/textures/tnt_side.png | Bin 0 -> 208 bytes prototype/textures/tnt_top.png | Bin 0 -> 248 bytes prototype/textures/torch.png | Bin 0 -> 138 bytes prototype/textures/torchflower.png | Bin 0 -> 268 bytes .../textures/torchflower_crop_stage0.png | Bin 0 -> 134 bytes .../textures/torchflower_crop_stage1.png | Bin 0 -> 201 bytes prototype/textures/tripwire.png | Bin 0 -> 214 bytes prototype/textures/tripwire_hook.png | Bin 0 -> 176 bytes prototype/textures/tube_coral.png | Bin 0 -> 253 bytes prototype/textures/tube_coral_block.png | Bin 0 -> 277 bytes prototype/textures/tube_coral_fan.png | Bin 0 -> 196 bytes prototype/textures/tuff.png | Bin 0 -> 253 bytes prototype/textures/turtle_egg.png | Bin 0 -> 370 bytes .../textures/turtle_egg_slightly_cracked.png | Bin 0 -> 374 bytes .../textures/turtle_egg_very_cracked.png | Bin 0 -> 362 bytes prototype/textures/twisting_vines.png | Bin 0 -> 161 bytes prototype/textures/twisting_vines_plant.png | Bin 0 -> 183 bytes prototype/textures/verdant_froglight_side.png | Bin 0 -> 258 bytes prototype/textures/verdant_froglight_top.png | Bin 0 -> 205 bytes prototype/textures/vine.png | Bin 0 -> 227 bytes prototype/textures/warped_door_bottom.png | Bin 0 -> 321 bytes prototype/textures/warped_door_top.png | Bin 0 -> 324 bytes prototype/textures/warped_fungus.png | Bin 0 -> 171 bytes prototype/textures/warped_nylium.png | Bin 0 -> 306 bytes prototype/textures/warped_nylium_side.png | Bin 0 -> 326 bytes prototype/textures/warped_planks.png | Bin 0 -> 281 bytes prototype/textures/warped_roots.png | Bin 0 -> 211 bytes prototype/textures/warped_roots_pot.png | Bin 0 -> 211 bytes prototype/textures/warped_stem.png | Bin 0 -> 743 bytes prototype/textures/warped_stem_top.png | Bin 0 -> 309 bytes prototype/textures/warped_trapdoor.png | Bin 0 -> 280 bytes prototype/textures/warped_wart_block.png | Bin 0 -> 251 bytes prototype/textures/water_flow.png | Bin 0 -> 5489 bytes prototype/textures/water_overlay.png | Bin 0 -> 76 bytes prototype/textures/water_still.png | Bin 0 -> 2419 bytes prototype/textures/weathered_copper.png | Bin 0 -> 281 bytes prototype/textures/weathered_cut_copper.png | Bin 0 -> 284 bytes prototype/textures/weeping_vines.png | Bin 0 -> 122 bytes prototype/textures/weeping_vines_plant.png | Bin 0 -> 236 bytes prototype/textures/wet_sponge.png | Bin 0 -> 252 bytes prototype/textures/wheat_stage0.png | Bin 0 -> 150 bytes prototype/textures/wheat_stage1.png | Bin 0 -> 160 bytes prototype/textures/wheat_stage2.png | Bin 0 -> 176 bytes prototype/textures/wheat_stage3.png | Bin 0 -> 189 bytes prototype/textures/wheat_stage4.png | Bin 0 -> 210 bytes prototype/textures/wheat_stage5.png | Bin 0 -> 221 bytes prototype/textures/wheat_stage6.png | Bin 0 -> 219 bytes prototype/textures/wheat_stage7.png | Bin 0 -> 265 bytes prototype/textures/white_candle.png | Bin 0 -> 126 bytes prototype/textures/white_candle_lit.png | Bin 0 -> 139 bytes prototype/textures/white_concrete.png | Bin 0 -> 217 bytes prototype/textures/white_concrete_powder.png | Bin 0 -> 555 bytes .../textures/white_glazed_terracotta.png | Bin 0 -> 308 bytes prototype/textures/white_shulker_box.png | Bin 0 -> 313 bytes prototype/textures/white_stained_glass.png | Bin 0 -> 106 bytes .../textures/white_stained_glass_pane_top.png | Bin 0 -> 121 bytes prototype/textures/white_terracotta.png | Bin 0 -> 434 bytes prototype/textures/white_tulip.png | Bin 0 -> 188 bytes prototype/textures/white_wool.png | Bin 0 -> 446 bytes prototype/textures/wither_rose.png | Bin 0 -> 182 bytes prototype/textures/yellow_candle.png | Bin 0 -> 127 bytes prototype/textures/yellow_candle_lit.png | Bin 0 -> 138 bytes prototype/textures/yellow_concrete.png | Bin 0 -> 304 bytes prototype/textures/yellow_concrete_powder.png | Bin 0 -> 657 bytes .../textures/yellow_glazed_terracotta.png | Bin 0 -> 343 bytes prototype/textures/yellow_shulker_box.png | Bin 0 -> 342 bytes prototype/textures/yellow_stained_glass.png | Bin 0 -> 106 bytes .../yellow_stained_glass_pane_top.png | Bin 0 -> 120 bytes prototype/textures/yellow_terracotta.png | Bin 0 -> 469 bytes prototype/textures/yellow_wool.png | Bin 0 -> 509 bytes prototype/voxel-world.html | 1038 ++++ server/Makefile | 5 +- server/cmd/ai-service/main.go | 167 + 1972 files changed, 159760 insertions(+), 6 deletions(-) create mode 100644 client/Assets/Scripts/RedCircuit.AIAssistant/AIActionExecutor.cs create mode 100644 client/Assets/Scripts/RedCircuit.AIAssistant/AIAssistantManager.cs create mode 100644 client/Assets/Scripts/RedCircuit.AIAssistant/AIChatController.cs create mode 100644 client/Assets/Scripts/RedCircuit.AIAssistant/AICircuitAdvisor.cs create mode 100644 client/Assets/Scripts/RedCircuit.AIAssistant/AIContextProvider.cs create mode 100644 client/Assets/Scripts/RedCircuit.AIAssistant/AIModels.cs create mode 100644 client/Assets/Scripts/RedCircuit.AIAssistant/RedCircuit.AIAssistant.asmdef create mode 100644 docs/AI助搭功能策划文档.md create mode 100644 launcher/MRCC.Launcher.sln create mode 100644 launcher/MRCC.Launcher/App.xaml create mode 100644 launcher/MRCC.Launcher/App.xaml.cs create mode 100644 launcher/MRCC.Launcher/MRCC.Launcher.csproj create mode 100644 launcher/MRCC.Launcher/MainWindow.xaml create mode 100644 launcher/MRCC.Launcher/MainWindow.xaml.cs create mode 100644 launcher/MRCC.Launcher/Program.cs create mode 100644 launcher/MRCC.Launcher/ViewModels/MainViewModel.cs create mode 100644 launcher/MRCC.Launcher/app.manifest create mode 100644 launcher/MRCC.Launcher/metadata.json create mode 100644 launcher/PCL-CE/.editorconfig create mode 100644 launcher/PCL-CE/.gitattributes create mode 100644 launcher/PCL-CE/.github/FUNDING.yml create mode 100644 launcher/PCL-CE/.github/ISSUE_TEMPLATE/1-bug.yml create mode 100644 launcher/PCL-CE/.github/ISSUE_TEMPLATE/2-game_crash.yml create mode 100644 launcher/PCL-CE/.github/ISSUE_TEMPLATE/21-bug.yml create mode 100644 launcher/PCL-CE/.github/ISSUE_TEMPLATE/22-game_crash.yml create mode 100644 launcher/PCL-CE/.github/ISSUE_TEMPLATE/23-feature.yml.disabled create mode 100644 launcher/PCL-CE/.github/ISSUE_TEMPLATE/24-improve.yml create mode 100644 launcher/PCL-CE/.github/ISSUE_TEMPLATE/3-feature.yml.disabled create mode 100644 launcher/PCL-CE/.github/ISSUE_TEMPLATE/4-improve.yml.disabled create mode 100644 launcher/PCL-CE/.github/ISSUE_TEMPLATE/config.yml create mode 100644 launcher/PCL-CE/.github/workflows/build-test.yml create mode 100644 launcher/PCL-CE/.github/workflows/mirrorchyan_release_note.yml create mode 100644 launcher/PCL-CE/.github/workflows/mirrorchyan_uploading.yml create mode 100644 launcher/PCL-CE/.github/workflows/release-beta_publish.yml create mode 100644 launcher/PCL-CE/.github/workflows/release-stable_publish.yml create mode 100644 launcher/PCL-CE/.github/workflows/reusable-build.yml create mode 100644 launcher/PCL-CE/.gitignore create mode 100644 launcher/PCL-CE/CONTRIBUTING.md create mode 100644 launcher/PCL-CE/GPG-PUBLIC-KEY.asc create mode 100644 launcher/PCL-CE/LICENSE create mode 100644 launcher/PCL-CE/PCL.Core.SourceGenerators/ConfigGenerator.cs create mode 100644 launcher/PCL-CE/PCL.Core.SourceGenerators/DependencyCollectorGenerator.cs create mode 100644 launcher/PCL-CE/PCL.Core.SourceGenerators/EnvironmentInteropGenerator.cs create mode 100644 launcher/PCL-CE/PCL.Core.SourceGenerators/LifecycleScopeGenerator.cs create mode 100644 launcher/PCL-CE/PCL.Core.SourceGenerators/LifecycleServiceTypesGenerator.cs create mode 100644 launcher/PCL-CE/PCL.Core.SourceGenerators/PCL.Core.SourceGenerators.csproj create mode 100644 launcher/PCL-CE/PCL.Core.SourceGenerators/SharedConstants.cs create mode 100644 launcher/PCL-CE/PCL.Core.SourceGenerators/SharedExtensions.cs create mode 100644 launcher/PCL-CE/PCL.Core.SourceGenerators/System.Runtime.CompilerServices.cs create mode 100644 launcher/PCL-CE/PCL.Core/.editorconfig create mode 100644 launcher/PCL-CE/PCL.Core/.gitignore create mode 100644 launcher/PCL-CE/PCL.Core/App/Basics.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Cli/ArgumentValueKind.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Cli/BoolArgument.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Cli/CommandArgument.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Cli/CommandLine.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Cli/DecimalArgument.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Cli/SubcommandDefinition.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Cli/TextArgument.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Config.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/ConfigEnums.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ArgConfig.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Attributes.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigEvent.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigEventArgs.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigEventHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigEventRegistry.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigItem.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigMigration.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigObserver.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigSource.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/ConfigValueCache.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/IConfigProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/IConfigScope.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/CatIniFileProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/CommonFileProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/ConfigFileInitException.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/ConfigStorage.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/DynamicCacheConfigStorage.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/EncryptedFileConfigStorage.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/FileConfigStorage.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/IEnumerableKeyProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/IKeyValueFileProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/JsonFileProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/JsonToYamlConverter.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/YamlFileProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/YamlNodeConverter.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Configuration/Storage/YamlNodeEmitter.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Database/DatabaseEntry.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Database/DatabaseService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Database/README.md create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/ApplicationService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/MainWindowService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/PromoteService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/RpcFunction.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/RpcProperty.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/RpcResponse.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/RpcService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/SingleInstanceService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/StartupService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/StartupValidation.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/TelemetryService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/UpdateHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Essentials/UpdateService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/EventBus/EventBusService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/EventBus/EventDataBase.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/EventBus/IEventHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/EventBus/IResponsibleEventHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/Attributes.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/DependencyArguments.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/DependencyGroup.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/DependencyGroups.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/GeneralService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/Lifecycle.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/LifecycleContext.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/LifecycleFlow.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/LifecycleLogs.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/LifecycleProcess.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/LifecycleService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/LifecycleState.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/IoC/PropertyAccessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/Lang.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/Languages/en-GB.xaml create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/Languages/en-US.xaml create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/Languages/es-ES.xaml create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/Languages/fr-FR.xaml create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/Languages/ja-JP.xaml create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/Languages/zh-CN.xaml create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/Languages/zh-TW.xaml create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/LocalizationFontProfile.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/LocalizationFontService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/LocalizationFormatConverter.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/LocalizationLanguage.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/LocalizationService.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Localization/WeakLanguageChanged.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Metadata.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Paths.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Secrets.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/States.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Tasks/ITask.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Tasks/ITaskCancelable.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Tasks/ITaskGroup.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Tasks/ITaskPausable.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Tasks/ITaskProgressive.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Tasks/TaskCenter.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Tasks/TaskModel.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Tasks/TaskState.cs create mode 100644 launcher/PCL-CE/PCL.Core/App/Tools/DependencyCheckService.cs create mode 100644 launcher/PCL-CE/PCL.Core/AssemblyInfo.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/ByteStream.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Directories.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Download/IDlConnection.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Download/IDlResourceMapping.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Download/IDlWriter.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Download/NDlConnectionInfo.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Download/NDlFactory.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Download/NDlSourceReport.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Files.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Dns/DnsQuery.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Dns/DnsSrvResource.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Dns/WeightedDnsRacerClient.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/Cache/HttpCacheHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/Cache/HttpCacheMetadata.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HostConnectionHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpBasicExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpContentExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpCookieExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpHeaderExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpProxyManager.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpRequest.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpResponseException.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpResponseExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpRoute.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpRouteResponse.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpSenderExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/Http/HttpServer.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/NetworkHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/NetworkInterfaceUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/NetworkService.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/SocketExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Net/TcpForward.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/PipeComm.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/CacheEvictionService.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/CacheKeys.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/CacheOptions.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/CachePolicy.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/CacheResult.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/CacheService.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/CacheServiceManager.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/CacheStats.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/FileCacheStora.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/ICacheService.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/Model/CacheEntry.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/Model/ComponentCacheRow.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/Model/InstanceCacheRow.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/SchemaManager.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/Cache/SqliteCacheStorage.cs create mode 100644 launcher/PCL-CE/PCL.Core/IO/Storage/HashStorage.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/BroadcastListener.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/BroadcastLocal.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/BroadcastRecord.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/EasyTier/ETController.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/EasyTier/ETInfoProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/EasyTier/ETPeerInfo.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/EasyTier/ETRelay.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/LinkAnnounce.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Lobby/LobbyController.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Lobby/LobbyInfoProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Lobby/LobbyService.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Lobby/LobbyState.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Lobby/LobbyTextHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/IMcPingService.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/LegacyMcPingService.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/McPingService.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/McPingServiceFactory.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/Model/McPingModInfoModResult.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/Model/McPingModInfoResult.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/Model/McPingPlayerResult.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/Model/McPingPlayerSampleResult.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/Model/McPingResult.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/McPing/Model/McPingVersionResult.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Natayark/NatayarkProfileManager.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Abstractions/IRequest.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Abstractions/ScaffoldingResponse.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Framing/ProtocolReader.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Framing/ProtocolWriter.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Models/LobbyInfo.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Models/LobbyType.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Models/PlayerKind.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Models/PlayerProfile.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Requests/GetPlayerProfileListRequest.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Requests/GetProtocolsRequest.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Requests/GetServerProtRequest.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Requests/PingRequest.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/Requests/PlayerPingRequest.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Client/ScaffoldingClient.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/EasyTier/CliNetTest.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/EasyTier/EasyPlayerInfo.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/EasyTier/EasyTierEntity.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/EasyTier/EasyTierMetadata.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/EasyTier/PublicNodeDto.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/EasyTier/StunInfo.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Exceptions/FailedToGetPlayerException.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Exceptions/ScaffoldingRequestException.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/LobbyCodeGenerator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/PlayerListHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/ScaffoldingFactory.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/Abstractions/IRequestHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/Abstractions/IServerContext.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/Handlers/GetPlayerProfileListHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/Handlers/GetProtocolsHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/Handlers/GetServerPortHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/Handlers/PingHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/Handlers/PlayerPingHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/ScaffoldingServer.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/ScaffoldingServerContext.cs create mode 100644 launcher/PCL-CE/PCL.Core/Link/Scaffolding/Server/TrackedPlayerProfile.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/ActionLevel.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/ExceptionDetails.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/LogLevel.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/LogService.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/LogWrapper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/Logger.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/LoggerAdapter.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/LoggerConfiguration.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/LoggerExtensions.cs create mode 100644 launcher/PCL-CE/PCL.Core/Logging/LoggerFactoryAdapter.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/GameCore.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/JsonWebToken/JsonWebKeys.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/JsonWebToken/JsonWebToken.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/OpenId/OpenIdClient.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/OpenId/OpenIdMetaData.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/OpenId/OpenIdOptions.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/Pkce/PkceChallengeOptions.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/Pkce/PkceClient.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/YggdrasilConnect/YggdrasilClient.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/YggdrasilConnect/YggdrasilConnectMetaData.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Extensions/YggdrasilConnect/YggdrasilOptions.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/IdentityModelException.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/OAuth/AuthorizeResult.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/OAuth/Client.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/OAuth/ClientOptions.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/OAuth/DeviceCodeData.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/OAuth/EndpointMeta.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/OAuth/IOAuthClient.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Yggdrasil/Agent.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Yggdrasil/Client.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Yggdrasil/Options.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Yggdrasil/Profile.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/IdentityModel/Yggdrasil/YggdrasilCredential.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/JavaBrandType.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/JavaConsts.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/JavaEntry.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/JavaInstallation.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/JavaManager.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/JavaService.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/JavaSource.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/JavaStorageItem.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/Parser/IJavaParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/Parser/PeHeaderParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/Scanner/DefaultPathsScanner.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/Scanner/IJavaScanner.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/Scanner/MicrosoftStoreJavaScanner.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/Scanner/PathEnvironmentScanner.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/Scanner/RegistryJavaScanner.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/Scanner/WhereCommandScanner.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/UserPreference/AutoSelect.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/UserPreference/ExistingJava.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/UserPreference/JavaPreference.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/UserPreference/UseGlobalPreference.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Java/UserPreference/UseRelativePath.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Launch/Utils/LaunchEnvUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/MavenArtifact.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/McFormatter.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/McVersionClassifier.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/NbtFileHandler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Curseforge/CurseforgeAuthors.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Curseforge/CurseforgeCategories.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Curseforge/CurseforgeFile.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Curseforge/CurseforgeHashes.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Curseforge/CurseforgeLinks.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Curseforge/CurseforgePictures.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Curseforge/CurseforgeProject.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Curseforge/CurseforgeResponseData.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Curseforge/CurseforgeScreenshots.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/ModDependencyResolver.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Modrinth/ModrinthDonationUrl.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Modrinth/ModrinthGallery.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Modrinth/ModrinthLicense.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Modrinth/ModrinthModeratorMessage.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ResourceProject/Modrinth/ModrinthProject.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/SaveImportHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/DataVersionBoundaries.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Editing/Editable.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Editing/ISaveEditor.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Editing/Internal/Pre261SaveEditor.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Editing/Internal/Version261PlusSaveEditor.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Editing/SaveChanges.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Exceptions/SaveCorruptedException.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Exceptions/SaveNotFoundException.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/NBTEnums.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Parsing/ISaveParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Parsing/Internal/NbtReadHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Parsing/Internal/Pre113SaveParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Parsing/Internal/Version113To1152SaveParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Parsing/Internal/Version116To1211SaveParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Parsing/Internal/Version131To189SaveParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Parsing/Internal/Version19To1122SaveParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Parsing/Internal/Version261PlusSaveParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/Parsing/SaveParserFactory.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/SaveInfo.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Saves/SaveManager.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/ServerAddressResolver.cs create mode 100644 launcher/PCL-CE/PCL.Core/Minecraft/Yggdrasil/ApiLocation.cs create mode 100644 launcher/PCL-CE/PCL.Core/Model/Homepage/News/ApiResponse.cs create mode 100644 launcher/PCL-CE/PCL.Core/Model/Homepage/News/NewsItem.cs create mode 100644 launcher/PCL-CE/PCL.Core/Model/Homepage/News/Result.cs create mode 100644 launcher/PCL-CE/PCL.Core/NOTICE create mode 100644 launcher/PCL-CE/PCL.Core/PCL.Core.csproj create mode 100644 launcher/PCL-CE/PCL.Core/README.md create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Animatable/ClrAnimatable.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Animatable/EmptyAnimatable.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Animatable/IAnimatable.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Animatable/WpfAnimatable.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Clock/IClock.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Clock/IUIClock.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Clock/StopwatchClock.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Clock/WinMMClock.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Clock/WpfCompositionTargetRenderingClock.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/ActionAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/ActionAnimationFrame.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/AnimationBase.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/AnimationData.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/AnimationExtensions.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/AnimationFrame.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/AnimationGroup.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/AnimationService.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/AnimationStatus.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/AnimationValueType.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/FromToAnimationBase.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/FromToAnimationFrame.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/IAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/IAnimationData.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/IAnimationFrame.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/IFromToAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/IImplicitAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/IKeyFrameAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/ParallelAnimationGroup.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/RunAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Core/SequentialAnimationGroup.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/DoubleFromToAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/BackEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/BackEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/BackEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/BackEaseWithPowerIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/BackEaseWithPowerInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/BackEaseWithPowerOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/BounceEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/BounceEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/BounceEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/CircularEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/CircularEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/CircularEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/CombinedEasing.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/CompositeEasing.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/CubicEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/CubicEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/CubicEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/EasePower.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/Easing.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/ElasticEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/ElasticEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/ElasticEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/ExponentialEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/ExponentialEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/ExponentialEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/IEasing.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/LinearEasing.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/QuadEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/QuadEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/QuadEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/QuarticEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/QuarticEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/QuarticEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/QuinticEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/QuinticEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/QuinticEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/SineEaseIn.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/SineEaseInOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/Easings/SineEaseOut.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/MatrixFromToAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/NColorFromToAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/NRotateTransformFromToAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/NScaleTransformFromToAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/PointFromToAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ThicknessFromToAnimation.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/UIAccessProvider/IUIAccessProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/UIAccessProvider/WpfUIAccessProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ValueProcessor/DoubleValueProcessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ValueProcessor/IValueProcessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ValueProcessor/MatrixValueProcessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ValueProcessor/NColorValueProcessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ValueProcessor/NRotateTransformValueProcessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ValueProcessor/NScaleTransformValueProcessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ValueProcessor/PointValueProcessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ValueProcessor/ThicknessValueProcessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Animation/ValueProcessor/ValueProcessorManager.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/LICENSE.txt create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/anvil.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/arrow-left.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/arrow-right-left.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/arrow-right.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/arrow-up-down.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/arrow-up-from-line.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/arrow-up-to-line.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/book-marked.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/box.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/boxes.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/bubbles.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/cat.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/chevron-left.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/chevron-right.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/chevrons-left.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/circle-check.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/circle-help.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/circle-minus.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/circle-plus.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/coffee.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/copy.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/download.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/earth.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/egg.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/ethernet-port.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/external-link.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/file-archive.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/file-box.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/file-input.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/flag.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/flask-conical.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/folder-input.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/folder-open.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/folder-plus.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/gauge.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/globe.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/grid-2x2.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/hammer.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/heart-filled.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/heart-off.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/heart.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/image.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/info.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/layers.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/layout-dashboard.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/layout-list.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/link-2-off.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/link-2.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/list-x.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/list.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/log-out.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/message-circle.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/minus.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/monitor-cog.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/move-down.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/move-up.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/music.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/network.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/package-plus.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/package.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/palette.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/pencil.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/play.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/power.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/puzzle.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/refresh-cw.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/rocket.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/rotate-ccw.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/save.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/scroll-text.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/scroll.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/search.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/server.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/settings.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/share-2.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/shield-check.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/shirt.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/sparkles.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/tool-case.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/trash-2.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/triangle-alert.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/upload.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/user-plus.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/user.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/wrench.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/IconPacks/lucide/x.svg create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/Shaders/AdaptiveBlur.hlsl create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/Shaders/AdaptiveBlur.ps create mode 100644 launcher/PCL-CE/PCL.Core/UI/Assets/Shaders/CompileShader.bat create mode 100644 launcher/PCL-CE/PCL.Core/UI/BackgroundPresenter.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/BlurBorder.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/MotdRenderer.xaml create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/MotdRenderer.xaml.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgIcon.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgIconElement.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgIconElementKind.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgIconLoader.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgIconModel.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgIconPaintOptions.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgIconParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgIconStyle.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgNumberParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgPaintParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/SvgIcon/SvgPathGeometryParser.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/Tooltip.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Controls/WaterfallPanel.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Converters/EasingConverter.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Converters/NColorConverter.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Converters/NullToVisibilityConverter.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Effects/AdaptiveBlurEffect.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Effects/EnhancedBlurEffect.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Effects/OptimizedBlurEffect.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Effects/SamplingBlurProcessor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/GrayProfile.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/GrayProfileConfig.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/HintWrapper.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/IconManager.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/IconModel.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/ImageLoaderHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Media/ImageConverter.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/MsgBoxWrapper.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/NColor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/NRotateTransform.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/NScaleTransform.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/SystemDialogs.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Theme/CatColorResource.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Theme/LabColor.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Theme/SystemThemeHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Theme/ThemeService.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Theme/ToneProfile.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/Theme/ToneProfileConfig.cs create mode 100644 launcher/PCL-CE/PCL.Core/UI/ToastNotification.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/ArgumentsBuilder.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/AtomicVariable.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Codecs/EncodingDetector.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Codecs/EncodingUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Codecs/Encodings.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/ConcurrentSet.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Diagnostics/StackHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Diff/BsDiff.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Diff/IBinaryDiff.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Diff/ItemDiff.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Diff/ItemDiffResult.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/EaseUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Encryption/AesCbcProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Encryption/AesGcmProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Encryption/ChaCha20Poly1305Provider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Encryption/ChaCha20SoftwareProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Encryption/IEncryptionProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/ExpandoObjectConverter.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Exts/AsyncEnumerableExtensions.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Exts/ByteExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Exts/ConcurrentDictionaryExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Exts/HttpRequestExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Exts/LanguageSpecificStringDictionaryExtensions.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Exts/ListExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Exts/StringExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Exts/TaskExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Exts/UiExtension.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/FrameUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Hash/HashCache.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Hash/IHashProvider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Hash/MD5Provider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Hash/MurmurHash2Provider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Hash/SHA1Provider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Hash/SHA256Provider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Hash/SHA512Provider.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/IconHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/JsonCompat.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/AumidHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/ClipboardUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/DragHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/EnvironmentInterop.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/HardwareInfo.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/KernelInterop.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/NetworkUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/NtInterop.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/ProcessInterop.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/RegistryChangeMonitor.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/SystemInfo.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/SystemPaths.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/SystemTheme.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/OS/WindowInterop.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/PEHeaderReader.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/ParameterizedProperty.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/RandomUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/RegexPatterns.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Result.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Secret/EncryptHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Secret/Identify.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Secret/IdentifyOld.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/SemVer.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/SimilaritySearch.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/StringStream.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Threading/AsyncCountResetEvent.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Threading/AsyncDebounce.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Threading/AsyncManualResetEvent.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Threading/DualThreadPool.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Threading/LimitedConcurrencyLevelTaskScheduler.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Threading/LimitedTaskPool.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/TimeUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/BlacklistValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/FileNameValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/FileSystemValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/FolderNameValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/FolderPathValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/HttpAndUncValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/HttpValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/IntValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/NullOrEmptyValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/NullOrWhiteSpaceValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/RegexValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/Validate/StringLengthValidator.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/VarIntHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/VersionRange.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/WinRT/HString.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/WinRT/HStringHelper.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/WinRT/Interface/IInspectable.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/WinRT/Interface/Windows/Data/Xml/Dom/IXmlDocumentIO.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/WinRT/Interface/Windows/UI/Notifications/IToastNotificationFactory.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/WinRT/Interface/Windows/UI/Notifications/IToastNotificationManagerStatics.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/WinRT/Interface/Windows/UI/Notifications/IToastNotifier.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/WinRT/WinRTInterop.cs create mode 100644 launcher/PCL-CE/PCL.Core/Utils/WpfUtils.cs create mode 100644 launcher/PCL-CE/PCL.Core/ViewModel/Homepage/NewsViewModel.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2.slnx create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Application.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Application.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/AnimatedBackgroundGrid.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/Behaviors/ClipboardInterceptor.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/Behaviors/LazyLoadBehavior.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/ControlVisualHelpers.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/FontSelector.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/FontSelector.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/IMyRadio.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MinecraftServer.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MinecraftServer.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MinecraftServerQuery.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MinecraftServerQuery.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyButton.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyButton.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyCard.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyCheckBox.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyCheckBox.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyCollapseBar.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyComboBox.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyComboBoxItem.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyDropShadow.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyExtraButton.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyExtraButton.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyExtraTextButton.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyExtraTextButton.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyHint.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyHint.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyIconButton.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyIconButton.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyIconTextButton.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyIconTextButton.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyImage.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyListItem.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyListItem.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyLoading.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyLoading.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyMenuItem.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyMsg/MyMsgInput.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyMsg/MyMsgInput.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyMsg/MyMsgMarkdown.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyMsg/MyMsgMarkdown.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyMsg/MyMsgSelect.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyMsg/MyMsgSelect.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyMsg/MyMsgText.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyMsg/MyMsgText.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyPageLeft.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyPageRight.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyRadioBox.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyRadioBox.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyRadioButton.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyRadioButton.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyScrollBar.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyScrollViewer.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MySearchBox.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MySearchBox.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MySlider.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MySlider.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyTextBox.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyTextButton.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyToast.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyToast.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/MyVirtualizingElement.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Controls/SvgIconControlHelper.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/FormMain.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/FormMain.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Backgrounds/server_bg.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/Anvil.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/Cleanroom.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/CobbleStone.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/CommandBlock.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/Egg.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/Fabric.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/GoldBlock.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/Grass.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/GrassPath.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/LabyMod.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/NeoForge.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/OptiFabric.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/Quilt.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/RedstoneBlock.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/RedstoneLampOff.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Blocks/RedstoneLampOn.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/EasyTier.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/Emperormummy.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/LTCat.jpg create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/Logo-CE.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/Logo.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/PCL-Community.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/Pysio.jpg create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/Yunmoan.jpg create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/bangbang93.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/wiki.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Heads/z0z0r4.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Icons/A.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Icons/B.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Icons/DefaultServer.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Icons/Disabled.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Icons/Folder.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Icons/NoIcon.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Icons/R.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Icons/Unavailable.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Skins/Alex.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Skins/Ari.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Skins/Efe.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Skins/Kai.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Skins/Makena.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Skins/Noor.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Skins/Steve.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Skins/Sunny.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/Skins/Zuri.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/icon.ico create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Images/icon.png create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/LICENCE create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Base/ModAnimation.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Base/ModBase.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Base/ModLoader.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Base/ModSetup.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Base/MyBitmap.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Event/CustomEvent.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Event/CustomEventCollection.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Event/CustomEventService.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Event/EventType.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Event/EventTypeMapper.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Event/XamlEventSanitizer.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/CrashAnalysisContext.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/CrashAnalysisResult.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/CrashAnalyzer.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/CrashCause.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/CrashEvidence.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/CrashFileIo.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/CrashFinding.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/CrashRegex.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/CrashText.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Detection/CrashDetector.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Detection/CrashEvidenceExtractor.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Detection/CrashModIndex.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Detection/CrashRule.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Detection/CrashRuleCatalog.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Detection/CrashStackAnalyzer.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Detection/DetectionPhase.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Export/CrashReportExporter.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Logs/CrashConfidence.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Logs/CrashLogCollector.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Logs/CrashLogEntry.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Logs/CrashLogImporter.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Logs/CrashLogKind.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Logs/CrashLogPreparer.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Logs/CrashLogSet.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Logs/CrashLogText.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Presentation/CrashDialogPresenter.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Presentation/CrashMessageSpec.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/CrashAnalysis/Presentation/CrashResultFormatter.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/McInstance.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/McInstanceCardType.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/McInstanceInfo.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/McInstanceState.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/McLogFilter.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/McVersionComparer.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModAssets.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModComp.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModCompDependency.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModFolder.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModInstanceList.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModJarInJar.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModJava.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModLibrary.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModLocalComp.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModProfile.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModSkin.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModStyle.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Minecraft/ModWatcher.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/ModLink.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/ModMain.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/ModMusic.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/ModVideoBack.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/ModWebServer.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Downloader/DownloadRequestFactory.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Downloader/FileDownloader.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Facade/ModNet.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Http/RequestSigning.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Http/Requester.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Loaders/LoaderDownload.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Loaders/LoaderDownloadUnc.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Management/NetManager.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Models/DownloadFile.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Models/FetchParam.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Models/NetworkEnums.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Models/RequestParam.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/UI/HintService.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/UI/HintType.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/UI/Theme/ThemeManager.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/AnnouncementService.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/EnumUpdateChannel.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/IUpdateSource.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/UpdateEnums.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/UpdateManager.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/UpdatesMinioModel.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/UpdatesMirrorChyanModel.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/UpdatesRandomModel.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/UpdatesWrapperModel.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/VersionAnnouncementDataModel.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Modules/Updates/VersionDataModel.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/MyCompItem.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/MyCompItem.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageComp.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageComp.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadCompDetail.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadCompDetail.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadDataPack.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadDataPack.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadMod.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadMod.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadPack.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadPack.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadResourcePack.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadResourcePack.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadShader.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadShader.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadWorld.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadWorld.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCleanroom.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCleanroom.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadClient.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadClient.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompFavorites.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompFavorites.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadFabric.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadFabric.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadForge.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadForge.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLabyMod.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLabyMod.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLegacyFabric.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLegacyFabric.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLiteLoader.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLiteLoader.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadNeoForge.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadNeoForge.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadOptiFine.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadOptiFine.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageHomepage/PageHomepageNewsView.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageHomepage/PageHomepageNewsView.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/MyLocalModItem.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/MyLocalModItem.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceCompResource.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceCompResource.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceLeft.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceLeft.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceModDisabled.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceModDisabled.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceOverall.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceOverall.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSaves.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSaves.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSaves/PageInstanceSavesDatapack.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSaves/PageInstanceSavesDatapack.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSaves/PageInstanceSavesInfo.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSaves/PageInstanceSavesInfo.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSaves/PageInstanceSavesLeft.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSaves/PageInstanceSavesLeft.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceScreenshot.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceScreenshot.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceServer.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceServer.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/ServerCard.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageInstance/ServerCard.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/MyMsgLogin.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/MyMsgLogin.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginAuth.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginAuth.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginOffline.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginOffline.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginProfile.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginProfile.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginProfileSkin.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginProfileSkin.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLogLeft.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLogLeft.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLogRight.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageLogRight.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSelectLeft.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSelectLeft.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSelectRight.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSelectRight.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupAbout.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupAbout.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupFeedback.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupFeedback.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameLink.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameLink.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameManage.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameManage.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupJava.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupJava.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLauncherLanguage.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLauncherLanguage.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLauncherMisc.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLauncherMisc.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLeft.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLeft.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLog.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLog.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUpdate.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUpdate.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSpeedLeft.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSpeedLeft.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSpeedRight.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSpeedRight.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageTools/PageToolsGameLink.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageTools/PageToolsGameLink.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageTools/PageToolsLeft.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageTools/PageToolsLeft.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageTools/PageToolsTest.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageTools/PageToolsTest.xaml.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Plain Craft Launcher 2.csproj create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Program.cs create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/Font.ttf create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/Markdown.xaml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/forge-installer.jar create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/hints/en-US.txt create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/hints/zh-CN.txt create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/java-wrapper.jar create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/legacyfix.jar create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/log4j2-debug.xml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/log4j2-legacy-debug.xml create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/lwjgl-unsafe-agent.jar create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/mcmod.buf create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/oauth-complete.html create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/Resources/transformer.jar create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/app.manifest create mode 100644 launcher/PCL-CE/Plain Craft Launcher 2/metadata.json create mode 100644 launcher/PCL-CE/README-EN.md create mode 100644 launcher/PCL-CE/README-ZH_TW.md create mode 100644 launcher/PCL-CE/README.md create mode 100644 launcher/PCL-CE/cliff.toml create mode 100644 launcher/build.ps1 create mode 100644 prototype/redcircuit.html create mode 100644 prototype/textures/acacia_door_bottom.png create mode 100644 prototype/textures/acacia_door_top.png create mode 100644 prototype/textures/acacia_leaves.png create mode 100644 prototype/textures/acacia_log.png create mode 100644 prototype/textures/acacia_log_top.png create mode 100644 prototype/textures/acacia_planks.png create mode 100644 prototype/textures/acacia_sapling.png create mode 100644 prototype/textures/acacia_trapdoor.png create mode 100644 prototype/textures/activator_rail.png create mode 100644 prototype/textures/activator_rail_on.png create mode 100644 prototype/textures/allium.png create mode 100644 prototype/textures/amethyst_block.png create mode 100644 prototype/textures/amethyst_cluster.png create mode 100644 prototype/textures/ancient_debris_side.png create mode 100644 prototype/textures/ancient_debris_top.png create mode 100644 prototype/textures/andesite.png create mode 100644 prototype/textures/anvil.png create mode 100644 prototype/textures/anvil_top.png create mode 100644 prototype/textures/attached_melon_stem.png create mode 100644 prototype/textures/attached_pumpkin_stem.png create mode 100644 prototype/textures/azalea_leaves.png create mode 100644 prototype/textures/azalea_plant.png create mode 100644 prototype/textures/azalea_side.png create mode 100644 prototype/textures/azalea_top.png create mode 100644 prototype/textures/azure_bluet.png create mode 100644 prototype/textures/bamboo_block.png create mode 100644 prototype/textures/bamboo_block_top.png create mode 100644 prototype/textures/bamboo_door_bottom.png create mode 100644 prototype/textures/bamboo_door_top.png create mode 100644 prototype/textures/bamboo_fence.png create mode 100644 prototype/textures/bamboo_fence_gate.png create mode 100644 prototype/textures/bamboo_fence_gate_particle.png create mode 100644 prototype/textures/bamboo_fence_particle.png create mode 100644 prototype/textures/bamboo_large_leaves.png create mode 100644 prototype/textures/bamboo_mosaic.png create mode 100644 prototype/textures/bamboo_planks.png create mode 100644 prototype/textures/bamboo_singleleaf.png create mode 100644 prototype/textures/bamboo_small_leaves.png create mode 100644 prototype/textures/bamboo_stage0.png create mode 100644 prototype/textures/bamboo_stalk.png create mode 100644 prototype/textures/bamboo_trapdoor.png create mode 100644 prototype/textures/barrel_bottom.png create mode 100644 prototype/textures/barrel_side.png create mode 100644 prototype/textures/barrel_top.png create mode 100644 prototype/textures/barrel_top_open.png create mode 100644 prototype/textures/basalt_side.png create mode 100644 prototype/textures/basalt_top.png create mode 100644 prototype/textures/beacon.png create mode 100644 prototype/textures/bedrock.png create mode 100644 prototype/textures/bee_nest_bottom.png create mode 100644 prototype/textures/bee_nest_front.png create mode 100644 prototype/textures/bee_nest_front_honey.png create mode 100644 prototype/textures/bee_nest_side.png create mode 100644 prototype/textures/bee_nest_top.png create mode 100644 prototype/textures/beehive_end.png create mode 100644 prototype/textures/beehive_front.png create mode 100644 prototype/textures/beehive_front_honey.png create mode 100644 prototype/textures/beehive_side.png create mode 100644 prototype/textures/beetroots_stage0.png create mode 100644 prototype/textures/beetroots_stage1.png create mode 100644 prototype/textures/beetroots_stage2.png create mode 100644 prototype/textures/beetroots_stage3.png create mode 100644 prototype/textures/bell_bottom.png create mode 100644 prototype/textures/bell_side.png create mode 100644 prototype/textures/bell_top.png create mode 100644 prototype/textures/big_dripleaf_side.png create mode 100644 prototype/textures/big_dripleaf_stem.png create mode 100644 prototype/textures/big_dripleaf_tip.png create mode 100644 prototype/textures/big_dripleaf_top.png create mode 100644 prototype/textures/birch_door_bottom.png create mode 100644 prototype/textures/birch_door_top.png create mode 100644 prototype/textures/birch_leaves.png create mode 100644 prototype/textures/birch_log.png create mode 100644 prototype/textures/birch_log_top.png create mode 100644 prototype/textures/birch_planks.png create mode 100644 prototype/textures/birch_sapling.png create mode 100644 prototype/textures/birch_trapdoor.png create mode 100644 prototype/textures/black_candle.png create mode 100644 prototype/textures/black_candle_lit.png create mode 100644 prototype/textures/black_concrete.png create mode 100644 prototype/textures/black_concrete_powder.png create mode 100644 prototype/textures/black_glazed_terracotta.png create mode 100644 prototype/textures/black_shulker_box.png create mode 100644 prototype/textures/black_stained_glass.png create mode 100644 prototype/textures/black_stained_glass_pane_top.png create mode 100644 prototype/textures/black_terracotta.png create mode 100644 prototype/textures/black_wool.png create mode 100644 prototype/textures/blackstone.png create mode 100644 prototype/textures/blackstone_top.png create mode 100644 prototype/textures/blast_furnace_front.png create mode 100644 prototype/textures/blast_furnace_front_on.png create mode 100644 prototype/textures/blast_furnace_side.png create mode 100644 prototype/textures/blast_furnace_top.png create mode 100644 prototype/textures/blue_candle.png create mode 100644 prototype/textures/blue_candle_lit.png create mode 100644 prototype/textures/blue_concrete.png create mode 100644 prototype/textures/blue_concrete_powder.png create mode 100644 prototype/textures/blue_glazed_terracotta.png create mode 100644 prototype/textures/blue_ice.png create mode 100644 prototype/textures/blue_orchid.png create mode 100644 prototype/textures/blue_shulker_box.png create mode 100644 prototype/textures/blue_stained_glass.png create mode 100644 prototype/textures/blue_stained_glass_pane_top.png create mode 100644 prototype/textures/blue_terracotta.png create mode 100644 prototype/textures/blue_wool.png create mode 100644 prototype/textures/bone_block_side.png create mode 100644 prototype/textures/bone_block_top.png create mode 100644 prototype/textures/bookshelf.png create mode 100644 prototype/textures/brain_coral.png create mode 100644 prototype/textures/brain_coral_block.png create mode 100644 prototype/textures/brain_coral_fan.png create mode 100644 prototype/textures/brewing_stand.png create mode 100644 prototype/textures/brewing_stand_base.png create mode 100644 prototype/textures/bricks.png create mode 100644 prototype/textures/brown_candle.png create mode 100644 prototype/textures/brown_candle_lit.png create mode 100644 prototype/textures/brown_concrete.png create mode 100644 prototype/textures/brown_concrete_powder.png create mode 100644 prototype/textures/brown_glazed_terracotta.png create mode 100644 prototype/textures/brown_mushroom.png create mode 100644 prototype/textures/brown_mushroom_block.png create mode 100644 prototype/textures/brown_shulker_box.png create mode 100644 prototype/textures/brown_stained_glass.png create mode 100644 prototype/textures/brown_stained_glass_pane_top.png create mode 100644 prototype/textures/brown_terracotta.png create mode 100644 prototype/textures/brown_wool.png create mode 100644 prototype/textures/bubble_coral.png create mode 100644 prototype/textures/bubble_coral_block.png create mode 100644 prototype/textures/bubble_coral_fan.png create mode 100644 prototype/textures/budding_amethyst.png create mode 100644 prototype/textures/cactus_bottom.png create mode 100644 prototype/textures/cactus_side.png create mode 100644 prototype/textures/cactus_top.png create mode 100644 prototype/textures/cake_bottom.png create mode 100644 prototype/textures/cake_inner.png create mode 100644 prototype/textures/cake_side.png create mode 100644 prototype/textures/cake_top.png create mode 100644 prototype/textures/calcite.png create mode 100644 prototype/textures/calibrated_sculk_sensor_amethyst.png create mode 100644 prototype/textures/calibrated_sculk_sensor_input_side.png create mode 100644 prototype/textures/calibrated_sculk_sensor_top.png create mode 100644 prototype/textures/campfire_fire.png create mode 100644 prototype/textures/campfire_log.png create mode 100644 prototype/textures/campfire_log_lit.png create mode 100644 prototype/textures/candle.png create mode 100644 prototype/textures/candle_lit.png create mode 100644 prototype/textures/carrots_stage0.png create mode 100644 prototype/textures/carrots_stage1.png create mode 100644 prototype/textures/carrots_stage2.png create mode 100644 prototype/textures/carrots_stage3.png create mode 100644 prototype/textures/cartography_table_side1.png create mode 100644 prototype/textures/cartography_table_side2.png create mode 100644 prototype/textures/cartography_table_side3.png create mode 100644 prototype/textures/cartography_table_top.png create mode 100644 prototype/textures/carved_pumpkin.png create mode 100644 prototype/textures/cauldron_bottom.png create mode 100644 prototype/textures/cauldron_inner.png create mode 100644 prototype/textures/cauldron_side.png create mode 100644 prototype/textures/cauldron_top.png create mode 100644 prototype/textures/cave_vines.png create mode 100644 prototype/textures/cave_vines_lit.png create mode 100644 prototype/textures/cave_vines_plant.png create mode 100644 prototype/textures/cave_vines_plant_lit.png create mode 100644 prototype/textures/chain.png create mode 100644 prototype/textures/chain_command_block_back.png create mode 100644 prototype/textures/chain_command_block_conditional.png create mode 100644 prototype/textures/chain_command_block_front.png create mode 100644 prototype/textures/chain_command_block_side.png create mode 100644 prototype/textures/cherry_door_bottom.png create mode 100644 prototype/textures/cherry_door_top.png create mode 100644 prototype/textures/cherry_leaves.png create mode 100644 prototype/textures/cherry_log.png create mode 100644 prototype/textures/cherry_log_top.png create mode 100644 prototype/textures/cherry_planks.png create mode 100644 prototype/textures/cherry_sapling.png create mode 100644 prototype/textures/cherry_trapdoor.png create mode 100644 prototype/textures/chipped_anvil_top.png create mode 100644 prototype/textures/chiseled_bookshelf_empty.png create mode 100644 prototype/textures/chiseled_bookshelf_occupied.png create mode 100644 prototype/textures/chiseled_bookshelf_side.png create mode 100644 prototype/textures/chiseled_bookshelf_top.png create mode 100644 prototype/textures/chiseled_deepslate.png create mode 100644 prototype/textures/chiseled_nether_bricks.png create mode 100644 prototype/textures/chiseled_polished_blackstone.png create mode 100644 prototype/textures/chiseled_quartz_block.png create mode 100644 prototype/textures/chiseled_quartz_block_top.png create mode 100644 prototype/textures/chiseled_red_sandstone.png create mode 100644 prototype/textures/chiseled_sandstone.png create mode 100644 prototype/textures/chiseled_stone_bricks.png create mode 100644 prototype/textures/chorus_flower.png create mode 100644 prototype/textures/chorus_flower_dead.png create mode 100644 prototype/textures/chorus_plant.png create mode 100644 prototype/textures/clay.png create mode 100644 prototype/textures/coal_block.png create mode 100644 prototype/textures/coal_ore.png create mode 100644 prototype/textures/coarse_dirt.png create mode 100644 prototype/textures/cobbled_deepslate.png create mode 100644 prototype/textures/cobblestone.png create mode 100644 prototype/textures/cobweb.png create mode 100644 prototype/textures/cocoa_stage0.png create mode 100644 prototype/textures/cocoa_stage1.png create mode 100644 prototype/textures/cocoa_stage2.png create mode 100644 prototype/textures/command_block_back.png create mode 100644 prototype/textures/command_block_conditional.png create mode 100644 prototype/textures/command_block_front.png create mode 100644 prototype/textures/command_block_side.png create mode 100644 prototype/textures/comparator.png create mode 100644 prototype/textures/comparator_on.png create mode 100644 prototype/textures/composter_bottom.png create mode 100644 prototype/textures/composter_compost.png create mode 100644 prototype/textures/composter_ready.png create mode 100644 prototype/textures/composter_side.png create mode 100644 prototype/textures/composter_top.png create mode 100644 prototype/textures/conduit.png create mode 100644 prototype/textures/copper_block.png create mode 100644 prototype/textures/copper_ore.png create mode 100644 prototype/textures/cornflower.png create mode 100644 prototype/textures/cracked_deepslate_bricks.png create mode 100644 prototype/textures/cracked_deepslate_tiles.png create mode 100644 prototype/textures/cracked_nether_bricks.png create mode 100644 prototype/textures/cracked_polished_blackstone_bricks.png create mode 100644 prototype/textures/cracked_stone_bricks.png create mode 100644 prototype/textures/crafting_table_front.png create mode 100644 prototype/textures/crafting_table_side.png create mode 100644 prototype/textures/crafting_table_top.png create mode 100644 prototype/textures/crimson_door_bottom.png create mode 100644 prototype/textures/crimson_door_top.png create mode 100644 prototype/textures/crimson_fungus.png create mode 100644 prototype/textures/crimson_nylium.png create mode 100644 prototype/textures/crimson_nylium_side.png create mode 100644 prototype/textures/crimson_planks.png create mode 100644 prototype/textures/crimson_roots.png create mode 100644 prototype/textures/crimson_roots_pot.png create mode 100644 prototype/textures/crimson_stem.png create mode 100644 prototype/textures/crimson_stem_top.png create mode 100644 prototype/textures/crimson_trapdoor.png create mode 100644 prototype/textures/crying_obsidian.png create mode 100644 prototype/textures/cut_copper.png create mode 100644 prototype/textures/cut_red_sandstone.png create mode 100644 prototype/textures/cut_sandstone.png create mode 100644 prototype/textures/cyan_candle.png create mode 100644 prototype/textures/cyan_candle_lit.png create mode 100644 prototype/textures/cyan_concrete.png create mode 100644 prototype/textures/cyan_concrete_powder.png create mode 100644 prototype/textures/cyan_glazed_terracotta.png create mode 100644 prototype/textures/cyan_shulker_box.png create mode 100644 prototype/textures/cyan_stained_glass.png create mode 100644 prototype/textures/cyan_stained_glass_pane_top.png create mode 100644 prototype/textures/cyan_terracotta.png create mode 100644 prototype/textures/cyan_wool.png create mode 100644 prototype/textures/damaged_anvil_top.png create mode 100644 prototype/textures/dandelion.png create mode 100644 prototype/textures/dark_oak_door_bottom.png create mode 100644 prototype/textures/dark_oak_door_top.png create mode 100644 prototype/textures/dark_oak_leaves.png create mode 100644 prototype/textures/dark_oak_log.png create mode 100644 prototype/textures/dark_oak_log_top.png create mode 100644 prototype/textures/dark_oak_planks.png create mode 100644 prototype/textures/dark_oak_sapling.png create mode 100644 prototype/textures/dark_oak_trapdoor.png create mode 100644 prototype/textures/dark_prismarine.png create mode 100644 prototype/textures/daylight_detector_inverted_top.png create mode 100644 prototype/textures/daylight_detector_side.png create mode 100644 prototype/textures/daylight_detector_top.png create mode 100644 prototype/textures/dead_brain_coral.png create mode 100644 prototype/textures/dead_brain_coral_block.png create mode 100644 prototype/textures/dead_brain_coral_fan.png create mode 100644 prototype/textures/dead_bubble_coral.png create mode 100644 prototype/textures/dead_bubble_coral_block.png create mode 100644 prototype/textures/dead_bubble_coral_fan.png create mode 100644 prototype/textures/dead_bush.png create mode 100644 prototype/textures/dead_fire_coral.png create mode 100644 prototype/textures/dead_fire_coral_block.png create mode 100644 prototype/textures/dead_fire_coral_fan.png create mode 100644 prototype/textures/dead_horn_coral.png create mode 100644 prototype/textures/dead_horn_coral_block.png create mode 100644 prototype/textures/dead_horn_coral_fan.png create mode 100644 prototype/textures/dead_tube_coral.png create mode 100644 prototype/textures/dead_tube_coral_block.png create mode 100644 prototype/textures/dead_tube_coral_fan.png create mode 100644 prototype/textures/debug.png create mode 100644 prototype/textures/debug2.png create mode 100644 prototype/textures/deepslate.png create mode 100644 prototype/textures/deepslate_bricks.png create mode 100644 prototype/textures/deepslate_coal_ore.png create mode 100644 prototype/textures/deepslate_copper_ore.png create mode 100644 prototype/textures/deepslate_diamond_ore.png create mode 100644 prototype/textures/deepslate_emerald_ore.png create mode 100644 prototype/textures/deepslate_gold_ore.png create mode 100644 prototype/textures/deepslate_iron_ore.png create mode 100644 prototype/textures/deepslate_lapis_ore.png create mode 100644 prototype/textures/deepslate_redstone_ore.png create mode 100644 prototype/textures/deepslate_tiles.png create mode 100644 prototype/textures/deepslate_top.png create mode 100644 prototype/textures/destroy_stage_0.png create mode 100644 prototype/textures/destroy_stage_1.png create mode 100644 prototype/textures/destroy_stage_2.png create mode 100644 prototype/textures/destroy_stage_3.png create mode 100644 prototype/textures/destroy_stage_4.png create mode 100644 prototype/textures/destroy_stage_5.png create mode 100644 prototype/textures/destroy_stage_6.png create mode 100644 prototype/textures/destroy_stage_7.png create mode 100644 prototype/textures/destroy_stage_8.png create mode 100644 prototype/textures/destroy_stage_9.png create mode 100644 prototype/textures/detector_rail.png create mode 100644 prototype/textures/detector_rail_on.png create mode 100644 prototype/textures/diamond_block.png create mode 100644 prototype/textures/diamond_ore.png create mode 100644 prototype/textures/diorite.png create mode 100644 prototype/textures/dirt.png create mode 100644 prototype/textures/dirt_path_side.png create mode 100644 prototype/textures/dirt_path_top.png create mode 100644 prototype/textures/dispenser_front.png create mode 100644 prototype/textures/dispenser_front_vertical.png create mode 100644 prototype/textures/dragon_egg.png create mode 100644 prototype/textures/dried_kelp_bottom.png create mode 100644 prototype/textures/dried_kelp_side.png create mode 100644 prototype/textures/dried_kelp_top.png create mode 100644 prototype/textures/dripstone_block.png create mode 100644 prototype/textures/dropper_front.png create mode 100644 prototype/textures/dropper_front_vertical.png create mode 100644 prototype/textures/emerald_block.png create mode 100644 prototype/textures/emerald_ore.png create mode 100644 prototype/textures/enchanting_table_bottom.png create mode 100644 prototype/textures/enchanting_table_side.png create mode 100644 prototype/textures/enchanting_table_top.png create mode 100644 prototype/textures/end_portal_frame_eye.png create mode 100644 prototype/textures/end_portal_frame_side.png create mode 100644 prototype/textures/end_portal_frame_top.png create mode 100644 prototype/textures/end_rod.png create mode 100644 prototype/textures/end_stone.png create mode 100644 prototype/textures/end_stone_bricks.png create mode 100644 prototype/textures/exposed_copper.png create mode 100644 prototype/textures/exposed_cut_copper.png create mode 100644 prototype/textures/farmland.png create mode 100644 prototype/textures/farmland_moist.png create mode 100644 prototype/textures/fern.png create mode 100644 prototype/textures/fire_0.png create mode 100644 prototype/textures/fire_1.png create mode 100644 prototype/textures/fire_coral.png create mode 100644 prototype/textures/fire_coral_block.png create mode 100644 prototype/textures/fire_coral_fan.png create mode 100644 prototype/textures/fletching_table_front.png create mode 100644 prototype/textures/fletching_table_side.png create mode 100644 prototype/textures/fletching_table_top.png create mode 100644 prototype/textures/flower_pot.png create mode 100644 prototype/textures/flowering_azalea_leaves.png create mode 100644 prototype/textures/flowering_azalea_side.png create mode 100644 prototype/textures/flowering_azalea_top.png create mode 100644 prototype/textures/frogspawn.png create mode 100644 prototype/textures/frosted_ice_0.png create mode 100644 prototype/textures/frosted_ice_1.png create mode 100644 prototype/textures/frosted_ice_2.png create mode 100644 prototype/textures/frosted_ice_3.png create mode 100644 prototype/textures/furnace_front.png create mode 100644 prototype/textures/furnace_front_on.png create mode 100644 prototype/textures/furnace_side.png create mode 100644 prototype/textures/furnace_top.png create mode 100644 prototype/textures/gilded_blackstone.png create mode 100644 prototype/textures/glass.png create mode 100644 prototype/textures/glass_pane_top.png create mode 100644 prototype/textures/glow_item_frame.png create mode 100644 prototype/textures/glow_lichen.png create mode 100644 prototype/textures/glowstone.png create mode 100644 prototype/textures/gold_block.png create mode 100644 prototype/textures/gold_ore.png create mode 100644 prototype/textures/granite.png create mode 100644 prototype/textures/grass.png create mode 100644 prototype/textures/grass_block_side.png create mode 100644 prototype/textures/grass_block_side_overlay.png create mode 100644 prototype/textures/grass_block_snow.png create mode 100644 prototype/textures/grass_block_top.png create mode 100644 prototype/textures/gravel.png create mode 100644 prototype/textures/gray_candle.png create mode 100644 prototype/textures/gray_candle_lit.png create mode 100644 prototype/textures/gray_concrete.png create mode 100644 prototype/textures/gray_concrete_powder.png create mode 100644 prototype/textures/gray_glazed_terracotta.png create mode 100644 prototype/textures/gray_shulker_box.png create mode 100644 prototype/textures/gray_stained_glass.png create mode 100644 prototype/textures/gray_stained_glass_pane_top.png create mode 100644 prototype/textures/gray_terracotta.png create mode 100644 prototype/textures/gray_wool.png create mode 100644 prototype/textures/green_candle.png create mode 100644 prototype/textures/green_candle_lit.png create mode 100644 prototype/textures/green_concrete.png create mode 100644 prototype/textures/green_concrete_powder.png create mode 100644 prototype/textures/green_glazed_terracotta.png create mode 100644 prototype/textures/green_shulker_box.png create mode 100644 prototype/textures/green_stained_glass.png create mode 100644 prototype/textures/green_stained_glass_pane_top.png create mode 100644 prototype/textures/green_terracotta.png create mode 100644 prototype/textures/green_wool.png create mode 100644 prototype/textures/grindstone_pivot.png create mode 100644 prototype/textures/grindstone_round.png create mode 100644 prototype/textures/grindstone_side.png create mode 100644 prototype/textures/hanging_roots.png create mode 100644 prototype/textures/hay_block_side.png create mode 100644 prototype/textures/hay_block_top.png create mode 100644 prototype/textures/honey_block_bottom.png create mode 100644 prototype/textures/honey_block_side.png create mode 100644 prototype/textures/honey_block_top.png create mode 100644 prototype/textures/honeycomb_block.png create mode 100644 prototype/textures/hopper_inside.png create mode 100644 prototype/textures/hopper_outside.png create mode 100644 prototype/textures/hopper_top.png create mode 100644 prototype/textures/horn_coral.png create mode 100644 prototype/textures/horn_coral_block.png create mode 100644 prototype/textures/horn_coral_fan.png create mode 100644 prototype/textures/ice.png create mode 100644 prototype/textures/iron_bars.png create mode 100644 prototype/textures/iron_block.png create mode 100644 prototype/textures/iron_door_bottom.png create mode 100644 prototype/textures/iron_door_top.png create mode 100644 prototype/textures/iron_ore.png create mode 100644 prototype/textures/iron_trapdoor.png create mode 100644 prototype/textures/item_frame.png create mode 100644 prototype/textures/jack_o_lantern.png create mode 100644 prototype/textures/jigsaw_bottom.png create mode 100644 prototype/textures/jigsaw_lock.png create mode 100644 prototype/textures/jigsaw_side.png create mode 100644 prototype/textures/jigsaw_top.png create mode 100644 prototype/textures/jukebox_side.png create mode 100644 prototype/textures/jukebox_top.png create mode 100644 prototype/textures/jungle_door_bottom.png create mode 100644 prototype/textures/jungle_door_top.png create mode 100644 prototype/textures/jungle_leaves.png create mode 100644 prototype/textures/jungle_log.png create mode 100644 prototype/textures/jungle_log_top.png create mode 100644 prototype/textures/jungle_planks.png create mode 100644 prototype/textures/jungle_sapling.png create mode 100644 prototype/textures/jungle_trapdoor.png create mode 100644 prototype/textures/kelp.png create mode 100644 prototype/textures/kelp_plant.png create mode 100644 prototype/textures/ladder.png create mode 100644 prototype/textures/lantern.png create mode 100644 prototype/textures/lapis_block.png create mode 100644 prototype/textures/lapis_ore.png create mode 100644 prototype/textures/large_amethyst_bud.png create mode 100644 prototype/textures/large_fern_bottom.png create mode 100644 prototype/textures/large_fern_top.png create mode 100644 prototype/textures/lava_flow.png create mode 100644 prototype/textures/lava_still.png create mode 100644 prototype/textures/lectern_base.png create mode 100644 prototype/textures/lectern_front.png create mode 100644 prototype/textures/lectern_sides.png create mode 100644 prototype/textures/lectern_top.png create mode 100644 prototype/textures/lever.png create mode 100644 prototype/textures/light_blue_candle.png create mode 100644 prototype/textures/light_blue_candle_lit.png create mode 100644 prototype/textures/light_blue_concrete.png create mode 100644 prototype/textures/light_blue_concrete_powder.png create mode 100644 prototype/textures/light_blue_glazed_terracotta.png create mode 100644 prototype/textures/light_blue_shulker_box.png create mode 100644 prototype/textures/light_blue_stained_glass.png create mode 100644 prototype/textures/light_blue_stained_glass_pane_top.png create mode 100644 prototype/textures/light_blue_terracotta.png create mode 100644 prototype/textures/light_blue_wool.png create mode 100644 prototype/textures/light_gray_candle.png create mode 100644 prototype/textures/light_gray_candle_lit.png create mode 100644 prototype/textures/light_gray_concrete.png create mode 100644 prototype/textures/light_gray_concrete_powder.png create mode 100644 prototype/textures/light_gray_glazed_terracotta.png create mode 100644 prototype/textures/light_gray_shulker_box.png create mode 100644 prototype/textures/light_gray_stained_glass.png create mode 100644 prototype/textures/light_gray_stained_glass_pane_top.png create mode 100644 prototype/textures/light_gray_terracotta.png create mode 100644 prototype/textures/light_gray_wool.png create mode 100644 prototype/textures/lightning_rod.png create mode 100644 prototype/textures/lightning_rod_on.png create mode 100644 prototype/textures/lilac_bottom.png create mode 100644 prototype/textures/lilac_top.png create mode 100644 prototype/textures/lily_of_the_valley.png create mode 100644 prototype/textures/lily_pad.png create mode 100644 prototype/textures/lime_candle.png create mode 100644 prototype/textures/lime_candle_lit.png create mode 100644 prototype/textures/lime_concrete.png create mode 100644 prototype/textures/lime_concrete_powder.png create mode 100644 prototype/textures/lime_glazed_terracotta.png create mode 100644 prototype/textures/lime_shulker_box.png create mode 100644 prototype/textures/lime_stained_glass.png create mode 100644 prototype/textures/lime_stained_glass_pane_top.png create mode 100644 prototype/textures/lime_terracotta.png create mode 100644 prototype/textures/lime_wool.png create mode 100644 prototype/textures/lodestone_side.png create mode 100644 prototype/textures/lodestone_top.png create mode 100644 prototype/textures/loom_bottom.png create mode 100644 prototype/textures/loom_front.png create mode 100644 prototype/textures/loom_side.png create mode 100644 prototype/textures/loom_top.png create mode 100644 prototype/textures/magenta_candle.png create mode 100644 prototype/textures/magenta_candle_lit.png create mode 100644 prototype/textures/magenta_concrete.png create mode 100644 prototype/textures/magenta_concrete_powder.png create mode 100644 prototype/textures/magenta_glazed_terracotta.png create mode 100644 prototype/textures/magenta_shulker_box.png create mode 100644 prototype/textures/magenta_stained_glass.png create mode 100644 prototype/textures/magenta_stained_glass_pane_top.png create mode 100644 prototype/textures/magenta_terracotta.png create mode 100644 prototype/textures/magenta_wool.png create mode 100644 prototype/textures/magma.png create mode 100644 prototype/textures/mangrove_door_bottom.png create mode 100644 prototype/textures/mangrove_door_top.png create mode 100644 prototype/textures/mangrove_leaves.png create mode 100644 prototype/textures/mangrove_log.png create mode 100644 prototype/textures/mangrove_log_top.png create mode 100644 prototype/textures/mangrove_planks.png create mode 100644 prototype/textures/mangrove_propagule.png create mode 100644 prototype/textures/mangrove_propagule_hanging.png create mode 100644 prototype/textures/mangrove_roots_side.png create mode 100644 prototype/textures/mangrove_roots_top.png create mode 100644 prototype/textures/mangrove_trapdoor.png create mode 100644 prototype/textures/medium_amethyst_bud.png create mode 100644 prototype/textures/melon_side.png create mode 100644 prototype/textures/melon_stem.png create mode 100644 prototype/textures/melon_top.png create mode 100644 prototype/textures/moss_block.png create mode 100644 prototype/textures/mossy_cobblestone.png create mode 100644 prototype/textures/mossy_stone_bricks.png create mode 100644 prototype/textures/mud.png create mode 100644 prototype/textures/mud_bricks.png create mode 100644 prototype/textures/muddy_mangrove_roots_side.png create mode 100644 prototype/textures/muddy_mangrove_roots_top.png create mode 100644 prototype/textures/mushroom_block_inside.png create mode 100644 prototype/textures/mushroom_stem.png create mode 100644 prototype/textures/mycelium_side.png create mode 100644 prototype/textures/mycelium_top.png create mode 100644 prototype/textures/nether_bricks.png create mode 100644 prototype/textures/nether_gold_ore.png create mode 100644 prototype/textures/nether_portal.png create mode 100644 prototype/textures/nether_quartz_ore.png create mode 100644 prototype/textures/nether_sprouts.png create mode 100644 prototype/textures/nether_wart_block.png create mode 100644 prototype/textures/nether_wart_stage0.png create mode 100644 prototype/textures/nether_wart_stage1.png create mode 100644 prototype/textures/nether_wart_stage2.png create mode 100644 prototype/textures/netherite_block.png create mode 100644 prototype/textures/netherrack.png create mode 100644 prototype/textures/note_block.png create mode 100644 prototype/textures/oak_door_bottom.png create mode 100644 prototype/textures/oak_door_top.png create mode 100644 prototype/textures/oak_leaves.png create mode 100644 prototype/textures/oak_log.png create mode 100644 prototype/textures/oak_log_top.png create mode 100644 prototype/textures/oak_planks.png create mode 100644 prototype/textures/oak_sapling.png create mode 100644 prototype/textures/oak_trapdoor.png create mode 100644 prototype/textures/observer_back.png create mode 100644 prototype/textures/observer_back_on.png create mode 100644 prototype/textures/observer_front.png create mode 100644 prototype/textures/observer_side.png create mode 100644 prototype/textures/observer_top.png create mode 100644 prototype/textures/obsidian.png create mode 100644 prototype/textures/ochre_froglight_side.png create mode 100644 prototype/textures/ochre_froglight_top.png create mode 100644 prototype/textures/orange_candle.png create mode 100644 prototype/textures/orange_candle_lit.png create mode 100644 prototype/textures/orange_concrete.png create mode 100644 prototype/textures/orange_concrete_powder.png create mode 100644 prototype/textures/orange_glazed_terracotta.png create mode 100644 prototype/textures/orange_shulker_box.png create mode 100644 prototype/textures/orange_stained_glass.png create mode 100644 prototype/textures/orange_stained_glass_pane_top.png create mode 100644 prototype/textures/orange_terracotta.png create mode 100644 prototype/textures/orange_tulip.png create mode 100644 prototype/textures/orange_wool.png create mode 100644 prototype/textures/oxeye_daisy.png create mode 100644 prototype/textures/oxidized_copper.png create mode 100644 prototype/textures/oxidized_cut_copper.png create mode 100644 prototype/textures/packed_ice.png create mode 100644 prototype/textures/packed_mud.png create mode 100644 prototype/textures/pearlescent_froglight_side.png create mode 100644 prototype/textures/pearlescent_froglight_top.png create mode 100644 prototype/textures/peony_bottom.png create mode 100644 prototype/textures/peony_top.png create mode 100644 prototype/textures/pink_candle.png create mode 100644 prototype/textures/pink_candle_lit.png create mode 100644 prototype/textures/pink_concrete.png create mode 100644 prototype/textures/pink_concrete_powder.png create mode 100644 prototype/textures/pink_glazed_terracotta.png create mode 100644 prototype/textures/pink_petals.png create mode 100644 prototype/textures/pink_petals_stem.png create mode 100644 prototype/textures/pink_shulker_box.png create mode 100644 prototype/textures/pink_stained_glass.png create mode 100644 prototype/textures/pink_stained_glass_pane_top.png create mode 100644 prototype/textures/pink_terracotta.png create mode 100644 prototype/textures/pink_tulip.png create mode 100644 prototype/textures/pink_wool.png create mode 100644 prototype/textures/piston_bottom.png create mode 100644 prototype/textures/piston_inner.png create mode 100644 prototype/textures/piston_side.png create mode 100644 prototype/textures/piston_top.png create mode 100644 prototype/textures/piston_top_sticky.png create mode 100644 prototype/textures/pitcher_crop_bottom.png create mode 100644 prototype/textures/pitcher_crop_bottom_stage_1.png create mode 100644 prototype/textures/pitcher_crop_bottom_stage_2.png create mode 100644 prototype/textures/pitcher_crop_bottom_stage_3.png create mode 100644 prototype/textures/pitcher_crop_bottom_stage_4.png create mode 100644 prototype/textures/pitcher_crop_side.png create mode 100644 prototype/textures/pitcher_crop_top.png create mode 100644 prototype/textures/pitcher_crop_top_stage_3.png create mode 100644 prototype/textures/pitcher_crop_top_stage_4.png create mode 100644 prototype/textures/podzol_side.png create mode 100644 prototype/textures/podzol_top.png create mode 100644 prototype/textures/pointed_dripstone_down_base.png create mode 100644 prototype/textures/pointed_dripstone_down_frustum.png create mode 100644 prototype/textures/pointed_dripstone_down_middle.png create mode 100644 prototype/textures/pointed_dripstone_down_tip.png create mode 100644 prototype/textures/pointed_dripstone_down_tip_merge.png create mode 100644 prototype/textures/pointed_dripstone_up_base.png create mode 100644 prototype/textures/pointed_dripstone_up_frustum.png create mode 100644 prototype/textures/pointed_dripstone_up_middle.png create mode 100644 prototype/textures/pointed_dripstone_up_tip.png create mode 100644 prototype/textures/pointed_dripstone_up_tip_merge.png create mode 100644 prototype/textures/polished_andesite.png create mode 100644 prototype/textures/polished_basalt_side.png create mode 100644 prototype/textures/polished_basalt_top.png create mode 100644 prototype/textures/polished_blackstone.png create mode 100644 prototype/textures/polished_blackstone_bricks.png create mode 100644 prototype/textures/polished_deepslate.png create mode 100644 prototype/textures/polished_diorite.png create mode 100644 prototype/textures/polished_granite.png create mode 100644 prototype/textures/poppy.png create mode 100644 prototype/textures/potatoes_stage0.png create mode 100644 prototype/textures/potatoes_stage1.png create mode 100644 prototype/textures/potatoes_stage2.png create mode 100644 prototype/textures/potatoes_stage3.png create mode 100644 prototype/textures/potted_azalea_bush_plant.png create mode 100644 prototype/textures/potted_azalea_bush_side.png create mode 100644 prototype/textures/potted_azalea_bush_top.png create mode 100644 prototype/textures/potted_flowering_azalea_bush_plant.png create mode 100644 prototype/textures/potted_flowering_azalea_bush_side.png create mode 100644 prototype/textures/potted_flowering_azalea_bush_top.png create mode 100644 prototype/textures/powder_snow.png create mode 100644 prototype/textures/powered_rail.png create mode 100644 prototype/textures/powered_rail_on.png create mode 100644 prototype/textures/prismarine.png create mode 100644 prototype/textures/prismarine_bricks.png create mode 100644 prototype/textures/pumpkin_side.png create mode 100644 prototype/textures/pumpkin_stem.png create mode 100644 prototype/textures/pumpkin_top.png create mode 100644 prototype/textures/purple_candle.png create mode 100644 prototype/textures/purple_candle_lit.png create mode 100644 prototype/textures/purple_concrete.png create mode 100644 prototype/textures/purple_concrete_powder.png create mode 100644 prototype/textures/purple_glazed_terracotta.png create mode 100644 prototype/textures/purple_shulker_box.png create mode 100644 prototype/textures/purple_stained_glass.png create mode 100644 prototype/textures/purple_stained_glass_pane_top.png create mode 100644 prototype/textures/purple_terracotta.png create mode 100644 prototype/textures/purple_wool.png create mode 100644 prototype/textures/purpur_block.png create mode 100644 prototype/textures/purpur_pillar.png create mode 100644 prototype/textures/purpur_pillar_top.png create mode 100644 prototype/textures/quartz_block_bottom.png create mode 100644 prototype/textures/quartz_block_side.png create mode 100644 prototype/textures/quartz_block_top.png create mode 100644 prototype/textures/quartz_bricks.png create mode 100644 prototype/textures/quartz_pillar.png create mode 100644 prototype/textures/quartz_pillar_top.png create mode 100644 prototype/textures/rail.png create mode 100644 prototype/textures/rail_corner.png create mode 100644 prototype/textures/raw_copper_block.png create mode 100644 prototype/textures/raw_gold_block.png create mode 100644 prototype/textures/raw_iron_block.png create mode 100644 prototype/textures/red_candle.png create mode 100644 prototype/textures/red_candle_lit.png create mode 100644 prototype/textures/red_concrete.png create mode 100644 prototype/textures/red_concrete_powder.png create mode 100644 prototype/textures/red_glazed_terracotta.png create mode 100644 prototype/textures/red_mushroom.png create mode 100644 prototype/textures/red_mushroom_block.png create mode 100644 prototype/textures/red_nether_bricks.png create mode 100644 prototype/textures/red_sand.png create mode 100644 prototype/textures/red_sandstone.png create mode 100644 prototype/textures/red_sandstone_bottom.png create mode 100644 prototype/textures/red_sandstone_top.png create mode 100644 prototype/textures/red_shulker_box.png create mode 100644 prototype/textures/red_stained_glass.png create mode 100644 prototype/textures/red_stained_glass_pane_top.png create mode 100644 prototype/textures/red_terracotta.png create mode 100644 prototype/textures/red_tulip.png create mode 100644 prototype/textures/red_wool.png create mode 100644 prototype/textures/redstone_block.png create mode 100644 prototype/textures/redstone_dust_dot.png create mode 100644 prototype/textures/redstone_dust_line0.png create mode 100644 prototype/textures/redstone_dust_line1.png create mode 100644 prototype/textures/redstone_dust_overlay.png create mode 100644 prototype/textures/redstone_lamp.png create mode 100644 prototype/textures/redstone_lamp_on.png create mode 100644 prototype/textures/redstone_ore.png create mode 100644 prototype/textures/redstone_torch.png create mode 100644 prototype/textures/redstone_torch_off.png create mode 100644 prototype/textures/reinforced_deepslate_bottom.png create mode 100644 prototype/textures/reinforced_deepslate_side.png create mode 100644 prototype/textures/reinforced_deepslate_top.png create mode 100644 prototype/textures/repeater.png create mode 100644 prototype/textures/repeater_on.png create mode 100644 prototype/textures/repeating_command_block_back.png create mode 100644 prototype/textures/repeating_command_block_conditional.png create mode 100644 prototype/textures/repeating_command_block_front.png create mode 100644 prototype/textures/repeating_command_block_side.png create mode 100644 prototype/textures/respawn_anchor_bottom.png create mode 100644 prototype/textures/respawn_anchor_side0.png create mode 100644 prototype/textures/respawn_anchor_side1.png create mode 100644 prototype/textures/respawn_anchor_side2.png create mode 100644 prototype/textures/respawn_anchor_side3.png create mode 100644 prototype/textures/respawn_anchor_side4.png create mode 100644 prototype/textures/respawn_anchor_top.png create mode 100644 prototype/textures/respawn_anchor_top_off.png create mode 100644 prototype/textures/rooted_dirt.png create mode 100644 prototype/textures/rose_bush_bottom.png create mode 100644 prototype/textures/rose_bush_top.png create mode 100644 prototype/textures/sand.png create mode 100644 prototype/textures/sandstone.png create mode 100644 prototype/textures/sandstone_bottom.png create mode 100644 prototype/textures/sandstone_top.png create mode 100644 prototype/textures/scaffolding_bottom.png create mode 100644 prototype/textures/scaffolding_side.png create mode 100644 prototype/textures/scaffolding_top.png create mode 100644 prototype/textures/sculk.png create mode 100644 prototype/textures/sculk_catalyst_bottom.png create mode 100644 prototype/textures/sculk_catalyst_side.png create mode 100644 prototype/textures/sculk_catalyst_side_bloom.png create mode 100644 prototype/textures/sculk_catalyst_top.png create mode 100644 prototype/textures/sculk_catalyst_top_bloom.png create mode 100644 prototype/textures/sculk_sensor_bottom.png create mode 100644 prototype/textures/sculk_sensor_side.png create mode 100644 prototype/textures/sculk_sensor_tendril_active.png create mode 100644 prototype/textures/sculk_sensor_tendril_inactive.png create mode 100644 prototype/textures/sculk_sensor_top.png create mode 100644 prototype/textures/sculk_shrieker_bottom.png create mode 100644 prototype/textures/sculk_shrieker_can_summon_inner_top.png create mode 100644 prototype/textures/sculk_shrieker_inner_top.png create mode 100644 prototype/textures/sculk_shrieker_side.png create mode 100644 prototype/textures/sculk_shrieker_top.png create mode 100644 prototype/textures/sculk_vein.png create mode 100644 prototype/textures/sea_lantern.png create mode 100644 prototype/textures/sea_pickle.png create mode 100644 prototype/textures/seagrass.png create mode 100644 prototype/textures/shroomlight.png create mode 100644 prototype/textures/shulker_box.png create mode 100644 prototype/textures/slime_block.png create mode 100644 prototype/textures/small_amethyst_bud.png create mode 100644 prototype/textures/small_dripleaf_side.png create mode 100644 prototype/textures/small_dripleaf_stem_bottom.png create mode 100644 prototype/textures/small_dripleaf_stem_top.png create mode 100644 prototype/textures/small_dripleaf_top.png create mode 100644 prototype/textures/smithing_table_bottom.png create mode 100644 prototype/textures/smithing_table_front.png create mode 100644 prototype/textures/smithing_table_side.png create mode 100644 prototype/textures/smithing_table_top.png create mode 100644 prototype/textures/smoker_bottom.png create mode 100644 prototype/textures/smoker_front.png create mode 100644 prototype/textures/smoker_front_on.png create mode 100644 prototype/textures/smoker_side.png create mode 100644 prototype/textures/smoker_top.png create mode 100644 prototype/textures/smooth_basalt.png create mode 100644 prototype/textures/smooth_stone.png create mode 100644 prototype/textures/smooth_stone_slab_side.png create mode 100644 prototype/textures/sniffer_egg_not_cracked_bottom.png create mode 100644 prototype/textures/sniffer_egg_not_cracked_east.png create mode 100644 prototype/textures/sniffer_egg_not_cracked_north.png create mode 100644 prototype/textures/sniffer_egg_not_cracked_south.png create mode 100644 prototype/textures/sniffer_egg_not_cracked_top.png create mode 100644 prototype/textures/sniffer_egg_not_cracked_west.png create mode 100644 prototype/textures/sniffer_egg_slightly_cracked_bottom.png create mode 100644 prototype/textures/sniffer_egg_slightly_cracked_east.png create mode 100644 prototype/textures/sniffer_egg_slightly_cracked_north.png create mode 100644 prototype/textures/sniffer_egg_slightly_cracked_south.png create mode 100644 prototype/textures/sniffer_egg_slightly_cracked_top.png create mode 100644 prototype/textures/sniffer_egg_slightly_cracked_west.png create mode 100644 prototype/textures/sniffer_egg_very_cracked_bottom.png create mode 100644 prototype/textures/sniffer_egg_very_cracked_east.png create mode 100644 prototype/textures/sniffer_egg_very_cracked_north.png create mode 100644 prototype/textures/sniffer_egg_very_cracked_south.png create mode 100644 prototype/textures/sniffer_egg_very_cracked_top.png create mode 100644 prototype/textures/sniffer_egg_very_cracked_west.png create mode 100644 prototype/textures/snow.png create mode 100644 prototype/textures/soul_campfire_fire.png create mode 100644 prototype/textures/soul_campfire_log_lit.png create mode 100644 prototype/textures/soul_fire_0.png create mode 100644 prototype/textures/soul_fire_1.png create mode 100644 prototype/textures/soul_lantern.png create mode 100644 prototype/textures/soul_sand.png create mode 100644 prototype/textures/soul_soil.png create mode 100644 prototype/textures/soul_torch.png create mode 100644 prototype/textures/spawner.png create mode 100644 prototype/textures/sponge.png create mode 100644 prototype/textures/spore_blossom.png create mode 100644 prototype/textures/spore_blossom_base.png create mode 100644 prototype/textures/spruce_door_bottom.png create mode 100644 prototype/textures/spruce_door_top.png create mode 100644 prototype/textures/spruce_leaves.png create mode 100644 prototype/textures/spruce_log.png create mode 100644 prototype/textures/spruce_log_top.png create mode 100644 prototype/textures/spruce_planks.png create mode 100644 prototype/textures/spruce_sapling.png create mode 100644 prototype/textures/spruce_trapdoor.png create mode 100644 prototype/textures/stone.png create mode 100644 prototype/textures/stone_bricks.png create mode 100644 prototype/textures/stonecutter_bottom.png create mode 100644 prototype/textures/stonecutter_saw.png create mode 100644 prototype/textures/stonecutter_side.png create mode 100644 prototype/textures/stonecutter_top.png create mode 100644 prototype/textures/stripped_acacia_log.png create mode 100644 prototype/textures/stripped_acacia_log_top.png create mode 100644 prototype/textures/stripped_bamboo_block.png create mode 100644 prototype/textures/stripped_bamboo_block_top.png create mode 100644 prototype/textures/stripped_birch_log.png create mode 100644 prototype/textures/stripped_birch_log_top.png create mode 100644 prototype/textures/stripped_cherry_log.png create mode 100644 prototype/textures/stripped_cherry_log_top.png create mode 100644 prototype/textures/stripped_crimson_stem.png create mode 100644 prototype/textures/stripped_crimson_stem_top.png create mode 100644 prototype/textures/stripped_dark_oak_log.png create mode 100644 prototype/textures/stripped_dark_oak_log_top.png create mode 100644 prototype/textures/stripped_jungle_log.png create mode 100644 prototype/textures/stripped_jungle_log_top.png create mode 100644 prototype/textures/stripped_mangrove_log.png create mode 100644 prototype/textures/stripped_mangrove_log_top.png create mode 100644 prototype/textures/stripped_oak_log.png create mode 100644 prototype/textures/stripped_oak_log_top.png create mode 100644 prototype/textures/stripped_spruce_log.png create mode 100644 prototype/textures/stripped_spruce_log_top.png create mode 100644 prototype/textures/stripped_warped_stem.png create mode 100644 prototype/textures/stripped_warped_stem_top.png create mode 100644 prototype/textures/structure_block.png create mode 100644 prototype/textures/structure_block_corner.png create mode 100644 prototype/textures/structure_block_data.png create mode 100644 prototype/textures/structure_block_load.png create mode 100644 prototype/textures/structure_block_save.png create mode 100644 prototype/textures/sugar_cane.png create mode 100644 prototype/textures/sunflower_back.png create mode 100644 prototype/textures/sunflower_bottom.png create mode 100644 prototype/textures/sunflower_front.png create mode 100644 prototype/textures/sunflower_top.png create mode 100644 prototype/textures/suspicious_gravel_0.png create mode 100644 prototype/textures/suspicious_gravel_1.png create mode 100644 prototype/textures/suspicious_gravel_2.png create mode 100644 prototype/textures/suspicious_gravel_3.png create mode 100644 prototype/textures/suspicious_sand_0.png create mode 100644 prototype/textures/suspicious_sand_1.png create mode 100644 prototype/textures/suspicious_sand_2.png create mode 100644 prototype/textures/suspicious_sand_3.png create mode 100644 prototype/textures/sweet_berry_bush_stage0.png create mode 100644 prototype/textures/sweet_berry_bush_stage1.png create mode 100644 prototype/textures/sweet_berry_bush_stage2.png create mode 100644 prototype/textures/sweet_berry_bush_stage3.png create mode 100644 prototype/textures/tall_grass_bottom.png create mode 100644 prototype/textures/tall_grass_top.png create mode 100644 prototype/textures/tall_seagrass_bottom.png create mode 100644 prototype/textures/tall_seagrass_top.png create mode 100644 prototype/textures/target_side.png create mode 100644 prototype/textures/target_top.png create mode 100644 prototype/textures/terracotta.png create mode 100644 prototype/textures/tinted_glass.png create mode 100644 prototype/textures/tnt_bottom.png create mode 100644 prototype/textures/tnt_side.png create mode 100644 prototype/textures/tnt_top.png create mode 100644 prototype/textures/torch.png create mode 100644 prototype/textures/torchflower.png create mode 100644 prototype/textures/torchflower_crop_stage0.png create mode 100644 prototype/textures/torchflower_crop_stage1.png create mode 100644 prototype/textures/tripwire.png create mode 100644 prototype/textures/tripwire_hook.png create mode 100644 prototype/textures/tube_coral.png create mode 100644 prototype/textures/tube_coral_block.png create mode 100644 prototype/textures/tube_coral_fan.png create mode 100644 prototype/textures/tuff.png create mode 100644 prototype/textures/turtle_egg.png create mode 100644 prototype/textures/turtle_egg_slightly_cracked.png create mode 100644 prototype/textures/turtle_egg_very_cracked.png create mode 100644 prototype/textures/twisting_vines.png create mode 100644 prototype/textures/twisting_vines_plant.png create mode 100644 prototype/textures/verdant_froglight_side.png create mode 100644 prototype/textures/verdant_froglight_top.png create mode 100644 prototype/textures/vine.png create mode 100644 prototype/textures/warped_door_bottom.png create mode 100644 prototype/textures/warped_door_top.png create mode 100644 prototype/textures/warped_fungus.png create mode 100644 prototype/textures/warped_nylium.png create mode 100644 prototype/textures/warped_nylium_side.png create mode 100644 prototype/textures/warped_planks.png create mode 100644 prototype/textures/warped_roots.png create mode 100644 prototype/textures/warped_roots_pot.png create mode 100644 prototype/textures/warped_stem.png create mode 100644 prototype/textures/warped_stem_top.png create mode 100644 prototype/textures/warped_trapdoor.png create mode 100644 prototype/textures/warped_wart_block.png create mode 100644 prototype/textures/water_flow.png create mode 100644 prototype/textures/water_overlay.png create mode 100644 prototype/textures/water_still.png create mode 100644 prototype/textures/weathered_copper.png create mode 100644 prototype/textures/weathered_cut_copper.png create mode 100644 prototype/textures/weeping_vines.png create mode 100644 prototype/textures/weeping_vines_plant.png create mode 100644 prototype/textures/wet_sponge.png create mode 100644 prototype/textures/wheat_stage0.png create mode 100644 prototype/textures/wheat_stage1.png create mode 100644 prototype/textures/wheat_stage2.png create mode 100644 prototype/textures/wheat_stage3.png create mode 100644 prototype/textures/wheat_stage4.png create mode 100644 prototype/textures/wheat_stage5.png create mode 100644 prototype/textures/wheat_stage6.png create mode 100644 prototype/textures/wheat_stage7.png create mode 100644 prototype/textures/white_candle.png create mode 100644 prototype/textures/white_candle_lit.png create mode 100644 prototype/textures/white_concrete.png create mode 100644 prototype/textures/white_concrete_powder.png create mode 100644 prototype/textures/white_glazed_terracotta.png create mode 100644 prototype/textures/white_shulker_box.png create mode 100644 prototype/textures/white_stained_glass.png create mode 100644 prototype/textures/white_stained_glass_pane_top.png create mode 100644 prototype/textures/white_terracotta.png create mode 100644 prototype/textures/white_tulip.png create mode 100644 prototype/textures/white_wool.png create mode 100644 prototype/textures/wither_rose.png create mode 100644 prototype/textures/yellow_candle.png create mode 100644 prototype/textures/yellow_candle_lit.png create mode 100644 prototype/textures/yellow_concrete.png create mode 100644 prototype/textures/yellow_concrete_powder.png create mode 100644 prototype/textures/yellow_glazed_terracotta.png create mode 100644 prototype/textures/yellow_shulker_box.png create mode 100644 prototype/textures/yellow_stained_glass.png create mode 100644 prototype/textures/yellow_stained_glass_pane_top.png create mode 100644 prototype/textures/yellow_terracotta.png create mode 100644 prototype/textures/yellow_wool.png create mode 100644 prototype/voxel-world.html create mode 100644 server/cmd/ai-service/main.go diff --git a/.gitignore b/.gitignore index fdcc3b0..949a4ec 100644 --- a/.gitignore +++ b/.gitignore @@ -35,10 +35,10 @@ client/Assets/Plugins/Editor/JetBrains* .vs/ .idea/ -# Autogenerated solution & project files -*.csproj -*.unityproj -*.sln +# Autogenerated solution & project files (Unity only) +client/*.csproj +client/*.unityproj +client/*.sln *.suo *.tmp *.user @@ -51,6 +51,12 @@ client/Assets/Plugins/Editor/JetBrains* *.opendb *.VC.db +# .NET build artifacts +**/bin/ +**/obj/ +launcher/PCL-CE/**/bin/ +launcher/PCL-CE/**/obj/ + # Unity meta for generated *.pidb.meta *.pdb.meta @@ -69,5 +75,10 @@ sysinfo.txt Thumbs.db desktop.ini +# ===================== .NET SDK (local install) ===================== +.dotnet/ +.nuget/ +.userdata/ + # ===================== Docker ===================== docker-compose.override.yml diff --git a/Makefile b/Makefile index 14e70b2..e3ad050 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: dev build-all run-auth run-economy run-blueprint run-match run-social run-relay tidy lint test +.PHONY: dev build-all run-auth run-economy run-blueprint run-match run-social run-relay run-ai tidy lint test # 启动开发环境基础设施 dev: @@ -30,6 +30,9 @@ run-social: run-relay: cd server && go run ./cmd/relay-server +run-ai: + cd server && go run ./cmd/ai-service + # 后端:工具 tidy: cd server && go mod tidy diff --git a/client/Assets/Scripts/RedCircuit.AIAssistant/AIActionExecutor.cs b/client/Assets/Scripts/RedCircuit.AIAssistant/AIActionExecutor.cs new file mode 100644 index 0000000..a874b26 --- /dev/null +++ b/client/Assets/Scripts/RedCircuit.AIAssistant/AIActionExecutor.cs @@ -0,0 +1,140 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace RedCircuit.AIAssistant +{ + /// + /// 操作执行器,将 AI 操作指令转换为游戏内动作。 + /// 所有操作必须经用户确认后才执行,支持撤销。 + /// + public class AIActionExecutor : MonoBehaviour + { + /// 待确认的操作队列 + private readonly Queue _pendingQueue = new(); + + /// 已执行的操作批次 (用于撤销) + private readonly Stack _executedBatches = new(); + + /// 单次操作元件上限 + private const int MaxActionsPerBatch = 20; + + /// 将 AI 操作加入待确认队列 + public void QueueActions(List actions) + { + if (actions.Count > MaxActionsPerBatch) + { + Debug.LogWarning($"[AIAction] 操作数 {actions.Count} 超过单批上限 {MaxActionsPerBatch},将截断"); + actions = actions.GetRange(0, MaxActionsPerBatch); + } + + foreach (var action in actions) + { + _pendingQueue.Enqueue(action); + } + + // TODO: 在画布上预览待执行操作 (半透明高亮) + PreviewActions(actions); + } + + /// 执行队列中所有待确认的操作 + public void ExecuteQueuedActions() + { + if (_pendingQueue.Count == 0) return; + + // 记录操作前快照 (用于撤销) + var batch = new ActionBatch(); + batch.SnapshotBefore = CaptureCanvasSnapshot(); + + while (_pendingQueue.TryDequeue(out var action)) + { + ExecuteAction(action); + batch.Actions.Add(action); + } + + batch.SnapshotAfter = CaptureCanvasSnapshot(); + _executedBatches.Push(batch); + + Debug.Log($"[AIAction] 已执行 {batch.Actions.Count} 个操作"); + ClearPreviews(); + } + + /// 取消所有待确认的操作 + public void CancelQueuedActions() + { + var count = _pendingQueue.Count; + _pendingQueue.Clear(); + ClearPreviews(); + Debug.Log($"[AIAction] 已取消 {count} 个待确认操作"); + } + + /// 撤销上一次 AI 操作批次 + public void UndoLastBatch() + { + if (!_executedBatches.TryPop(out var batch)) + { + Debug.LogWarning("[AIAction] 没有可撤销的 AI 操作"); + return; + } + + // 恢复操作前快照 + RestoreCanvasSnapshot(batch.SnapshotBefore); + Debug.Log($"[AIAction] 已撤销 {batch.Actions.Count} 个操作"); + } + + private void ExecuteAction(AIAction action) + { + switch (action.Type) + { + case ActionType.Place: + Debug.Log($"[AIAction] 放置 {action.Component} 于 ({action.X},{action.Y}) 旋转={action.Rotation}"); + // TODO: 调用 PlacementController.PlaceComponent() + break; + + case ActionType.Delete: + Debug.Log($"[AIAction] 删除 ({action.X},{action.Y})"); + // TODO: 调用 PlacementController.DeleteComponent() + break; + + case ActionType.Move: + Debug.Log($"[AIAction] 移动 ({action.FromX},{action.FromY}) -> ({action.X},{action.Y})"); + // TODO: 调用 PlacementController.MoveComponent() + break; + + case ActionType.Rotate: + Debug.Log($"[AIAction] 旋转 ({action.X},{action.Y}) -> {action.Rotation}"); + // TODO: 调用 PlacementController.RotateComponent() + break; + + case ActionType.Wire: + Debug.Log($"[AIAction] 连线 ({action.FromX},{action.FromY}) -> ({action.X},{action.Y})"); + // TODO: 调用 PlacementController.PlaceWire() + break; + } + } + + private void PreviewActions(List actions) + { + // TODO: 在画布上以半透明预览所有待执行操作 + foreach (var action in actions) + { + // 创建预览 Ghost 对象 + } + } + + private void ClearPreviews() + { + // TODO: 清除所有预览 Ghost 对象 + } + + private string CaptureCanvasSnapshot() + { + // TODO: 序列化当前画布状态为 JSON + return "{}"; + } + + private void RestoreCanvasSnapshot(string snapshot) + { + // TODO: 从 JSON 快照恢复画布状态 + } + } +} diff --git a/client/Assets/Scripts/RedCircuit.AIAssistant/AIAssistantManager.cs b/client/Assets/Scripts/RedCircuit.AIAssistant/AIAssistantManager.cs new file mode 100644 index 0000000..4c016a7 --- /dev/null +++ b/client/Assets/Scripts/RedCircuit.AIAssistant/AIAssistantManager.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEngine; + +namespace RedCircuit.AIAssistant +{ + /// + /// AI 助搭核心协调器,管理 AI 会话生命周期,协调各子系统。 + /// + public class AIAssistantManager : MonoBehaviour + { + public static AIAssistantManager Instance { get; private set; } + + /// 当前会话 ID + public string SessionId { get; private set; } = Guid.NewGuid().ToString("N")[..16]; + + /// AI 是否就绪 + public bool IsReady { get; private set; } + + /// 聊天历史记录 + public List History { get; } = new(); + + private AIChatController _chatController; + private AICircuitAdvisor _advisor; + private AIActionExecutor _executor; + private AIContextProvider _contextProvider; + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + } + + private void Start() + { + _chatController = GetComponent() ?? gameObject.AddComponent(); + _advisor = GetComponent() ?? gameObject.AddComponent(); + _executor = GetComponent() ?? gameObject.AddComponent(); + _contextProvider = GetComponent() ?? gameObject.AddComponent(); + + IsReady = true; + Debug.Log("[AIAssistant] Manager initialized"); + } + + /// + /// 处理用户输入的消息。 + /// + public async void HandleUserMessage(string message) + { + if (!IsReady) + { + _chatController.AppendSystemMessage("AI 助手尚未就绪,请稍候..."); + return; + } + + // 记录用户消息 + History.Add(new ChatMessage { Role = MessageRole.User, Content = message, Timestamp = DateTime.Now }); + _chatController.AppendUserMessage(message); + + // 采集上下文 + var context = _contextProvider.CollectContext(); + + // 发送到服务端 (TODO: 实现网络请求) + var response = await RequestAIChat(message, context); + + // 处理响应 + ProcessAIResponse(response); + } + + private async Task RequestAIChat(string message, GameContext context) + { + // TODO: 调用 ai-service POST /api/ai/chat + // 使用 SSE 流式接收响应 + await Task.Delay(100); // 模拟网络延迟 + return new AIResponse + { + Type = ResponseType.Text, + Content = "AI 助搭功能正在开发中,敬请期待!", + Actions = new List(), + RequiresConfirmation = false + }; + } + + private void ProcessAIResponse(AIResponse response) + { + // 记录 AI 消息 + History.Add(new ChatMessage { Role = MessageRole.Assistant, Content = response.Content, Timestamp = DateTime.Now }); + + switch (response.Type) + { + case ResponseType.Text: + _chatController.AppendAIMessage(response.Content); + break; + + case ResponseType.Analysis: + _chatController.AppendAIMessage(response.Content); + _advisor.ShowReport(response.Analysis); + break; + + case ResponseType.Action: + _chatController.AppendAIMessage(response.Content); + if (response.RequiresConfirmation && response.Actions.Count > 0) + { + _executor.QueueActions(response.Actions); + _chatController.ShowConfirmationPrompt(response.Actions.Count); + } + break; + + case ResponseType.Error: + _chatController.AppendErrorMessage(response.Content); + break; + } + } + + /// 用户确认执行 AI 操作 + public void ConfirmActions() + { + _executor.ExecuteQueuedActions(); + } + + /// 用户拒绝执行 AI 操作 + public void RejectActions() + { + _executor.CancelQueuedActions(); + } + + /// 撤销上一次 AI 操作 + public void UndoLastAIAction() + { + _executor.UndoLastBatch(); + } + } +} diff --git a/client/Assets/Scripts/RedCircuit.AIAssistant/AIChatController.cs b/client/Assets/Scripts/RedCircuit.AIAssistant/AIChatController.cs new file mode 100644 index 0000000..d1c1d9e --- /dev/null +++ b/client/Assets/Scripts/RedCircuit.AIAssistant/AIChatController.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace RedCircuit.AIAssistant +{ + /// + /// 聊天 UI 控制器,处理消息收发与流式显示。 + /// + public class AIChatController : MonoBehaviour + { + /// 聊天面板是否可见 + public bool IsVisible { get; private set; } + + /// 消息列表 (用于 UI 渲染) + public List Messages { get; } = new(); + + /// 显示聊天面板 + public void Show() + { + IsVisible = true; + // TODO: 播放面板展开动画 + } + + /// 隐藏聊天面板 + public void Hide() + { + IsVisible = false; + // TODO: 播放面板收起动画 + } + + /// 追加用户消息到 UI + public void AppendUserMessage(string content) + { + var msg = new ChatMessage + { + Role = MessageRole.User, + Content = content, + Timestamp = DateTime.Now + }; + Messages.Add(msg); + // TODO: 实例化用户消息气泡 UI + } + + /// 追加 AI 消息到 UI (支持流式追加) + public void AppendAIMessage(string content) + { + var msg = new ChatMessage + { + Role = MessageRole.Assistant, + Content = content, + Timestamp = DateTime.Now + }; + Messages.Add(msg); + // TODO: 实例化 AI 消息气泡 UI,支持打字机效果 + } + + /// 追加系统消息 + public void AppendSystemMessage(string content) + { + var msg = new ChatMessage + { + Role = MessageRole.System, + Content = content, + Timestamp = DateTime.Now + }; + Messages.Add(msg); + // TODO: 实例化系统消息 (居中灰色样式) + } + + /// 追加错误消息 + public void AppendErrorMessage(string content) + { + AppendSystemMessage($"[错误] {content}"); + } + + /// 显示操作确认提示 + public void ShowConfirmationPrompt(int actionCount) + { + // TODO: 显示 "AI 建议执行 N 个操作,是否确认?" 确认栏 + Debug.Log($"[AIChat] 等待用户确认 {actionCount} 个操作"); + } + + /// 清空聊天记录 + public void ClearHistory() + { + Messages.Clear(); + // TODO: 清空 UI 消息列表 + } + } +} diff --git a/client/Assets/Scripts/RedCircuit.AIAssistant/AICircuitAdvisor.cs b/client/Assets/Scripts/RedCircuit.AIAssistant/AICircuitAdvisor.cs new file mode 100644 index 0000000..3a411ad --- /dev/null +++ b/client/Assets/Scripts/RedCircuit.AIAssistant/AICircuitAdvisor.cs @@ -0,0 +1,59 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace RedCircuit.AIAssistant +{ + /// + /// 电路分析与建议,解析 AI 返回的电路方案并展示诊断报告。 + /// + public class AICircuitAdvisor : MonoBehaviour + { + /// 显示电路分析报告 + public void ShowReport(CircuitAnalysisReport report) + { + if (report == null) return; + + Debug.Log($"[AIAdvisor] 电路分析: {report.Summary}"); + Debug.Log($"[AIAdvisor] 元件数: {report.Metrics.ComponentCount}, 成本: {report.Metrics.TotalCost}, 最大延迟: {report.Metrics.MaxDelay} tick"); + + foreach (var issue in report.Issues) + { + var icon = issue.Severity == IssueSeverity.Error ? "[ERROR]" : "[WARN]"; + Debug.Log($"[AIAdvisor] {icon} ({issue.Location.X},{issue.Location.Y}) {issue.Description}"); + if (!string.IsNullOrEmpty(issue.Suggestion)) + Debug.Log($"[AIAdvisor] -> 建议: {issue.Suggestion}"); + } + + foreach (var opt in report.Optimizations) + { + Debug.Log($"[AIAdvisor] [OPT] {opt.Description} ({opt.EstimatedImprovement})"); + } + + // TODO: 在 UI 上展示分析报告面板 + } + + /// 显示电路搭建方案供用户选择 + public void ShowCircuitPlan(List plans) + { + foreach (var plan in plans) + { + Debug.Log($"[AIAdvisor] 方案: {plan.Name} | 成本: {plan.Cost} | 延迟: {plan.Delay} tick | 元件: {plan.ComponentCount}"); + Debug.Log($"[AIAdvisor] {plan.Description}"); + } + // TODO: 在 UI 上展示方案对比卡片 + } + + /// 高亮显示问题位置 + public void HighlightIssue(GridPosition location, IssueSeverity severity) + { + // TODO: 在画布上高亮显示问题格子 + // Error -> 红色边框, Warning -> 黄色边框 + } + + /// 清除所有高亮 + public void ClearHighlights() + { + // TODO: 移除画布上的所有问题高亮 + } + } +} diff --git a/client/Assets/Scripts/RedCircuit.AIAssistant/AIContextProvider.cs b/client/Assets/Scripts/RedCircuit.AIAssistant/AIContextProvider.cs new file mode 100644 index 0000000..a8c0eeb --- /dev/null +++ b/client/Assets/Scripts/RedCircuit.AIAssistant/AIContextProvider.cs @@ -0,0 +1,83 @@ +using UnityEngine; + +namespace RedCircuit.AIAssistant +{ + /// + /// 上下文采集器,收集当前游戏状态供 AI 参考。 + /// + public class AIContextProvider : MonoBehaviour + { + /// 采集当前游戏上下文 + public GameContext CollectContext() + { + var context = new GameContext + { + Mode = GetCurrentMode(), + CanvasWidth = GetCanvasWidth(), + CanvasHeight = GetCanvasHeight(), + ComponentCount = GetComponentCount(), + SelectedComponentId = GetSelectedComponentId(), + SelectedComponentType = GetSelectedComponentType(), + LevelId = GetCurrentLevelId(), + LevelTitle = GetCurrentLevelTitle(), + RedstoneCoins = GetRedstoneCoins() + }; + + return context; + } + + private string GetCurrentMode() + { + // TODO: 从 GameManager 获取当前游戏模式 + return "creative"; // creative / puzzle / automation / multiplayer + } + + private int GetCanvasWidth() + { + // TODO: 从 GridCanvas 获取画布宽度 + return 128; + } + + private int GetCanvasHeight() + { + // TODO: 从 GridCanvas 获取画布高度 + return 128; + } + + private int GetComponentCount() + { + // TODO: 从 CircuitGraph 获取当前元件数 + return 0; + } + + private string GetSelectedComponentId() + { + // TODO: 从 PlacementController 获取选中元件 ID + return null; + } + + private string GetSelectedComponentType() + { + // TODO: 从 PlacementController 获取选中元件类型 + return null; + } + + private int? GetCurrentLevelId() + { + // TODO: 解谜模式下获取当前关卡 ID + return null; + } + + private string GetCurrentLevelTitle() + { + // TODO: 解谜模式下获取当前关卡标题 + return null; + } + + private long GetRedstoneCoins() + { + // TODO: 从 EconomyManager 获取红石币余额 + return 0; + } + } +} diff --git a/client/Assets/Scripts/RedCircuit.AIAssistant/AIModels.cs b/client/Assets/Scripts/RedCircuit.AIAssistant/AIModels.cs new file mode 100644 index 0000000..0f82211 --- /dev/null +++ b/client/Assets/Scripts/RedCircuit.AIAssistant/AIModels.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; + +namespace RedCircuit.AIAssistant +{ + // ==================== 消息模型 ==================== + + public enum MessageRole { User, Assistant, System } + + [Serializable] + public class ChatMessage + { + public MessageRole Role; + public string Content; + public DateTime Timestamp; + } + + // ==================== 响应模型 ==================== + + public enum ResponseType { Text, Analysis, Action, Error } + + [Serializable] + public class AIResponse + { + public ResponseType Type; + public string Content; + public List Actions = new(); + public bool RequiresConfirmation; + public CircuitAnalysisReport Analysis; + } + + // ==================== 操作指令模型 ==================== + + public enum ActionType { Place, Delete, Move, Rotate, Wire } + + [Serializable] + public class AIAction + { + public ActionType Type; + public string Component; // 元件类型 (Place 时使用) + public int X; // 目标 X 坐标 + public int Y; // 目标 Y 坐标 + public int FromX; // 源 X 坐标 (Move/Wire 时使用) + public int FromY; // 源 Y 坐标 (Move/Wire 时使用) + public int Rotation; // 旋转角度 (0/90/180/270) + public string Description; // 操作描述 (供用户确认时显示) + } + + // ==================== 上下文模型 ==================== + + [Serializable] + public class GameContext + { + public string Mode; // creative / puzzle / automation / multiplayer + public int CanvasWidth; + public int CanvasHeight; + public int ComponentCount; + public string SelectedComponentId; + public string SelectedComponentType; + public int? LevelId; + public string LevelTitle; + public long RedstoneCoins; + } + + // ==================== 电路分析模型 ==================== + + [Serializable] + public class CircuitAnalysisReport + { + public string Summary; + public CircuitMetrics Metrics; + public List Issues = new(); + public List Optimizations = new(); + } + + [Serializable] + public class CircuitMetrics + { + public int ComponentCount; + public int TotalCost; + public int MaxDelay; + public int SignalPaths; + } + + public enum IssueSeverity { Error, Warning, Info } + + [Serializable] + public class CircuitIssue + { + public IssueSeverity Severity; + public string Type; // signal_loss / short_circuit / redundant / etc. + public GridPosition Location; + public string Description; + public string Suggestion; + } + + [Serializable] + public class CircuitOptimization + { + public string Type; // delay_reduction / cost_reduction / etc. + public string Description; + public string EstimatedImprovement; + } + + // ==================== 电路方案模型 ==================== + + [Serializable] + public class CircuitPlan + { + public string Name; + public string Description; + public int Cost; + public int Delay; + public int ComponentCount; + public List Steps = new(); + } + + // ==================== 辅助类型 ==================== + + [Serializable] + public struct GridPosition + { + public int X; + public int Y; + + public GridPosition(int x, int y) { X = x; Y = y; } + } + + /// 操作批次 (用于撤销) + public class ActionBatch + { + public List Actions = new(); + public string SnapshotBefore; + public string SnapshotAfter; + } +} diff --git a/client/Assets/Scripts/RedCircuit.AIAssistant/RedCircuit.AIAssistant.asmdef b/client/Assets/Scripts/RedCircuit.AIAssistant/RedCircuit.AIAssistant.asmdef new file mode 100644 index 0000000..5b10ce9 --- /dev/null +++ b/client/Assets/Scripts/RedCircuit.AIAssistant/RedCircuit.AIAssistant.asmdef @@ -0,0 +1,10 @@ +{ + "name": "RedCircuit.AIAssistant", + "rootNamespace": "RedCircuit.AIAssistant", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "autoReferenced": true, + "defineConstraints": [] +} diff --git a/docs/AI助搭功能策划文档.md b/docs/AI助搭功能策划文档.md new file mode 100644 index 0000000..15767ba --- /dev/null +++ b/docs/AI助搭功能策划文档.md @@ -0,0 +1,292 @@ +# MRCC 游戏内 AI 助搭功能策划文档 + +> 版本: v1.0 | 日期: 2026-08-07 | 状态: 设计阶段 + +## 1. 功能概述 + +### 1.1 定义 + +**AI 助搭**是 MRCC 游戏内置的智能助手系统,具备三大核心能力: + +| 能力 | 描述 | 示例 | +|------|------|------| +| **问答解惑** | 解答电路原理、元件属性、游戏机制相关问题 | "红石中继器怎么用?" "AND 门真值表是什么?" | +| **助搭电路** | 根据需求描述,建议元件选型与放置方案 | "帮我搭一个二进制计数器" "这个电路怎么优化延迟?" | +| **操作游戏** | 经用户确认后,AI 直接执行放置/连线/删除等游戏操作 | "把红石灯放到 (10,5)" "连接拉杆和第一个中继器" | + +### 1.2 设计目标 + +- **零门槛上手**:新手无需查阅文档,直接用自然语言提问 +- **渐进式辅助**:从问答 -> 建议 -> 自动搭建,用户始终拥有最终决策权 +- **上下文感知**:AI 能感知当前画布状态、选中元件、游戏模式等上下文 +- **安全可控**:AI 的游戏操作必须经用户确认,支持撤销 + +### 1.3 用户场景 + +``` +场景 A:新手学习 + 用户:"红石信号会衰减吗?" + AI:"会。红石粉每传播 1 格衰减 1 点强度,满强度 15 最多传 15 格。 + 中继器可以恢复至满强度。需要我在画布上演示吗?" + 用户:"好的" + AI:[放置 电源 -> 15格红石粉 -> 红石灯,并标注信号强度] + +场景 B:电路设计辅助 + 用户:"帮我搭一个 XOR 门" + AI:"XOR 门可以用以下方案实现: + 方案1: 2x NOT + 1x AND + 1x OR (成本 550 红石币, 延迟 3 tick) + 方案2: 4x NAND (成本 880 红石币, 延迟 2 tick) + 推荐方案1,性价比更高。需要我自动放置吗?" + 用户:"用方案1" + AI:[在画布上放置元件并连线,用户可预览后确认] + +场景 C:电路分析与优化 + 用户:"分析一下我当前的电路" + AI:"当前电路分析结果: + - 元件数: 23, 总成本: 1,840 红石币 + - 信号路径: 电源 -> 中继器 x2 -> AND 门 -> 红石灯 + - 最大延迟: 4 tick (可优化) + - 问题: 第 7 格红石粉信号已衰减至 0,导致断路 + - 建议: 在第 5 格处添加中继器恢复信号" +``` + +## 2. 技术架构 + +### 2.1 整体架构 + +``` +┌─────────────────────────────────────────────────────┐ +│ Unity 客户端 │ +│ ┌──────────────┐ ┌──────────────┐ ┌───────────┐ │ +│ │ AIChatPanel │ │ AIAdvisor │ │ AIAction │ │ +│ │ (聊天 UI) │ │ (电路分析) │ │ Executor │ │ +│ │ │ │ │ │ (操作执行) │ │ +│ └──────┬───────┘ └──────┬───────┘ └─────┬─────┘ │ +│ │ │ │ │ +│ ┌──────┴─────────────────┴────────────────┴─────┐ │ +│ │ AIAssistantManager (核心协调器) │ │ +│ └──────────────────────┬─────────────────────────┘ │ +│ │ │ +│ ┌──────────────────────┴─────────────────────────┐ │ +│ │ AIContextProvider (上下文采集) │ │ +│ │ - 当前画布状态 - 选中元件 - 游戏模式 - 关卡信息│ │ +│ └──────────────────────────────────────────────────┘ │ +└─────────────────────────┬───────────────────────────┘ + │ HTTPS (REST + SSE) +┌─────────────────────────┴───────────────────────────┐ +│ ai-service (:8087) │ +│ ┌──────────┐ ┌───────────┐ ┌──────────────────┐ │ +│ │ Chat │ │ Circuit │ │ Action Planner │ │ +│ │ Handler │ │ Analyzer │ │ (操作规划器) │ │ +│ └────┬─────┘ └─────┬─────┘ └────────┬─────────┘ │ +│ │ │ │ │ +│ ┌────┴──────────────┴─────────────────┴──────────┐ │ +│ │ LLM Gateway (大模型网关) │ │ +│ │ - 意图识别 - 电路知识检索 - 操作序列生成 │ │ +│ └───────────────────────┬────────────────────────┘ │ +│ │ │ +│ ┌───────────────────────┴────────────────────────┐ │ +│ │ Knowledge Base (知识库) │ │ +│ │ - 80 种元件规格 - 电路设计模式 - 关卡攻略 │ │ +│ └────────────────────────────────────────────────┘ │ +└──────────────────────────────────────────────────────┘ +``` + +### 2.2 技术选型 + +| 领域 | 方案 | 说明 | +|------|------|------| +| LLM 引擎 | OpenAI GPT-4o / Claude 3.5 / 国产模型 | 支持多模型切换,按成本和延迟选择 | +| 检索增强 | RAG (元件手册 + 电路模式库) | 减少幻觉,确保元件数据准确 | +| 流式输出 | Server-Sent Events (SSE) | 打字机效果,降低用户等待感 | +| 操作规划 | Function Calling / Tool Use | LLM 输出结构化操作指令 | +| 上下文管理 | 滑动窗口 + 电路状态摘要 | 控制 Token 消耗 | +| 本地缓存 | 常见问题本地缓存 | 减少 API 调用,支持离线问答 | + +## 3. API 设计 + +### 3.1 REST API + +| 方法 | 路径 | 说明 | 鉴权 | +|------|------|------|------| +| POST | `/api/ai/chat` | 发送聊天消息,返回 AI 回复 | 是 | +| POST | `/api/ai/analyze` | 分析当前电路,返回诊断报告 | 是 | +| POST | `/api/ai/suggest` | 根据需求生成电路搭建方案 | 是 | +| POST | `/api/ai/execute` | 执行 AI 规划的操作序列 | 是 | +| GET | `/api/ai/history` | 获取聊天历史 | 是 | +| POST | `/api/ai/feedback` | 用户对 AI 回复反馈 (赞/踩) | 是 | + +### 3.2 核心数据结构 + +```json +// 聊天请求 +{ + "sessionId": "sess_abc123", + "message": "帮我搭一个 XOR 门", + "context": { + "mode": "creative", + "canvasSize": "128x128", + "componentCount": 0, + "selectedComponent": null, + "levelId": null + } +} + +// 聊天响应 (SSE 流式) +{ + "sessionId": "sess_abc123", + "type": "text|action|analysis|error", + "content": "XOR 门可以用以下方案实现...", + "actions": [ + { + "type": "place", + "component": "NOT_GATE", + "x": 10, "y": 20, + "rotation": 0, + "description": "放置 NOT 门 (输入反相器 1)" + }, + { + "type": "wire", + "from": {"x": 10, "y": 20}, + "to": {"x": 12, "y": 20}, + "description": "连接 NOT 门到 AND 门" + } + ], + "requiresConfirmation": true +} + +// 电路分析报告 +{ + "summary": "当前电路共 23 个元件,存在 1 处断路", + "metrics": { + "componentCount": 23, + "totalCost": 1840, + "maxDelay": 4, + "signalPaths": 2 + }, + "issues": [ + { + "severity": "error", + "type": "signal_loss", + "location": {"x": 7, "y": 5}, + "description": "信号在第 7 格衰减至 0,导致断路", + "suggestion": "在第 5 格处添加中继器恢复信号" + } + ], + "optimizations": [ + { + "type": "delay_reduction", + "description": "移除冗余中继器可减少 1 tick 延迟", + "estimatedImprovement": "-1 tick" + } + ] +} +``` + +## 4. 客户端模块设计 + +### 4.1 模块结构 + +| 脚本 | 职责 | +|------|------| +| `AIAssistantManager` | 核心协调器,管理 AI 会话生命周期,协调各子系统 | +| `AIChatController` | 聊天 UI 控制器,处理消息收发与流式显示 | +| `AICircuitAdvisor` | 电路分析与建议,解析 AI 返回的电路方案 | +| `AIActionExecutor` | 操作执行器,将 AI 操作指令转换为游戏内动作 | +| `AIContextProvider` | 上下文采集器,收集当前游戏状态供 AI 参考 | +| `AIModels` | 数据模型定义 (请求/响应/操作指令) | + +### 4.2 操作执行流程 + +``` +用户发送消息 + │ + ▼ +AIAssistantManager.HandleUserMessage() + │ + ├─► AIContextProvider.CollectContext() // 采集画布状态 + │ + ├─► ai-service POST /api/ai/chat // 发送到服务端 + │ │ + │ ▼ (SSE 流式响应) + │ 解析响应类型: + │ ├─ text → AIChatController.AppendText() + │ ├─ action → AIActionExecutor.QueueActions() + │ └─ analysis → AICircuitAdvisor.ShowReport() + │ + ├─► AIActionExecutor (如果有操作指令) + │ │ + │ ├─ 显示操作预览 (高亮待放置位置) + │ ├─ 用户确认 → 执行操作 (调用 PlacementController) + │ ├─ 用户拒绝 → 取消,记录反馈 + │ └─ 用户编辑 → 修改后执行 + │ + └─► AIChatController.UpdateChatHistory() +``` + +### 4.3 安全约束 + +- AI 操作**必须经用户确认**后才执行,不可自动执行 +- 每次操作最多放置 **20 个元件**,超出需分批确认 +- AI 不可操作**命令方块**和**结构方块**(仅创意模式手动放置) +- 解谜模式下,AI 仅提供文字提示,**不可直接放置元件** +- 所有 AI 操作支持**一键撤销** (记录操作前快照) + +## 5. 服务端设计 + +### 5.1 ai-service 微服务 + +| 属性 | 值 | +|------|-----| +| 端口 | 8087 | +| 语言 | Go 1.22 / Gin | +| 依赖 | LLM API、Redis (会话缓存)、PostgreSQL (历史记录) | + +### 5.2 LLM Gateway 设计 + +``` +用户消息 + 上下文 + │ + ▼ +┌──────────────┐ +│ 意图识别 │ → 问答 / 助搭 / 分析 / 操作 +└──────┬───────┘ + │ + ├─ 问答 → 检索知识库 → LLM 生成回复 + ├─ 助搭 → 生成电路方案 → LLM 验证可行性 + ├─ 分析 → 本地电路引擎分析 → LLM 生成建议 + └─ 操作 → LLM Function Calling → 生成操作序列 + │ + ▼ +┌──────────────┐ +│ 响应组装 │ → 统一格式输出 +└──────────────┘ +``` + +### 5.3 知识库构建 + +知识库包含以下结构化数据,供 RAG 检索: + +- **元件百科**:80 种元件的编号、属性、成本、使用说明 +- **电路模式库**:常见电路设计模式 (XOR 门、计数器、时钟发生器等) +- **关卡攻略库**:240 关的通关提示 (仅提示,不给完整答案) +- **红石原理**:信号衰减、延迟、BUD 更新等技术原理 + +## 6. 开发计划 + +| 阶段 | 内容 | 依赖 | +|------|------|------| +| Phase 1 | 基础聊天 + 元件问答 (接入 LLM API) | ai-service 骨架 | +| Phase 2 | 电路上下文采集 + 电路分析报告 | 客户端仿真引擎 | +| Phase 3 | AI 操作预览 + 确认执行 + 撤销 | 客户端编辑器 | +| Phase 4 | RAG 知识库 + 电路方案生成 | 全部元件数据 | +| Phase 5 | 解谜模式提示 (不操作) + 关卡攻略 | 关卡数据 | + +## 7. 成本估算 + +| 项目 | 预估 | +|------|------| +| LLM API 调用 | $0.01-0.05 / 次对话 (GPT-4o) | +| 月度 API 成本 (1000 DAU, 日均 5 次) | ~$1,500-7,500 | +| 缓存命中率目标 | >40% (常见问题本地缓存) | +| 本地模型备选 | Qwen2.5-7B (降低成本,需 GPU 服务器) | diff --git a/launcher/MRCC.Launcher.sln b/launcher/MRCC.Launcher.sln new file mode 100644 index 0000000..6bc6baf --- /dev/null +++ b/launcher/MRCC.Launcher.sln @@ -0,0 +1,33 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MRCC.Launcher", "MRCC.Launcher\MRCC.Launcher.csproj", "{72F4C810-435B-463C-B65E-56AE39577261}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PCL.Core", "PCL-CE\PCL.Core\PCL.Core.csproj", "{A1294BFE-A9D2-44C0-87B8-7774AF7DB1D4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PCL.Core.SourceGenerators", "PCL-CE\PCL.Core.SourceGenerators\PCL.Core.SourceGenerators.csproj", "{75040580-B94B-404E-BDA3-88242DE8D8EC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {72F4C810-435B-463C-B65E-56AE39577261}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {72F4C810-435B-463C-B65E-56AE39577261}.Debug|Any CPU.Build.0 = Debug|Any CPU + {72F4C810-435B-463C-B65E-56AE39577261}.Release|Any CPU.ActiveCfg = Release|Any CPU + {72F4C810-435B-463C-B65E-56AE39577261}.Release|Any CPU.Build.0 = Release|Any CPU + {A1294BFE-A9D2-44C0-87B8-7774AF7DB1D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1294BFE-A9D2-44C0-87B8-7774AF7DB1D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1294BFE-A9D2-44C0-87B8-7774AF7DB1D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1294BFE-A9D2-44C0-87B8-7774AF7DB1D4}.Release|Any CPU.Build.0 = Release|Any CPU + {75040580-B94B-404E-BDA3-88242DE8D8EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75040580-B94B-404E-BDA3-88242DE8D8EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75040580-B94B-404E-BDA3-88242DE8D8EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75040580-B94B-404E-BDA3-88242DE8D8EC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/launcher/MRCC.Launcher/App.xaml b/launcher/MRCC.Launcher/App.xaml new file mode 100644 index 0000000..4e40b88 --- /dev/null +++ b/launcher/MRCC.Launcher/App.xaml @@ -0,0 +1,6 @@ + + + + diff --git a/launcher/MRCC.Launcher/App.xaml.cs b/launcher/MRCC.Launcher/App.xaml.cs new file mode 100644 index 0000000..b9a5d57 --- /dev/null +++ b/launcher/MRCC.Launcher/App.xaml.cs @@ -0,0 +1,7 @@ +using System.Windows; + +namespace MRCC.Launcher; + +public partial class App : Application +{ +} diff --git a/launcher/MRCC.Launcher/MRCC.Launcher.csproj b/launcher/MRCC.Launcher/MRCC.Launcher.csproj new file mode 100644 index 0000000..f7c8643 --- /dev/null +++ b/launcher/MRCC.Launcher/MRCC.Launcher.csproj @@ -0,0 +1,31 @@ + + + + WinExe + net10.0-windows + true + true + MRCC.Launcher + MRCC.Launcher + enable + 14.0 + enable + app.manifest + MRCC.Launcher.Program + + + + + + + + + + + + + PCL.metadata.json + + + + diff --git a/launcher/MRCC.Launcher/MainWindow.xaml b/launcher/MRCC.Launcher/MainWindow.xaml new file mode 100644 index 0000000..f0fc1a7 --- /dev/null +++ b/launcher/MRCC.Launcher/MainWindow.xaml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +