mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-04 09:10:00 +00:00
InGamePacketHandler: handle block actions before use item transactions
the START_BREAK and transaction to break the block may arrive in the same packet, causing events to be fired in the wrong order. fixes #5490
This commit is contained in:
parent
768650cee0
commit
7e16f9be8f
@ -248,20 +248,6 @@ class InGamePacketHandler extends PacketHandler{
|
|||||||
|
|
||||||
$packetHandled = true;
|
$packetHandled = true;
|
||||||
|
|
||||||
$useItemTransaction = $packet->getItemInteractionData();
|
|
||||||
if($useItemTransaction !== null){
|
|
||||||
if(count($useItemTransaction->getTransactionData()->getActions()) > 100){
|
|
||||||
throw new PacketHandlingException("Too many actions in item use transaction");
|
|
||||||
}
|
|
||||||
$this->inventoryManager->addPredictedSlotChanges($useItemTransaction->getTransactionData()->getActions());
|
|
||||||
if(!$this->handleUseItemTransaction($useItemTransaction->getTransactionData())){
|
|
||||||
$packetHandled = false;
|
|
||||||
$this->session->getLogger()->debug("Unhandled transaction in PlayerAuthInputPacket (type " . $useItemTransaction->getTransactionData()->getActionType() . ")");
|
|
||||||
}else{
|
|
||||||
$this->inventoryManager->syncMismatchedPredictedSlotChanges();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$blockActions = $packet->getBlockActions();
|
$blockActions = $packet->getBlockActions();
|
||||||
if($blockActions !== null){
|
if($blockActions !== null){
|
||||||
if(count($blockActions) > 100){
|
if(count($blockActions) > 100){
|
||||||
@ -282,6 +268,20 @@ class InGamePacketHandler extends PacketHandler{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$useItemTransaction = $packet->getItemInteractionData();
|
||||||
|
if($useItemTransaction !== null){
|
||||||
|
if(count($useItemTransaction->getTransactionData()->getActions()) > 100){
|
||||||
|
throw new PacketHandlingException("Too many actions in item use transaction");
|
||||||
|
}
|
||||||
|
$this->inventoryManager->addPredictedSlotChanges($useItemTransaction->getTransactionData()->getActions());
|
||||||
|
if(!$this->handleUseItemTransaction($useItemTransaction->getTransactionData())){
|
||||||
|
$packetHandled = false;
|
||||||
|
$this->session->getLogger()->debug("Unhandled transaction in PlayerAuthInputPacket (type " . $useItemTransaction->getTransactionData()->getActionType() . ")");
|
||||||
|
}else{
|
||||||
|
$this->inventoryManager->syncMismatchedPredictedSlotChanges();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $packetHandled;
|
return $packetHandled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user