- Баллы
- 88
Привет Всем!
В общем я пытаюсь модифицировать пакет PacketType.Play.Server.CHAT, вот класс:
Пакет модифицируется и клиенту отправляется, но не всё так радужно как хотелось-бы, вот проблема в том, что например, если игрок отправляет сообщение в чат, только отправитель видит модифицированную версию, все остальные видят оригинальный текст. ProtocolLib последней версии, ядро: paper-1.20.2.
Кто знает, подскажите куда копать, чтобы модифицировать эти пакеты для всех получателей а не только отправителю?
В общем я пытаюсь модифицировать пакет PacketType.Play.Server.CHAT, вот класс:
Код:
package net.wealth_mc.mystery.listeners.protocol.server;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.reflect.StructureModifier;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
import com.comphenix.protocol.events.ListenerPriority;
import net.wealth_mc.mystery.ItemLingo;
import net.wealth_mc.mystery.listeners.protocol.AbstractPacketListener;
public class PacketChat extends AbstractPacketListener {
public PacketChat() {
super(PacketType.Play.Server.CHAT);
ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
protocolManager.addPacketListener(this.packetAdapter = new PacketAdapter(itemLingoPlugin, ListenerPriority.NORMAL,
PacketType.Play.Server.CHAT) {
@Override
public void onPacketSending(PacketEvent event) {
handlePacket(event);
}
});
register();
}
@Override
protected void handlePacket(PacketEvent event) {
ModificationState modState = new ModificationState();
String playerLang = getPlayerLanguage(event.getPlayer());
try {
Object chatComponents = event.getPacket().getChatComponents().read(0);
if (chatComponents != null) {
WrappedChatComponent wrappedChat = (WrappedChatComponent) chatComponents;
String jsonChat = wrappedChat.getJson();
String modifiedJson = modifyChat(jsonChat, playerLang, modState, "text");
if (modState.isModified() && modifiedJson != null) {
WrappedChatComponent modifiedComponent = WrappedChatComponent.fromJson(modifiedJson);
event.getPacket().getChatComponents().write(0, modifiedComponent);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Пакет модифицируется и клиенту отправляется, но не всё так радужно как хотелось-бы, вот проблема в том, что например, если игрок отправляет сообщение в чат, только отправитель видит модифицированную версию, все остальные видят оригинальный текст. ProtocolLib последней версии, ядро: paper-1.20.2.
Кто знает, подскажите куда копать, чтобы модифицировать эти пакеты для всех получателей а не только отправителю?