mirror of
https://git.sanhost.net/sanasol/hytale-f2p
synced 2026-02-27 15:41:47 -03:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e1a3f919a2 | ||
|
|
e3fe1b6a10 |
@@ -106,6 +106,23 @@ function getBundledJavaPath(jreDir = JRE_DIR) {
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: check for nested JRE directory (e.g. jdk-25.0.2+10-jre/bin/java)
|
||||
// This happens when flattenJREDir fails due to EPERM/EACCES on Windows
|
||||
try {
|
||||
if (fs.existsSync(jreDir)) {
|
||||
const entries = fs.readdirSync(jreDir, { withFileTypes: true });
|
||||
for (const entry of entries) {
|
||||
if (entry.isDirectory() && entry.name !== 'bin' && entry.name !== 'lib') {
|
||||
const nestedCandidate = path.join(jreDir, entry.name, 'bin', JAVA_EXECUTABLE);
|
||||
if (fs.existsSync(nestedCandidate)) {
|
||||
console.log(`[JRE] Using nested Java path: ${nestedCandidate}`);
|
||||
return nestedCandidate;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (_) { /* ignore */ }
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -409,7 +426,7 @@ function extractTarGz(tarGzPath, dest) {
|
||||
function flattenJREDir(jreLatest) {
|
||||
try {
|
||||
const entries = fs.readdirSync(jreLatest, { withFileTypes: true });
|
||||
|
||||
|
||||
if (entries.length !== 1 || !entries[0].isDirectory()) {
|
||||
return;
|
||||
}
|
||||
@@ -420,12 +437,48 @@ function flattenJREDir(jreLatest) {
|
||||
for (const file of files) {
|
||||
const oldPath = path.join(nested, file.name);
|
||||
const newPath = path.join(jreLatest, file.name);
|
||||
fs.renameSync(oldPath, newPath);
|
||||
try {
|
||||
fs.renameSync(oldPath, newPath);
|
||||
} catch (renameErr) {
|
||||
if (renameErr.code === 'EPERM' || renameErr.code === 'EACCES' || renameErr.code === 'EBUSY') {
|
||||
console.log(`[JRE] Rename failed for ${file.name} (${renameErr.code}), using copy fallback`);
|
||||
copyRecursiveSync(oldPath, newPath);
|
||||
} else {
|
||||
throw renameErr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fs.rmSync(nested, { recursive: true, force: true });
|
||||
try {
|
||||
fs.rmSync(nested, { recursive: true, force: true });
|
||||
} catch (rmErr) {
|
||||
console.log('[JRE] Could not remove nested JRE dir (non-critical):', rmErr.message);
|
||||
}
|
||||
} catch (err) {
|
||||
console.log('Notice: could not restructure Java directory:', err.message);
|
||||
console.error('[JRE] Failed to restructure Java directory:', err.message);
|
||||
// Last resort: check if java exists in a nested subdir and skip flatten
|
||||
try {
|
||||
const entries = fs.readdirSync(jreLatest, { withFileTypes: true });
|
||||
const nestedDir = entries.find(e => e.isDirectory() && e.name !== 'bin' && e.name !== 'lib');
|
||||
if (nestedDir) {
|
||||
const nestedBin = path.join(jreLatest, nestedDir.name, 'bin', process.platform === 'win32' ? 'java.exe' : 'java');
|
||||
if (fs.existsSync(nestedBin)) {
|
||||
console.log(`[JRE] Java found in nested dir: ${nestedDir.name}, leaving structure as-is`);
|
||||
}
|
||||
}
|
||||
} catch (_) { /* ignore */ }
|
||||
}
|
||||
}
|
||||
|
||||
function copyRecursiveSync(src, dest) {
|
||||
const stat = fs.statSync(src);
|
||||
if (stat.isDirectory()) {
|
||||
fs.mkdirSync(dest, { recursive: true });
|
||||
for (const child of fs.readdirSync(src)) {
|
||||
copyRecursiveSync(path.join(src, child), path.join(dest, child));
|
||||
}
|
||||
} else {
|
||||
fs.copyFileSync(src, dest);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
## v2.4.0
|
||||
|
||||
### New Features
|
||||
- **Send Logs** — One-click button to submit launcher & game logs to support. Collects launcher logs, game client logs, and config snapshot into a ZIP, uploads to server, and returns an 8-character ID to share with support ([320ca54](https://git.sanhost.net/sanasol/hytale-f2p/commit/320ca547585c67d0773dba262612db5026378f52), [19c8991](https://git.sanhost.net/sanasol/hytale-f2p/commit/19c8991a44641ebbf44eec73a0ecd9db05241c49))
|
||||
- **Arabic (ar-SA) locale** with full RTL support (community contribution by @Yugurten) ([30929ee](https://git.sanhost.net/sanasol/hytale-f2p/commit/30929ee0da5a9c64e65869d6157bd705db3b80f0))
|
||||
- **One-click dedicated server scripts** for self-hosting ([552ec42](https://git.sanhost.net/sanasol/hytale-f2p/commit/552ec42d6c7e1e7d1a2803d284019ccae963f41e))
|
||||
|
||||
### Bug Fixes
|
||||
- Fix Intel Arc iGPU (Meteor Lake/Lunar Lake) on PCI bus 00 being misdetected as discrete GPU on dual-GPU Linux systems ([19c8991](https://git.sanhost.net/sanasol/hytale-f2p/commit/19c8991a44641ebbf44eec73a0ecd9db05241c49))
|
||||
- Fix stalled game processes blocking launcher operations — automatic process cleanup on repair and relaunch ([e14d56e](https://git.sanhost.net/sanasol/hytale-f2p/commit/e14d56ef4846423c1fd172d88334cb76193ee741))
|
||||
- Fix AOT cache crashes — stale cache cleared before game launch ([e14d56e](https://git.sanhost.net/sanasol/hytale-f2p/commit/e14d56ef4846423c1fd172d88334cb76193ee741))
|
||||
- Fix Arabic RTL CSS syntax ([fb90277](https://git.sanhost.net/sanasol/hytale-f2p/commit/fb90277be9cf5f0b8a90195a7d089273b6be082b))
|
||||
|
||||
### Other
|
||||
- Updated README with Forgejo URLs and server setup video ([a649bf1](https://git.sanhost.net/sanasol/hytale-f2p/commit/a649bf1fcc7cbb2cd0d9aa0160b07828a144b9dd), [66faa1b](https://git.sanhost.net/sanasol/hytale-f2p/commit/66faa1bb1e39575fecb462310af338d13b1cb183))
|
||||
|
||||
**Full changelog**: [v2.3.8...v2.4.0](https://git.sanhost.net/sanasol/hytale-f2p/compare/v2.3.8...v2.4.0)
|
||||
Reference in New Issue
Block a user