Untitled

 avatar
unknown
java
a year ago
2.8 kB
6
Indexable
package com.trexmine.guiapi.handlers;

import com.trexmine.guiapi.gui.GuiManager;
import com.trexmine.guiapi.packets.GuiPacketPlayInWindowClick;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.util.AttributeKey;
import lombok.RequiredArgsConstructor;
import net.minecraft.server.v1_8_R3.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;

import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.UUID;

@RequiredArgsConstructor
public final class ItemsDecoder extends ByteToMessageDecoder {

    private static final Logger LOGGER = LogManager.getLogger();

    private final GuiManager guiManager;
    private final UUID playerUniqueId;

    protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> packetList) throws Exception {
        try {
            if (buffer.readableBytes() == 0) {
                return;
            }

            PacketDataSerializer serializer = new PacketDataSerializer(buffer);
            int id = serializer.e();
            Packet<?> packet;

            if (id == 14) {
                byte windowId = serializer.getByte(serializer.readerIndex());

                if (windowId == guiManager.getId(playerUniqueId)) {
                    packet = new GuiPacketPlayInWindowClick();
                } else {
                    packet = new PacketPlayInWindowClick();
                }
            } else {
                packet = ctx.channel()
                        .attr(NetworkManager.c)
                        .get()
                        .a(EnumProtocolDirection.SERVERBOUND, id);
            }

            if (packet == null) {
                throw new IOException("Bad packet ID=" + id);
            }

            packet.a(serializer);

            if (serializer.readableBytes() > 0) {
                throw new IOException("Packet ID=" + id + " (" + packet.getClass().getSimpleName()
                        + ") was larger than I expected, found " + serializer.readableBytes()
                        + " bytes extra whilst reading packet " + id
                );
            }

            packetList.add(packet);

            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug(" IN: [{}:{}] {}",
                        ctx.channel()
                                .attr(NetworkManager.c)
                                .get(),
                        id,
                        packet.getClass().getName()
                );
            }
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
            e.printStackTrace();
        }
    }
}
Editor is loading...
Leave a Comment