diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerClient.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerClient.java index 8a9ee00a6..6b81dcabf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerClient.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerClient.java @@ -26,7 +26,7 @@ import java.io.*; import java.net.ConnectException; import java.net.InetAddress; import java.net.Socket; - import java.util.logging.Level; +import java.util.logging.Level; import static org.jackhuang.hmcl.ui.multiplayer.MultiplayerChannel.*; import static org.jackhuang.hmcl.util.Logging.LOG; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerPage.java index f14632e89..c3974193f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerPage.java @@ -210,8 +210,11 @@ public class MultiplayerPage extends Control implements DecoratorPage, PageAware int gamePort = result.getAd(); try { MultiplayerManager.CatoSession session = MultiplayerManager.createSession(config().getMultiplayerToken(), result.getMotd(), gamePort); - session.getServer().onClientAdding().register(event -> { - + session.getServer().setOnClientAdding((client, resolveClient, rejectClient) -> { + runInFX(() -> { + Controllers.confirm(i18n("multiplayer.session.create.join.prompt", client.getUsername()), i18n("multiplayer.session.create.join"), MessageDialogPane.MessageType.INFO, + resolveClient, () -> rejectClient.accept("")); + }); }); session.getServer().onClientAdded().register(event -> { runInFX(() -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerServer.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerServer.java index 9bcfbe2bb..64016dd18 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerServer.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerServer.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.ui.multiplayer; import com.google.gson.JsonParseException; -import org.jackhuang.hmcl.event.Event; import org.jackhuang.hmcl.event.EventManager; import org.jackhuang.hmcl.util.FutureCallback; import org.jackhuang.hmcl.util.Lang; @@ -27,10 +26,8 @@ import org.jackhuang.hmcl.util.gson.JsonUtils; import java.io.*; import java.net.ServerSocket; import java.net.Socket; -import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Future; import java.util.logging.Level; import static org.jackhuang.hmcl.ui.multiplayer.MultiplayerChannel.*; @@ -106,7 +103,7 @@ public class MultiplayerServer extends Thread { try { if (client.socket.isConnected()) { - client.write(new KickResponse()); + client.write(new KickResponse("")); client.socket.close(); } } catch (IOException e) { diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 434bdf2d4..b64e9a9c6 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -628,6 +628,8 @@ multiplayer.session.copy_room_code=Copy Invitation Code multiplayer.session.create=Create Room multiplayer.session.create.error=Failed to create multiplayer room. multiplayer.session.create.hint=Before creating multiplayer room, you must click "Open LAN Server" in running game, and type the port displayed in game in the blank below. +multiplayer.session.create.join=Connection request +multiplayer.session.create.join.prompt=Player %s wants to join the multiplayer session. Accept? multiplayer.session.create.members=Members multiplayer.session.create.members.kick=Kick multiplayer.session.create.members.kick.prompt=After kicking this player, the established connection with this player will be cut up. diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 1270d1b67..ba8008979 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -628,6 +628,8 @@ multiplayer.session.copy_room_code=複製邀請碼 multiplayer.session.create=創建房間 multiplayer.session.create.error=創建聯機房間失敗。 multiplayer.session.create.hint=創建聯機房間前,你需要先在正在運行的遊戲內的遊戲菜單中選擇 對區域網路開放 選項,然後在下方的輸入框中輸入遊戲內提示的埠號(通常是 5 位的數字) +multiplayer.session.create.join=連接申請 +multiplayer.session.create.join.prompt=玩家 %s 申請加入多人聯機房間,是否接受? multiplayer.session.create.members=成員 multiplayer.session.create.members.kick=踢出房間 multiplayer.session.create.members.kick.prompt=是否踢出該玩家?踢出後該玩家不能再參與該聯機房間。 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 6337db44a..90a839ba2 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -628,6 +628,8 @@ multiplayer.session.copy_room_code=复制邀请码 multiplayer.session.create=创建房间 multiplayer.session.create.error=创建联机房间失败。 multiplayer.session.create.hint=创建联机房间前,你需要先在正在运行的游戏内的游戏菜单中选择 对局域网开放 选项,然后在下方的输入框中确认游戏内提示的端口号(通常是 5 位的数字) +multiplayer.session.create.join=连接申请 +multiplayer.session.create.join.prompt=玩家 %s 申请加入多人联机房间,是否接受? multiplayer.session.create.members=成员 multiplayer.session.create.members.kick=踢出房间 multiplayer.session.create.members.kick.prompt=是否踢出该玩家?踢出后该玩家不能再参与该联机房间。