Fixed: Тестовый фикс пакета info

This commit is contained in:
Reider745
2024-05-05 18:16:46 +03:00
parent 2fcc3f4417
commit fc6af08b47
3 changed files with 19 additions and 6 deletions
@@ -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<String> 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<DataPacket> 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);
}
}
@@ -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)
@@ -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;