diff --git a/Grasscutter.iml b/Grasscutter.iml
new file mode 100644
index 000000000..0f136c501
--- /dev/null
+++ b/Grasscutter.iml
@@ -0,0 +1,865 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Grasscutter.ipr b/Grasscutter.ipr
new file mode 100644
index 000000000..3759484a6
--- /dev/null
+++ b/Grasscutter.ipr
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.6
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Grasscutter.iws b/Grasscutter.iws
new file mode 100644
index 000000000..d5bc7591f
--- /dev/null
+++ b/Grasscutter.iws
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ localhost
+ 5050
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/grasscutter-1.0.3-dev.jar.asc b/grasscutter-1.0.3-dev.jar.asc
new file mode 100644
index 000000000..0249d0297
--- /dev/null
+++ b/grasscutter-1.0.3-dev.jar.asc
@@ -0,0 +1,14 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.68
+
+iQGcBAABCgAGBQJicbItAAoJEK1DoRSUkxpGzZgMAJaxuuXmG3V1gFdJLXoKR+6s
+moOjwyD8UDfFModX92Thccgox9/j72A1x8sKQfJNDzI5wx51iR2rXw52KE6GhdVI
+vSyhnGv6LGOtGtA59i8wnXcEKBD33Qm6B2KFD4ox4JEheMb/wWK3zF09aknLkUVX
+43L48E4dF0lAzJ7QWZTTNKCK156Bwa3F8NhVLGGD6tpGahkS8J73Ax6C8uu6zVKf
+8dftBpI+0YxPJkbxoPahVZVmFawUjcjPDcRwG5LTO6McVUI9YzczSHdk0FG39ENo
+HXvwsK/xnN2Xy8ta+ylu9Eta0zx9mLTZjEjUQ3B8XjTDDVcz11DlvE5L1jJ8Gov+
+XbCM0m+od0hziCwuYg2BOsi13C9vejA5BoCHeejNTy+QiGGhK4QdyxdufxQD1Bo4
+uF8ZmmeC1AMA7m1y4tqIqwA5iJQx4KaB3aKw8np0bYuVVNnw75wpf3NBcQKW/Jf7
+diKjcimqhSkPpJ/ok0ZqITpMTaYhZoXnyUFsm0DIHA==
+=5WgW
+-----END PGP SIGNATURE-----
diff --git a/src/main/resources/languages/zh-TW.json b/src/main/resources/languages/zh-TW.json
new file mode 100644
index 000000000..22d1339c8
--- /dev/null
+++ b/src/main/resources/languages/zh-TW.json
@@ -0,0 +1,298 @@
+{
+ "messages": {
+ "game": {
+ "port_bind": "遊戲伺服器已成功啟動。端口號:%s",
+ "connect": "客戶端已連接至 %s",
+ "disconnect": "客戶端 %s 已斷開連接。",
+ "game_update_error": "遊戲更新時發生了錯誤。",
+ "command_error": "指令發生錯誤:"
+ },
+ "dispatch": {
+ "port_bind": "[Dispatch] 伺服器已在端口 %s 上開啟。",
+ "request": "[Dispatch] 客戶端 %s 請求: %s %s",
+ "keystore": {
+ "general_error": "[Dispatch] 加載keystore文件時發生錯誤!",
+ "password_error": "[Dispatch] 加載 keystore 失敗。正在嘗試使用預設 keystore 密碼...",
+ "no_keystore_error": "[Dispatch] 未找到 SSL 憑證!已後降到 HTTP 伺服器。",
+ "default_password": "[Dispatch] 默認的 keystore 密碼加載成功。請考慮將 config.json 的憑證密碼設定成 123456。"
+ },
+ "no_commands_error": "此指令不適用於Dispatch-only模式。",
+ "unhandled_request_error": "[Dispatch] 潛在的未處理請求 %s 請求:%s",
+ "account": {
+ "login_attempt": "[Dispatch] 客戶端 %s 正在嘗試登入",
+ "login_success": "[Dispatch] 客戶端 %s 已登入,UID為 %s",
+ "login_token_attempt": "[Dispatch] 客戶端 %s 正在嘗試用憑證登入",
+ "login_token_error": "[Dispatch] 客戶端 %s 使用憑證登入失敗",
+ "login_token_success": "[Dispatch] 客戶端 %s 已透過憑證登入,UID為 %s",
+ "combo_token_success": "[Dispatch] 客戶端 %s 交換憑證成功",
+ "combo_token_error": "[Dispatch] 客戶端 %s 交換憑證失敗",
+ "account_login_create_success": "[Dispatch] 客戶端 %s 登入失敗: 已註冊UID為 %s 的帳號",
+ "account_login_create_error": "[Dispatch] 客戶端 %s 登入失敗:帳號建立失敗。",
+ "account_login_exist_error": "[Dispatch] 客戶端 %s 登入失敗: 帳號不存在",
+ "account_cache_error": "遊戲帳號緩存資訊錯誤",
+ "session_key_error": "對話密鑰不符。",
+ "username_error": "未找到此用戶名。",
+ "username_create_error": "未找到用戶名,建立失敗。"
+ }
+ },
+ "status": {
+ "free_software": "Grasscutter 是免費開源軟體。如果你已經付錢了,那你可能被騙了。主頁:https://github.com/Grasscutters/Grasscutter",
+ "starting": "正在啟動 Grasscutter...",
+ "shutdown": "正在關閉...",
+ "done": "加載完成!需要指令幫助請輸入 \"help\"",
+ "error": "發生了一個錯誤。",
+ "welcome": "歡迎使用 Grasscutter",
+ "run_mode_error": "無效的伺服器運行模式: %s。",
+ "run_mode_help": "伺服器運行模式必須為 HYBRID 或者 DISPATCH_ONLY 或者 GAME_ONLY。Grasscutter 啟動失敗...",
+ "create_resources": "正在建立 resources 資料夾...",
+ "resources_error": "請將 BinOutput 和 ExcelBinOutput 複製到 resources 資料夾。"
+ }
+ },
+ "commands": {
+ "generic": {
+ "not_specified": "沒有指定指令。",
+ "unknown_command": "未知的指令:%s",
+ "permission_error": "您沒有執行此指令的權限。",
+ "console_execute_error": "此指令只能在伺服器的命令提示字元執行。",
+ "player_execute_error": "請在遊戲裡使用這條指令。",
+ "command_exist_error": "找不到指令。",
+ "invalid": {
+ "amount": "無效的 數量.",
+ "artifactId": "無效的聖遺物ID。",
+ "avatarId": "無效的角色ID。",
+ "avatarLevel": "無效的角色等級。",
+ "entityId": "無效的實體ID。",
+ "itemId": "無效的物品ID。",
+ "itemLevel": "無效的物品等級。",
+ "itemRefinement": "無效的物品精煉度。",
+ "playerId": "無效的玩家ID。",
+ "uid": "無效的UID。"
+ }
+ },
+ "execution": {
+ "uid_error": "無效的UID。",
+ "player_exist_error": "用戶不存在。",
+ "player_offline_error": "玩家已離線。",
+ "item_id_error": "無效的物品ID。.",
+ "item_player_exist_error": "無效的物品/玩家UID。",
+ "entity_id_error": "無效的實體ID。",
+ "player_exist_offline_error": "玩家不存在或已離線。",
+ "argument_error": "無效的參數。",
+ "clear_target": "目標已清除.",
+ "set_target": "隨後的指令都會以@%s為預設。",
+ "need_target": "此指令需要一個目標 UID。添加 <@UID> 引數或者使用 /target @UID 來設定持久目標。"
+ },
+ "status": {
+ "enabled": "已啟用",
+ "disabled": "未啟用",
+ "help": "幫助",
+ "success": "成功"
+ },
+ "account": {
+ "modify": "修改使用者帳號",
+ "invalid": "無效的UID。",
+ "exists": "帳號已存在。",
+ "create": "已建立帳號,UID 為 %s 。",
+ "delete": "帳號已刪除。",
+ "no_account": "帳號不存在。",
+ "command_usage": "用法:account [uid]"
+ },
+ "broadcast": {
+ "command_usage": "用法:broadcast ",
+ "message_sent": "公告已發送。"
+ },
+ "changescene": {
+ "usage": "用法:changescene ",
+ "already_in_scene": "你已經在這個場景中了。",
+ "success": "已切換至場景 %s.",
+ "exists_error": "此場景不存在。"
+ },
+ "clear": {
+ "command_usage": "用法: clear ",
+ "weapons": "已將 %s 的武器清空。",
+ "artifacts": "已將 %s 的聖遺物清空。",
+ "materials": "已將 %s 的材料清空。",
+ "furniture": "已將 %s 的塵歌壺家具清空。",
+ "displays": "已清除 %s 的顯示。",
+ "virtuals": "已將 %s 的所有貨幣和經驗值清空。",
+ "everything": "已將 %s 的所有物品清空。"
+ },
+ "coop": {
+ "usage": "用法:coop ",
+ "success": "Summoned %s to %s's world."
+ },
+ "enter_dungeon": {
+ "usage": "用法:enterdungeon ",
+ "changed": "已進入副本 %s",
+ "not_found_error": "此副本不存在。",
+ "in_dungeon_error": "你已經在祕境中了。"
+ },
+ "giveAll": {
+ "usage": "用法:giveall [player] [amount]",
+ "started": "正在賦予全部物品...",
+ "success": "已賦予全部物品。",
+ "invalid_amount_or_playerId": "無效的數量/玩家ID。"
+ },
+ "giveArtifact": {
+ "usage": "用法:giveart|gart [player] [[,]]... [level]",
+ "id_error": "無效的聖遺物ID。",
+ "success": "已把 %s 給予 %s。"
+ },
+ "giveChar": {
+ "usage": "用法:givechar [amount]",
+ "given": "Given %s with level %s to %s.",
+ "invalid_avatar_id": "無效的角色ID。",
+ "invalid_avatar_level": "無效的角色等級。.",
+ "invalid_avatar_or_player_id": "無效的角色ID/玩家ID。"
+ },
+ "give": {
+ "usage": "用法:give [amount] [level]",
+ "refinement_only_applicable_weapons": "精煉度只能施加在武器上面。",
+ "refinement_must_between_1_and_5": "精煉度必需在 1 到 5 之間。",
+ "given": "已經將 %s 個 %s 給予 %s。",
+ "given_with_level_and_refinement": "已將 %s [等級%s, 精煉%s] %s個給予 %s",
+ "given_level": "已將 %s 等級 %s %s 個給予 %s"
+ },
+ "godmode": {
+ "success": "上帝模式設定為 %s 。 [用戶:%s]"
+ },
+ "heal": {
+ "success": "所有角色已被治療。"
+ },
+ "kick": {
+ "player_kick_player": "玩家 [%s:%s] 已把 [%s:%s] 踢出",
+ "server_kick_player": "正在踢出玩家 [%s:%s]"
+ },
+ "kill": {
+ "usage": "用法:killall [playerUid] [sceneId]",
+ "scene_not_found_in_player_world": "未在玩家世界中找到此場景",
+ "kill_monsters_in_scene": "已殺死 %s 個怪物。 [場景ID: %s]"
+ },
+ "killCharacter": {
+ "usage": "用法:/killcharacter [playerId]",
+ "success": "已殺死 %s 目前的場上角色。"
+ },
+ "list": {
+ "message": "目前總線上人數:%s"
+ },
+ "permission": {
+ "usage": "用法:permission ",
+ "add": "已指派權限。",
+ "has_error": "此玩家已擁有權限!",
+ "remove": "權限已移除。",
+ "not_have_error": "此玩家未擁有權限!",
+ "account_error": "The account cannot be found."
+ },
+ "position": {
+ "success": "坐標:%.3f, %.3f, %.3f\n場景ID:%d"
+ },
+ "reload": {
+ "reload_start": "正在重新加載設定檔。",
+ "reload_done": "重新加載已完成。"
+ },
+ "resetConst": {
+ "reset_all": "重設所有角色的命座。",
+ "success": "已重設 %s 的命座,重新登入後將會生效。"
+ },
+ "resetShopLimit": {
+ "usage": "用法:/resetshop "
+ },
+ "sendMail": {
+ "usage": "用法:give [player] [amount]",
+ "user_not_exist": "ID '%s' 的使用者不存在。",
+ "start_composition": "發送郵件流程。\n請使用`/send <郵件標題>`來進到下一步。\n你可以在任何時間使用`/sendmail stop`來停止發送。",
+ "templates": "郵件模板尚未實裝...",
+ "invalid_arguments": "無效的參數。\n指令使用方法 `/sendmail [templateId]`",
+ "send_cancel": "取消傳送信息",
+ "send_done": "已將消息發送給 %s!",
+ "send_all_done": "消息已發送給全體用戶!",
+ "not_composition_end": "現在郵件發送未到最後階段。\n請使用 `/sendmail %s` 繼續發送郵件,或者 `/sendmail stop` 來停止發送郵件。",
+ "please_use": "請使用 `/sendmail %s`",
+ "set_title": "成功將郵件標題設定成 '%s'。\n接下來請繼續使用 '/sendmail ' 來設定郵件內容。",
+ "set_contents": "成功將'%s'為郵件內容。\n接下來請打出 '/sendmail <寄件者名稱>' 來設定郵件寄件者名稱。",
+ "set_message_sender": "郵件寄件者已設為 '%s'。\n使用 '/sendmail [amount] [level]' 以繼續操作。",
+ "send": "已添加 %s 個 %s (等級為 %s) 到郵件附件。\n如果沒有要繼續添加道具請使用 `/sendmail finish` 來完成郵件發送。",
+ "invalid_arguments_please_use": "Invalid arguments \n Please use `/sendmail %s`",
+ "title": "<標題>",
+ "message": "<正文>",
+ "sender": "<寄件者>",
+ "arguments": " [數量] [等級]",
+ "error": "錯誤:無效的編寫階段 %s。需要 stacktrace 請查看伺服器命令提示字元。"
+ },
+ "sendMessage": {
+ "usage": "用法:sendmessage ",
+ "success": "訊息已發送。"
+ },
+ "setFetterLevel": {
+ "usage": "用法:setfetterlevel ",
+ "range_error": "好感度必須在 0 到 10 之間。",
+ "fetter_set_level": "好感等級已設定為 %s",
+ "level_error": "無效的好感度。"
+ },
+ "setStats": {
+ "usage_console": "用法:setstats|stats @ ",
+ "usage_ingame": "用法:setstats|stats [@UID] ",
+ "help_message": "\n\t可使用的數據類型:hp (生命值)| maxhp (最大生命值) | def(防禦力) | atk (攻擊力)| em (元素精通) | er (元素充能效率) | crate(暴擊率) | cdmg (暴擊傷害)| cdr (冷卻縮減) | heal(治療加成)| heali (受治療加成)| shield (護盾強效)| defi (無視防禦)\n\t(cont.) 元素增傷類:epyro (火傷) | ecryo (冰傷) | ehydro (水傷) | egeo (岩傷) | edendro (草傷) | eelectro (雷傷) | ephys (物傷)(cont.) 元素減傷類:respyro (火抗) | rescryo (冰抗) | reshydro (水抗) | resgeo (岩抗) | resdendro (草抗) | reselectro (雷抗) | resphys (物抗)\n",
+ "value_error": "無效的數據值。",
+ "uid_error": "無效的UID。",
+ "player_error": "玩家不存在或已離線。",
+ "set_self": "%s 已經設為 %s。",
+ "set_for_uid": "%s 的使用者 %s 更改為 %s。",
+ "set_max_hp": "最大生命值更改為 %s。"
+ },
+ "setWorldLevel": {
+ "usage": "用法:setworldlevel ",
+ "value_error": "世界等級必須設定在0-8之間。",
+ "success": "已將世界等級設為%s。",
+ "invalid_world_level": "無效的世界等級。"
+ },
+ "spawn": {
+ "usage": "用法:spawn [amount] [level(僅限怪物)]",
+ "success": "已生成 %s 個 %s。"
+ },
+ "stop": {
+ "success": "正在關閉伺服器..."
+ },
+ "talent": {
+ "usage_1": "設定天賦等級:/talent set ",
+ "usage_2": "另一種設定天賦等級的指令使用方法:/talent ",
+ "usage_3": "獲取天賦ID指令用法:/talent getid",
+ "lower_16": "無效的技能等級,技能等級應低於 16。",
+ "set_id": "將天賦等級設為%s。",
+ "set_atk": "將普通攻擊等級設為 %s。",
+ "set_e": "設定天賦E等級至 %s。",
+ "set_q": "設定天賦Q等級至 %s。",
+ "invalid_skill_id": "無效的技能ID。",
+ "set_this": "將天賦等級設為 %s。",
+ "invalid_level": "無效的天賦等級。",
+ "normal_attack_id": "普通攻擊的 ID 為 %s。",
+ "e_skill_id": "E技能ID %s。",
+ "q_skill_id": "Q技能ID %s。"
+ },
+ "teleportAll": {
+ "success": "Summoned all players to your location.",
+ "error": "此指令僅可在多人遊戲下可用。"
+ },
+ "teleport": {
+ "usage_server": "用法:/tp @ [scene id]",
+ "usage": "用法:/tp [@] [scene id]",
+ "specify_player_id": "你必須指定一個玩家ID。",
+ "invalid_position": "無效的位置。",
+ "success": "傳送 %s 到坐標 %s,%s,%s ,場景為 %s"
+ },
+ "weather": {
+ "usage": "用法:weather [climateId]",
+ "success": "已將當前天氣設定為 %s ,氣候則為 %s 。",
+ "invalid_id": "無效的ID。"
+ },
+ "drop": {
+ "command_usage": "用法:drop [amount]",
+ "success": "已將 %s x %s 丟在附近。"
+ },
+ "help": {
+ "usage": "用法:",
+ "aliases": "別名:",
+ "available_commands": "可用指令:"
+ }
+ }
+}
\ No newline at end of file