Untitled
unknown
java
a year ago
3.5 kB
7
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