Пакеты 1.6.4

Версия Minecraft
1.6.4
477
7
51
Может кто скинуть свою реализацию или туториал где можно почитать.
 
Решение
Чьи - не знаю, но юзаю их на лоу версиях(1.5 и 1.6)
PacketHandler:
//В заголовок класса нужно добавить 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) {...

jopi

Попрошайка
1,421
30
260
Чьи - не знаю, но юзаю их на лоу версиях(1.5 и 1.6)
PacketHandler:
//В заголовок класса нужно добавить 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);
        }
    }
}
VSPacket:
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);
        }
    }
}
PacketParticle(Пример пакета):
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);
         }
    }
}
Далее главный класс мода -
Java:
@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());



P.S. Если вопросы решаются раньше чем находится ответ тут - закрывай вопрос
 
Сверху