feat:集成sls皮肤站,但是未测试

This commit is contained in:
2026-09-09 22:52:32 +08:00
parent 6a295f9a7a
commit aff1512241
5 changed files with 328 additions and 195 deletions

4
Cargo.lock generated
View File

@ -6810,7 +6810,7 @@ dependencies = [
[[package]]
name = "theseus"
version = "1.9.6-beta.2"
version = "1.9.6-beta.3"
dependencies = [
"ariadne",
"async-minecraft-ping",
@ -6915,7 +6915,7 @@ dependencies = [
[[package]]
name = "theseus_gui"
version = "1.9.6-beta.2"
version = "1.9.6-beta.3"
dependencies = [
"ashpd",
"async_zip",

View File

@ -31,12 +31,6 @@
{{ formatMessage(messages.addThirdPartyAccount) }}
</button>
</ButtonStyled>
<ButtonStyled>
<button :disabled="loginDisabled" @click="showOfflineAccountModal()">
<PlusIcon />
{{ formatMessage(messages.addOfflineAccount) }}
</button>
</ButtonStyled>
</div>
<Accordion
v-else
@ -154,88 +148,10 @@
{{ formatMessage(messages.addThirdPartyAccount) }}
</button>
</ButtonStyled>
<ButtonStyled v-if="accounts.length > 0" class="w-full">
<button :disabled="loginDisabled" @click="showOfflineAccountModal()">
<PlusIcon />
{{ formatMessage(messages.addOfflineAccount) }}
</button>
</ButtonStyled>
</div>
</div>
</Accordion>
<MinecraftLoginModal ref="minecraftLoginModal" @complete="onMicrosoftLogin" />
<ModalWrapper ref="offlineAccountModal" :header="formatMessage(messages.offlineModalTitle)">
<div class="flex min-w-[22rem] flex-col gap-4">
<p class="m-0 text-secondary">{{ formatMessage(messages.offlineModalDescription) }}</p>
<label class="flex flex-col gap-2 font-semibold">
{{ formatMessage(messages.usernameLabel) }}
<StyledInput
v-model="offlineUsername"
:disabled="loginDisabled"
:placeholder="formatMessage(messages.usernamePlaceholder)"
autocomplete="off"
maxlength="16"
@keyup.enter="addOfflineAccount()"
/>
</label>
<p v-if="offlineUsername.length > 0 && !offlineUsernameValid" class="m-0 text-sm text-red">
{{ formatMessage(messages.usernameValidation) }}
</p>
<p
v-if="offlineUsernameContainsChinese"
class="m-0 rounded-lg border border-solid border-orange bg-highlight-orange p-3 text-sm text-contrast"
>
{{ formatMessage(messages.chineseUsernameWarning) }}
</p>
<Checkbox
v-model="offlineCustomUuid"
:disabled="loginDisabled"
:label="formatMessage(messages.customUuidLabel)"
/>
<Admonition
v-if="offlineCustomUuid"
type="warning"
:body="formatMessage(messages.customUuidWarning)"
/>
<label v-if="offlineCustomUuid" class="flex flex-col gap-2 font-semibold">
{{ formatMessage(messages.customUuidInputLabel) }}
<StyledInput
v-model="offlineUuid"
:disabled="loginDisabled"
:placeholder="formatMessage(messages.customUuidPlaceholder)"
autocomplete="off"
spellcheck="false"
maxlength="36"
@keyup.enter="addOfflineAccount()"
/>
</label>
<p
v-if="offlineCustomUuid && offlineUuid.length > 0 && !offlineUuidValid"
class="m-0 text-sm text-red"
>
{{ formatMessage(messages.customUuidValidation) }}
</p>
<Admonition
v-if="offlineUuidDuplicate"
type="critical"
:body="formatMessage(messages.customUuidDuplicate)"
/>
<div class="input-group push-right">
<ButtonStyled>
<button :disabled="loginDisabled" @click="offlineAccountModal?.hide()">
{{ formatMessage(commonMessages.cancelButton) }}
</button>
</ButtonStyled>
<ButtonStyled color="brand">
<button :disabled="loginDisabled || !offlineFormValid" @click="addOfflineAccount()">
<SpinnerIcon v-if="loginDisabled" class="animate-spin" />
<PlusIcon v-else />
{{ formatMessage(messages.createOfflineAccount) }}
</button>
</ButtonStyled>
</div>
</div>
</ModalWrapper>
<ModalWrapper ref="yggdrasilAccountModal" :header="formatMessage(messages.thirdPartyModalTitle)">
<div class="flex min-w-[24rem] flex-col gap-4">
<p class="m-0 text-secondary">{{ formatMessage(messages.thirdPartyModalDescription) }}</p>
@ -265,16 +181,12 @@
</ButtonStyled>
</div>
</div>
<ButtonStyled class="w-full">
<button :disabled="loginDisabled" @click="useLittleSkinPreset()">
{{ formatMessage(messages.useLittleSkin) }}
</button>
</ButtonStyled>
<label class="flex flex-col gap-2 font-semibold">
{{ formatMessage(messages.apiRootLabel) }}
<StyledInput
v-model="yggdrasilApiRoot"
:disabled="loginDisabled"
:disabled="true"
readonly
:placeholder="formatMessage(messages.apiRootPlaceholder)"
inputmode="url"
@blur="loadRememberedYggdrasilPassword()"
@ -348,10 +260,8 @@ import {
} from '@modrinth/assets'
import {
Accordion,
Admonition,
Avatar,
ButtonStyled,
Checkbox,
commonMessages,
defineMessages,
injectNotificationManager,
@ -372,7 +282,6 @@ import { useNetworkStatus } from '@/composables/useNetworkStatus'
import { compareMinecraftAccounts } from '@/helpers/accounts'
import { trackEvent } from '@/helpers/analytics'
import {
add_offline_user,
begin_yggdrasil_login,
delete_yggdrasil_password,
finish_yggdrasil_login,
@ -453,7 +362,7 @@ type YggdrasilLoginResult =
| { status: 'complete'; credentials: MinecraftCredential }
| { status: 'select_profile'; flow_id: string; profiles: YggdrasilProfile[] }
const LITTLE_SKIN_API_ROOT = 'https://littleskin.cn/api/yggdrasil'
const STARLIGHT_YGGDRASIL_API_ROOT = 'https://skin.starlight.cool/yggdrasil'
const accounts: Ref<MinecraftCredential[]> = ref([])
const loginDisabled = ref(false)
@ -467,29 +376,9 @@ let refreshGeneration = 0
let headRefreshTimer: ReturnType<typeof setTimeout> | undefined
let defaultUserUpdateQueue = Promise.resolve()
const minecraftLoginModal = ref<InstanceType<typeof MinecraftLoginModal> | null>(null)
const offlineAccountModal = ref<InstanceType<typeof ModalWrapper> | null>(null)
const offlineUsername = ref('')
const offlineCustomUuid = ref(false)
const offlineUuid = ref('')
const offlineUuidDuplicate = ref(false)
const offlineUsernameValid = computed(() =>
/^[\p{L}\p{N}_]{1,16}$/u.test(offlineUsername.value.trim()),
)
const offlineUuidValid = computed(() =>
/^[a-fA-F0-9]{32}$/u.test(offlineUuid.value.replaceAll('-', '')),
)
const offlineFormValid = computed(
() => offlineUsernameValid.value && (!offlineCustomUuid.value || offlineUuidValid.value),
)
watch([offlineUuid, offlineCustomUuid], () => {
offlineUuidDuplicate.value = false
})
const offlineUsernameContainsChinese = computed(() =>
/\p{Script=Han}/u.test(offlineUsername.value.trim()),
)
const yggdrasilAccountModal = ref<InstanceType<typeof ModalWrapper> | null>(null)
const yggdrasilProfileModal = ref<InstanceType<typeof ModalWrapper> | null>(null)
const yggdrasilApiRoot = ref(LITTLE_SKIN_API_ROOT)
const yggdrasilApiRoot = ref(STARLIGHT_YGGDRASIL_API_ROOT)
const yggdrasilLogin = ref('')
const yggdrasilPassword = ref('')
const rememberYggdrasilPassword = ref(true)
@ -573,7 +462,12 @@ async function refreshValues(headRefreshAttempt = 0) {
// carry this refinement. The double cast is deliberate — the shape is
// correct and verified at runtime by the backend.
accounts.value = Array.isArray(userList)
? [...(userList as unknown as MinecraftCredential[])]
? [...(userList as unknown as MinecraftCredential[])].filter(
(account) =>
account.account_type === 'microsoft' ||
(account.account_type === 'yggdrasil' &&
account.yggdrasil?.api_root.replace(/\/+$/, '') === STARLIGHT_YGGDRASIL_API_ROOT),
)
: []
accounts.value.sort(compareMinecraftAccounts)
await renderAccountHeads(accounts.value, generation)
@ -792,16 +686,8 @@ async function onMicrosoftLogin(account: MinecraftCredential) {
}
}
function showOfflineAccountModal() {
offlineUsername.value = ''
offlineCustomUuid.value = false
offlineUuid.value = ''
offlineUuidDuplicate.value = false
offlineAccountModal.value?.show()
}
async function showYggdrasilAccountModal() {
yggdrasilApiRoot.value = LITTLE_SKIN_API_ROOT
yggdrasilApiRoot.value = STARLIGHT_YGGDRASIL_API_ROOT
yggdrasilLogin.value = ''
yggdrasilPassword.value = ''
rememberYggdrasilPassword.value = true
@ -813,13 +699,21 @@ async function showYggdrasilAccountModal() {
async function loadSavedYggdrasilLogins() {
const storedLogins = await list_yggdrasil_saved_logins().catch(handleError)
const savedLogins: SavedYggdrasilLogin[] = Array.isArray(storedLogins) ? [...storedLogins] : []
const savedLogins: SavedYggdrasilLogin[] = Array.isArray(storedLogins)
? [...storedLogins].filter(
(savedLogin) => savedLogin.api_root.replace(/\/+$/, '') === STARLIGHT_YGGDRASIL_API_ROOT,
)
: []
const savedLoginKeys = new Set(
savedLogins.map((savedLogin) => `${savedLogin.api_root}\n${savedLogin.login}`),
)
for (const account of accounts.value) {
if (!account.yggdrasil) continue
if (
!account.yggdrasil ||
account.yggdrasil.api_root.replace(/\/+$/, '') !== STARLIGHT_YGGDRASIL_API_ROOT
)
continue
const savedLogin = {
api_root: account.yggdrasil.api_root,
login: account.yggdrasil.login,
@ -888,10 +782,6 @@ async function removeSavedYggdrasilLogin(savedLogin: SavedYggdrasilLogin) {
}
}
function useLittleSkinPreset() {
yggdrasilApiRoot.value = LITTLE_SKIN_API_ROOT
}
async function loadRememberedYggdrasilPassword() {
if (
!rememberYggdrasilPassword.value ||
@ -930,6 +820,7 @@ async function persistYggdrasilPasswordPreference() {
async function addYggdrasilAccount() {
if (!yggdrasilFormValid.value || loginDisabled.value) return
if (yggdrasilApiRoot.value.trim().replace(/\/+$/, '') !== STARLIGHT_YGGDRASIL_API_ROOT) return
loginDisabled.value = true
try {
@ -976,37 +867,6 @@ async function selectYggdrasilProfile(profileId: string) {
}
}
async function addOfflineAccount() {
if (!offlineFormValid.value || loginDisabled.value) return
loginDisabled.value = true
offlineUuidDuplicate.value = false
try {
const account = await add_offline_user(
offlineUsername.value.trim(),
offlineCustomUuid.value ? offlineUuid.value.replaceAll('-', '') : undefined,
)
offlineAccountModal.value?.hide()
await setAccount(account)
trackEvent('OfflineAccountAdd')
} catch (error) {
offlineUuidDuplicate.value = isDuplicateUuidError(error)
if (!offlineUuidDuplicate.value) handleError(error as Error)
} finally {
loginDisabled.value = false
}
}
function isDuplicateUuidError(error: unknown) {
const rawMessage =
error instanceof Error
? error.message
: typeof error === 'string'
? error
: JSON.stringify(error)
return rawMessage?.includes('An account with this UUID already exists') ?? false
}
async function logout(account: MinecraftCredential) {
await remove_user(account.profile.id).catch(handleError)
await refreshValues()
@ -1069,31 +929,27 @@ const messages = defineMessages({
},
thirdPartyAccount: {
id: 'minecraft-account.third-party-account',
defaultMessage: 'Third-party Minecraft account',
defaultMessage: 'StarLight skin account',
},
thirdPartyBadge: {
id: 'minecraft-account.third-party-badge',
defaultMessage: 'Third-party',
defaultMessage: 'StarLight skin',
},
thirdPartyModalTitle: {
id: 'minecraft-account.third-party-modal.title',
defaultMessage: 'Sign in with a third-party service',
defaultMessage: 'Sign in with StarLight skin',
},
thirdPartyModalDescription: {
id: 'minecraft-account.third-party-modal.description',
defaultMessage: 'Use LittleSkin or another compatible Yggdrasil authentication service.',
},
useLittleSkin: {
id: 'minecraft-account.third-party-modal.littleskin',
defaultMessage: 'Use LittleSkin',
defaultMessage: 'Sign in with your StarLight skin account.',
},
apiRootLabel: {
id: 'minecraft-account.third-party-modal.api-root',
defaultMessage: 'Yggdrasil API address',
defaultMessage: 'StarLight skin API address',
},
apiRootPlaceholder: {
id: 'minecraft-account.third-party-modal.api-root-placeholder',
defaultMessage: 'https://example.com/api/yggdrasil',
defaultMessage: 'https://skin.starlight.cool/yggdrasil',
},
accountLabel: {
id: 'minecraft-account.third-party-modal.account',
@ -1131,10 +987,6 @@ const messages = defineMessages({
id: 'minecraft-account.third-party-profile.description',
defaultMessage: 'Choose the Minecraft profile to use with this account.',
},
addOfflineAccount: {
id: 'minecraft-account.add-offline-account',
defaultMessage: 'Add offline account',
},
offlineAccount: {
id: 'minecraft-account.offline-account',
defaultMessage: 'Offline Minecraft account',

View File

@ -10167,10 +10167,10 @@
"message": "登录 Minecraft"
},
"minecraft-account.third-party-account": {
"message": "Minecraft 第三方账号"
"message": "StarLight 皮肤站账号"
},
"minecraft-account.third-party-badge": {
"message": "第三方"
"message": "StarLight 皮肤站"
},
"minecraft-account.third-party-modal.account": {
"message": "账号或邮箱"
@ -10179,16 +10179,13 @@
"message": "请输入账号或邮箱"
},
"minecraft-account.third-party-modal.api-root": {
"message": "Yggdrasil API 地址"
"message": "StarLight 皮肤站 API 地址"
},
"minecraft-account.third-party-modal.api-root-placeholder": {
"message": "https://example.com/api/yggdrasil"
"message": "https://skin.starlight.cool/yggdrasil"
},
"minecraft-account.third-party-modal.description": {
"message": "使用 LittleSkin 或其他兼容的 Yggdrasil 外置登录服务。"
},
"minecraft-account.third-party-modal.littleskin": {
"message": "使用 LittleSkin"
"message": "使用 StarLight 皮肤站账号登录。"
},
"minecraft-account.third-party-modal.password": {
"message": "密码"
@ -10206,7 +10203,7 @@
"message": "登录"
},
"minecraft-account.third-party-modal.title": {
"message": "登录第三方账号"
"message": "登录 StarLight 皮肤站"
},
"minecraft-account.third-party-profile.description": {
"message": "请选择此账号要使用的 Minecraft 角色。"

View File

@ -301,6 +301,7 @@ pub async fn begin_yggdrasil_login(
login: String,
password: String,
) -> Result<minecraft_auth::YggdrasilLoginResult> {
let api_root = normalize_starlight_yggdrasil_api_root(&api_root)?;
Ok(
minecraft_auth::begin_yggdrasil_login(&api_root, &login, &password)
.await?,
@ -323,6 +324,21 @@ pub struct SavedYggdrasilLogin {
pub login: String,
}
const STARLIGHT_YGGDRASIL_API_ROOT: &str =
"https://skin.starlight.cool/yggdrasil";
fn normalize_starlight_yggdrasil_api_root(api_root: &str) -> Result<String> {
let normalized = minecraft_auth::normalize_yggdrasil_api_root(api_root)?;
if normalized != STARLIGHT_YGGDRASIL_API_ROOT {
return Err(theseus::ErrorKind::InputError(
"Only the StarLight skin server is supported".to_string(),
)
.as_error()
.into());
}
Ok(normalized)
}
#[tauri::command]
pub fn list_yggdrasil_saved_logins() -> Result<Vec<SavedYggdrasilLogin>> {
read_yggdrasil_saved_logins()
@ -333,6 +349,7 @@ pub fn get_yggdrasil_password(
api_root: String,
login: String,
) -> Result<Option<String>> {
let api_root = normalize_starlight_yggdrasil_api_root(&api_root)?;
let entry = yggdrasil_password_entry(&api_root, &login)?;
match entry.get_password() {
Ok(password) => Ok(Some(password)),
@ -411,7 +428,7 @@ fn normalize_saved_yggdrasil_login(
.into());
}
Ok(SavedYggdrasilLogin {
api_root: minecraft_auth::normalize_yggdrasil_api_root(api_root)?,
api_root: normalize_starlight_yggdrasil_api_root(api_root)?,
login: login.to_string(),
})
}
@ -426,8 +443,15 @@ fn yggdrasil_saved_logins_entry() -> Result<keyring::Entry> {
fn read_yggdrasil_saved_logins() -> Result<Vec<SavedYggdrasilLogin>> {
match yggdrasil_saved_logins_entry()?.get_password() {
Ok(saved_logins) => match serde_json::from_str(&saved_logins) {
Ok(saved_logins) => Ok(saved_logins),
Ok(saved_logins) => match serde_json::from_str::<Vec<SavedYggdrasilLogin>>(
&saved_logins,
) {
Ok(saved_logins) => Ok(saved_logins
.into_iter()
.filter(|saved_login| {
saved_login.api_root == STARLIGHT_YGGDRASIL_API_ROOT
})
.collect()),
Err(error) => {
tracing::warn!(
"Ignoring an invalid saved Yggdrasil login index: {error}"
@ -515,13 +539,15 @@ fn parse_custom_uuid(uuid: Option<String>) -> Result<Option<uuid::Uuid>> {
#[tauri::command]
pub async fn add_offline_user(
username: String,
uuid: Option<String>,
_username: String,
_uuid: Option<String>,
) -> Result<Credentials> {
Ok(
minecraft_auth::add_offline_user(&username, parse_custom_uuid(uuid)?)
.await?,
Err(theseus::ErrorKind::InputError(
"Offline accounts are disabled; use Microsoft or StarLight skin login"
.to_string(),
)
.as_error()
.into())
}
#[tauri::command]

View File

@ -0,0 +1,258 @@
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 264241152 bytes. Error detail: G1 virtual space
# Possible reasons:
# The system is out of physical RAM or swap space
# This process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# JVM is running with Zero Based Compressed Oops mode in which the Java heap is
# placed in the first 32GB address space. The Java Heap base address is the
# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress
# to set the Java Heap base and to place the Java Heap above 32GB virtual address.
# This output file may be truncated or incomplete.
#
# Out of Memory Error (os_windows.cpp:3736), pid=33124, tid=31956
#
# JRE version: (21.0.7+6) (build )
# Java VM: OpenJDK 64-Bit Server VM (21.0.7+6-LTS, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64)
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
--------------- S U M M A R Y ------------
Command Line:
Host: 12th Gen Intel(R) Core(TM) i5-12450H, 12 cores, 15G, Windows 11 , 64 bit Build 26100 (10.0.26100.9168)
Time: Wed Sep 9 21:15:46 2026 Windows 11 , 64 bit Build 26100 (10.0.26100.9168) elapsed time: 1.634748 seconds (0d 0h 0m 1s)
--------------- T H R E A D ---------------
Current thread (0x0000026306a95f90): JavaThread "Unknown thread" [_thread_in_vm, id=31956, stack(0x0000007f0c500000,0x0000007f0c600000) (1024K)]
Stack: [0x0000007f0c500000,0x0000007f0c600000]
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x6d4bb9]
V [jvm.dll+0x8afa11]
V [jvm.dll+0x8b1f3e]
V [jvm.dll+0x8b2623]
V [jvm.dll+0x280816]
V [jvm.dll+0x6d1385]
V [jvm.dll+0x6c552a]
V [jvm.dll+0x35b978]
V [jvm.dll+0x3635f6]
V [jvm.dll+0x3b4b9e]
V [jvm.dll+0x3b4e48]
V [jvm.dll+0x32f9bc]
V [jvm.dll+0x33051b]
V [jvm.dll+0x878909]
V [jvm.dll+0x3c1b91]
V [jvm.dll+0x861973]
V [jvm.dll+0x456b7e]
V [jvm.dll+0x4587c1]
C [jli.dll+0x52a0]
C [ucrtbase.dll+0x2cd30]
C [KERNEL32.DLL+0x2ccb7]
C [ntdll.dll+0xaad6c]
--------------- P R O C E S S ---------------
Threads class SMR info:
_java_thread_list=0x00007ffcadcc2108, length=0, elements={
}
Java Threads: ( => current thread )
Total: 0
Other Threads:
0x0000026306afb4d0 WorkerThread "GC Thread#0" [id=33736, stack(0x0000007f0c600000,0x0000007f0c700000) (1024K)]
0x0000026306b0dda0 ConcurrentGCThread "G1 Main Marker" [id=8180, stack(0x0000007f0c700000,0x0000007f0c800000) (1024K)]
0x0000026306b0e740 WorkerThread "G1 Conc#0" [id=22992, stack(0x0000007f0c800000,0x0000007f0c900000) (1024K)]
[error occurred during error reporting (printing all threads), id 0xc0000005, EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffcad3c2327]
VM state: not at safepoint (not fully initialized)
VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event])
[0x00007ffcadd36578] Heap_lock - owner thread: 0x0000026306a95f90
Heap address: 0x0000000704400000, size: 4028 MB, Compressed Oops mode: Zero based, Oop shift amount: 3
CDS archive(s) mapped at: [0x0000000000000000-0x0000000000000000-0x0000000000000000), size 0, SharedBaseAddress: 0x0000000800000000, ArchiveRelocationMode: 1.
Narrow klass base: 0x0000000000000000, Narrow klass shift: 0, Narrow klass range: 0x0
GC Precious Log:
CardTable entry size: 512
Card Set container configuration: InlinePtr #cards 4 size 8 Array Of Cards #cards 16 size 48 Howl #buckets 8 coarsen threshold 3686 Howl Bitmap #cards 512 size 80 coarsen threshold 460 Card regions per heap region 1 cards per card region 4096
Heap:
garbage-first heap total 0K, used 0K [0x0000000704400000, 0x0000000800000000)
region size 2048K, 0 young (0K), 0 survivors (0K)
[error occurred during error reporting (printing heap information), id 0xc0000005, EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffcad7aea59]
GC Heap History (0 events):
No events
Dll operation events (1 events):
Event: 0.419 Loaded shared library C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\java.dll
Deoptimization events (0 events):
No events
Classes loaded (0 events):
No events
Classes unloaded (0 events):
No events
Classes redefined (0 events):
No events
Internal exceptions (0 events):
No events
ZGC Phase Switch (0 events):
No events
VM Operations (0 events):
No events
Memory protections (0 events):
No events
Nmethod flushes (0 events):
No events
Events (0 events):
No events
Dynamic libraries:
0x00007ff7afa20000 - 0x00007ff7afa2e000 C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\java.exe
0x00007ffdf45c0000 - 0x00007ffdf4826000 C:\WINDOWS\SYSTEM32\ntdll.dll
0x00007ffdf24f0000 - 0x00007ffdf25b9000 C:\WINDOWS\System32\KERNEL32.DLL
0x00007ffdf1a20000 - 0x00007ffdf1e1f000 C:\WINDOWS\System32\KERNELBASE.dll
0x00007ffdc2a20000 - 0x00007ffdc2a38000 C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\jli.dll
0x00007ffdb0630000 - 0x00007ffdb064d000 C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\VCRUNTIME140.dll
0x00007ffdf18c0000 - 0x00007ffdf1a0c000 C:\WINDOWS\System32\ucrtbase.dll
0x00007ffdf4130000 - 0x00007ffdf42f6000 C:\WINDOWS\System32\USER32.dll
0x00007ffdf17d0000 - 0x00007ffdf17f7000 C:\WINDOWS\System32\win32u.dll
0x00007ffdf4550000 - 0x00007ffdf457b000 C:\WINDOWS\System32\GDI32.dll
0x00007ffddd2a0000 - 0x00007ffddd531000 C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.8972_none_3e0da176e32f9d4b\COMCTL32.dll
0x00007ffdf21c0000 - 0x00007ffdf22e9000 C:\WINDOWS\System32\gdi32full.dll
0x00007ffdf2630000 - 0x00007ffdf26d9000 C:\WINDOWS\System32\msvcrt.dll
0x00007ffdf2110000 - 0x00007ffdf21b3000 C:\WINDOWS\System32\msvcp_win.dll
0x00007ffdf4410000 - 0x00007ffdf4442000 C:\WINDOWS\System32\IMM32.DLL
0x00007ffdd96a0000 - 0x00007ffdd96ac000 C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\vcruntime140_1.dll
0x00007ffd809e0000 - 0x00007ffd80a6d000 C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\msvcp140.dll
0x00007ffcad080000 - 0x00007ffcade18000 C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\server\jvm.dll
0x00007ffdf23a0000 - 0x00007ffdf245c000 C:\WINDOWS\System32\ADVAPI32.dll
0x00007ffdf22f0000 - 0x00007ffdf239a000 C:\WINDOWS\System32\sechost.dll
0x00007ffdf3630000 - 0x00007ffdf3748000 C:\WINDOWS\System32\RPCRT4.dll
0x00007ffdf37e0000 - 0x00007ffdf3862000 C:\WINDOWS\System32\WS2_32.dll
0x00007ffdf1630000 - 0x00007ffdf168e000 C:\WINDOWS\SYSTEM32\POWRPROF.dll
0x00007ffdee460000 - 0x00007ffdee496000 C:\WINDOWS\SYSTEM32\WINMM.dll
0x00007ffde8320000 - 0x00007ffde832b000 C:\WINDOWS\SYSTEM32\VERSION.dll
0x00007ffdf1610000 - 0x00007ffdf1625000 C:\WINDOWS\SYSTEM32\UMPDC.dll
0x00007ffdf0420000 - 0x00007ffdf043b000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
0x00007ffdd9640000 - 0x00007ffdd964a000 C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\jimage.dll
0x00007ffdeef80000 - 0x00007ffdef1c2000 C:\WINDOWS\SYSTEM32\DBGHELP.DLL
0x00007ffdf3870000 - 0x00007ffdf3bf5000 C:\WINDOWS\System32\combase.dll
0x00007ffdf3550000 - 0x00007ffdf3629000 C:\WINDOWS\System32\OLEAUT32.dll
0x00007ffde6810000 - 0x00007ffde684b000 C:\WINDOWS\SYSTEM32\dbgcore.DLL
0x00007ffdf1800000 - 0x00007ffdf18ac000 C:\WINDOWS\System32\bcryptPrimitives.dll
0x00007ffdf0770000 - 0x00007ffdf07b9000 C:\WINDOWS\SYSTEM32\SspiCli.dll
0x00007ffdaac90000 - 0x00007ffdaacb0000 C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\java.dll
dbghelp: loaded successfully - version: 4.0.5 - missing functions: none
symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin;C:\WINDOWS\SYSTEM32;C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.8972_none_3e0da176e32f9d4b;C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin\server
VM Arguments:
java_command: <unknown>
java_class_path (initial): <not set>
Launcher Type: SUN_STANDARD
[Global flags]
intx CICompilerCount = 4 {product} {ergonomic}
uint ConcGCThreads = 3 {product} {ergonomic}
uint G1ConcRefinementThreads = 10 {product} {ergonomic}
size_t G1HeapRegionSize = 2097152 {product} {ergonomic}
uintx GCDrainStackTargetSize = 64 {product} {ergonomic}
size_t InitialHeapSize = 264241152 {product} {ergonomic}
size_t MarkStackSize = 4194304 {product} {ergonomic}
size_t MaxHeapSize = 4223664128 {product} {ergonomic}
size_t MinHeapDeltaBytes = 2097152 {product} {ergonomic}
size_t MinHeapSize = 8388608 {product} {ergonomic}
uintx NonNMethodCodeHeapSize = 5839372 {pd product} {ergonomic}
uintx NonProfiledCodeHeapSize = 122909434 {pd product} {ergonomic}
uintx ProfiledCodeHeapSize = 122909434 {pd product} {ergonomic}
uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic}
bool SegmentedCodeCache = true {product} {ergonomic}
size_t SoftMaxHeapSize = 4223664128 {manageable} {ergonomic}
bool UseCompressedOops = true {product lp64_product} {ergonomic}
bool UseG1GC = true {product} {ergonomic}
bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic}
Logging:
Log output configuration:
#0: stdout all=warning uptime,level,tags foldmultilines=false
#1: stderr all=off uptime,level,tags foldmultilines=false
Environment Variables:
PATH=D:\Project\Starlight_Lancher\target\debug;D:\Project\Starlight_Lancher\target\debug\deps;C:\Users\28579\.rustup\toolchains\1.95.0-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib;D:\Project\Starlight_Lancher\apps\app\node_modules\.bin;C:\Users\28579\AppData\Roaming\npm\node_modules\pnpm\dist\node-gyp-bin;D:\Project\Starlight_Lancher\node_modules\.bin;D:\Project\Starlight_Lancher\node_modules\.bin;C:\Users\28579\AppData\Roaming\npm\node_modules\pnpm\dist\node-gyp-bin;D:\Project\Starlight_Lancher\node_modules\.bin;C:\Users\28579\.cargo\bin;C:\Program Files\nodejs;c:\Users\28579\AppData\Roaming\Code\User\globalStorage\github.copilot-chat\debugCommand;c:\Users\28579\AppData\Roaming\Code\User\globalStorage\github.copilot-chat\copilotCli;C:\Program Files (x86)\Microsoft\Edge\Application;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;D:\Git\cmd;C:\Program Files\dotnet\;C:\Users\28579\AppData\Roaming\.minecraft\runtime\java-runtime-delta\bin;C:\Users\28579\Documents\ffmpeg-master-latest-win64-gpl-shared\bin;C:\Program Files\nodejs\;C:\Users\28579\AppData\Local\Programs\Python\Python313\Scripts\;C:\Users\28579\AppData\Local\Programs\Python\Python313\;C:\Users\28579\AppData\Local\Programs\Python\Launcher\;C:\Users\28579\.cargo\bin;C:\Users\28579\AppData\Local\Microsoft\WindowsApps;D:\Git\cmd;C:\Users\28579\AppData\Local\Programs\Ollama;C:\Users\28579\Documents\ffmpeg-master-latest-win64-gpl-shared\bin;C:\Users\28579\AppData\Roaming\npm;C:\Users\28579\.rustup\toolchains\1.95.0-x86_64-pc-windows-msvc\bin
LD_LIBRARY_PATH=C:\Users\28579\.rustup\toolchains\1.95.0-x86_64-pc-windows-msvc\lib
LANG=en_US.UTF-8
TMP=C:\Users\28579\AppData\Local\Temp
TEMP=C:\Users\28579\AppData\Local\Temp
Periodic native trim disabled
--------------- S Y S T E M ---------------
OS:
Windows 11 , 64 bit Build 26100 (10.0.26100.9168)
OS uptime: 9 days 8:27 hours
CPU: total 12 (initial active 12) (6 cores per cpu, 2 threads per core) family 6 model 154 stepping 3 microcode 0x42c, cx8, cmov, fxsr, ht, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, lzcnt, tsc, tscinvbit, avx, avx2, aes, erms, clmul, bmi1, bmi2, adx, sha, fma, vzeroupper, clflush, clflushopt, clwb, serialize, rdtscp, rdpid, fsrm, f16c, pku, cet_ibt, cet_ss
Processor Information for processor 0
Max Mhz: 2000, Current Mhz: 2000, Mhz Limit: 2000
Processor Information for processor 1
Max Mhz: 2000, Current Mhz: 1520, Mhz Limit: 2000
Processor Information for processor 2
Max Mhz: 2000, Current Mhz: 2000, Mhz Limit: 2000
Processor Information for processor 3
Max Mhz: 2000, Current Mhz: 1520, Mhz Limit: 2000
Processor Information for processor 4
Max Mhz: 2000, Current Mhz: 2000, Mhz Limit: 2000
Processor Information for processor 5
Max Mhz: 2000, Current Mhz: 2000, Mhz Limit: 2000
Processor Information for processor 6
Max Mhz: 2000, Current Mhz: 2000, Mhz Limit: 2000
Processor Information for processor 7
Max Mhz: 2000, Current Mhz: 2000, Mhz Limit: 2000
Processor Information for processor 8
Max Mhz: 2000, Current Mhz: 1500, Mhz Limit: 1500
Processor Information for processor 9
Max Mhz: 2000, Current Mhz: 1500, Mhz Limit: 1500
Processor Information for processor 10
Max Mhz: 2000, Current Mhz: 1500, Mhz Limit: 1500
Processor Information for processor 11
Max Mhz: 2000, Current Mhz: 1500, Mhz Limit: 1500
Memory: 4k page, system-wide physical 16108M (572M free)
TotalPageFile size 32492M (AvailPageFile size 131M)
current process WorkingSet (physical memory assigned to process): 13M, peak: 13M
current process commit charge ("private bytes"): 64M, peak: 316M
vm_info: OpenJDK 64-Bit Server VM (21.0.7+6-LTS) for windows-amd64 JRE (21.0.7+6-LTS), built on 2025-04-09T22:17:25Z by "MicrosoftCorporation" with unknown MS VC++:1939
END.