Search in sources :

Example 1 with ServerOpenWindowPacket

use of com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket in project DragonProxy by DragonetMC.

the class InventoryTranslatorRegister method open.

public static void open(UpstreamSession session, ServerOpenWindowPacket win) {
    closeOpened(session, true);
    if (TRANSLATORS.containsKey(win.getType())) {
        CachedWindow cached = new CachedWindow(win.getWindowId(), win.getType(), win.getSlots() + 36);
        session.getWindowCache().cacheWindow(cached);
        final IInventoryTranslator translator = TRANSLATORS.get(win.getType());
        session.getDataCache().put(CacheKey.CURRENT_WINDOW_ID, win.getWindowId());
        // -36 for the player inv size
        session.getDataCache().put(CacheKey.CURRENT_WINDOW_SIZE, win.getSlots());
        translator.prepare(session, cached);
        DragonProxy.getInstance().getGeneralThreadPool().schedule(() -> {
            // with this -> double chest, without -> content....
            translator.open(session, cached);
            cached.isOpen = true;
            com.github.steveice10.packetlib.packet.Packet[] items = session.getWindowCache().getCachedPackets(win.getWindowId());
            for (com.github.steveice10.packetlib.packet.Packet item : items) if (item != null)
                if (ServerWindowItemsPacket.class.isAssignableFrom(item.getClass()))
                    updateContent(session, (ServerWindowItemsPacket) item);
                else
                    updateSlot(session, (ServerSetSlotPacket) item);
        }, 200, TimeUnit.MILLISECONDS);
    } else
        // Not supported
        session.getDownstream().send(new ClientCloseWindowPacket(win.getWindowId()));
}
Also used : InventoryContentPacket(org.dragonet.protocol.packets.InventoryContentPacket) ServerOpenWindowPacket(com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket) ClientCloseWindowPacket(com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientCloseWindowPacket) PEPacket(org.dragonet.protocol.PEPacket) ServerWindowItemsPacket(com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket) ServerSetSlotPacket(com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerSetSlotPacket) ContainerClosePacket(org.dragonet.protocol.packets.ContainerClosePacket) CachedWindow(org.dragonet.proxy.network.cache.CachedWindow) ServerSetSlotPacket(com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerSetSlotPacket) ClientCloseWindowPacket(com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientCloseWindowPacket) IInventoryTranslator(org.dragonet.proxy.network.translator.IInventoryTranslator) ServerWindowItemsPacket(com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket)

Aggregations

ClientCloseWindowPacket (com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientCloseWindowPacket)1 ServerOpenWindowPacket (com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket)1 ServerSetSlotPacket (com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerSetSlotPacket)1 ServerWindowItemsPacket (com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket)1 PEPacket (org.dragonet.protocol.PEPacket)1 ContainerClosePacket (org.dragonet.protocol.packets.ContainerClosePacket)1 InventoryContentPacket (org.dragonet.protocol.packets.InventoryContentPacket)1 CachedWindow (org.dragonet.proxy.network.cache.CachedWindow)1 IInventoryTranslator (org.dragonet.proxy.network.translator.IInventoryTranslator)1