mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-12 16:59:44 +00:00
PlayerBlockPickEvent: pre-cancel the event when picking would fail in survival
This commit is contained in:
parent
edccce1419
commit
c19c42a934
@ -1769,17 +1769,20 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
|
||||
$item = $block->getPickedItem($addTileNBT);
|
||||
|
||||
$ev = new PlayerBlockPickEvent($this, $block, $item);
|
||||
$existingSlot = $this->inventory->first($item);
|
||||
if($existingSlot === -1 and $this->hasFiniteResources()){
|
||||
$ev->setCancelled();
|
||||
}
|
||||
$ev->call();
|
||||
|
||||
if(!$ev->isCancelled()){
|
||||
$existing = $this->inventory->first($item);
|
||||
if($existing !== -1){
|
||||
if($existing < $this->inventory->getHotbarSize()){
|
||||
$this->inventory->setHeldItemIndex($existing);
|
||||
if($existingSlot !== -1){
|
||||
if($existingSlot < $this->inventory->getHotbarSize()){
|
||||
$this->inventory->setHeldItemIndex($existingSlot);
|
||||
}else{
|
||||
$this->inventory->swap($this->inventory->getHeldItemIndex(), $existing);
|
||||
$this->inventory->swap($this->inventory->getHeldItemIndex(), $existingSlot);
|
||||
}
|
||||
}elseif(!$this->hasFiniteResources()){ //TODO: plugins won't know this isn't going to execute
|
||||
}else{
|
||||
$firstEmpty = $this->inventory->firstEmpty();
|
||||
if($firstEmpty === -1){ //full inventory
|
||||
$this->inventory->setItemInHand($item);
|
||||
|
Loading…
x
Reference in New Issue
Block a user