Untitled
unknown
java
a year ago
3.5 kB
10
Indexable
package com.trexmine.guiapi.handlers;
import com.trexmine.guiapi.gui.GuiItem;
import com.trexmine.guiapi.gui.GuiManager;
import com.trexmine.guiapi.packets.GuiPacketPlayOutSetSlot;
import com.trexmine.guiapi.packets.GuiPacketPlayOutWindowItems;
import com.trexmine.guiapi.packets.GuiPacketPlayOutWindowItemsMixed;
import com.trexmine.guiapi.wrapper.WrappedPacketPlayOutWindowItems;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
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.UUID;
@RequiredArgsConstructor
public final class ItemsEncoder extends MessageToByteEncoder<Packet<?>> {
private static final Logger LOGGER = LogManager.getLogger();
private final GuiManager guiManager;
private final UUID playerUniqueId;
@Override
protected void encode(ChannelHandlerContext ctx, Packet packet, ByteBuf buffer) throws Exception {
try {
Integer id;
if (packet instanceof GuiPacketPlayOutSetSlot) {
id = 47;
} else if (packet instanceof GuiPacketPlayOutWindowItems) {
id = 48;
} else {
id = ctx.channel()
.attr(NetworkManager.c)
.get()
.a(EnumProtocolDirection.CLIENTBOUND, packet);
}
if (packet instanceof PacketPlayOutWindowItems) {
WrappedPacketPlayOutWindowItems wrappedWindowItems = new WrappedPacketPlayOutWindowItems((PacketPlayOutWindowItems) packet);
int windowId = wrappedWindowItems.getWindowId();
if (windowId == guiManager.getId(playerUniqueId)) {
GuiItem[] items = guiManager.getGui(playerUniqueId).getItems();
ItemStack[] nmsItems = wrappedWindowItems.getItems();
Object[] mix = new Object[nmsItems.length];
int itemsLength = items.length;
System.arraycopy(items, 0, mix, 0, itemsLength);
System.arraycopy(nmsItems, itemsLength, mix, itemsLength, nmsItems.length - itemsLength);
packet = new GuiPacketPlayOutWindowItemsMixed(windowId, mix);
}
}
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("OUT: [{}:{}] {}",
ctx.channel()
.attr(NetworkManager.c)
.get(),
id,
packet.getClass().getName()
);
}
if (id == null) {
throw new IOException("Can't serialize unregistered packet");
} else {
try {
PacketDataSerializer serializer = new PacketDataSerializer(buffer);
serializer.b(id);
packet.b(serializer);
} catch (Throwable throwable) {
LOGGER.error(throwable);
}
}
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
e.printStackTrace();
}
}
}Editor is loading...
Leave a Comment