From fc6af08b4791c5fc8e44108708042478a61cb13c Mon Sep 17 00:00:00 2001 From: Reider745 <70357814+Reider745@users.noreply.github.com> Date: Sun, 5 May 2024 18:16:46 +0300 Subject: [PATCH] =?UTF-8?q?Fixed:=20=D0=A2=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D0=B9=20=D1=84=D0=B8=D0=BA=D1=81=20=D0=BF=D0=B0=D0=BA?= =?UTF-8?q?=D0=B5=D1=82=D0=B0=20info?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/reider745/hooks/NetworkHooks.java | 23 +++++++++++++++---- .../java/com/reider745/hooks/PlayerHooks.java | 1 + .../reider745/network/InnerCorePacket.java | 1 - 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/reider745/hooks/NetworkHooks.java b/src/main/java/com/reider745/hooks/NetworkHooks.java index 059d9d97..b2498a2e 100644 --- a/src/main/java/com/reider745/hooks/NetworkHooks.java +++ b/src/main/java/com/reider745/hooks/NetworkHooks.java @@ -20,15 +20,24 @@ 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 com.zhekasmirnov.apparatus.mcpe.NativeNetworking; import com.zhekasmirnov.horizon.runtime.logger.Logger; import java.io.ByteArrayInputStream; import java.net.ProtocolException; import java.nio.charset.StandardCharsets; import java.util.Collection; +import java.util.LinkedList; @Hooks(className = "cn.nukkit.network.Network") public class NetworkHooks implements HookClass { + + private static LinkedList canSendInfo = new LinkedList<>(); + + public static void close(Player player){ + canSendInfo.remove(NativeNetworking.getId(player)); + } + @Inject(signature = "([BLjava/util/Collection;Lcn/nukkit/network/CompressionProvider;ILcn/nukkit/Player;)V", type = TypeHook.BEFORE_REPLACE) public static void processBatch(Network network, byte[] payload, Collection packets, CompressionProvider compression, int raknetProtocol, Player player) { @@ -88,6 +97,15 @@ public class NetworkHooks implements HookClass { if (pk instanceof BasePacket) ((BasePacket) pk).player = player; + if(player != null){ + final String id = NativeNetworking.getId(player); + if(!canSendInfo.contains(id)){ + canSendInfo.add(id); + player.dataPacket(InnerCorePacket.sendInfo); + } + } + + try { if (raknetProtocol > 8) { pk.decode(); @@ -132,9 +150,4 @@ public class NetworkHooks implements HookClass { properties[3] = Utils.getVersionByProtocol(InnerCoreServer.PROTOCOL); ReflectHelper.setField(raknet, "advertisement", String.join(";", properties).getBytes(StandardCharsets.UTF_8)); } - - @Inject(className = "cn.nukkit.network.session.RakNetPlayerSession") - public static void setPlayer(RakNetPlayerSession self, Player player){ - player.dataPacket(InnerCorePacket.sendInfo); - } } diff --git a/src/main/java/com/reider745/hooks/PlayerHooks.java b/src/main/java/com/reider745/hooks/PlayerHooks.java index 9e87db7e..268f71a7 100644 --- a/src/main/java/com/reider745/hooks/PlayerHooks.java +++ b/src/main/java/com/reider745/hooks/PlayerHooks.java @@ -82,6 +82,7 @@ public class PlayerHooks implements HookClass { @Inject(type = TypeHook.BEFORE_NOT_REPLACE) public static void close(Player player, TextContainer message, String reason, boolean notify) { + NetworkHooks.close(player); ConnectedClient client = getForPlayer(player); try { if (client != null) diff --git a/src/main/java/com/reider745/network/InnerCorePacket.java b/src/main/java/com/reider745/network/InnerCorePacket.java index 08a38b92..633b5222 100644 --- a/src/main/java/com/reider745/network/InnerCorePacket.java +++ b/src/main/java/com/reider745/network/InnerCorePacket.java @@ -62,7 +62,6 @@ public class InnerCorePacket extends BasePacket { this.put(bytes); } - public static void sendPacketToClient(Player player, String name, int format_id, byte[] data) { InnerCorePacket packet = new InnerCorePacket(); packet.name = name;