- 477
- 7
- 51
Может кто скинуть свою реализацию или туториал где можно почитать.
//В заголовок класса нужно добавить implements IPacketHandler
public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) {
if (packet != null && packet.channel.equals("КАНАЛ[I]ПАКЕТОВ[/I]ТВОЕГО_МОДА")) {
try {
EntityPlayer ePlayer = (EntityPlayer)player;
ByteArrayDataInput bytein = ByteStreams.newDataInput(packet.data);
int pakId = bytein.readUnsignedByte();
VSPacket paket = VSPacket.constructPacket(pakId);
paket.readData(bytein);
paket.onPacket(ePlayer, ePlayer.worldObj.isRemote ? Side.CLIENT : Side.SERVER);
} catch (VSPacket.ProtocolException var8) {...
//В заголовок класса нужно добавить implements IPacketHandler
public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) {
if (packet != null && packet.channel.equals("КАНАЛ[I]ПАКЕТОВ[/I]ТВОЕГО_МОДА")) {
try {
EntityPlayer ePlayer = (EntityPlayer)player;
ByteArrayDataInput bytein = ByteStreams.newDataInput(packet.data);
int pakId = bytein.readUnsignedByte();
VSPacket paket = VSPacket.constructPacket(pakId);
paket.readData(bytein);
paket.onPacket(ePlayer, ePlayer.worldObj.isRemote ? Side.CLIENT : Side.SERVER);
} catch (VSPacket.ProtocolException var8) {
if (player instanceof EntityPlayerMP) {
((EntityPlayerMP) player).playerNetServerHandler.kickPlayerFromServer("Protocol Exception!");
Logger.getLogger("FML").warning("Player " + ((EntityPlayer) player).username + " caused a Protocol Exception!");
}
} catch (InstantiationException var9) {
throw new RuntimeException("Unexpected Reflection exception during Packet construction!", var9);
} catch (IllegalAccessException var10) {
throw new RuntimeException("Unexpected Reflection exception during Packet construction!", var10);
}
}
}
public abstract class VSPacket {
public static final String CHANNEL = "КАНАЛ[I]ПАКЕТОВ[/I]ТВОЕГО_МОДА";
private static final BiMap idMap;
public static VSPacket constructPacket(int packetId) throws ProtocolException, IllegalAccessException, InstantiationException {
Class clazz = (Class) idMap.get(packetId);
if (clazz == null) {
throw new VSPacket.ProtocolException("Unknown Packet Id!");
} else {
return (VSPacket)clazz.newInstance();
}
}
public final int getPacketId() {
if (idMap.inverse().containsKey(this.getClass())) {
return (Integer)idMap.inverse().get(this.getClass());
} else {
throw new RuntimeException("Packet " + this.getClass().getSimpleName() + " is missing a mapping!");
}
}
//Выстраивание пакета для отправки
public final Packet makePacket() {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeByte(this.getPacketId());
this.writeData(out);
return PacketDispatcher.getPacket(this.CHANNEL, out.toByteArray());
}
//Абстрактные методы для пакетов, пакеты наследуются от этого
public abstract void writeData(ByteArrayDataOutput out);
public abstract void readData(ByteArrayDataInput in) throws ProtocolException;
public abstract void onPacket(EntityPlayer var1, Side var2) throws ProtocolException;
static {
Builder builder = ImmutableBiMap.builder();
builder.put(0, PacketParticle.class); //Пример регистрации пакета, сам он ниже
idMap = builder.build();
}
public static class ProtocolException extends Exception {
public ProtocolException() {
}
public ProtocolException(String message, Throwable cause) {
super(message, cause);
}
public ProtocolException(String message) {
super(message);
}
public ProtocolException(Throwable cause) {
super(cause);
}
}
}
public class PacketParticle extends VSPacket {
private String name;
private double x;
private double y;
private double z;
//Конструктор)
public PacketParticle(String givenParticleName, double d1, double d2, double d3) {
this.name = givenParticleName;
this.x = d1;
this.y = d2;
this.z = d3;
}
//Пустой конструктор для его создания без вообще данных уже после записи когда он передается
//Проще говоря создания пакета без данных, после этого они читаются либо записываются и отправляется это дело
public PacketParticle() {
}
//Запись данных
public void writeData(ByteArrayDataOutput w) {
w.writeUTF(this.name);
w.writeDouble(this.x);
w.writeDouble(this.y);
w.writeDouble(this.z);
}
//Чтение данных
public void readData(ByteArrayDataInput r) throws ProtocolException {
this.name = r.readUTF();
this.x = r.readDouble();
this.y = r.readDouble();
this.z = r.readDouble();
}
//Выполнение пакета
public void onPacket(EntityPlayer player, Side side) throws ProtocolException {
if (side == Side.CLIENT) {
Minecraft mc = Minecraft.getMinecraft();
mc.theWorld.spawnParticle(this.name, this.x, this.y, this.z, 0.0F, 0.0F, 0.0F);
}
}
}
@Mod(blah blah blah)
@NetworkMod(clientSideRequired = false, serverSideRequired = false, channels = {"КАНАЛ[I]ПАКЕТОВ[/I]ТВОЕГО_МОДА"}, packetHandler = PacketHandler.class)
public class myModClass {
...
}
PacketDispatcher.sendPacketToAllPlayers(new PacketParticle("smoke", 10, 10, 10).makePacket());
подскажите за что отвечают данные переменныеclientSideRequired = false, serverSideRequired = false