/** * Verifies that the server and client are synchronized with respect to the inventory/container opened by the player * and confirms if it is the case. */ public void handleConfirmTransaction(SPacketConfirmTransaction packetIn) { PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); Container container = null; EntityPlayer entityplayer = this.gameController.player; if (packetIn.getWindowId() == 0) { container = entityplayer.inventoryContainer; } else if (packetIn.getWindowId() == entityplayer.openContainer.windowId) { container = entityplayer.openContainer; } if (container != null && !packetIn.wasAccepted()) { this.sendPacket(new CPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), true)); } }
/** * Verifies that the server and client are synchronized with respect to the inventory/container opened by the player * and confirms if it is the case. */ public void handleConfirmTransaction(SPacketConfirmTransaction packetIn) { PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); Container container = null; EntityPlayer entityplayer = this.gameController.thePlayer; if (packetIn.getWindowId() == 0) { container = entityplayer.inventoryContainer; } else if (packetIn.getWindowId() == entityplayer.openContainer.windowId) { container = entityplayer.openContainer; } if (container != null && !packetIn.wasAccepted()) { this.sendPacket(new CPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), true)); } }
/** * Executes a container/inventory slot manipulation as indicated by the packet. Sends the serverside result if they * didn't match the indicated result and prevents further manipulation by the player until he confirms that it has * the same open container/inventory */ public void processClickWindow(CPacketClickWindow packetIn) { PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.playerEntity.getServerWorld()); this.playerEntity.markPlayerActive(); if (this.playerEntity.openContainer.windowId == packetIn.getWindowId() && this.playerEntity.openContainer.getCanCraft(this.playerEntity)) { if (this.playerEntity.isSpectator()) { NonNullList<ItemStack> nonnulllist = NonNullList.<ItemStack>func_191196_a(); for (int i = 0; i < this.playerEntity.openContainer.inventorySlots.size(); ++i) { nonnulllist.add(((Slot)this.playerEntity.openContainer.inventorySlots.get(i)).getStack()); } this.playerEntity.updateCraftingInventory(this.playerEntity.openContainer, nonnulllist); } else { ItemStack itemstack2 = this.playerEntity.openContainer.slotClick(packetIn.getSlotId(), packetIn.getUsedButton(), packetIn.getClickType(), this.playerEntity); if (ItemStack.areItemStacksEqual(packetIn.getClickedItem(), itemstack2)) { this.playerEntity.connection.sendPacket(new SPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), true)); this.playerEntity.isChangingQuantityOnly = true; this.playerEntity.openContainer.detectAndSendChanges(); this.playerEntity.updateHeldItem(); this.playerEntity.isChangingQuantityOnly = false; } else { this.pendingTransactions.addKey(this.playerEntity.openContainer.windowId, Short.valueOf(packetIn.getActionNumber())); this.playerEntity.connection.sendPacket(new SPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), false)); this.playerEntity.openContainer.setCanCraft(this.playerEntity, false); NonNullList<ItemStack> nonnulllist1 = NonNullList.<ItemStack>func_191196_a(); for (int j = 0; j < this.playerEntity.openContainer.inventorySlots.size(); ++j) { ItemStack itemstack = ((Slot)this.playerEntity.openContainer.inventorySlots.get(j)).getStack(); ItemStack itemstack1 = itemstack.func_190926_b() ? ItemStack.field_190927_a : itemstack; nonnulllist1.add(itemstack1); } this.playerEntity.updateCraftingInventory(this.playerEntity.openContainer, nonnulllist1); } } } }
/** * Executes a container/inventory slot manipulation as indicated by the packet. Sends the serverside result if they * didn't match the indicated result and prevents further manipulation by the player until he confirms that it has * the same open container/inventory */ public void processClickWindow(CPacketClickWindow packetIn) { PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.playerEntity.getServerWorld()); this.playerEntity.markPlayerActive(); if (this.playerEntity.openContainer.windowId == packetIn.getWindowId() && this.playerEntity.openContainer.getCanCraft(this.playerEntity)) { if (this.playerEntity.isSpectator()) { List<ItemStack> list = Lists.<ItemStack>newArrayList(); for (int i = 0; i < this.playerEntity.openContainer.inventorySlots.size(); ++i) { list.add(((Slot)this.playerEntity.openContainer.inventorySlots.get(i)).getStack()); } this.playerEntity.updateCraftingInventory(this.playerEntity.openContainer, list); } else { ItemStack itemstack2 = this.playerEntity.openContainer.slotClick(packetIn.getSlotId(), packetIn.getUsedButton(), packetIn.getClickType(), this.playerEntity); if (ItemStack.areItemStacksEqual(packetIn.getClickedItem(), itemstack2)) { this.playerEntity.connection.sendPacket(new SPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), true)); this.playerEntity.isChangingQuantityOnly = true; this.playerEntity.openContainer.detectAndSendChanges(); this.playerEntity.updateHeldItem(); this.playerEntity.isChangingQuantityOnly = false; } else { this.pendingTransactions.addKey(this.playerEntity.openContainer.windowId, Short.valueOf(packetIn.getActionNumber())); this.playerEntity.connection.sendPacket(new SPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), false)); this.playerEntity.openContainer.setCanCraft(this.playerEntity, false); List<ItemStack> list1 = Lists.<ItemStack>newArrayList(); for (int j = 0; j < this.playerEntity.openContainer.inventorySlots.size(); ++j) { ItemStack itemstack = ((Slot)this.playerEntity.openContainer.inventorySlots.get(j)).getStack(); ItemStack itemstack1 = itemstack != null && itemstack.stackSize > 0 ? itemstack : null; list1.add(itemstack1); } this.playerEntity.updateCraftingInventory(this.playerEntity.openContainer, list1); } } } }
/** * Verifies that the server and client are synchronized with respect to the inventory/container opened by the player * and confirms if it is the case. */ void handleConfirmTransaction(SPacketConfirmTransaction packetIn);