mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-11 14:05:35 +00:00
Player: fix a few more cases of held-item getting trashed after some events
This commit is contained in:
parent
e573226025
commit
8c480ffab9
@ -1445,6 +1445,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
|||||||
public function useHeldItem() : bool{
|
public function useHeldItem() : bool{
|
||||||
$directionVector = $this->getDirectionVector();
|
$directionVector = $this->getDirectionVector();
|
||||||
$item = $this->inventory->getItemInHand();
|
$item = $this->inventory->getItemInHand();
|
||||||
|
$oldItem = clone $item;
|
||||||
|
|
||||||
$ev = new PlayerItemUseEvent($this, $item, $directionVector);
|
$ev = new PlayerItemUseEvent($this, $item, $directionVector);
|
||||||
if($this->hasItemCooldown($item) or $this->isSpectator()){
|
if($this->hasItemCooldown($item) or $this->isSpectator()){
|
||||||
@ -1463,7 +1464,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->resetItemCooldown($item);
|
$this->resetItemCooldown($item);
|
||||||
if($this->hasFiniteResources()){
|
if($this->hasFiniteResources() and !$item->equalsExact($oldItem) and $oldItem->equalsExact($this->inventory->getItemInHand())){
|
||||||
$this->inventory->setItemInHand($item);
|
$this->inventory->setItemInHand($item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1480,6 +1481,8 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
|||||||
public function consumeHeldItem() : bool{
|
public function consumeHeldItem() : bool{
|
||||||
$slot = $this->inventory->getItemInHand();
|
$slot = $this->inventory->getItemInHand();
|
||||||
if($slot instanceof ConsumableItem){
|
if($slot instanceof ConsumableItem){
|
||||||
|
$oldItem = clone $slot;
|
||||||
|
|
||||||
$ev = new PlayerItemConsumeEvent($this, $slot);
|
$ev = new PlayerItemConsumeEvent($this, $slot);
|
||||||
if($this->hasItemCooldown($slot)){
|
if($this->hasItemCooldown($slot)){
|
||||||
$ev->cancel();
|
$ev->cancel();
|
||||||
@ -1493,7 +1496,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
|||||||
$this->setUsingItem(false);
|
$this->setUsingItem(false);
|
||||||
$this->resetItemCooldown($slot);
|
$this->resetItemCooldown($slot);
|
||||||
|
|
||||||
if($this->hasFiniteResources()){
|
if($this->hasFiniteResources() and !$slot->equalsExact($oldItem) and $oldItem->equalsExact($this->inventory->getItemInHand())){
|
||||||
$slot->pop();
|
$slot->pop();
|
||||||
$this->inventory->setItemInHand($slot);
|
$this->inventory->setItemInHand($slot);
|
||||||
$this->inventory->addItem($slot->getResidue());
|
$this->inventory->addItem($slot->getResidue());
|
||||||
@ -1517,10 +1520,14 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$oldItem = clone $item;
|
||||||
|
|
||||||
$result = $item->onReleaseUsing($this);
|
$result = $item->onReleaseUsing($this);
|
||||||
if($result->equals(ItemUseResult::SUCCESS())){
|
if($result->equals(ItemUseResult::SUCCESS())){
|
||||||
$this->resetItemCooldown($item);
|
$this->resetItemCooldown($item);
|
||||||
$this->inventory->setItemInHand($item);
|
if(!$item->equalsExact($oldItem) and $oldItem->equalsExact($this->inventory->getItemInHand())){
|
||||||
|
$this->inventory->setItemInHand($item);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user