forked from AxTps/Starlight_Lancher
feat:集成sls皮肤站,但是未测试
This commit is contained in:
4
Cargo.lock
generated
4
Cargo.lock
generated
@ -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",
|
||||
|
||||
@ -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',
|
||||
|
||||
@ -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 角色。"
|
||||
|
||||
@ -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]
|
||||
|
||||
258
packages/app-lib/java/hs_err_pid33124.log
Normal file
258
packages/app-lib/java/hs_err_pid33124.log
Normal 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.
|
||||
Reference in New Issue
Block a user