From 6ae637609ee2f2f48d0d3bb9b159b36ba36b6394 Mon Sep 17 00:00:00 2001 From: Essential CI Date: Thu, 8 Aug 2024 08:35:19 +0000 Subject: [PATCH] Version 1.3.3 --- README.md | 4 +- build-logic/build.gradle.kts | 2 +- .../src/main/kotlin/essential/preprocessor.kt | 4 +- .../src/main/kotlin/essential/universal.kt | 4 +- .../gg/essential/gradle/BundlePlugin.kt | 2 +- .../gg/essential/gradle/RelocatePlugin.kt | 4 + build.gradle.kts | 5 +- changelog/release-1.3.3.md | 19 + .../gg/essential/gui/layoutdsl/color.kt | 13 +- .../gg/essential/gui/layoutdsl/events.kt | 13 +- .../gg/essential/gui/layoutdsl/layout.kt | 66 +- .../kotlin/gg/essential/gui/layoutdsl/lazy.kt | 8 +- .../kotlin/gg/essential/gui/layoutdsl/size.kt | 10 +- .../gg/essential/gui/layoutdsl/state.kt | 12 +- .../essential/gui/util/elementaExtensions.kt | 37 +- .../gui/elementa/state/v2/animate.kt | 99 +++ .../v2/collections/MutableTrackedList.kt | 2 +- .../state/v2/collections/MutableTrackedSet.kt | 2 +- .../elementa/state/v2/collections/utils.kt | 4 + .../gg/essential/config/FeatureFlags.java | 49 -- features.properties | 1 + gradle.properties | 2 +- gradle/libs.versions.toml | 8 +- .../gui/elementa/effects/GradientEffect.kt | 13 + gui/essential/build.gradle.kts | 6 + .../java/gg/essential/handlers/CertChain.java | 27 +- .../essential/gui/common/ContextOptionMenu.kt | 44 +- .../gui/common/input/AbstractTextInput.kt | 2 +- .../gui/common/input/StateTextInput.kt | 2 +- .../essential/gui/common/input/UITextInput.kt | 12 +- .../gui/common/modal/UsernameInputModal.kt | 2 +- .../gui/modal/sps}/FirewallBlockingModal.kt | 6 +- .../cosmetics/ModelLoader.kt | 14 +- .../connectionmanager/ice/IIceManager.kt | 84 ++ .../connectionmanager/ice/IceManagerImpl.kt | 732 ++++++++++++++++++ .../connectionmanager/ice/PseudoTcpChannel.kt | 200 +++++ .../connectionmanager/ice/QuicChannel.kt | 103 +++ .../gg/essential/util/guiEssentialPlatform.kt | 3 + .../util/kdiscordipc/RelaunchClassLoader.java | 78 -- .../util/lwjgl3/IsolatedClassLoader.java | 178 ----- settings.gradle.kts | 39 +- .../main/java/org/slf4j/impl/Log4jLogger.java | 293 ------- .../java/org/slf4j/impl/StaticMDCBinder.java | 37 - .../org/slf4j/impl/StaticMarkerBinder.java | 45 -- .../config/FeatureFlagAbUserIdProvider.java | 24 + .../cosmetics/PlayerWearableManager.java | 10 +- .../entity/AbstractClientPlayerExt.java | 5 +- .../entity/MixinAbstractClientPlayer.java | 59 +- .../Mixin_RedirectToLocalConnection.java | 4 +- .../renderer/entity/Mixin_Emissive_Cape.java | 101 +++ .../entity/Mixin_Emissive_Elytra.java | 140 ++++ .../sps/Mixin_ResolveSpsResourcePackUrl.java | 4 +- .../Mixin_PublishServerStatusResponse.java | 3 +- .../connectionmanager/ConnectionManager.java | 15 +- .../connectionmanager/ice/IceManager.java | 56 +- .../connectionmanager/sps/SPSManager.java | 159 ++-- .../java/gg/essential/util/ProtocolUtils.java | 6 +- .../gg/essential/config/EssentialConfig.kt | 3 +- .../kotlin/gg/essential/config/GuiBuilder.kt | 3 + .../gg/essential/gui/about/AboutMenu.kt | 2 +- .../gg/essential/gui/common/UI3DPlayer.kt | 4 +- .../gui/common/modal/OpenLinkModal.kt | 87 ++- .../gg/essential/gui/emotes/EmoteWheel.kt | 2 +- .../gg/essential/gui/friends/SocialMenu.kt | 2 +- .../gui/friends/message/MessageInput.kt | 2 +- .../message/screenshot/ScreenshotPicker.kt | 2 +- .../gui/notification/Notifications.kt | 2 +- .../kotlin/gg/essential/gui/overlay/Layer.kt | 2 +- .../components/ScreenshotBrowser.kt | 6 +- .../components/ScreenshotScrollComponent.kt | 47 +- .../components/ScreenshotShareModal.kt | 2 +- .../essential/gui/sps/InviteFriendsModal.kt | 83 +- .../gui/sps/WorldShareSettingsGui.kt | 2 +- .../gui/vigilancev2/VigilanceV2SettingsGui.kt | 2 +- .../essential/gui/wardrobe/EmoteWheelPage.kt | 8 - .../gg/essential/gui/wardrobe/Wardrobe.kt | 8 +- .../essential/gui/wardrobe/WardrobeState.kt | 18 +- .../gui/wardrobe/components/cosmeticItem.kt | 30 +- .../cosmeticOrEmoteItemFunctions.kt | 18 +- .../gui/wardrobe/components/gifting.kt | 38 +- .../components/outfitItemFunctions.kt | 5 +- .../gui/wardrobe/components/previewWindow.kt | 146 ++-- .../gg/essential/gui/wardrobe/purchase.kt | 5 +- .../gg/essential/handlers/PauseMenuDisplay.kt | 15 +- .../minecraft/MinecraftRenderBackend.kt | 136 +++- .../connectionmanager/ice/IceManagerMcImpl.kt | 156 ++++ .../ice/netty/CoroutinesChannelInitializer.kt | 91 +++ .../kotlin/gg/essential/sps/quic/jvm/util.kt | 4 +- .../util/GuiEssentialPlatformImpl.kt | 6 + .../gg/essential/util/MinecraftUtils.kt | 3 +- .../gg/essential/util/OptiFineAccessor.kt | 57 ++ src/main/kotlin/gg/essential/util/Try.kt | 1 + .../assets/essential/certs/globalsign-r4.der | Bin 0 -> 480 bytes .../assets/essential/certs/gts-root-r1.der | Bin 1374 -> 1371 bytes .../assets/essential/certs/gts-root-r2.der | Bin 0 -> 1371 bytes .../assets/essential/certs/gts-root-r3.der | Bin 0 -> 525 bytes .../assets/essential/certs/gts-root-r4.der | Bin 0 -> 525 bytes .../essential/certs/lets-encrypt-r3.der | Bin 1306 -> 0 bytes .../resources/assets/essential/commit.txt | 2 +- src/main/resources/mixins.essential.json | 2 + subprojects/classloaders/build.gradle.kts | 24 + .../classloader}/IsolatedClassLoader.java | 2 +- .../classloader}/RelaunchClassLoader.java | 19 +- .../clipboard}/build.gradle.kts | 0 .../gg/essential/clipboard/AWTClipboard.kt | 0 .../gg/essential/clipboard/Clipboard.kt | 0 .../gg/essential/clipboard/MacOSClipboard.kt | 0 .../cosmetics}/build.gradle.kts | 0 .../gg/essential/cosmetics/CosmeticsState.kt | 5 +- .../essential/cosmetics/EquippedCosmetic.kt | 0 .../essential/cosmetics/WearablesManager.kt | 5 +- .../cosmetics/boxmask/ModelClipper.kt | 0 .../cosmetics/boxmask/ModelClipperImpl.kt | 0 .../cosmetics/events/AnimationEvent.kt | 0 .../cosmetics/events/AnimationEventType.kt | 0 .../cosmetics/events/AnimationTarget.kt | 0 .../essential/cosmetics/skinmask/SkinMask.kt | 0 .../state/EssentialAnimationSystem.kt | 0 .../cosmetics/state/TextureAnimationSync.kt | 0 .../cosmetics/state/WearableLocator.kt | 0 .../kotlin/gg/essential/cosmetics/types.kt | 0 .../kotlin/gg/essential/mod/EssentialAsset.kt | 0 .../kotlin/gg/essential/mod/Model.kt | 0 .../kotlin/gg/essential/mod/Skin.kt | 0 .../gg/essential/mod/asset/AssetProvider.kt | 0 .../gg/essential/mod/cosmetics/CapeModel.kt | 2 +- .../essential/mod/cosmetics/CosmeticAssets.kt | 1 + .../essential/mod/cosmetics/CosmeticBundle.kt | 0 .../mod/cosmetics/CosmeticCategory.kt | 0 .../essential/mod/cosmetics/CosmeticOutfit.kt | 0 .../essential/mod/cosmetics/CosmeticSlot.kt | 0 .../essential/mod/cosmetics/CosmeticTier.kt | 0 .../essential/mod/cosmetics/CosmeticType.kt | 0 .../mod/cosmetics/CosmeticsSubject.kt | 0 .../essential/mod/cosmetics/EmoteWheelPage.kt | 0 .../gg/essential/mod/cosmetics/OutfitSkin.kt | 0 .../gg/essential/mod/cosmetics/PlayerModel.kt | 4 +- .../gg/essential/mod/cosmetics/SkinLayer.kt | 0 .../essential/mod/cosmetics/capeDisabled.kt | 0 .../cosmetics/database/CosmeticsDatabase.kt | 0 .../database/GitRepoCosmeticsDatabase.kt | 5 + .../mod/cosmetics/featured/FeaturedItem.kt | 0 .../cosmetics/featured/FeaturedItemType.kt | 0 .../mod/cosmetics/featured/FeaturedPage.kt | 0 .../featured/FeaturedPageCollection.kt | 0 .../cosmetics/preview/PerspectiveCamera.kt | 0 .../cosmetics/settings/CosmeticProperty.kt | 0 .../settings/CosmeticPropertyType.kt | 0 .../mod/cosmetics/settings/CosmeticSetting.kt | 0 .../cosmetics/settings/CosmeticSettingType.kt | 0 .../cosmetics/settings/CosmeticSettings.kt | 0 .../settings/FallbackPolymorphicSerializer.kt | 0 .../settings/UntypedCosmeticSetting.kt | 0 .../kotlin/gg/essential/model/Animation.kt | 3 +- .../kotlin/gg/essential/model/BedrockModel.kt | 45 +- .../kotlin/gg/essential/model/Bone.kt | 8 +- .../kotlin/gg/essential/model/Box3.kt | 0 .../kotlin/gg/essential/model/Cube.kt | 0 .../kotlin/gg/essential/model/CubeUvData.kt | 0 .../kotlin/gg/essential/model/EnumPart.kt | 0 .../kotlin/gg/essential/model/Face.kt | 0 .../gg/essential/model/ModelInstance.kt | 5 +- .../kotlin/gg/essential/model/ModelParser.kt | 0 .../gg/essential/model/ParticleEffect.kt | 0 .../gg/essential/model/ParticleSystem.kt | 0 .../gg/essential/model/PositionTexVertex.kt | 0 .../gg/essential/model/RenderMetadata.kt | 0 .../kotlin/gg/essential/model/Side.kt | 0 .../gg/essential/model/SoundCategory.kt | 0 .../kotlin/gg/essential/model/SoundEffect.kt | 0 .../kotlin/gg/essential/model/Vector3.kt | 0 .../gg/essential/model/backend/PlayerPose.kt | 0 .../essential/model/backend/RenderBackend.kt | 2 +- .../model/backend/atlas/TextureAtlas.kt | 0 .../model/collision/CollisionProvider.kt | 0 .../model/collision/PlaneCollisionProvider.kt | 0 .../gg/essential/model/file/AnimationFile.kt | 0 .../gg/essential/model/file/ModelFile.kt | 0 .../gg/essential/model/file/ParticlesFile.kt | 0 .../model/file/SoundDefinitionsFile.kt | 0 .../kotlin/gg/essential/model/light/Light.kt | 0 .../gg/essential/model/light/LightProvider.kt | 0 .../essential/model/molang/MolangContext.kt | 0 .../model/molang/MolangExpression.kt | 0 .../gg/essential/model/molang/MolangVec3.kt | 0 .../gg/essential/model/util/AnySerializer.kt | 0 .../model/util/ColorAsRgbSerializer.kt | 0 .../kotlin/gg/essential/model/util/Instant.kt | 0 .../model/util/InstantAsIso8601Serializer.kt | 0 .../model/util/InstantAsMillisSerializer.kt | 0 .../model/util/ListOrSingleSerializer.kt | 0 .../model/util/PairAsListSerializer.kt | 0 .../essential/model/util/PlayerPoseManager.kt | 2 +- .../kotlin/gg/essential/model/util/TreeMap.kt | 0 .../gg/essential/model/util/UMatrixStack.kt | 0 .../essential/model/util/UVertexConsumer.kt | 0 .../kotlin/gg/essential/model/util/kotgl.kt | 0 .../gg/essential/model/util/platformMath.kt | 0 .../gg/essential/model/util/quaternion.kt | 0 .../essential/network/cosmetics/Cosmetic.kt | 0 .../SnakeAsUpperCaseSerializer.kt | 0 .../kotlin/gg/essential/model/util/Instant.kt | 0 .../gg/essential/model/util/platformMath.kt | 0 .../feature-flags}/build.gradle.kts | 0 .../config/AccessedViaReflection.java | 0 .../gg/essential/config/FeatureFlags.java | 101 +++ .../gg/essential/config/LoadsResources.java | 0 .../gg/essential/config/HideIfDisabled.kt | 0 subprojects/ice/build.gradle.kts | 30 + .../gg/essential/ice/CandidateManager.kt | 299 +++++++ .../kotlin/gg/essential/ice/CandidateType.kt | 28 + .../main/kotlin/gg/essential/ice/IceAgent.kt | 655 ++++++++++++++++ .../kotlin/gg/essential/ice/candidates.kt | 126 +++ .../gg/essential/ice/stun/BindingPacer.kt | 82 ++ .../gg/essential/ice/stun/ChannelData.kt | 42 + .../gg/essential/ice/stun/StunAttribute.kt | 40 + .../essential/ice/stun/StunAttributeType.kt | 53 ++ .../kotlin/gg/essential/ice/stun/StunClass.kt | 12 +- .../gg/essential/ice/stun/StunManager.kt | 167 ++++ .../gg/essential/ice/stun/StunMessage.kt | 365 +++++++++ .../gg/essential/ice/stun/StunRequest.kt | 118 +++ .../gg/essential/ice/stun/StunSocket.kt | 558 +++++++++++++ .../kotlin/gg/essential/ice/stun/StunType.kt | 32 + .../gg/essential/ice/stun/TransactionId.kt | 42 + .../gg/essential/ice/stun/UdpStunPacket.kt | 21 + .../src/main/kotlin/gg/essential/ice/utils.kt | 31 + .../immediatelyfast}/build.gradle.kts | 0 .../compat/ImmediatelyFastCompat.java | 0 {infra => subprojects/infra}/build.gradle.kts | 0 .../toolbox/chat/enums/ChannelType.java | 0 .../toolbox/chat/enums/ReportVerdict.java | 0 .../toolbox/chat/model/Channel.java | 0 .../toolbox/chat/model/ChannelSettings.java | 0 .../toolbox/chat/model/ClosedInfo.java | 0 .../toolbox/chat/model/CreatedInfo.java | 0 .../toolbox/chat/model/Message.java | 0 .../toolbox/chat/model/MessageReport.java | 0 .../toolbox/chat/model/ReportVerdict.java | 0 .../enums/FriendRequestPrivacySetting.java | 0 .../enums/RelationshipState.java | 0 .../relationships/enums/RelationshipType.java | 0 ...riendRequestPrivacySettingTypeAdapter.java | 0 .../RelationshipStateAdapter.java | 0 .../RelationshipTypeAdapter.java | 0 .../serialization/DateTimeTypeAdapter.java | 0 .../serialization/UUIDTypeAdapter.java | 0 .../sparkuniverse/toolbox/util/DateTime.java | 0 .../sparkuniverse/toolbox/util/Validate.java | 0 .../gg/essential/coins/model/CoinBundle.java | 0 .../common/enums/ActivityType.java | 0 .../common/enums/ProfileStatus.java | 0 .../model/relationships/Relationship.java | 0 .../common/packet/Packet.java | 0 .../chat/ChatChannelMemberAddPacket.java | 0 .../chat/ChatChannelMemberRemovePacket.java | 0 .../chat/ChatChannelMessageDeletePacket.java | 0 .../packet/chat/ChatChannelUpdatePacket.java | 0 .../chat/ClientChatChannelCreatePacket.java | 0 .../ClientChatChannelMessageCreatePacket.java | 0 ...ientChatChannelMessageReadStatePacket.java | 0 .../ClientChatChannelMessageReportPacket.java | 0 .../ClientChatChannelMessageUpdatePacket.java | 0 ...ientChatChannelMessagesRetrievePacket.java | 0 .../chat/ClientChatChannelMutePacket.java | 0 ...rverChannelMemberActionResponsePacket.java | 0 .../chat/ServerChatChannelAddPacket.java | 0 .../chat/ServerChatChannelClearPacket.java | 0 .../chat/ServerChatChannelMessagePacket.java | 0 .../ServerChatChannelMessageReportPacket.java | 0 ...ChatChannelMessageReportReasonsPacket.java | 0 .../chat/ServerChatChannelRemovePacket.java | 0 .../ClientCheckoutClaimCoinsPacket.java | 0 .../ClientCheckoutCoinBundlePacket.java | 0 .../ClientCheckoutCosmeticsPacket.java | 0 ...ClientCheckoutDynamicCoinBundlePacket.java | 0 ...tCheckoutPartnerCodeRequestDataPacket.java | 0 .../ClientCheckoutStoreBundlePacket.java | 0 ...erverCheckoutClaimCoinsResponsePacket.java | 0 .../ServerCheckoutPartnerCodeDataPacket.java | 0 .../checkout/ServerCheckoutUrlPacket.java | 0 .../coins/ClientCoinBundleOptionsPacket.java | 0 .../coins/ClientCoinsBalancePacket.java | 0 .../coins/ServerCoinBundleOptionsPacket.java | 0 .../coins/ServerCoinsBalancePacket.java | 0 .../ClientConnectionDisconnectPacket.java | 0 .../connection/ConnectionKeepAlivePacket.java | 0 .../ConnectionRegisterPacketTypeIdPacket.java | 0 .../ServerConnectionReconnectPacket.java | 0 .../ClientCosmeticAnimationTriggerPacket.java | 0 ...tCosmeticBulkRequestUnlockStatePacket.java | 0 .../ClientCosmeticCheckoutPacket.java | 0 .../cosmetic/ClientCosmeticRequestPacket.java | 0 ...icsUserEquippedVisibilityTogglePacket.java | 0 .../ServerCosmeticAnimationTriggerPacket.java | 0 ...cBulkRequestUnlockStateResponsePacket.java | 0 .../ServerCosmeticPlayerSettingsPacket.java | 0 .../ServerCosmeticTypesPopulatePacket.java | 0 .../ServerCosmeticsPopulatePacket.java | 0 .../ServerCosmeticsRevokePurchasePacket.java | 0 .../ServerCosmeticsSkinTexturePacket.java | 0 .../ServerCosmeticsUserEquippedPacket.java | 0 ...CosmeticsUserEquippedVisibilityPacket.java | 0 .../ServerCosmeticsUserUnlockedPacket.java | 0 .../ClientCosmeticCapesUnlockedPacket.java | 0 ...ClientCosmeticCategoriesRequestPacket.java | 0 ...erverCosmeticCategoriesPopulatePacket.java | 0 .../ClientCosmeticEmoteWheelSelectPacket.java | 0 .../ClientCosmeticEmoteWheelUpdatePacket.java | 0 ...erverCosmeticEmoteWheelPopulatePacket.java | 0 ...ticOutfitCosmeticSettingsUpdatePacket.java | 0 .../ClientCosmeticOutfitCreatePacket.java | 0 .../ClientCosmeticOutfitDeletePacket.java | 0 ...icOutfitEquippedCosmeticsUpdatePacket.java | 0 .../ClientCosmeticOutfitNameUpdatePacket.java | 0 .../ClientCosmeticOutfitSelectPacket.java | 0 ...ntCosmeticOutfitSelectedRequestPacket.java | 0 .../ClientCosmeticOutfitSkinUpdatePacket.java | 0 ...smeticOutfitUpdateFavoriteStatePacket.java | 0 .../ServerCosmeticOutfitPopulatePacket.java | 0 ...rCosmeticOutfitSelectedResponsePacket.java | 0 .../currency/ClientCurrencyOptionsPacket.java | 0 .../currency/ServerCurrencyOptionsPacket.java | 0 .../common/packet/ice/IceCandidatePacket.java | 0 .../common/packet/ice/IceSessionPacket.java | 0 .../packet/media/ClientMediaCreatePacket.java | 0 .../media/ClientMediaDeleteRequestPacket.java | 0 .../media/ClientMediaGetUploadUrlPacket.java | 0 .../media/ClientMediaRequestPacket.java | 0 .../packet/media/ClientMediaUpdatePacket.java | 0 .../media/ServerMediaPopulatePacket.java | 0 .../media/ServerMediaUploadUrlPacket.java | 0 .../packet/mod/ClientModsAnnouncePacket.java | 0 .../ServerMultiplayerJoinServerPacket.java | 0 .../notices/ClientNoticeDismissPacket.java | 0 .../notices/ClientNoticeRequestPacket.java | 0 .../notices/ServerNoticePopulatePacket.java | 0 .../notices/ServerNoticeRemovePacket.java | 0 .../pingproxy/ClientPingProxyPacket.java | 0 .../ServerPingProxyResponsePacket.java | 0 .../profile/ClientProfileActivityPacket.java | 0 .../profile/ServerProfileActivityPacket.java | 0 .../profile/ServerProfileStatusPacket.java | 0 ...ClientProfileTrustedHostsCreatePacket.java | 0 ...ClientProfileTrustedHostsDeletePacket.java | 0 .../ServerProfileTrustedHostsClearPacket.java | 0 ...rverProfileTrustedHostsPopulatePacket.java | 0 ...ServerProfileTrustedHostsRemovePacket.java | 0 .../ClientRelationshipCreatePacket.java | 0 .../RelationshipDeletePacket.java | 0 ...elationshipCreateFailedResponsePacket.java | 0 .../ServerRelationshipDeletePacket.java | 0 .../ServerRelationshipPopulatePacket.java | 0 .../ServerUuidNameMapPacket.java | 0 .../FriendRequestPrivacySettingPacket.java | 0 .../packet/response/ResponseActionPacket.java | 0 ...tServerDiscoveryRequestPopulatePacket.java | 0 .../ServerServerDiscoveryPopulatePacket.java | 0 .../packet/skin/ClientSkinCreatePacket.java | 0 .../packet/skin/ClientSkinDeletePacket.java | 0 .../skin/ClientSkinUpdateDataPacket.java | 0 .../ClientSkinUpdateFavoriteStatePacket.java | 0 .../ClientSkinUpdateLastUsedStatePacket.java | 0 .../skin/ClientSkinUpdateNamePacket.java | 0 .../packet/skin/ServerSkinPopulatePacket.java | 0 ...iscordRequestJoinServerResponsePacket.java | 0 .../SocialDiscordRequestJoinServerPacket.java | 0 .../SocialInviteToServerCancelPacket.java | 0 .../social/SocialInviteToServerPacket.java | 0 .../SubscriptionUpdatePacket.java | 0 .../telemetry/ClientTelemetryPacket.java | 0 .../upnp/ClientUPnPSessionClosePacket.java | 0 .../upnp/ClientUPnPSessionCreatePacket.java | 0 .../ClientUPnPSessionInvitesAddPacket.java | 0 .../ClientUPnPSessionInvitesRemovePacket.java | 0 ...lientUPnPSessionPingProxyUpdatePacket.java | 0 .../upnp/ClientUPnPSessionUpdatePacket.java | 0 .../ServerUPnPSessionInviteAddPacket.java | 0 .../upnp/ServerUPnPSessionPopulatePacket.java | 0 .../upnp/ServerUPnPSessionRemovePacket.java | 0 .../ClientWardrobeSettingsPacket.java | 0 ...lientWardrobeStoreBundleRequestPacket.java | 0 .../ServerWardrobeSettingsPacket.java | 0 .../ServerWardrobeStoreBundlePacket.java | 0 .../common/util/LoginUtil.java | 0 .../gg/essential/cosmetics/CosmeticSlot.java | 0 .../gg/essential/cosmetics/SkinLayer.java | 0 .../cosmetics/holder/PriceHolder.java | 0 .../cosmetics/holder/SkinLayersHolder.java | 0 .../essential/cosmetics/model/Cosmetic.java | 0 .../cosmetics/model/CosmeticAssets.java | 0 .../cosmetics/model/CosmeticCategory.java | 0 .../cosmetics/model/CosmeticGeometry.java | 0 .../cosmetics/model/CosmeticOutfit.java | 0 .../cosmetics/model/CosmeticSetting.java | 0 .../cosmetics/model/CosmeticSkinMask.java | 0 .../cosmetics/model/CosmeticStoreBundle.java | 0 .../model/CosmeticStoreBundleSkin.java | 0 .../cosmetics/model/CosmeticTier.java | 0 .../cosmetics/model/CosmeticType.java | 0 .../cosmetics/model/CosmeticUnlockData.java | 0 .../essential/cosmetics/model/EmoteWheel.java | 0 .../essential/holder/DisplayNameHolder.java | 0 .../java/gg/essential/media/model/Media.java | 0 .../media/model/MediaLocationMetadata.java | 0 .../media/model/MediaLocationType.java | 0 .../essential/media/model/MediaMetadata.java | 0 .../essential/media/model/MediaVariant.java | 0 .../gg/essential/model/EssentialAsset.java | 0 .../java/gg/essential/notices/NoticeType.java | 0 .../gg/essential/notices/model/Notice.java | 0 .../essential/profiles/model/TrustedHost.java | 0 .../model/ServerDiscovery.java | 0 .../model/ServerDiscoveryAssets.java | 0 .../java/gg/essential/skins/SkinModel.java | 0 .../java/gg/essential/skins/model/Skin.java | 0 .../java/gg/essential/upnp/UPnPPrivacy.java | 0 .../gg/essential/upnp/model/UPnPSession.java | 0 .../gg/essential/network/CMConnection.kt | 0 .../main/kotlin/gg/essential/network/Call.kt | 0 .../kdiscordipc}/build.gradle.kts | 2 +- .../util/kdiscordipc/KDiscordIPCLoader.kt | 1 + {libs => subprojects/libs}/build.gradle.kts | 0 {lwjgl3 => subprojects/lwjgl3}/README.md | 0 .../lwjgl3}/build.gradle.kts | 1 + .../lwjgl3}/impl/build.gradle.kts | 2 +- .../essential/util/lwjgl3/impl/Bootstrap.kt | 7 + .../gg/essential/util/lwjgl3/impl/GLBridge.kt | 0 .../util/lwjgl3/impl/NativeImageReaderImpl.kt | 0 .../essential/util/lwjgl3/impl/TinyFdImpl.kt | 0 .../util/lwjgl3/impl/nanovg/NanoVGImpl.kt | 0 .../gg/essential/util/lwjgl3/Lwjgl3Loader.kt | 12 +- .../util/lwjgl3/api/NativeImageReader.kt | 0 .../gg/essential/util/lwjgl3/api/TinyFd.kt | 0 .../util/lwjgl3/api/nanovg/NanoVG.kt | 0 .../util/lwjgl3/asm/GLBridgeTransformer.kt | 0 .../mixin-compat}/build.gradle.kts | 0 .../gg/essential/CompatAccessTransformer.java | 0 .../main/java/gg/essential/CompatMixin.java | 0 .../main/java/gg/essential/CompatShadow.java | 0 .../mixincompat/BundledAsmTransformer.java | 0 .../mixincompat/CallbackInjectorCompat.java | 0 .../mixincompat/GlobalPropertiesCompat.java | 0 ...calVariableDiscriminatorContextCompat.java | 0 .../essential/mixincompat/LocalsCompat.java | 0 .../mixincompat/MixinConfigCompat.java | 0 .../MixinPlatformManagerCompat.java | 0 .../mixincompat/MixinProcessorCompat.java | 0 .../MixinServiceLaunchWrapperCompat.java | 0 .../mixincompat/MixinTransformerCompat.java | 0 .../ModifyVariableInjectorCompat.java | 0 .../mixincompat/TargetSelectorCompat.java | 0 .../extensions/MixinConfigExt.java | 0 .../mixincompat/util/MixinCompatUtils.java | 0 .../plasmo}/build.gradle.kts | 0 .../essential/compat/PlasmoVoiceCompat.java | 0 .../quic-connector}/build.gradle.kts | 3 + .../main/java/gg/essential/quic/LogOnce.java | 0 .../gg/essential/quic/LogOnceHandler.java | 0 .../java/gg/essential/quic/ProxyHandler.java | 6 +- .../essential/quic/QuicClientConnector.java | 0 .../java/gg/essential/quic/QuicConnector.java | 0 .../essential/quic/QuicServerConnector.java | 0 .../main/java/gg/essential/quic/QuicUtil.java | 29 + .../essential/quic/backend/QuicBackend.java | 26 + .../quic/backend/QuicBackendImpl.java | 451 +++++++++++ .../quic/backend/QuicBackendLoader.java | 79 ++ .../essential/quic/backend/QuicListener.java | 26 + .../quic/backend/WrappedLoggingFactory.java | 213 +++++ .../slf4j-to-log4j}/README.md | 0 .../slf4j-to-log4j}/build.gradle.kts | 3 +- .../java/gg/essential/slf4j/Log4jLogger.java | 137 ++++ .../essential/slf4j}/Log4jLoggerFactory.java | 2 +- .../slf4j/SLF4JServiceProviderImpl.java | 41 +- .../org.slf4j.spi.SLF4JServiceProvider | 1 + {utils => subprojects/utils}/build.gradle.kts | 5 + .../kotlin/gg/essential/data/VersionInfo.kt | 0 .../kotlin/gg/essential/model/util/Color.kt | 0 .../gg/essential/util/ExponentialBackoff.kt | 0 .../gg/essential/util/OperatingSystem.kt | 0 .../kotlin/gg/essential/util/UIdentifier.kt | 0 .../essential/util/coroutineChannelUtils.kt | 38 + .../gg/essential/util/image/bitmap/Bitmap.kt | 0 .../essential/util/image/bitmap/extensions.kt | 0 .../util/image/bitmap/impl/IntArrayBitmap.kt | 0 .../gg/essential/util/image/mask/Mask.kt | 8 + .../util/image/mask/impl/LongArrayMask.kt | 0 .../essential/model/util/ResourceCleaner.kt | 0 .../gg/essential/model/util/jvmColor.kt | 0 .../gg/essential/slf4j/AbstractEventLogger.kt | 99 +++ .../gg/essential/slf4j/ChannelLogger.kt | 41 + .../gg/essential/slf4j/CombinedLogger.kt | 33 + .../gg/essential/slf4j/DelegatingLogger.kt | 50 ++ .../gg/essential/slf4j/ExtendedLogger.kt | 29 + .../kotlin/gg/essential/util}/FirewallUtil.kt | 14 +- .../gg/essential/util/LimitedExecutor.kt | 0 versions/1.12.2-1.8.9.txt | 35 - versions/1.15.2-1.12.2.txt | 14 - versions/1.16.2-1.12.2.txt | 122 +-- versions/1.17.1-1.16.2.txt | 9 - versions/1.19.4-1.19.3.txt | 3 + versions/1.20.2-1.20.1.txt | 7 +- .../entity/Mixin_Emissive_Elytra.java | 19 + versions/aliases.txt | 1 + 503 files changed, 6867 insertions(+), 1514 deletions(-) create mode 100644 changelog/release-1.3.3.md create mode 100644 elementa/statev2/src/main/kotlin/gg/essential/gui/elementa/state/v2/animate.kt delete mode 100644 feature-flags/src/main/java/gg/essential/config/FeatureFlags.java rename {src/main/kotlin/gg/essential/gui/modals => gui/essential/src/main/kotlin/gg/essential/gui/modal/sps}/FirewallBlockingModal.kt (92%) create mode 100644 gui/essential/src/main/kotlin/gg/essential/network/connectionmanager/ice/IIceManager.kt create mode 100644 gui/essential/src/main/kotlin/gg/essential/network/connectionmanager/ice/IceManagerImpl.kt create mode 100644 gui/essential/src/main/kotlin/gg/essential/network/connectionmanager/ice/PseudoTcpChannel.kt create mode 100644 gui/essential/src/main/kotlin/gg/essential/network/connectionmanager/ice/QuicChannel.kt delete mode 100644 kdiscordipc/src/main/java/gg/essential/util/kdiscordipc/RelaunchClassLoader.java delete mode 100644 lwjgl3/src/main/java/gg/essential/util/lwjgl3/IsolatedClassLoader.java delete mode 100644 slf4j-to-log4j/src/main/java/org/slf4j/impl/Log4jLogger.java delete mode 100644 slf4j-to-log4j/src/main/java/org/slf4j/impl/StaticMDCBinder.java delete mode 100644 slf4j-to-log4j/src/main/java/org/slf4j/impl/StaticMarkerBinder.java create mode 100644 src/main/java/gg/essential/config/FeatureFlagAbUserIdProvider.java create mode 100644 src/main/java/gg/essential/mixins/transformers/client/renderer/entity/Mixin_Emissive_Cape.java create mode 100644 src/main/java/gg/essential/mixins/transformers/client/renderer/entity/Mixin_Emissive_Elytra.java create mode 100644 src/main/kotlin/gg/essential/network/connectionmanager/ice/IceManagerMcImpl.kt create mode 100644 src/main/kotlin/gg/essential/network/connectionmanager/ice/netty/CoroutinesChannelInitializer.kt create mode 100644 src/main/kotlin/gg/essential/util/OptiFineAccessor.kt create mode 100644 src/main/resources/assets/essential/certs/globalsign-r4.der create mode 100644 src/main/resources/assets/essential/certs/gts-root-r2.der create mode 100644 src/main/resources/assets/essential/certs/gts-root-r3.der create mode 100644 src/main/resources/assets/essential/certs/gts-root-r4.der delete mode 100644 src/main/resources/assets/essential/certs/lets-encrypt-r3.der create mode 100644 subprojects/classloaders/build.gradle.kts rename {kdiscordipc/src/main/java/gg/essential/util/kdiscordipc => subprojects/classloaders/src/main/java/gg/essential/util/classloader}/IsolatedClassLoader.java (99%) rename {lwjgl3/src/main/java/gg/essential/util/lwjgl3 => subprojects/classloaders/src/main/java/gg/essential/util/classloader}/RelaunchClassLoader.java (86%) rename {clipboard => subprojects/clipboard}/build.gradle.kts (100%) rename {clipboard => subprojects/clipboard}/src/main/kotlin/gg/essential/clipboard/AWTClipboard.kt (100%) rename {clipboard => subprojects/clipboard}/src/main/kotlin/gg/essential/clipboard/Clipboard.kt (100%) rename {clipboard => subprojects/clipboard}/src/main/kotlin/gg/essential/clipboard/MacOSClipboard.kt (100%) rename {cosmetics => subprojects/cosmetics}/build.gradle.kts (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/CosmeticsState.kt (98%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/EquippedCosmetic.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/WearablesManager.kt (96%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/boxmask/ModelClipper.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/boxmask/ModelClipperImpl.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/events/AnimationEvent.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/events/AnimationEventType.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/events/AnimationTarget.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/skinmask/SkinMask.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/state/EssentialAnimationSystem.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/state/TextureAnimationSync.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/state/WearableLocator.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/cosmetics/types.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/EssentialAsset.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/Model.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/Skin.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/asset/AssetProvider.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/CapeModel.kt (98%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/CosmeticAssets.kt (97%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/CosmeticBundle.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/CosmeticCategory.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/CosmeticOutfit.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/CosmeticSlot.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/CosmeticTier.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/CosmeticType.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/CosmeticsSubject.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/EmoteWheelPage.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/OutfitSkin.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/PlayerModel.kt (99%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/SkinLayer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/capeDisabled.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/database/CosmeticsDatabase.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/database/GitRepoCosmeticsDatabase.kt (99%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/featured/FeaturedItem.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/featured/FeaturedItemType.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/featured/FeaturedPage.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/featured/FeaturedPageCollection.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/preview/PerspectiveCamera.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/settings/CosmeticProperty.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/settings/CosmeticPropertyType.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/settings/CosmeticSetting.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/settings/CosmeticSettingType.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/settings/CosmeticSettings.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/settings/FallbackPolymorphicSerializer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/mod/cosmetics/settings/UntypedCosmeticSetting.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/Animation.kt (99%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/BedrockModel.kt (89%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/Bone.kt (95%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/Box3.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/Cube.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/CubeUvData.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/EnumPart.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/Face.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/ModelInstance.kt (97%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/ModelParser.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/ParticleEffect.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/ParticleSystem.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/PositionTexVertex.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/RenderMetadata.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/Side.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/SoundCategory.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/SoundEffect.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/Vector3.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/backend/PlayerPose.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/backend/RenderBackend.kt (92%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/backend/atlas/TextureAtlas.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/collision/CollisionProvider.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/collision/PlaneCollisionProvider.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/file/AnimationFile.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/file/ModelFile.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/file/ParticlesFile.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/file/SoundDefinitionsFile.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/light/Light.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/light/LightProvider.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/molang/MolangContext.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/molang/MolangExpression.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/molang/MolangVec3.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/AnySerializer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/ColorAsRgbSerializer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/Instant.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/InstantAsIso8601Serializer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/InstantAsMillisSerializer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/ListOrSingleSerializer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/PairAsListSerializer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/PlayerPoseManager.kt (99%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/TreeMap.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/UMatrixStack.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/UVertexConsumer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/kotgl.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/platformMath.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/model/util/quaternion.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/network/cosmetics/Cosmetic.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/commonMain/kotlin/gg/essential/serialization/SnakeAsUpperCaseSerializer.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/minecraftMain/kotlin/gg/essential/model/util/Instant.kt (100%) rename {cosmetics => subprojects/cosmetics}/src/minecraftMain/kotlin/gg/essential/model/util/platformMath.kt (100%) rename {feature-flags => subprojects/feature-flags}/build.gradle.kts (100%) rename {feature-flags => subprojects/feature-flags}/src/main/java/gg/essential/config/AccessedViaReflection.java (100%) create mode 100644 subprojects/feature-flags/src/main/java/gg/essential/config/FeatureFlags.java rename {feature-flags => subprojects/feature-flags}/src/main/java/gg/essential/config/LoadsResources.java (100%) rename {feature-flags => subprojects/feature-flags}/src/main/kotlin/gg/essential/config/HideIfDisabled.kt (100%) create mode 100644 subprojects/ice/build.gradle.kts create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/CandidateManager.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/CandidateType.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/IceAgent.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/candidates.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/BindingPacer.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/ChannelData.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/StunAttribute.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/StunAttributeType.kt rename src/main/java/gg/essential/network/connectionmanager/sps/SPSState.java => subprojects/ice/src/main/kotlin/gg/essential/ice/stun/StunClass.kt (75%) create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/StunManager.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/StunMessage.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/StunRequest.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/StunSocket.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/StunType.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/TransactionId.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/stun/UdpStunPacket.kt create mode 100644 subprojects/ice/src/main/kotlin/gg/essential/ice/utils.kt rename {immediatelyfast => subprojects/immediatelyfast}/build.gradle.kts (100%) rename {immediatelyfast => subprojects/immediatelyfast}/src/main/java/gg/essential/compat/ImmediatelyFastCompat.java (100%) rename {infra => subprojects/infra}/build.gradle.kts (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/chat/enums/ChannelType.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/chat/enums/ReportVerdict.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/chat/model/Channel.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/chat/model/ChannelSettings.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/chat/model/ClosedInfo.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/chat/model/CreatedInfo.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/chat/model/Message.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/chat/model/MessageReport.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/chat/model/ReportVerdict.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/relationships/enums/FriendRequestPrivacySetting.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/relationships/enums/RelationshipState.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/relationships/enums/RelationshipType.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/relationships/serialisation/FriendRequestPrivacySettingTypeAdapter.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/relationships/serialisation/RelationshipStateAdapter.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/relationships/serialisation/RelationshipTypeAdapter.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/serialization/DateTimeTypeAdapter.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/serialization/UUIDTypeAdapter.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/util/DateTime.java (100%) rename {infra => subprojects/infra}/src/main/java/com/sparkuniverse/toolbox/util/Validate.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/coins/model/CoinBundle.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/enums/ActivityType.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/enums/ProfileStatus.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/model/relationships/Relationship.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/Packet.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ChatChannelMemberAddPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ChatChannelMemberRemovePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ChatChannelMessageDeletePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ChatChannelUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ClientChatChannelCreatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ClientChatChannelMessageCreatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ClientChatChannelMessageReadStatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ClientChatChannelMessageReportPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ClientChatChannelMessageUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ClientChatChannelMessagesRetrievePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ClientChatChannelMutePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ServerChannelMemberActionResponsePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ServerChatChannelAddPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ServerChatChannelClearPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ServerChatChannelMessagePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ServerChatChannelMessageReportPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ServerChatChannelMessageReportReasonsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/chat/ServerChatChannelRemovePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/checkout/ClientCheckoutClaimCoinsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/checkout/ClientCheckoutCoinBundlePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/checkout/ClientCheckoutCosmeticsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/checkout/ClientCheckoutDynamicCoinBundlePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/checkout/ClientCheckoutPartnerCodeRequestDataPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/checkout/ClientCheckoutStoreBundlePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/checkout/ServerCheckoutClaimCoinsResponsePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/checkout/ServerCheckoutPartnerCodeDataPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/checkout/ServerCheckoutUrlPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/coins/ClientCoinBundleOptionsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/coins/ClientCoinsBalancePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/coins/ServerCoinBundleOptionsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/coins/ServerCoinsBalancePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/connection/ClientConnectionDisconnectPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/connection/ConnectionKeepAlivePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/connection/ConnectionRegisterPacketTypeIdPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/connection/ServerConnectionReconnectPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ClientCosmeticAnimationTriggerPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ClientCosmeticBulkRequestUnlockStatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ClientCosmeticCheckoutPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ClientCosmeticRequestPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ClientCosmeticsUserEquippedVisibilityTogglePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticAnimationTriggerPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticBulkRequestUnlockStateResponsePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticPlayerSettingsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticTypesPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticsPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticsRevokePurchasePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticsSkinTexturePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticsUserEquippedPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticsUserEquippedVisibilityPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/ServerCosmeticsUserUnlockedPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/capes/ClientCosmeticCapesUnlockedPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/categories/ClientCosmeticCategoriesRequestPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/categories/ServerCosmeticCategoriesPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/emote/ClientCosmeticEmoteWheelSelectPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/emote/ClientCosmeticEmoteWheelUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/emote/ServerCosmeticEmoteWheelPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ClientCosmeticOutfitCosmeticSettingsUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ClientCosmeticOutfitCreatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ClientCosmeticOutfitDeletePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ClientCosmeticOutfitEquippedCosmeticsUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ClientCosmeticOutfitNameUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ClientCosmeticOutfitSelectPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ClientCosmeticOutfitSelectedRequestPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ClientCosmeticOutfitSkinUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ClientCosmeticOutfitUpdateFavoriteStatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ServerCosmeticOutfitPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/cosmetic/outfit/ServerCosmeticOutfitSelectedResponsePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/currency/ClientCurrencyOptionsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/currency/ServerCurrencyOptionsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/ice/IceCandidatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/ice/IceSessionPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/media/ClientMediaCreatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/media/ClientMediaDeleteRequestPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/media/ClientMediaGetUploadUrlPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/media/ClientMediaRequestPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/media/ClientMediaUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/media/ServerMediaPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/media/ServerMediaUploadUrlPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/mod/ClientModsAnnouncePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/multiplayer/ServerMultiplayerJoinServerPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/notices/ClientNoticeDismissPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/notices/ClientNoticeRequestPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/notices/ServerNoticePopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/notices/ServerNoticeRemovePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/pingproxy/ClientPingProxyPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/pingproxy/ServerPingProxyResponsePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/profile/ClientProfileActivityPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/profile/ServerProfileActivityPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/profile/ServerProfileStatusPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/profile/trustedhosts/ClientProfileTrustedHostsCreatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/profile/trustedhosts/ClientProfileTrustedHostsDeletePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/profile/trustedhosts/ServerProfileTrustedHostsClearPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/profile/trustedhosts/ServerProfileTrustedHostsPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/profile/trustedhosts/ServerProfileTrustedHostsRemovePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/relationships/ClientRelationshipCreatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/relationships/RelationshipDeletePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/relationships/ServerRelationshipCreateFailedResponsePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/relationships/ServerRelationshipDeletePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/relationships/ServerRelationshipPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/relationships/ServerUuidNameMapPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/relationships/privacy/FriendRequestPrivacySettingPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/response/ResponseActionPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/serverdiscovery/ClientServerDiscoveryRequestPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/serverdiscovery/ServerServerDiscoveryPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/skin/ClientSkinCreatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/skin/ClientSkinDeletePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/skin/ClientSkinUpdateDataPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/skin/ClientSkinUpdateFavoriteStatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/skin/ClientSkinUpdateLastUsedStatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/skin/ClientSkinUpdateNamePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/skin/ServerSkinPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/social/ClientSocialDiscordRequestJoinServerResponsePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/social/SocialDiscordRequestJoinServerPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/social/SocialInviteToServerCancelPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/social/SocialInviteToServerPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/subscription/SubscriptionUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/telemetry/ClientTelemetryPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/upnp/ClientUPnPSessionClosePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/upnp/ClientUPnPSessionCreatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/upnp/ClientUPnPSessionInvitesAddPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/upnp/ClientUPnPSessionInvitesRemovePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/upnp/ClientUPnPSessionPingProxyUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/upnp/ClientUPnPSessionUpdatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/upnp/ServerUPnPSessionInviteAddPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/upnp/ServerUPnPSessionPopulatePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/upnp/ServerUPnPSessionRemovePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/wardrobe/ClientWardrobeSettingsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/wardrobe/ClientWardrobeStoreBundleRequestPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/wardrobe/ServerWardrobeSettingsPacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/packet/wardrobe/ServerWardrobeStoreBundlePacket.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/connectionmanager/common/util/LoginUtil.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/CosmeticSlot.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/SkinLayer.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/holder/PriceHolder.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/holder/SkinLayersHolder.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/Cosmetic.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticAssets.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticCategory.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticGeometry.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticOutfit.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticSetting.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticSkinMask.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticStoreBundle.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticStoreBundleSkin.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticTier.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticType.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/CosmeticUnlockData.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/cosmetics/model/EmoteWheel.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/holder/DisplayNameHolder.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/media/model/Media.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/media/model/MediaLocationMetadata.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/media/model/MediaLocationType.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/media/model/MediaMetadata.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/media/model/MediaVariant.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/model/EssentialAsset.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/notices/NoticeType.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/notices/model/Notice.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/profiles/model/TrustedHost.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/serverdiscovery/model/ServerDiscovery.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/serverdiscovery/model/ServerDiscoveryAssets.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/skins/SkinModel.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/skins/model/Skin.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/upnp/UPnPPrivacy.java (100%) rename {infra => subprojects/infra}/src/main/java/gg/essential/upnp/model/UPnPSession.java (100%) rename {infra => subprojects/infra}/src/main/kotlin/gg/essential/network/CMConnection.kt (100%) rename {infra => subprojects/infra}/src/main/kotlin/gg/essential/network/Call.kt (100%) rename {kdiscordipc => subprojects/kdiscordipc}/build.gradle.kts (94%) rename {kdiscordipc => subprojects/kdiscordipc}/src/main/kotlin/gg/essential/util/kdiscordipc/KDiscordIPCLoader.kt (97%) rename {libs => subprojects/libs}/build.gradle.kts (100%) rename {lwjgl3 => subprojects/lwjgl3}/README.md (100%) rename {lwjgl3 => subprojects/lwjgl3}/build.gradle.kts (95%) rename {lwjgl3 => subprojects/lwjgl3}/impl/build.gradle.kts (98%) rename {lwjgl3 => subprojects/lwjgl3}/impl/src/main/kotlin/gg/essential/util/lwjgl3/impl/Bootstrap.kt (75%) rename {lwjgl3 => subprojects/lwjgl3}/impl/src/main/kotlin/gg/essential/util/lwjgl3/impl/GLBridge.kt (100%) rename {lwjgl3 => subprojects/lwjgl3}/impl/src/main/kotlin/gg/essential/util/lwjgl3/impl/NativeImageReaderImpl.kt (100%) rename {lwjgl3 => subprojects/lwjgl3}/impl/src/main/kotlin/gg/essential/util/lwjgl3/impl/TinyFdImpl.kt (100%) rename {lwjgl3 => subprojects/lwjgl3}/impl/src/main/kotlin/gg/essential/util/lwjgl3/impl/nanovg/NanoVGImpl.kt (100%) rename {lwjgl3 => subprojects/lwjgl3}/src/main/kotlin/gg/essential/util/lwjgl3/Lwjgl3Loader.kt (91%) rename {lwjgl3 => subprojects/lwjgl3}/src/main/kotlin/gg/essential/util/lwjgl3/api/NativeImageReader.kt (100%) rename {lwjgl3 => subprojects/lwjgl3}/src/main/kotlin/gg/essential/util/lwjgl3/api/TinyFd.kt (100%) rename {lwjgl3 => subprojects/lwjgl3}/src/main/kotlin/gg/essential/util/lwjgl3/api/nanovg/NanoVG.kt (100%) rename {lwjgl3 => subprojects/lwjgl3}/src/main/kotlin/gg/essential/util/lwjgl3/asm/GLBridgeTransformer.kt (100%) rename {mixin-compat => subprojects/mixin-compat}/build.gradle.kts (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/CompatAccessTransformer.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/CompatMixin.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/CompatShadow.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/BundledAsmTransformer.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/CallbackInjectorCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/GlobalPropertiesCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/LocalVariableDiscriminatorContextCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/LocalsCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/MixinConfigCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/MixinPlatformManagerCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/MixinProcessorCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/MixinServiceLaunchWrapperCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/MixinTransformerCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/ModifyVariableInjectorCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/TargetSelectorCompat.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/extensions/MixinConfigExt.java (100%) rename {mixin-compat => subprojects/mixin-compat}/src/main/java/gg/essential/mixincompat/util/MixinCompatUtils.java (100%) rename {plasmo => subprojects/plasmo}/build.gradle.kts (100%) rename {plasmo => subprojects/plasmo}/src/main/java/gg/essential/compat/PlasmoVoiceCompat.java (100%) rename {quic-connector => subprojects/quic-connector}/build.gradle.kts (94%) rename {quic-connector => subprojects/quic-connector}/src/main/java/gg/essential/quic/LogOnce.java (100%) rename {quic-connector => subprojects/quic-connector}/src/main/java/gg/essential/quic/LogOnceHandler.java (100%) rename {quic-connector => subprojects/quic-connector}/src/main/java/gg/essential/quic/ProxyHandler.java (93%) rename {quic-connector => subprojects/quic-connector}/src/main/java/gg/essential/quic/QuicClientConnector.java (100%) rename {quic-connector => subprojects/quic-connector}/src/main/java/gg/essential/quic/QuicConnector.java (100%) rename {quic-connector => subprojects/quic-connector}/src/main/java/gg/essential/quic/QuicServerConnector.java (100%) create mode 100644 subprojects/quic-connector/src/main/java/gg/essential/quic/QuicUtil.java create mode 100644 subprojects/quic-connector/src/main/java/gg/essential/quic/backend/QuicBackend.java create mode 100644 subprojects/quic-connector/src/main/java/gg/essential/quic/backend/QuicBackendImpl.java create mode 100644 subprojects/quic-connector/src/main/java/gg/essential/quic/backend/QuicBackendLoader.java create mode 100644 subprojects/quic-connector/src/main/java/gg/essential/quic/backend/QuicListener.java create mode 100644 subprojects/quic-connector/src/main/java/gg/essential/quic/backend/WrappedLoggingFactory.java rename {slf4j-to-log4j => subprojects/slf4j-to-log4j}/README.md (100%) rename {slf4j-to-log4j => subprojects/slf4j-to-log4j}/build.gradle.kts (95%) create mode 100644 subprojects/slf4j-to-log4j/src/main/java/gg/essential/slf4j/Log4jLogger.java rename {slf4j-to-log4j/src/main/java/org/slf4j/impl => subprojects/slf4j-to-log4j/src/main/java/gg/essential/slf4j}/Log4jLoggerFactory.java (98%) rename slf4j-to-log4j/src/main/java/org/slf4j/impl/StaticLoggerBinder.java => subprojects/slf4j-to-log4j/src/main/java/gg/essential/slf4j/SLF4JServiceProviderImpl.java (53%) create mode 100644 subprojects/slf4j-to-log4j/src/main/resources/META-INF/services/org.slf4j.spi.SLF4JServiceProvider rename {utils => subprojects/utils}/build.gradle.kts (82%) rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/data/VersionInfo.kt (100%) rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/model/util/Color.kt (100%) rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/util/ExponentialBackoff.kt (100%) rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/util/OperatingSystem.kt (100%) rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/util/UIdentifier.kt (100%) create mode 100644 subprojects/utils/src/commonMain/kotlin/gg/essential/util/coroutineChannelUtils.kt rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/util/image/bitmap/Bitmap.kt (100%) rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/util/image/bitmap/extensions.kt (100%) rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/util/image/bitmap/impl/IntArrayBitmap.kt (100%) rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/util/image/mask/Mask.kt (92%) rename {utils => subprojects/utils}/src/commonMain/kotlin/gg/essential/util/image/mask/impl/LongArrayMask.kt (100%) rename {utils => subprojects/utils}/src/jvmMain/kotlin/gg/essential/model/util/ResourceCleaner.kt (100%) rename {utils => subprojects/utils}/src/jvmMain/kotlin/gg/essential/model/util/jvmColor.kt (100%) create mode 100644 subprojects/utils/src/jvmMain/kotlin/gg/essential/slf4j/AbstractEventLogger.kt create mode 100644 subprojects/utils/src/jvmMain/kotlin/gg/essential/slf4j/ChannelLogger.kt create mode 100644 subprojects/utils/src/jvmMain/kotlin/gg/essential/slf4j/CombinedLogger.kt create mode 100644 subprojects/utils/src/jvmMain/kotlin/gg/essential/slf4j/DelegatingLogger.kt create mode 100644 subprojects/utils/src/jvmMain/kotlin/gg/essential/slf4j/ExtendedLogger.kt rename {src/main/kotlin/gg/essential/sps => subprojects/utils/src/jvmMain/kotlin/gg/essential/util}/FirewallUtil.kt (76%) rename {utils => subprojects/utils}/src/jvmMain/kotlin/gg/essential/util/LimitedExecutor.kt (100%) delete mode 100644 versions/1.15.2-1.12.2.txt create mode 100644 versions/1.19.4-1.19.3.txt create mode 100644 versions/1.8.9-forge/src/main/java/gg/essential/mixins/transformers/client/renderer/entity/Mixin_Emissive_Elytra.java diff --git a/README.md b/README.md index 46e0875..e307e19 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Essential is a quality of life mod that boosts Minecraft Java Edition to the nex The source code of the Essential Mod is accessible to everyone, demonstrating our commitment to transparency with our users and the broader community. -For assistance with this repository or the mod, please utilize the support channels available in our [Discord](https://essential.gg/discord). +For assistance with this repository or the mod, please utilize the dedicated channels available in our [Discord](https://essential.gg/discord). Discover more about Essential on our [Website](https://essential.gg) or visit the [Essential Wiki](https://essential.gg/wiki). @@ -186,7 +186,7 @@ Essential Mod's source code. - Utilize any code or assets, including for personal use - Incorporate the source code in any other projects or use our code as a reference in new projects - Modify or alter the source code provided here -- Distributing compiled versions of the source code or modified source code +- Distribute compiled versions of the source code or modified source code This summary is not an exhaustive interpretation of the license; for a comprehensive understanding, please refer to [the full license file](https://github.com/EssentialGG/Essential/blob/main/LICENSE). diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index ac4fa06..b63507a 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { implementation("org.ow2.asm:asm-commons:9.3") implementation ("com.google.guava:guava:30.1.1-jre") - implementation("gg.essential:essential-gradle-toolkit:0.5.0") + implementation("gg.essential:essential-gradle-toolkit:0.6.2") } gradlePlugin { diff --git a/build-logic/src/main/kotlin/essential/preprocessor.kt b/build-logic/src/main/kotlin/essential/preprocessor.kt index ba92365..3891085 100644 --- a/build-logic/src/main/kotlin/essential/preprocessor.kt +++ b/build-logic/src/main/kotlin/essential/preprocessor.kt @@ -18,6 +18,8 @@ import java.io.File fun Project.configurePreprocessTree(versions: File) { configure { + strictExtraMappings.set(true) + val fabric12100 = createNode("1.21-fabric", 12100, "yarn") val fabric12006 = createNode("1.20.6-fabric", 12006, "yarn") val forge12004 = createNode("1.20.4-forge", 12004, "srg") @@ -54,7 +56,7 @@ fun Project.configurePreprocessTree(versions: File) { fabric12001.link(fabric12000) fabric12000.link(fabric11904) forge11904.link(fabric11904) - fabric11904.link(fabric11903) + fabric11904.link(fabric11903, versions.resolve("1.19.4-1.19.3.txt")) forge11903.link(fabric11903) fabric11903.link(fabric11902, versions.resolve("1.19.3-1.19.2.txt")) forge11902.link(fabric11902) diff --git a/build-logic/src/main/kotlin/essential/universal.kt b/build-logic/src/main/kotlin/essential/universal.kt index 21e9c7b..0dba20e 100644 --- a/build-logic/src/main/kotlin/essential/universal.kt +++ b/build-logic/src/main/kotlin/essential/universal.kt @@ -51,8 +51,8 @@ fun Project.universalLibs() { compileOnly("org.jetbrains.kotlinx:kotlinx-serialization-json:${kotlin.serialization}") compileOnly("org.jetbrains:annotations:23.0.0") - // Provided by MC on 1.17+, and by `:slf4j-to-log4j` on older versions - compileOnly("org.slf4j:slf4j-api:1.7.36") + // Provided by MC on modern versions, and by `:slf4j-to-log4j` on older versions + compileOnly(catalog.findLibrary("slf4j-api").orElseThrow()) // Provided by MC (should ideally migrate away from this as MC itself is migrating to slf4j) compileOnly("org.apache.logging.log4j:log4j-api:2.0-beta9") // Depending on LWJGL3 instead of 2 so we can choose opengl bindings only diff --git a/build-logic/src/main/kotlin/gg/essential/gradle/BundlePlugin.kt b/build-logic/src/main/kotlin/gg/essential/gradle/BundlePlugin.kt index 3fc2f56..ac35465 100644 --- a/build-logic/src/main/kotlin/gg/essential/gradle/BundlePlugin.kt +++ b/build-logic/src/main/kotlin/gg/essential/gradle/BundlePlugin.kt @@ -53,7 +53,7 @@ private fun Project.createConfigurations(platform: Platform): Configurations { val bundle by configurations.creating { exclude(module = "fabric-loader") // specifying module only, so the yarn-mapped version in excluded as well exclude(group = "net.minecraftforge", module = "forge") - if (platform.mcVersion >= 11700) { + if (platform.mcVersion >= 11903) { exclude(group = "org.slf4j", module = "slf4j-api") } } diff --git a/build-logic/src/main/kotlin/gg/essential/gradle/RelocatePlugin.kt b/build-logic/src/main/kotlin/gg/essential/gradle/RelocatePlugin.kt index f8240c6..b7e1561 100644 --- a/build-logic/src/main/kotlin/gg/essential/gradle/RelocatePlugin.kt +++ b/build-logic/src/main/kotlin/gg/essential/gradle/RelocatePlugin.kt @@ -106,6 +106,7 @@ private fun Project.createRelocateTask(): TaskProvider { val jarTask = tasks.getByName("bundleJar") from(jarTask.archiveFile) manifest.inheritFrom(jarTask.manifest) + mergeServiceFiles() } project.tasks.named("assemble") { dependsOn(relocatedJar) } return relocatedJar @@ -130,6 +131,7 @@ private fun Project.createAbiValidationTasks(relocateTask: TaskProvider