byte damage = reader.readByte();
Не сложно.не сложно
public class PacketHandler implements IPacketHandler {
public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player fakePlayer) {
ByteArrayDataInput reader = ByteStreams.newDataInput((byte[]) packet.data);
EntityPlayer player = (EntityPlayer) fakePlayer;
}
}
@NetworkMod(clientSideRequired = true, serverSideRequired = true, channels = {}, packetHandler = PacketHandler.class)
channels = {"opengui"}
. public void openGUI(int guiId) {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
DataOutputStream outputStream = new DataOutputStream(byteStream);
try {
outputStream.writeByte(guiId);//Запись id
PacketDispatcher.sendPacketToServer(PacketDispatcher.getPacket("opengui", (byte[]) byteStream.toByteArray()));//Отправка на сервер
}
catch (IOException e) {}
}
public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player fakePlayer) {
ByteArrayDataInput reader = ByteStreams.newDataInput((byte[]) packet.data);
byte packetId = reader.readByte();
EntityPlayer player = (EntityPlayer) fakePlayer;
if (packet.channel.equals("opengui")) {//Канал для открытия ГПИ
int guiId = reader.readByte();//Считывание полученного id.
player.openGui(ModMain.instance, guiId, player.worldObj, (int) player.posX, (int) player.posY, (int) player.posZ);//Открытие ГПИ
}
}
}
PacketDispatcher#sendPacketToPlayer
при отправке (с сервера, естественно). В остальном всё так же, как и с серверным пакетом. Не сложно.
Не помню где можно найти туториал по пакетам на эту версию, поэтому напишу кратко сам. Вот как я это делал давным давно в далёкой далёкой галактике...
Создай класс для работы с пакетами и реализуй IPacketHandler :
Java:public class PacketHandler implements IPacketHandler { public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player fakePlayer) { ByteArrayDataInput reader = ByteStreams.newDataInput((byte[]) packet.data); EntityPlayer player = (EntityPlayer) fakePlayer; } }
В главном классе под аннотацию Mod добавь аннотацию NetworkMod. Тут указывается необходимость использования пакетов для сервера и клиента, регистрируются каналы, и регистрируется твоя реализация IPacketHandler:
Java:@NetworkMod(clientSideRequired = true, serverSideRequired = true, channels = {}, packetHandler = PacketHandler.class)
Всё, теперь отправка и обработка. Покажу на примере пакетов для открытия ГПИ инвентарей. Так как это происходит на сервере, то необходимо послать пакет на сервер.
Сначала зарегистрируй канал в NetworkMod:channels = {"opengui"}
.
Для удобства метод для отправки идентификаторов ГПИ, размещённый в KeyHandler. Для отправки используй нужный канал.
Java:public void openGUI(int guiId) { ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); DataOutputStream outputStream = new DataOutputStream(byteStream); try { outputStream.writeByte(guiId);//Запись id PacketDispatcher.sendPacketToServer(PacketDispatcher.getPacket("opengui", (byte[]) byteStream.toByteArray()));//Отправка на сервер } catch (IOException e) {} }
Обработка в PacketHandler:
Java:public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player fakePlayer) { ByteArrayDataInput reader = ByteStreams.newDataInput((byte[]) packet.data); byte packetId = reader.readByte(); EntityPlayer player = (EntityPlayer) fakePlayer; if (packet.channel.equals("opengui")) {//Канал для открытия ГПИ int guiId = reader.readByte();//Считывание полученного id. player.openGui(ModMain.instance, guiId, player.worldObj, (int) player.posX, (int) player.posY, (int) player.posZ);//Открытие ГПИ } } }
Что бы что то послать на клиент, нужно использоватьPacketDispatcher#sendPacketToPlayer
при отправке (с сервера, естественно). В остальном всё так же, как и с серверным пакетом.
Собственно всё. Как синхронизировать ItemStack думаю сам догадаешься, если будет нужно. И рекомендую всё таки перейти на версию поновее.
package com.programmers.chlen.main;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams;
import com.programmers.chlen.weapons.EntityBullet;
import cpw.mods.fml.common.network.IPacketHandler;
import cpw.mods.fml.common.network.Player;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.network.INetworkManager;
import net.minecraft.network.packet.Packet250CustomPayload;
public class PacketHandler implements IPacketHandler {
public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player fakePlayer) {
ByteArrayDataInput reader = ByteStreams.newDataInput((byte[]) packet.data);
byte damage = reader.readByte();
EntityPlayer player = (EntityPlayer) fakePlayer;
if (packet.channel.equals("chlen")) {//Канал для открытия ГПИ
int damageBullet = reader.readByte();
//player.addChatMessage(""+damageBullet);
}
}
}
byte damage = reader.readByte();