diff --git a/build.gradle b/build.gradle index fda73783..69e22706 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ application { repositories { mavenCentral() maven { - url 'https://repo.lanink.cn/repository/maven-public/' + url 'https://repo.lanink.com/repository/maven-public/' } maven { url 'https://repo.opencollab.dev/maven-releases/' diff --git a/src/main/java/com/reider745/event/EventListener.java b/src/main/java/com/reider745/event/EventListener.java index ab82037d..34c13b3d 100644 --- a/src/main/java/com/reider745/event/EventListener.java +++ b/src/main/java/com/reider745/event/EventListener.java @@ -435,7 +435,7 @@ public class EventListener implements Listener { if (username.equalsIgnoreCase(player.getName()) || player.getUniqueId().equals(p.getUniqueId())) { event.setKickMessage("disconnectionScreen.loggedinOtherLocation"); event.setCancelled(); - break; + return; } } } @@ -445,17 +445,17 @@ public class EventListener implements Listener { public void onLoginEvent(PlayerJoinEvent event) { ConnectedClient client = PlayerHooks.getForPlayer(event.getPlayer()); if (client == null || client.getClientState() != ConnectedClient.ClientState.OPEN) { - event.getPlayer().kick("You are should connect via Inner Core!"); - // event.setCancelled(); + String message = "You are should connect via Inner Core!"; + if(client != null) + message += "\nstate:" + client.getClientState(); + event.getPlayer().kick(message); return; } final String username = event.getPlayer().getName(); consumeEvent(event, () -> NativeCallback.onPlayerLogin(client, username, (message) -> { - if (message != null) { + if(message != null) event.getPlayer().kick(message); - } - // event.setCancelled(); }), true); } diff --git a/src/main/java/com/reider745/hooks/PlayerHooks.java b/src/main/java/com/reider745/hooks/PlayerHooks.java index 9a06aea1..9e87db7e 100644 --- a/src/main/java/com/reider745/hooks/PlayerHooks.java +++ b/src/main/java/com/reider745/hooks/PlayerHooks.java @@ -65,13 +65,13 @@ public class PlayerHooks implements HookClass { } public static ConnectedClient getForPlayer(Player player) { - List clients = Network.getSingleton().getServer().getInitializingClients(); + Listclients = Network.getSingleton().getServer().getConnectedClients(); for (ConnectedClient client : clients) if (equalsAddress(player.getSocketAddress().toString(), client.getChannelInterface().getChannel().getClient())) return client; - clients = Network.getSingleton().getServer().getConnectedClients(); + clients = Network.getSingleton().getServer().getInitializingClients(); for (ConnectedClient client : clients) if (equalsAddress(player.getSocketAddress().toString(), client.getChannelInterface().getChannel().getClient())) @@ -80,9 +80,19 @@ public class PlayerHooks implements HookClass { return null; } + @Inject(type = TypeHook.BEFORE_NOT_REPLACE) + public static void close(Player player, TextContainer message, String reason, boolean notify) { + ConnectedClient client = getForPlayer(player); + try { + if (client != null) + client.disconnect(); + } catch (Throwable ignore) { + } + } + @Inject public static void dataPacket(Player player, DataPacket packet) { - if (InnerCoreServer.isDebugInnerCoreNetwork()) + if (InnerCoreServer.isDebugInnerCoreNetwork() && packet.packetId() != 21) System.out.println("sending packet player=" + EntityMethod.getIdForEntity(player) + " id=" + packet.packetId() + " pid=" + packet.pid() + " channel=" + packet.getChannel()); } diff --git a/src/main/java/com/reider745/network/InnerCorePacket.java b/src/main/java/com/reider745/network/InnerCorePacket.java index a360bdb0..08a38b92 100644 --- a/src/main/java/com/reider745/network/InnerCorePacket.java +++ b/src/main/java/com/reider745/network/InnerCorePacket.java @@ -11,7 +11,6 @@ import java.util.*; public class InnerCorePacket extends BasePacket { public static final byte NETWORK_ID = -64; - private static Map bytes_recived = new LinkedHashMap<>(); public String name; public int format_id; @@ -44,8 +43,7 @@ public class InnerCorePacket extends BasePacket { if(InnerCoreServer.isDebugInnerCoreNetwork()) System.out.println("Recived packet for native protocol "+name); - bytes_recived.put(Thread.currentThread().getId(), bytes); - NativeNetworking.onServerPacketReceived(player, name, format_id); + NativeNetworking.onServerPacketReceived(player, name, format_id, bytes); } catch (Exception e) { Server.getInstance().getLogger().warning("Native protocol decoding error!", e); player.kick(e.getMessage()); @@ -64,9 +62,6 @@ public class InnerCorePacket extends BasePacket { this.put(bytes); } - public static byte[] getCurrentNativePacketBytes() { - return bytes_recived.get(Thread.currentThread().getId()); - } public static void sendPacketToClient(Player player, String name, int format_id, byte[] data) { InnerCorePacket packet = new InnerCorePacket(); @@ -77,9 +72,4 @@ public class InnerCorePacket extends BasePacket { player.dataPacket(packet); } - - @ClientOnly - public static void sendPacketToServer(String name, int format_id, byte[] data) { - InnerCoreServer.useClientMethod("sendPacketToServer "+name); - } } diff --git a/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeNetworking.java b/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeNetworking.java index 320c354f..cfd647d3 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeNetworking.java +++ b/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeNetworking.java @@ -1,6 +1,7 @@ package com.zhekasmirnov.apparatus.mcpe; import cn.nukkit.Player; +import com.reider745.InnerCoreServer; import com.reider745.network.InnerCorePacket; import com.zhekasmirnov.apparatus.multiplayer.channel.codec.StringChannelCodec; import com.zhekasmirnov.apparatus.multiplayer.channel.data.DataPacket; @@ -54,7 +55,7 @@ public class NativeNetworking { } public String getClientRepresentation() { - return client == null ? "server" : "client:" + client.getSocketAddress().getAddress().toString(); + return client == null ? "server" : "client:" + getId(client); } public boolean isServerSide() { @@ -134,7 +135,7 @@ public class NativeNetworking { private void unlink() { if (client != null) { synchronized (serverToClientChannelMap) { - serverToClientChannelMap.remove(client); + serverToClientChannelMap.remove(getId(client)); } } else { clientToServerChannel = null; @@ -155,11 +156,15 @@ public class NativeNetworking { if (client != null) { InnerCorePacket.sendPacketToClient(client, packet.name, packet.formatId, packet.data); } else { - InnerCorePacket.sendPacketToServer(packet.name, packet.formatId, packet.data); + InnerCoreServer.useClientMethod("send"); } } } + public static String getId(Player client){ + return client.getSocketAddress().getAddress().toString(); + } + private static NativeChannelImpl clientToServerChannel = null; private static final Map serverToClientChannelMap = new HashMap<>(); @@ -197,32 +202,23 @@ public class NativeNetworking { } } - public static void onServerPacketReceived(Player sender, String name, int formatId) throws IOException { + public static void onServerPacketReceived(Player sender, String name, int formatId, byte[] bytes) throws IOException { synchronized (serverToClientChannelMap) { - Java8BackComp.computeIfAbsent(serverToClientChannelMap, sender.getSocketAddress().getAddress().toString(), key -> { + Java8BackComp.computeIfAbsent(serverToClientChannelMap, getId(sender), key -> { NativeChannelImpl channel = new NativeChannelImpl(sender); for (ConnectionListener listener : connectionListeners) { listener.onNativeChannelConnected(new NativeDataChannel(channel), sender); } return channel; - }).onReceived(new DataPacket(name, formatId, getCurrentNativePacketBytesNonNull())); + }).onReceived(new DataPacket(name, formatId, bytes)); } } @Deprecated(since = "Zote") public static void onClientPacketReceived(String name, int formatId) throws IOException { - if (clientToServerChannel == null) { - clientToServerChannel = new NativeChannelImpl(null); - } - clientToServerChannel.onReceived(new DataPacket(name, formatId, getCurrentNativePacketBytesNonNull())); + throw new RuntimeException("onClientPacketReceived"); } - private static byte[] getCurrentNativePacketBytesNonNull() { - byte[] bytes = InnerCorePacket.getCurrentNativePacketBytes(); - return bytes != null ? bytes : new byte[0]; - } - - public static class NetworkLoopHandler { public static final int GLOBAL_HANDLER = 1; public static final int SERVER_HANDLER = 2; diff --git a/src/main/java/com/zhekasmirnov/apparatus/multiplayer/channel/data/NativeDataChannel.java b/src/main/java/com/zhekasmirnov/apparatus/multiplayer/channel/data/NativeDataChannel.java index d348ce22..39f2543b 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/multiplayer/channel/data/NativeDataChannel.java +++ b/src/main/java/com/zhekasmirnov/apparatus/multiplayer/channel/data/NativeDataChannel.java @@ -43,6 +43,6 @@ public class NativeDataChannel extends DataChannel { @Override public String getClient() { - return nativeImpl.getClient().getSocketAddress().getAddress().toString(); + return NativeNetworking.getId(nativeImpl.getClient()); } } diff --git a/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java b/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java index 8b4418ff..181a55c3 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java @@ -848,13 +848,13 @@ public class NativeCallback { /* NETWORK CALLBACKS */ public static void onModdedServerPacketReceived(int formatId) { - String name = getStringParam("name"); + /*String name = getStringParam("name"); String client = getStringParam("client"); try { NativeNetworking.onServerPacketReceived(null, name, formatId); } catch (IOException e) { e.printStackTrace(); - } + }*/ } @Deprecated(since = "Zote")