package protocolsupport.protocol.packet.middleimpl.clientbound.play.v_4_5_6_7_8_9r1_9r2_10_11_12r1_12r2_13_14r1_14r2_15_16; import protocolsupport.api.ProtocolVersion; import protocolsupport.protocol.ConnectionImpl; import protocolsupport.protocol.packet.PacketType; import protocolsupport.protocol.packet.middle.clientbound.play.MiddleInventorySetSlot; import protocolsupport.protocol.packet.middleimpl.ClientBoundPacketData; import protocolsupport.protocol.serializer.ItemStackSerializer; import protocolsupport.protocol.typeremapper.window.WindowRemapper; import protocolsupport.protocol.typeremapper.window.WindowRemapper.SlotDoesntExistException; import protocolsupport.protocol.types.NetworkItemStack; public class InventorySetSlot extends MiddleInventorySetSlot { public InventorySetSlot(ConnectionImpl connection) { super(connection); } @Override protected void writeToClient() { String locale = cache.getClientCache().getLocale(); if (windowId == WINDOW_ID_PLAYER_CURSOR) { codec.write(create(version, locale, windowId, slot, itemstack)); return; } if (windowId == WINDOW_ID_PLAYER_INVENTORY) { //TODO: remap for versions that don't actually support this special window id codec.write(create(version, locale, windowId, slot, itemstack)); return; } if ((windowId == WINDOW_ID_PLAYER_HOTBAR) && (slot >= 36) && (slot < 45)) { codec.write(create(version, locale, windowId, slot, itemstack)); return; } if (!windowCache.isValidWindowId(windowId)) { return; } try { int windowSlot = windowCache.getOpenedWindowRemapper().toClientSlot(windowId, slot); codec.write(create( version, locale, WindowRemapper.getClientSlotWindowId(windowSlot), WindowRemapper.getClientSlotSlot(windowSlot), itemstack )); } catch (SlotDoesntExistException e) { } } protected static ClientBoundPacketData create(ProtocolVersion version, String locale, byte windowId, int slot, NetworkItemStack itemstack) { ClientBoundPacketData windowslot = ClientBoundPacketData.create(PacketType.CLIENTBOUND_PLAY_WINDOW_SET_SLOT); windowslot.writeByte(windowId); windowslot.writeShort(slot); ItemStackSerializer.writeItemStack(windowslot, version, locale, itemstack); return windowslot; } }