Не работает пакет

Версия Minecraft
1.7.10
API
Forge
122
1
5
Регистрирую нормально, а в консолько дальше отправки ничего не пишет.
SimplePacket:
public class SimplePacket implements IMessage, IMessageHandler<SimplePacket, SimplePacket> {
    private ByteBuf buf;


    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 (this.buf != null)
            buf.writeBytes(this.buf);
    }

    @SideOnly(Side.CLIENT)
    private EntityPlayer clientPlayer() {
        return Minecraft.getMinecraft().thePlayer;
    }
}
NetworkHandler:
public final class NetworkHandler {
    private static short id;

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

    public static final void registerPackets() {
        register(APacket.class, Side.SERVER);
        register(SPacket.class, Side.CLIENT);
    }

    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 final void sendToServer(IMessage message) {
        NetworkHandler.NETWORK.sendToServer(message);
    }

    private static void register(Class<? extends SimplePacket> packet, Side side) {
        try {
            NETWORK.registerMessage(packet.newInstance(), packet, id++, side);
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
APacket:
public final class APacket extends SimplePacket {
    public APacket(){}
    public APacket(String name) {
        ByteBufUtils.writeUTF8String(buf(), name);
    }
    @Override
    public void client(EntityPlayer player) {}

    @Override
    public void server(EntityPlayerMP player){
          String Servername = ByteBufUtils.readUTF8String(buf());
         System.out.println(Servername + " +++++++++++++++++++++++++++++");
    }
}
SPacket:
public final class SPacket extends SimplePacket {
   @Override
    public void server(EntityPlayerMP player) {
    }
    @Override
    public void client(EntityPlayer player){
        System.out.println("success =============================================================");
        NetworkHandler.sendToServer(new APacket("Player"));
    }
}
отправляю так:
Java:
 public void onKeyDown(InputEvent.KeyInputEvent e) {
        if (Keyboard.isKeyDown(Keyboard.KEY_F)) {
            NetworkHandler.NETWORK.sendToServer(new SPacket());
            System.out.println("It's work");
        }
    }
 
Последнее редактирование:
72
4
12
Отправляешь на сервер, а надо конкретному игроку..
Ты вообще свой код читал ?
1660666648927.png

так же на клиенте не обрабатываешь.
1660666692520.png


UPD: Возможно у тебя другая задача, но я что-то не понимаю для чего это...
 
Последнее редактирование:

TheAndrey

Редактор учебника
1,071
72
372
Сами себе усложняете простую задачу, в результате пропадает понимание что и как работает. Выбрасывайте мусор в виде обработки пакета обеими сторонами - на деле такое встречается редко, чревато созданием уязвимости. Новый пакет всегда завести можно для отправки в обратную сторону (как минимум 128 пакетов гарантированно доступно).
Чтение/запись данных тоже сделана бредово. Должна быть сериализация конкертных полей пакета, никаких ссылок на буфер.
 
122
1
5
Я просто хочу передать строку с именем игрока серверу, посмотрел гайд по пакетам, сделал как там только на оборот, так как там передача с сервера на клиент, и уже в последующем передать инт тому же игроку на клиент.
 
459
13
35

Посмотри эту пакетную систему, максимально лёгкая в использование и проблем с ней куда меньше.
 

TheAndrey

Редактор учебника
1,071
72
372
Я просто хочу передать строку с именем игрока серверу, посмотрел гайд по пакетам, сделал как там только на оборот, так как там передача с сервера на клиент, и уже в последующем передать инт тому же игроку на клиент.
Тогда в пакете должно быть поле с ником игрока (устарело) UUID или EntityID.
 
Сверху