当前提交
0da7d49fd6
465 file changed
+164690
No files matched your search
+128
@@ -0,0 +1,128 @@
|
||||
# Launch Minecraft 1.20.1 (Forge 47.4.23) with OpenZen agent injected via -javaagent
|
||||
param(
|
||||
[string]$Username = "Player"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$mcRoot = "C:\Users\Administrator\Desktop\nx\mc\.minecraft"
|
||||
$versionId = "1.20.1-Forge_47.4.23"
|
||||
$versionDir = Join-Path $mcRoot "versions\$versionId"
|
||||
$versionJson = Join-Path $versionDir "$versionId.json"
|
||||
$versionJar = Join-Path $versionDir "$versionId.jar"
|
||||
$nativesDir = Join-Path $versionDir "$versionId-natives"
|
||||
$libsDir = Join-Path $mcRoot "libraries"
|
||||
$assetsDir = Join-Path $mcRoot "assets"
|
||||
$agentJar = "C:\Users\Administrator\Desktop\nx\OpenZen\build\libs\hey-1.0.jar"
|
||||
$javaExe = "C:\Program Files\Common Files\Oracle\Java\javapath\javaw.exe"
|
||||
|
||||
if (-not (Test-Path -LiteralPath $agentJar)) { throw "Agent jar not found: $agentJar (run gradlew build first)" }
|
||||
|
||||
$json = Get-Content -LiteralPath $versionJson -Raw | ConvertFrom-Json
|
||||
|
||||
# ---- classpath: windows-filtered libraries + client jar ----
|
||||
$libPaths = New-Object System.Collections.Generic.List[string]
|
||||
foreach ($lib in $json.libraries) {
|
||||
if (-not ($lib.downloads -and $lib.downloads.artifact)) { continue }
|
||||
$allowed = $true
|
||||
if ($lib.rules) {
|
||||
$allowed = $false
|
||||
foreach ($r in $lib.rules) {
|
||||
if ($r.action -eq "allow" -and (-not $r.os -or $r.os.name -eq "windows")) { $allowed = $true; break }
|
||||
}
|
||||
}
|
||||
if ($allowed) {
|
||||
$p = Join-Path $libsDir $lib.downloads.artifact.path
|
||||
if (-not (Test-Path -LiteralPath $p)) { throw "Missing library: $p" }
|
||||
$libPaths.Add($p)
|
||||
}
|
||||
}
|
||||
$libPaths.Add($versionJar)
|
||||
$cp = $libPaths -join ";"
|
||||
|
||||
# ---- module path: same jars as json "-p" argument ----
|
||||
$moduleJarNames = @(
|
||||
"cpw/mods/bootstraplauncher/1.1.2/bootstraplauncher-1.1.2.jar",
|
||||
"cpw/mods/securejarhandler/2.1.10/securejarhandler-2.1.10.jar",
|
||||
"org/ow2/asm/asm-commons/9.9.1/asm-commons-9.9.1.jar",
|
||||
"org/ow2/asm/asm-util/9.9.1/asm-util-9.9.1.jar",
|
||||
"org/ow2/asm/asm-analysis/9.9.1/asm-analysis-9.9.1.jar",
|
||||
"org/ow2/asm/asm-tree/9.9.1/asm-tree-9.9.1.jar",
|
||||
"org/ow2/asm/asm/9.9.1/asm-9.9.1.jar",
|
||||
"net/minecraftforge/JarJarFileSystems/0.3.19/JarJarFileSystems-0.3.19.jar"
|
||||
)
|
||||
$mp = ($moduleJarNames | ForEach-Object { Join-Path $libsDir $_ }) -join ";"
|
||||
|
||||
# ---- offline auth (Mojang-style offline uuid) ----
|
||||
$md5 = [System.Security.Cryptography.MD5]::Create()
|
||||
$hash = $md5.ComputeHash([Text.Encoding]::UTF8.GetBytes("OfflinePlayer:$Username"))
|
||||
$hash[6] = ($hash[6] -band 0x0F) -bor 0x30
|
||||
$hash[8] = ($hash[8] -band 0x3F) -bor 0x80
|
||||
$uuid = [Guid]$hash
|
||||
$uuidStr = $uuid.ToString().Replace("-", "")
|
||||
$accessToken = [Guid]::NewGuid().ToString().Replace("-", "")
|
||||
|
||||
# ---- java argument file (JDK9+ @argfile, avoids cmd length limits) ----
|
||||
function Add-Arg([System.Collections.Generic.List[string]]$list, [string]$arg) {
|
||||
if ($arg -match '\s') { $arg = '"' + $arg + '"' }
|
||||
$list.Add($arg)
|
||||
}
|
||||
|
||||
$args = New-Object System.Collections.Generic.List[string]
|
||||
|
||||
Add-Arg $args "-Xmx4G"
|
||||
Add-Arg $args "-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump"
|
||||
Add-Arg $args "-Xss1M"
|
||||
Add-Arg $args "-Djava.library.path=$nativesDir"
|
||||
Add-Arg $args "-Djna.tmpdir=$nativesDir"
|
||||
Add-Arg $args "-Dorg.lwjgl.system.SharedLibraryExtractPath=$nativesDir"
|
||||
Add-Arg $args "-Dio.netty.native.workdir=$nativesDir"
|
||||
Add-Arg $args "-Dminecraft.launcher.brand=PCL2"
|
||||
Add-Arg $args "-Dminecraft.launcher.version=2.9.3"
|
||||
Add-Arg $args "-Djava.net.preferIPv6Addresses=system"
|
||||
Add-Arg $args "-DignoreList=bootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,JarJarFileSystems,client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,forge-,$versionId.jar"
|
||||
Add-Arg $args "-DmergeModules=jna-5.10.0.jar,jna-platform-5.10.0.jar"
|
||||
Add-Arg $args "-DlibraryDirectory=$libsDir"
|
||||
Add-Arg $args "-p"
|
||||
Add-Arg $args $mp
|
||||
Add-Arg $args "--add-modules"
|
||||
Add-Arg $args "ALL-MODULE-PATH"
|
||||
Add-Arg $args "--add-opens"
|
||||
Add-Arg $args "java.base/java.util.jar=cpw.mods.securejarhandler"
|
||||
Add-Arg $args "--add-opens"
|
||||
Add-Arg $args "java.base/java.lang.invoke=cpw.mods.securejarhandler"
|
||||
Add-Arg $args "--add-exports"
|
||||
Add-Arg $args "java.base/sun.security.util=cpw.mods.securejarhandler"
|
||||
Add-Arg $args "--add-exports"
|
||||
Add-Arg $args "jdk.naming.dns/com.sun.jndi.dns=java.naming"
|
||||
Add-Arg $args "-javaagent:$agentJar"
|
||||
Add-Arg $args "-cp"
|
||||
Add-Arg $args $cp
|
||||
Add-Arg $args $json.mainClass
|
||||
|
||||
Add-Arg $args "--launchTarget"; Add-Arg $args "forgeclient"
|
||||
Add-Arg $args "--fml.forgeVersion"; Add-Arg $args "47.4.23"
|
||||
Add-Arg $args "--fml.mcVersion"; Add-Arg $args "1.20.1"
|
||||
Add-Arg $args "--fml.forgeGroup"; Add-Arg $args "net.minecraftforge"
|
||||
Add-Arg $args "--fml.mcpVersion"; Add-Arg $args "20230612.114412"
|
||||
Add-Arg $args "--username"; Add-Arg $args $Username
|
||||
Add-Arg $args "--version"; Add-Arg $args $versionId
|
||||
Add-Arg $args "--gameDir"; Add-Arg $args $versionDir
|
||||
Add-Arg $args "--assetsDir"; Add-Arg $args $assetsDir
|
||||
Add-Arg $args "--assetIndex"; Add-Arg $args "5"
|
||||
Add-Arg $args "--uuid"; Add-Arg $args $uuidStr
|
||||
Add-Arg $args "--accessToken"; Add-Arg $args $accessToken
|
||||
Add-Arg $args "--userType"; Add-Arg $args "msa"
|
||||
Add-Arg $args "--versionType"; Add-Arg $args "OpenZen"
|
||||
|
||||
$argFile = Join-Path $env:TEMP "opencode\mc-launch-args.txt"
|
||||
New-Item -ItemType Directory -Force -Path (Split-Path $argFile) | Out-Null
|
||||
Set-Content -LiteralPath $argFile -Value $args -Encoding ASCII
|
||||
|
||||
Write-Output "Arg file: $argFile"
|
||||
Write-Output "Agent : $agentJar"
|
||||
Write-Output "Username: $Username (offline uuid $uuidStr)"
|
||||
|
||||
# ---- launch ----
|
||||
$proc = Start-Process -FilePath $javaExe -ArgumentList "@`"$argFile`"" -WorkingDirectory $versionDir -PassThru
|
||||
Write-Output ("Game process started, PID: " + $proc.Id)
|
||||
Reference in new issue
屏蔽一个用户