- 1,216
- 27
- 172
Итак. Создаем класс PacketHandler(на самом деле название может быть любым, если до вас все еще не дошло).
Выглядеть он должен примерно так:
Вот и все, вызываете PacketHandler.init() из init метода и готово.
Выглядеть он должен примерно так:
Код:
@Sharable //Без этого, кстати, будет краш
public class PacketHandler extends SimpleChannelInboundHandler<FMLProxyPacket>{
private static FMLEmbeddedChannel server;
private static FMLEmbeddedChannel client;
public static void init(){
EnumMap<Side, FMLEmbeddedChannel> channels = NetworkRegistry.INSTANCE.newChannel("уникальное_название_канала_modid_подойдет", new PacketHandler())
client = channels.get(Side.CLIENT);
server = channels.get(Side.SERVER);
}
public static void sendToServer(ByteBuf data){ //ByteBuf - забавный класс, его методы узреете в IDE, а получить его можно вызовом Unpooled.buffer()
client.attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.TOSERVER);
client.writeAndFlush(new FMLProxyPacket(data, "то_самое_название_канала_запихните_в_константу_а_то_забудете")).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
}
//cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper - другие типы "посыла" - игрокам, в измерение и т. д. как в старом добром PacketDispatcher-е.
@Override
public void channelRead0(ChannelHandlerContext ctx, FMLProxyPacket msg){
ByteBuf data = msg.payload();//Ваша инфа.
switch(data.readByte()){Делайте чего хотите, но крайне рекомендую делать так
case 0:
doMagic1();
break;
case 1:
doMagic2();
break;
default:
sysout("WRONG PACKET RECEIVED");
}
}
}