Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement a proper language system #567

Merged
merged 39 commits into from
May 7, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
32c70cc
Support of Enter Room Scene
Akka0 May 5, 2022
023c5ba
Convert to the superior language system. (pt. 1)
KingRainbow44 May 6, 2022
f731196
Convert to the superior language system. (pt. 2)
KingRainbow44 May 6, 2022
d32d401
Choose Avatar & Enter Tower
Akka0 May 6, 2022
7d51e0d
Merge pull request #1 from Akka0/development
Akka0 May 6, 2022
744aa47
Add drowning. Better movement ticking.
gentlespoon May 6, 2022
a79e008
Add @Transient for temporary team
Akka0 May 6, 2022
696f629
Choose Avatar & Enter Tower
Akka0 May 6, 2022
39a49ae
Add @Transient for temporary team
Akka0 May 6, 2022
39c932b
Implementes auto HP recovery at the statues.
gentlespoon May 6, 2022
e319fd7
fix: lower logging level in SotSManager
gentlespoon May 6, 2022
5968ed3
Remove the red exclamation mark from achievements
May 6, 2022
092dee8
Merge branch 'development' of https://github.com/Grasscutters/Grasscu…
May 6, 2022
098cf37
Fix morphia error when saving player to db
May 6, 2022
0102a3c
The statues will now automatically regen their HP volume over time.
gentlespoon May 6, 2022
da99140
Stop WindSeedClientNotify and PlayerLuaShellNotify from being sent (#…
4Benj May 6, 2022
6144f47
Tower Dungeons Handoff between level and floor
Akka0 May 6, 2022
81ca860
Add some lua functions
Akka0 May 6, 2022
7279842
Merge pull request #2 from Grasscutters/development
Akka0 May 6, 2022
321a2a3
Merge branch 'tower' into development
Akka0 May 6, 2022
6b82a53
Merge pull request #3 from Akka0/development
Akka0 May 6, 2022
22df346
a little fix
Akka0 May 6, 2022
63a37ac
add config option to enable cors for dispatchserver (#579)
exzork May 6, 2022
19a2c9b
Implement Avatar Expedition System
CCasusensa May 6, 2022
6d89477
Merge pull request #594 from Akka0/tower
May 6, 2022
2b58d69
Improved fault tolerance for json file deserialization (#595)
cfuncode May 6, 2022
c4e1108
Add config option to change console server's signature, namecard, lev…
Arikatsu May 6, 2022
7109578
fix scence block loading bug
May 6, 2022
1d4a41f
Allow walking away from the statue within 2.5s to stop auto heal.
gentlespoon May 6, 2022
c582814
Fix #593: Accidental death of character
gentlespoon May 6, 2022
438f845
Convert to the superior language system. (pt. 3)
KingRainbow44 May 6, 2022
7899a60
Add the `en-US` language.
KingRainbow44 May 6, 2022
57a3d53
Add the `zh-TW` language.
KingRainbow44 May 6, 2022
686df18
Ensure we have a fallback for localization
KingRainbow44 May 6, 2022
d8719ec
Update .gitignore & remove files
KingRainbow44 May 6, 2022
80c9119
Merge `development` into `localization`
KingRainbow44 May 6, 2022
4264ca0
Update `Utils.java`
KingRainbow44 May 6, 2022
59b24aa
Rename `en-US` locale
KingRainbow44 May 7, 2022
e6cb97a
Bug fixes
KingRainbow44 May 7, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Convert to the superior language system. (pt. 1)
  • Loading branch information
KingRainbow44 committed May 6, 2022
commit 023c5baffeb63fcd324041898a2d9da8fb9ca9d7
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ plugins {
// Eclipse Support
id 'eclipse'

// Intelij Support
// IntelliJ Support
id 'idea'

// Maven
Expand Down
79 changes: 21 additions & 58 deletions src/main/java/emu/grasscutter/Grasscutter.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOError;
import java.net.InetSocketAddress;
import java.util.Calendar;
import java.util.Locale;

import emu.grasscutter.command.CommandMap;
import emu.grasscutter.plugin.PluginManager;
Expand All @@ -28,24 +26,25 @@
import ch.qos.logback.classic.Logger;
import emu.grasscutter.data.ResourceLoader;
import emu.grasscutter.database.DatabaseManager;
import emu.grasscutter.languages.CNLanguage;
import emu.grasscutter.languages.Language;
import emu.grasscutter.utils.Language;
import emu.grasscutter.server.dispatch.DispatchServer;
import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.tools.Tools;
import emu.grasscutter.utils.Crypto;

import static emu.grasscutter.utils.Language.translate;

public final class Grasscutter {
private static final Logger log = (Logger) LoggerFactory.getLogger(Grasscutter.class);
private static Config config;
private static LineReader consoleLineReader = null;

private static Config config;
private static Language language;
private static CNLanguage cn_language;

private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
private static final File configFile = new File("./config.json");

private static int day; // Current day of week
private static int day; // Current day of week.

private static DispatchServer dispatchServer;
private static GameServer gameServer;
Expand All @@ -60,29 +59,26 @@ public final class Grasscutter {
// Load server configuration.
Grasscutter.loadConfig();

// Load Language
// Load translation files.
Grasscutter.loadLanguage();

// Check server structure.
Utils.startupCheck();
}

public static void main(String[] args) throws Exception {
Crypto.loadKeys();
Crypto.loadKeys(); // Load keys from buffers.

// Parse arguments.
for (String arg : args) {
switch (arg.toLowerCase()) {
case "-handbook" -> {
Tools.createGmHandbook(); return;
}
case "-gachamap" -> {
Tools.createGachaMapping(); return;
}
case "-handbook" -> Tools.createGmHandbook();
case "-gachamap" -> Tools.createGachaMapping();
}
}

// Initialize server.
Grasscutter.getLogger().info(language.Starting_Grasscutter);
Grasscutter.getLogger().info(translate("messages.status.starting"));

// Load all resources.
Grasscutter.updateDayOfWeek();
Expand All @@ -97,7 +93,7 @@ public static void main(String[] args) throws Exception {

// Create server instances.
dispatchServer = new DispatchServer();
gameServer = new GameServer(new InetSocketAddress(getConfig().getGameServerOptions().Ip, getConfig().getGameServerOptions().Port));
gameServer = new GameServer();
// Create a server hook instance with both servers.
new ServerHook(gameServer, dispatchServer);

Expand All @@ -110,9 +106,9 @@ public static void main(String[] args) throws Exception {
} else if (getConfig().RunMode == ServerRunMode.GAME_ONLY) {
gameServer.start();
} else {
getLogger().error(language.Invalid_server_run_mode + " " + getConfig().RunMode);
getLogger().error(language.Server_run_mode);
getLogger().error(language.Shutting_down);
getLogger().error(translate("messages.status.run_mode_error", getConfig().RunMode));
getLogger().error(translate("messages.status.run_mode_help"));
getLogger().error(translate("messages.status.shutdown"));
System.exit(1);
}

Expand Down Expand Up @@ -145,41 +141,8 @@ public static void loadConfig() {
}

public static void loadLanguage() {
try (FileReader file = new FileReader(String.format("%s%s.json", getConfig().LANGUAGE_FOLDER, Grasscutter.config.LocaleLanguage))) {
language = gson.fromJson(file, Language.class);
} catch (Exception e) {
Grasscutter.language = new Language();
Grasscutter.cn_language = new CNLanguage();
Grasscutter.config.LocaleLanguage = Locale.getDefault();
saveConfig();

try {
File folder = new File("./languages");
if (!folder.exists() && !folder.isDirectory()) {
//noinspection ResultOfMethodCallIgnored
folder.mkdirs();
}
} catch (Exception ee) {
Grasscutter.getLogger().error("Unable to create language folder.");
}
try (FileWriter file = new FileWriter("./languages/" + Locale.US + ".json")) {
file.write(gson.toJson(language));
} catch (Exception ee) {
Grasscutter.getLogger().error("Unable to create language file.");
}
try (FileWriter file = new FileWriter("./languages/" + Locale.SIMPLIFIED_CHINESE + ".json")) {
file.write(gson.toJson(cn_language));
} catch (Exception ee) {
Grasscutter.getLogger().error("无法创建简体中文语言文件。");
}

// try again
try (FileReader file = new FileReader(String.format("%s%s.json", getConfig().LANGUAGE_FOLDER, Grasscutter.config.LocaleLanguage))) {
language = gson.fromJson(file, Language.class);
} catch (Exception ee) {
Grasscutter.getLogger().error("Unable to load " + Grasscutter.config.LocaleLanguage + ".json");
}
}
var locale = config.LocaleLanguage;
language = Language.getLanguage(locale.toLanguageTag());
}

public static void saveConfig() {
Expand All @@ -193,11 +156,11 @@ public static void saveConfig() {
public static void startConsole() {
// Console should not start in dispatch only mode.
if (getConfig().RunMode == ServerRunMode.DISPATCH_ONLY) {
getLogger().info(language.Dispatch_mode_not_support_command);
getLogger().info(translate("messages.dispatch.no_commands_error"));
return;
}

getLogger().info(language.Start_done);
getLogger().info(translate("messages.status.done"));
String input = null;
boolean isLastInterrupted = false;
while (true) {
Expand All @@ -223,7 +186,7 @@ public static void startConsole() {
try {
CommandMap.getInstance().invoke(null, null, input);
} catch (Exception e) {
Grasscutter.getLogger().error(language.Command_error, e);
Grasscutter.getLogger().error(translate("messages.game.command_error"), e);
}
}
}
Expand Down
Loading