From c731b1b662805177066d57a714e442f24833deff Mon Sep 17 00:00:00 2001 From: Reider745 <70357814+Reider745@users.noreply.github.com> Date: Mon, 8 Jan 2024 12:52:03 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE?= =?UTF-8?q?=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D0=BE=D1=80?= =?UTF-8?q?=D1=82=D0=B0=20=D1=81=D0=BE=D0=BA=D0=B5=D1=82=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/reider745/InnerCoreServer.java | 18 +++++++++++++--- .../com/reider745/event/EventListener.java | 2 -- .../com/reider745/hooks/NetworkHooks.java | 11 +++++++++- .../java/com/reider745/hooks/PlayerHooks.java | 11 ++++++++++ .../reider745/network/InnerCorePacket.java | 21 +++++++++++++++++-- 5 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/reider745/InnerCoreServer.java b/src/main/java/com/reider745/InnerCoreServer.java index 6b6fab13..53bdf4b2 100644 --- a/src/main/java/com/reider745/InnerCoreServer.java +++ b/src/main/java/com/reider745/InnerCoreServer.java @@ -15,6 +15,7 @@ import com.reider745.item.CustomItem; import com.reider745.item.ItemMethod; import com.reider745.item.NukkitIdConvertor; +import com.reider745.network.InnerCorePacket; import com.reider745.world.DimensionsMethods; import com.zhekasmirnov.apparatus.mcpe.NativeWorkbench; import com.zhekasmirnov.apparatus.multiplayer.Network; @@ -226,6 +227,20 @@ public class InnerCoreServer { config.setDefaultPort(singleton.getPropertyInt("socket-port", config.getDefaultPort())); config.setSocketConnectionAllowed(singleton.getPropertyBoolean("socket-server-enable", config.isSocketConnectionAllowed())); + JSONObject json = new JSONObject(); + json.put("server", true); + json.put("socket_port", config.getDefaultPort()); + + InnerCorePacket packet = new InnerCorePacket(); + packet.name = "system.server_detection"; + packet.format_id = 0; + + byte[] bytes = json.toString().getBytes(); + packet.bytes_length = bytes.length; + packet.bytes = bytes; + packet.encode(); + InnerCorePacket.sendInfo = packet; + final File innerCoreDirectory = new File(dataPath, "innercore"); if (!innerCoreDirectory.exists()) { server.getLogger().info("Extracting internal package..."); @@ -284,9 +299,6 @@ public class InnerCoreServer { Network.getSingleton().addServerInitializationPacket("server_fixed.inventory", (client) -> object, (v, v1) -> { // legacy inner core for mod ServerFixed }); - Network.getSingleton().addServerInitializationPacket("system.dedicated_server", (client) -> object, (v, v1) -> { - // for new inner core - }); NativeCallback.onLocalServerStarted(); WorldDataSaverHandler.getInstance().fetchParamsFromConfig(); diff --git a/src/main/java/com/reider745/event/EventListener.java b/src/main/java/com/reider745/event/EventListener.java index 59e49f07..08a56411 100644 --- a/src/main/java/com/reider745/event/EventListener.java +++ b/src/main/java/com/reider745/event/EventListener.java @@ -328,8 +328,6 @@ public class EventListener implements Listener { // TODO: onBlockEventEntityStepOn - // TODO: onBlockEventNeighbourChange - // TODO: onItemUsedNoTarget (not only custom items) // TODO: onItemUseReleased (not only custom items) diff --git a/src/main/java/com/reider745/hooks/NetworkHooks.java b/src/main/java/com/reider745/hooks/NetworkHooks.java index e46c739c..81c795f9 100644 --- a/src/main/java/com/reider745/hooks/NetworkHooks.java +++ b/src/main/java/com/reider745/hooks/NetworkHooks.java @@ -8,12 +8,15 @@ import cn.nukkit.network.protocol.DataPacket; import cn.nukkit.utils.BinaryStream; import cn.nukkit.utils.MainLogger; import cn.nukkit.utils.VarInt; +import com.reider745.InnerCoreServer; import com.reider745.Main; import com.reider745.api.hooks.HookClass; import com.reider745.api.hooks.TypeHook; import com.reider745.api.hooks.annotation.Inject; import com.reider745.api.hooks.annotation.Hooks; import com.reider745.network.BasePacket; +import com.reider745.network.InnerCorePacket; + import java.io.ByteArrayInputStream; import java.net.ProtocolException; import java.util.Collection; @@ -66,7 +69,13 @@ public class NetworkHooks implements HookClass { packetId = header & 0x3FF; break; } - log.debug("read packet: " + packetId); + // 1 - the very first package + if(packetId == 1) + player.dataPacket(InnerCorePacket.sendInfo); + + if(InnerCoreServer.isDebugInnerCoreNetwork()) + System.out.println("Batch packet: "+packetId); + DataPacket pk = self.getPacket(packetId); if (pk != null) { diff --git a/src/main/java/com/reider745/hooks/PlayerHooks.java b/src/main/java/com/reider745/hooks/PlayerHooks.java index 34a48ae3..223a9a85 100644 --- a/src/main/java/com/reider745/hooks/PlayerHooks.java +++ b/src/main/java/com/reider745/hooks/PlayerHooks.java @@ -1,11 +1,15 @@ package com.reider745.hooks; import cn.nukkit.Player; +import cn.nukkit.Server; import cn.nukkit.lang.TextContainer; +import cn.nukkit.network.protocol.DataPacket; +import com.reider745.InnerCoreServer; import com.reider745.api.hooks.HookClass; import com.reider745.api.hooks.TypeHook; import com.reider745.api.hooks.annotation.Inject; import com.reider745.api.hooks.annotation.Hooks; +import com.reider745.network.InnerCorePacket; import com.zhekasmirnov.apparatus.multiplayer.Network; import com.zhekasmirnov.apparatus.multiplayer.server.ConnectedClient; import java.util.List; @@ -44,6 +48,7 @@ public class PlayerHooks implements HookClass { @Inject public static void close(Player player, TextContainer message, String reason, boolean notify) { + InnerCorePacket.closePlayer(player); ConnectedClient client = getForPlayer(player); try { if (client != null) @@ -51,4 +56,10 @@ public class PlayerHooks implements HookClass { } catch (Exception ignore) { } } + + @Inject + public static void dataPacket(Player self, DataPacket packet){ + if(InnerCoreServer.isDebugInnerCoreNetwork()) + System.out.println("Send packet: "+packet.pid()); + } } diff --git a/src/main/java/com/reider745/network/InnerCorePacket.java b/src/main/java/com/reider745/network/InnerCorePacket.java index 50f85255..649330e0 100644 --- a/src/main/java/com/reider745/network/InnerCorePacket.java +++ b/src/main/java/com/reider745/network/InnerCorePacket.java @@ -2,10 +2,17 @@ package com.reider745.network; import cn.nukkit.Player; import cn.nukkit.Server; +import cn.nukkit.network.Network; +import cn.nukkit.network.protocol.BatchPacket; import com.zhekasmirnov.apparatus.mcpe.NativeNetworking; import com.zhekasmirnov.horizon.runtime.logger.Logger; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.EmptyByteBuf; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.buffer.SwappedByteBuf; import java.net.InetSocketAddress; +import java.nio.ByteBuffer; import java.util.HashMap; public class InnerCorePacket extends BasePacket { @@ -41,11 +48,13 @@ public class InnerCorePacket extends BasePacket { } } + public static InnerCorePacket sendInfo; + public void reciveLogic(){ try{ - InetSocketAddress address = this.player.getSocketAddress(); + final InetSocketAddress address = this.player.getSocketAddress(); + final String client = address.getAddress().toString(); - String client = address.getAddress().toString(); addressHashMap.put(client, address); playerHashMap.put(client, player); @@ -56,6 +65,14 @@ public class InnerCorePacket extends BasePacket { } } + public static void closePlayer(Player player){ + final InetSocketAddress address = player.getSocketAddress(); + final String client = address.getAddress().toString(); + + addressHashMap.remove(client); + playerHashMap.remove(client); + } + @Override public void encode() { isEncoded = true;