public function execute(Player $source) : bool { $droppedItem = $this->getTargetItem(); if (!$source->getServer()->getAllowInvCheats() and !$source->isCreative()) { if (!$source->getFloatingInventory()->contains($droppedItem)) { return false; } $source->getFloatingInventory()->removeItem($droppedItem); } $source->dropItem($droppedItem); return true; }
public function onRename(Player $player, Item $resultItem) : bool { if (!$resultItem->deepEquals($this->getItem(self::TARGET), true, false, true)) { //Item does not match target item. Everything must match except the tags. return false; } if ($player->getExpLevel() < $resultItem->getRepairCost()) { //Not enough exp return false; } $player->setExpLevel($player->getExpLevel() - $resultItem->getRepairCost()); $this->clearAll(); if (!$player->getServer()->allowInventoryCheats and !$player->isCreative()) { if (!$player->getFloatingInventory()->canAddItem($resultItem)) { return false; } $player->getFloatingInventory()->addItem($resultItem); } return true; }
/** * @param Player $source * @return bool * * Handles transaction execution. Returns whether transaction was successful or not. */ public function execute(Player $source) : bool { if ($this->getInventory()->processSlotChange($this)) { //This means that the transaction should be handled the normal way if (!$source->getServer()->getAllowInvCheats() and !$source->isCreative()) { $change = $this->getChange(); if ($change === null) { //No changes to make, ignore this transaction return true; } /* Verify that we have the required items */ if ($change["out"] instanceof Item) { if (!$this->getInventory()->slotContains($this->getSlot(), $change["out"])) { return false; } } if ($change["in"] instanceof Item) { if (!$source->getFloatingInventory()->contains($change["in"])) { return false; } } /* All checks passed, make changes to floating inventory * This will not be reached unless all requirements are met */ if ($change["out"] instanceof Item) { $source->getFloatingInventory()->addItem($change["out"]); } if ($change["in"] instanceof Item) { $source->getFloatingInventory()->removeItem($change["in"]); } } $this->getInventory()->setItem($this->getSlot(), $this->getTargetItem(), false); } /* Process transaction achievements, like getting iron from a furnace */ foreach ($this->achievements as $achievement) { $source->awardAchievement($achievement); } return true; }