Enable various types of interaction to return items to the player, without needing to have a bunch of boilerplate creative mode and held item checks

it became glaringly obvious that this was needed because of #4827 and #4868.

this is further needed with the addition of cauldrons.
This commit is contained in:
Dylan K. Taylor
2022-07-16 19:50:33 +01:00
parent 4afd3dcabf
commit d0ff6d2e36
69 changed files with 177 additions and 155 deletions

View File

@@ -129,16 +129,15 @@ class Armor extends Durable{
return 0;
}
public function onClickAir(Player $player, Vector3 $directionVector) : ItemUseResult{
public function onClickAir(Player $player, Vector3 $directionVector, array &$returnedItems) : ItemUseResult{
$existing = $player->getArmorInventory()->getItem($this->getArmorSlot());
$thisCopy = clone $this;
$new = $thisCopy->pop();
$player->getArmorInventory()->setItem($this->getArmorSlot(), $new);
if($thisCopy->getCount() === 0){
$player->getInventory()->setItemInHand($existing);
}else{ //if the stack size was bigger than 1 (usually won't happen, but might be caused by plugins
$player->getInventory()->setItemInHand($thisCopy);
$player->getInventory()->addItem($existing);
$player->getInventory()->setItemInHand($existing);
if(!$thisCopy->isNull()){
//if the stack size was bigger than 1 (usually won't happen, but might be caused by plugins)
$returnedItems[] = $thisCopy;
}
return ItemUseResult::SUCCESS();
}