PocketMine-MP 5.15.1 git-5ef247620a7c6301a849b54e5ef1009217729fc8
SlotChangeAction.php
1<?php
2
3/*
4 *
5 * ____ _ _ __ __ _ __ __ ____
6 * | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
7 * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
8 * | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
9 * |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
10 *
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * @author PocketMine Team
17 * @link http://www.pocketmine.net/
18 *
19 *
20 */
21
22declare(strict_types=1);
23
24namespace pocketmine\inventory\transaction\action;
25
31
36 public function __construct(
37 protected Inventory $inventory,
38 private int $inventorySlot,
39 Item $sourceItem,
40 Item $targetItem
41 ){
42 parent::__construct($sourceItem, $targetItem);
43 }
44
48 public function getInventory() : Inventory{
49 return $this->inventory;
50 }
51
55 public function getSlot() : int{
56 return $this->inventorySlot;
57 }
58
64 public function validate(Player $source) : void{
65 if(!$this->inventory->slotExists($this->inventorySlot)){
66 throw new TransactionValidationException("Slot does not exist");
67 }
68 if(!$this->inventory->getItem($this->inventorySlot)->equalsExact($this->sourceItem)){
69 throw new TransactionValidationException("Slot does not contain expected original item");
70 }
71 if($this->targetItem->getCount() > $this->targetItem->getMaxStackSize()){
72 throw new TransactionValidationException("Target item exceeds item type max stack size");
73 }
74 if($this->targetItem->getCount() > $this->inventory->getMaxStackSize()){
75 throw new TransactionValidationException("Target item exceeds inventory max stack size");
76 }
77 }
78
82 public function onAddToTransaction(InventoryTransaction $transaction) : void{
83 $transaction->addInventory($this->inventory);
84 }
85
89 public function execute(Player $source) : void{
90 $this->inventory->setItem($this->inventorySlot, $this->targetItem);
91 }
92}