mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-23 11:26:37 +00:00
InGamePacketHandler: rely exclusively on prediction mismatch checking to re-sync slots during bad transactions
fixes #4894 closes #4926 relying on the core code to guess which slots should be synced is unreliable at best.
This commit is contained in:
parent
7f2802e75f
commit
ea677154cb
@ -457,13 +457,10 @@ class InGamePacketHandler extends PacketHandler{
|
|||||||
if(!$this->player->consumeHeldItem()){
|
if(!$this->player->consumeHeldItem()){
|
||||||
$hungerAttr = $this->player->getAttributeMap()->get(Attribute::HUNGER) ?? throw new AssumptionFailedError();
|
$hungerAttr = $this->player->getAttributeMap()->get(Attribute::HUNGER) ?? throw new AssumptionFailedError();
|
||||||
$hungerAttr->markSynchronized(false);
|
$hungerAttr->markSynchronized(false);
|
||||||
$this->inventoryManager->syncSlot($this->player->getInventory(), $this->player->getInventory()->getHeldItemIndex());
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if(!$this->player->useHeldItem()){
|
$this->player->useHeldItem();
|
||||||
$this->inventoryManager->syncSlot($this->player->getInventory(), $this->player->getInventory()->getHeldItemIndex());
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -483,7 +480,6 @@ class InGamePacketHandler extends PacketHandler{
|
|||||||
* Internal function used to execute rollbacks when an action fails on a block.
|
* Internal function used to execute rollbacks when an action fails on a block.
|
||||||
*/
|
*/
|
||||||
private function onFailedBlockAction(Vector3 $blockPos, ?int $face) : void{
|
private function onFailedBlockAction(Vector3 $blockPos, ?int $face) : void{
|
||||||
$this->inventoryManager->syncSlot($this->player->getInventory(), $this->player->getInventory()->getHeldItemIndex());
|
|
||||||
if($blockPos->distanceSquared($this->player->getLocation()) < 10000){
|
if($blockPos->distanceSquared($this->player->getLocation()) < 10000){
|
||||||
$blocks = $blockPos->sidesArray();
|
$blocks = $blockPos->sidesArray();
|
||||||
if($face !== null){
|
if($face !== null){
|
||||||
@ -512,14 +508,10 @@ class InGamePacketHandler extends PacketHandler{
|
|||||||
//TODO: use transactiondata for rollbacks here
|
//TODO: use transactiondata for rollbacks here
|
||||||
switch($data->getActionType()){
|
switch($data->getActionType()){
|
||||||
case UseItemOnEntityTransactionData::ACTION_INTERACT:
|
case UseItemOnEntityTransactionData::ACTION_INTERACT:
|
||||||
if(!$this->player->interactEntity($target, $data->getClickPosition())){
|
$this->player->interactEntity($target, $data->getClickPosition());
|
||||||
$this->inventoryManager->syncSlot($this->player->getInventory(), $this->player->getInventory()->getHeldItemIndex());
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
case UseItemOnEntityTransactionData::ACTION_ATTACK:
|
case UseItemOnEntityTransactionData::ACTION_ATTACK:
|
||||||
if(!$this->player->attackEntity($target)){
|
$this->player->attackEntity($target);
|
||||||
$this->inventoryManager->syncSlot($this->player->getInventory(), $this->player->getInventory()->getHeldItemIndex());
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user