Пакеты

Версия Minecraft
1.7.10
API
Forge
Всем привет. Не работает система пакетов. Я уверен, что допускаю где-то ошибку, но не пойму где.


Java:
public final class SPacketParticles extends SimplePacket {
    
    @Override
    public void server(EntityPlayerMP player) {
        NetworkHandler.sendToAllAround(new CPacketParticles(), player.worldObj, player.posX, player.posY, player.posZ, 10);
    }
}


Java:
public final class CPacketParticles extends SimplePacket {
    
    public CPacketParticles(){}
    
    public CPacketParticles(double x, double y, double z) {
        buf().writeDouble(x);
        buf().writeDouble(y);
        buf().writeDouble(z);
    }

    @Override
    public void client(EntityPlayer player) {
        double
                x = buf().readDouble(),
                y = buf().readDouble(),
                z = buf().readDouble(),
                newPosX, newPosZ, speedX, speedZ,
                doublePi = 2 * Math.PI;

        final double RADIUS = 0.4;

        for (double i = 0; i < doublePi; i += doublePi / 50) {
            newPosX = x + RADIUS * Math.cos(i);
            newPosZ = z + RADIUS * Math.sin(i);

            speedX = (newPosX - x) * 0.2D;
            speedZ = (newPosZ - z) * 0.2D;

            player.worldObj.spawnParticle("flame", newPosX, y, newPosZ, speedX, 0.0D, speedZ);
        }
    }
}


Java:
public class SimplePacket implements IMessage, IMessageHandler<SimplePacket, SimplePacket> {
    
    private ByteBuf buf;

    @Override
    public SimplePacket onMessage(SimplePacket sp, MessageContext ctx) {
        if (ctx.side.isServer())
            sp.server(ctx.getServerHandler().playerEntity);
        else
            sp.client(clientPlayer());
        return null;
    }

    protected ByteBuf buf() {
        return buf != null ? buf : (buf = Unpooled.buffer());
    }

    public void client(EntityPlayer player) {}
    public void server(EntityPlayerMP player) {}

    @Override
    public final void fromBytes(ByteBuf buf) {
        this.buf = buf;
    }

    @Override
    public final void toBytes(ByteBuf buf) {
        if (buf != null)
            buf.writeBytes(this.buf);
    }

    @SideOnly(Side.CLIENT)
    private EntityPlayer clientPlayer() {
        return Minecraft.getMinecraft().thePlayer;
    }
}


Java:
public final class NetworkHandler {
    
    private short id;

    public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel("NewChannel");

    public NetworkHandler() {
        register(CPacketParticles.class, Side.CLIENT);
        register(SPacketParticles.class, Side.SERVER);   
    }

    public static void sendToAllAround(SimplePacket packet, World world, double x, double y, double z, double distance) {
        NETWORK.sendToAllAround(packet, new NetworkRegistry.TargetPoint(world.provider.dimensionId, x, y, z, distance));
    }
    
    public static void sendToServer(SimplePacket packet) {
        NETWORK.sendToServer(packet);
    }

    public static void sendToClient(SimplePacket packet, EntityPlayerMP player) {
        NETWORK.sendTo(packet, player);
    }

    private void register(Class<? extends SimplePacket> packet, Side side) {
        try {
            NETWORK.registerMessage(packet.newInstance(), packet, id++, side);
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

Пытался отлавливать момент передачи пакета и выводить в консоль, реакции ноль

заранее всем спасибо за помощь, если уж какая-то слишком очевидная ошибка - извиняюсь, не столь давно сижу в java
 
Ты вообще создавал объект NetworkHandler? У тебя в конструкторе регаются пакеты.
Не очень понял. Если есть возможность и тебе не лень, можешь подробнее по этому поводу немного обьяснить, чтобы я понял суть? Ибо не хочу просить готовы код, хочу понять это.
 
7,099
324
1,510
1,159
38
544
Я тут немного дальше продвинулся, пакет начал срабатывать. Поставил просто проверку на нажатие клавиши, но появилась ошибка в логах при его отправление.

отправление пакета:

Java:
    @SubscribeEvent
    public void onKeyDown(KeyInputEvent e) {
        if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
            NetworkHandler.NETWORK.sendToServer(new SPacketParticles());
            System.out.println("It's work");
        }
    }


Код:
[15:40:46] [Client thread/INFO] [STDOUT/]: [com.xmafee.aide.EventHandler:onKey:61]: It's work
[15:40:46] [Client thread/ERROR] [FML/]: FMLIndexedMessageCodec exception caught
io.netty.handler.codec.EncoderException: java.lang.NullPointerException
    at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107) ~[MessageToMessageEncoder.class:?]
    at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:?]
    at com.xmafee.aide.EventHandler.onKey(EventHandler.java:60) [EventHandler.class:?]
    at cpw.mods.fml.common.eventhandler.ASMEventHandler_11_EventHandler_onKey_KeyInputEvent.invoke(.dynamic) [?:?]
    at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) [ASMEventHandler.class:?]
    at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
    at cpw.mods.fml.common.FMLCommonHandler.fireKeyInput(FMLCommonHandler.java:540) [FMLCommonHandler.class:?]
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1964) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_251]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_251]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
    at GradleStart.main(Unknown Source) [start/:?]
Caused by: java.lang.NullPointerException
    at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:824) ~[AbstractByteBuf.class:?]
    at com.xmafee.packets.SimplePacket.toBytes(SimplePacket.java:43) ~[SimplePacket.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:11) ~[SimpleIndexedCodec.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.encode(FMLIndexedMessageToMessageCodec.java:51) ~[FMLIndexedMessageToMessageCodec.class:?]
    at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[MessageToMessageCodec$1.class:?]
    at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:89) ~[MessageToMessageEncoder.class:?]
    ... 25 more
 

tox1cozZ

aka Agravaine
8,456
598
2,892
Ты вообще создавал объект NetworkHandler? У тебя в конструкторе регаются пакеты.
Олло вы меня слышите? Объект создай чтобы вызвался конструктор и твои пакеты зарегались.
 
Олло вы меня слышите? Объект создай чтобы вызвался конструктор и твои пакеты зарегались.
Java:
public final class NetworkHandler {
  
    private static short id;

    public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel("NewChannel");

    public static void registerPackets() {
        register(CPacketParticles.class, Side.CLIENT);
        register(SPacketParticles.class, Side.SERVER); 
    }

    public static void sendToAllAround(SimplePacket packet, World world, double x, double y, double z, double distance) {
        NETWORK.sendToAllAround(packet, new NetworkRegistry.TargetPoint(world.provider.dimensionId, x, y, z, distance));
    }
  
    public static void sendToServer(SimplePacket packet) {
        NETWORK.sendToServer(packet);
    }

    public static void sendToClient(SimplePacket packet, EntityPlayerMP player) {
        NETWORK.sendTo(packet, player);
    }

    private static void register(Class<? extends SimplePacket> packet, Side side) {
        try {
            NETWORK.registerMessage(packet.newInstance(), packet, id++, side);
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}


Java:
    @EventHandler
    public void preInit(FMLPreInitializationEvent event) {    
        proxy.preInit(event);

        NetworkHandler.registerPackets();
    }

типо так?
это не совсем создание обьекта
 
Последнее редактирование:
В любом случае в логах ошибка:

Код:
[19:44:20] [Client thread/ERROR] [FML]: FMLIndexedMessageCodec exception caught
io.netty.handler.codec.EncoderException: java.lang.NullPointerException
    at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107) ~[MessageToMessageEncoder.class:?]
    at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:?]
    at com.xmafee.aide.EventHandler.onKeyDown(EventHandler.java:60) [EventHandler.class:?]
    at cpw.mods.fml.common.eventhandler.ASMEventHandler_11_EventHandler_onKeyDown_KeyInputEvent.invoke(.dynamic) [?:?]
    at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) [ASMEventHandler.class:?]
    at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
    at cpw.mods.fml.common.FMLCommonHandler.fireKeyInput(FMLCommonHandler.java:540) [FMLCommonHandler.class:?]
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1964) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_251]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_251]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
    at GradleStart.main(Unknown Source) [start/:?]
Caused by: java.lang.NullPointerException
    at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:824) ~[AbstractByteBuf.class:?]
    at com.xmafee.packets.SimplePacket.toBytes(SimplePacket.java:43) ~[SimplePacket.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:11) ~[SimpleIndexedCodec.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.encode(FMLIndexedMessageToMessageCodec.java:51) ~[FMLIndexedMessageToMessageCodec.class:?]
    at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[MessageToMessageCodec$1.class:?]
    at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:89) ~[MessageToMessageEncoder.class:?]
    ... 25 more
[19:44:20] [Client thread/ERROR] [FML]: SimpleChannelHandlerWrapper exception
io.netty.handler.codec.EncoderException: java.lang.NullPointerException
    at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107) ~[MessageToMessageEncoder.class:?]
    at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:?]
    at com.xmafee.aide.EventHandler.onKeyDown(EventHandler.java:60) [EventHandler.class:?]
    at cpw.mods.fml.common.eventhandler.ASMEventHandler_11_EventHandler_onKeyDown_KeyInputEvent.invoke(.dynamic) [?:?]
    at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) [ASMEventHandler.class:?]
    at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
    at cpw.mods.fml.common.FMLCommonHandler.fireKeyInput(FMLCommonHandler.java:540) [FMLCommonHandler.class:?]
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1964) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_251]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_251]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
    at GradleStart.main(Unknown Source) [start/:?]
Caused by: java.lang.NullPointerException
    at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:824) ~[AbstractByteBuf.class:?]
    at com.xmafee.packets.SimplePacket.toBytes(SimplePacket.java:43) ~[SimplePacket.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:11) ~[SimpleIndexedCodec.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.encode(FMLIndexedMessageToMessageCodec.java:51) ~[FMLIndexedMessageToMessageCodec.class:?]
    at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[MessageToMessageCodec$1.class:?]
    at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:89) ~[MessageToMessageEncoder.class:?]
    ... 25 more
[19:44:20] [Client thread/INFO] [STDOUT]: [com.xmafee.aide.EventHandler:onKeyDown:61]: It's work
 
7,099
324
1,510
Пакетная система норм, но не горю желанием с CodeChickenLib работать
С ним ты и не будешь работать. Он просто идет как зависимость. Не обращай на него внимания.
И ходят слухи, что пакеты CCL работают быстрее, чем SimpleNetworkWrapper, типо, обработка пакетов через эвенты быстрее.
 
Сверху