Skip to content

Commit 6508cd4

Browse files
committed
refactor(FCLGameLauncher): 重构游戏选项配置逻辑
- 引入 GameOption 类来统一管理游戏配置 - 简化 options.txt 文件内容,移除不必要的默认配置项 - 使用 GameOption 替代原有的文件读写操作 - 优化语言设置逻辑,支持不同游戏版本的语言格式转换 - 移除过时的配置项处理方法,提高代码可维护性
1 parent 25d581b commit 6508cd4

File tree

2 files changed

+24
-146
lines changed

2 files changed

+24
-146
lines changed

FCL/src/main/assets/options.txt

Lines changed: 1 addition & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,18 @@
1-
invertYMouse:false
2-
mouseSensitivity:0.5
31
fov:0.0
4-
gamma:0.5070422
5-
saturation:0.0
62
renderDistance:2
7-
guiScale:4
83
particles:1
94
bobView:false
105
anaglyph3d:false
116
advancedOpengl:false
127
maxFps:260
138
fboEnable:true
14-
difficulty:2
159
fancyGraphics:false
1610
ao:0
1711
clouds:true
18-
resourcePacks:[]
19-
lastServer:
20-
lang:en_us
21-
chatVisibility:0
22-
chatColors:true
23-
chatLinks:true
24-
chatLinksPrompt:true
25-
chatOpacity:1.0
2612
snooperEnabled:true
27-
fullscreen:false
2813
enableVsync:false
29-
hideServerAddress:false
30-
advancedItemTooltips:false
3114
pauseOnLostFocus:true
32-
showCape:true
3315
touchscreen:false
34-
overrideWidth:0
35-
overrideHeight:0
3616
heldItemTooltips:true
37-
chatHeightFocused:1.0
38-
chatHeightUnfocused:0.44366196
39-
chatScale:1.0
40-
chatWidth:1.0
4117
showInventoryAchievementHint:false
42-
mipmapLevels:0
43-
anisotropicFiltering:1
44-
streamBytesPerPixel:0.5
45-
streamMicVolume:1.0
46-
streamSystemVolume:1.0
47-
streamKbps:0.5412844
48-
streamFps:0.31690142
49-
streamCompression:1
50-
streamSendMetadata:true
51-
streamPreferredServer:
52-
streamChatEnabled:0
53-
streamChatUserFilter:0
54-
streamMicToggleBehavior:0
55-
forceUnicodeFont:true
56-
key_key.attack:-100
57-
key_key.use:-99
58-
key_key.forward:17
59-
key_key.left:30
60-
key_key.back:31
61-
key_key.right:32
62-
key_key.jump:57
63-
key_key.sneak:42
64-
key_key.drop:16
65-
key_key.inventory:18
66-
key_key.chat:20
67-
key_key.playerlist:15
68-
key_key.pickItem:-98
69-
key_key.command:53
70-
key_key.screenshot:60
71-
key_key.togglePerspective:63
72-
key_key.smoothCamera:0
73-
key_key.sprint:29
74-
key_key.streamStartStop:64
75-
key_key.streamPauseUnpause:65
76-
key_key.streamCommercial:0
77-
key_key.streamToggleMic:0
78-
key_key.fullscreen:87
79-
key_key.hotbar.1:2
80-
key_key.hotbar.2:3
81-
key_key.hotbar.3:4
82-
key_key.hotbar.4:5
83-
key_key.hotbar.5:6
84-
key_key.hotbar.6:7
85-
key_key.hotbar.7:8
86-
key_key.hotbar.8:9
87-
key_key.hotbar.9:10
88-
soundCategory_master:1.0
89-
soundCategory_music:1.0
90-
soundCategory_record:1.0
91-
soundCategory_weather:1.0
92-
soundCategory_block:1.0
93-
soundCategory_hostile:1.0
94-
soundCategory_neutral:1.0
95-
soundCategory_player:1.0
96-
soundCategory_ambient:1.0
18+
mipmapLevels:0

FCL/src/main/java/com/tungsten/fcl/game/FCLGameLauncher.java

Lines changed: 23 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.mio.data.Renderer;
2323
import com.mio.manager.RendererManager;
2424
import com.tungsten.fcl.R;
25+
import com.tungsten.fcl.setting.GameOption;
2526
import com.tungsten.fcl.util.RuntimeUtils;
2627
import com.tungsten.fclauncher.bridge.FCLBridge;
2728
import com.tungsten.fclauncher.utils.FCLPath;
@@ -70,83 +71,38 @@ private void generateOptionsTxt() {
7071
} catch (IOException e) {
7172
Logging.LOG.log(Level.WARNING, "Unable to disable forge animation", e);
7273
}
73-
74-
if (optionsFile.exists()) {
75-
fixOptions(optionsFile);
76-
return;
77-
}
78-
try {
79-
RuntimeUtils.copyAssets(context, "options.txt", optionsFile.getAbsolutePath());
80-
} catch (IOException e) {
81-
Logging.LOG.log(Level.WARNING, "Unable to generate options.txt", e);
82-
}
83-
84-
modifyOptions(optionsFile);
85-
}
86-
87-
private void modifyOptions(File optionsFile) {
88-
StringBuilder str = new StringBuilder();
89-
String lang;
90-
boolean isChinese = LocaleUtils.isChinese(context);
91-
GameVersionNumber gameVersion = GameVersionNumber.asGameVersion(repository.getGameVersion(version).orElse("0.0"));
92-
if (gameVersion.compareTo("1.1") < 0) {
93-
lang = null;
94-
} else if (gameVersion.compareTo("1.11") < 0) {
95-
lang = isChinese ? "zh_CN" : "en_US";
96-
} else {
97-
lang = isChinese ? "zh_cn" : "en_us";
98-
}
99-
try (BufferedReader bfr = new BufferedReader(new FileReader(optionsFile))) {
100-
String line;
101-
while ((line = bfr.readLine()) != null) {
102-
if (line.contains("lang:") && lang != null) {
103-
str.append("lang:").append(lang).append("\n");
104-
} else {
105-
str.append(line).append("\n");
106-
}
107-
}
108-
} catch (Exception e) {
109-
Logging.LOG.log(Level.WARNING, "Unable to read options.txt.", e);
110-
}
111-
if (!str.toString().isEmpty()) {
112-
try (FileWriter fw = new FileWriter(optionsFile)) {
113-
fw.write(str.toString());
74+
GameOption gameOption = null;
75+
if (!optionsFile.exists()) {
76+
try {
77+
RuntimeUtils.copyAssets(context, "options.txt", optionsFile.getAbsolutePath());
78+
gameOption = new GameOption(optionsFile.getParent());
79+
gameOption.set("lang", LocaleUtils.isChinese(context) ? "zh_cn" : "en_us");
11480
} catch (IOException e) {
115-
Logging.LOG.log(Level.WARNING, "Unable to write options.txt.", e);
81+
Logging.LOG.log(Level.WARNING, "Unable to generate options.txt", e);
11682
}
11783
}
84+
if (gameOption == null)
85+
gameOption = new GameOption(optionsFile.getParent());
86+
fixLang(gameOption);
87+
fixOptions(gameOption);
88+
gameOption.save();
11889
}
11990

120-
private void fixOptions(File optionsFile) {
121-
StringBuilder str = new StringBuilder();
91+
private void fixOptions(GameOption gameOption) {
92+
gameOption.set("touchscreen", "false");
93+
}
94+
95+
private void fixLang(GameOption gameOption) {
12296
GameVersionNumber gameVersion = GameVersionNumber.asGameVersion(repository.getGameVersion(version).orElse("0.0"));
12397
if (gameVersion.compareTo("1.1") < 0) {
12498
return;
12599
}
126100
boolean toUpper = gameVersion.compareTo("1.11") < 0;
127-
try (BufferedReader bfr = new BufferedReader(new FileReader(optionsFile))) {
128-
String line;
129-
while ((line = bfr.readLine()) != null) {
130-
if (line.contains("lang:")) {
131-
String lang;
132-
lang = line.replace("lang:", "");
133-
String[] parts = lang.split("_", 2);
134-
lang = parts[0] + "_" + (toUpper ? parts[1].toUpperCase() : parts[1].toLowerCase());
135-
str.append("lang:").append(lang).append("\n");
136-
} else {
137-
str.append(line).append("\n");
138-
}
139-
}
140-
} catch (Exception e) {
141-
Logging.LOG.log(Level.WARNING, "Unable to read options.txt.", e);
142-
}
143-
if (!str.toString().isEmpty()) {
144-
try (FileWriter fw = new FileWriter(optionsFile)) {
145-
fw.write(str.toString());
146-
} catch (IOException e) {
147-
Logging.LOG.log(Level.WARNING, "Unable to write options.txt.", e);
148-
}
149-
}
101+
String lang;
102+
lang = gameOption.get("lang");
103+
String[] parts = lang.split("_", 2);
104+
lang = parts[0] + "_" + (toUpper ? parts[1].toUpperCase() : parts[1].toLowerCase());
105+
gameOption.set("lang", lang);
150106
}
151107

152108
private void modifyIfConfigDetected(String config, String option, String replacement, boolean overwrite, Renderer... renderers) {

0 commit comments

Comments
 (0)