Skip to content

Commit 10df858

Browse files
committed
fix(启动): 合并游戏清单时,不再以反射的形式插入字段
1 parent 1190e90 commit 10df858

1 file changed

Lines changed: 11 additions & 27 deletions

File tree

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/game/version/installed/VersionInfoParser.kt

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,7 @@ fun getGameManifest(
4242
val inherits = gameManifest0.inheritsFrom
4343
GSON.fromJson(File(version.getVersionsFolder()).child(inherits).child("${inherits}.json").readText(), GameManifest::class.java)
4444
}
45-
insertSafety(
46-
target = inheritsManifest,
47-
from = gameManifest0,
48-
"assetIndex", "assets", "id", "mainClass", "minecraftArguments", "releaseTime", "time", "type"
49-
)
45+
inheritFields(inheritsManifest, gameManifest0)
5046

5147
// Go through the libraries, remove the ones overridden by the custom version
5248
val inheritLibraryList: MutableList<Library> = ArrayList(inheritsManifest.libraries)
@@ -128,26 +124,14 @@ fun getGameManifest(
128124
return gameManifest0
129125
}
130126

131-
/**
132-
* [Modified from PojavLauncher](https://github.com/PojavLauncherTeam/PojavLauncher/blob/a6f3fc0/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java#L982-L996)
133-
*/
134-
// Prevent NullPointerException
135-
private fun insertSafety(
136-
target: GameManifest,
137-
from: GameManifest,
138-
vararg keyArr: String
139-
) {
140-
keyArr.forEach { key ->
141-
var value: Any? = null
142-
runCatching {
143-
val fieldA = from.javaClass.getDeclaredField(key).apply { isAccessible = true }
144-
value = fieldA.get(from)
145-
if (((value is String) && (value as String).isNotEmpty()) || value != null) {
146-
val fieldB = target.javaClass.getDeclaredField(key).apply { isAccessible = true }
147-
fieldB.set(target, value)
148-
}
149-
}.onFailure {
150-
Logger.warning(TAG, "Unable to insert $key = $value", it)
151-
}
152-
}
127+
private fun String?.isValid(): Boolean = !this.isNullOrEmpty()
128+
private fun inheritFields(target: GameManifest, from: GameManifest) {
129+
from.assetIndex?.let { target.assetIndex = it }
130+
if (from.assets.isValid()) target.assets = from.assets
131+
if (from.id.isValid()) target.id = from.id
132+
if (from.mainClass.isValid()) target.mainClass = from.mainClass
133+
if (from.minecraftArguments.isValid()) target.minecraftArguments = from.minecraftArguments
134+
if (from.releaseTime.isValid()) target.releaseTime = from.releaseTime
135+
if (from.time.isValid()) target.time = from.time
136+
if (from.type.isValid()) target.type = from.type
153137
}

0 commit comments

Comments
 (0)