Помогите Чтение отправленного пакета

Статус
Закрыто для дальнейших ответов.

Mihael_i

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Mihael_i
Здравствуйте, мне нужно с помощью плагина отправить пакет и принять и обработать его в моде.
Для отправки пакета я собираюсь использовать следующий метод:
Код:
String text = "Hello from plugin";
player.sendPluginMessage(this, "mychannel", text.getBytes());
Но я не нашел, как получить и обработать его на стороне мода(с помощью
FMLNetworkEvent.ClientCustomPacketEvent event).
Подскажите, если кто-нибудь знает. Желательно, с примером.
 
Нашел вот такое решение, но когда я пишу @NetworkMod оно подчеркивает красным, та же ситуация с IPacketHandler
Версия, под которую делаю мод- 1.8.8
Код пишу в IntelliJ IDEA
1. Содаем плагин
Подключаем интерфейс: PluginMessageListener

В методе onEnable() добавить
Код:
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "opengui");
В теле команды
Код:
player.sendPluginMessage(this, "opengui", text.getBytes());

2.Создаем мод, добавляем аннотации
Код:
@Mod(modid="OpenGuiMod", name="Lalala mod by K773", version="0.1")
@NetworkMod(clientSideRequired=true, serverSideRequired=false, channels={"opengui"}, packetHandler=OpenGuiListener.class)
Создаем класс OpenGuiListener
Код:
import cpw.mods.fml.common.network.IPacketHandler;
import cpw.mods.fml.common.network.Player;
import net.minecraft.client.Minecraft;
import net.minecraft.network.INetworkManager;
import net.minecraft.network.packet.Packet250CustomPayload;
import net.minecraft.client.gui.MyGui;
import net.minecraft.client.Minecraft;

public class OpenGuiListener
  implements IPacketHandler
{
  public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player)
  {
    if (packet.channel.equalsIgnoreCase("opengui"))
     Minecraft.getMinecraft().displayGuiScreen(new MyGui(new String(packet.data)));
  }
}

Проблему решил:
В версии 1.8 принимать данные надо с помощью
Код:
@SubscribeEvent
    public void onClientPacket(FMLNetworkEvent.ClientCustomPacketEvent event) {
        System.out.println("ПАКЕТ ПОЛУЧЕН!");
        money = 100 + "";
    }
Перед этим зарегистрировав название пакета:
Код:
@EventHandler
    public void init(FMLInitializationEvent event)
    {
        MinecraftForge.EVENT_BUS.register(this);
        FMLEventChannel ch = NetworkRegistry.INSTANCE.newEventDrivenChannel("balance");
        ch.register((Object)this);
    }
На стороне сервера в плагине надо зарегистрировать пакет с помощью
Код:
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "НАЗВАНИЕ_ПАКЕТА");
И отправлять пакет с помощью метода:
Код:
String s = "Hello";
e.getPlayer().sendPluginMessage(this, "НАЗВАНИЕ_ПАКЕТА", s.getBytes());
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх