|
18 | 18 | use pocketmine\lang\Translatable;
|
19 | 19 | use pocketmine\math\Facing;
|
20 | 20 | use pocketmine\math\Vector3;
|
| 21 | +use pocketmine\network\mcpe\InventoryManager; |
| 22 | +use pocketmine\network\mcpe\protocol\ContainerOpenPacket; |
| 23 | +use pocketmine\network\mcpe\protocol\types\BlockPosition; |
| 24 | +use pocketmine\network\mcpe\protocol\types\inventory\ContainerIds; |
| 25 | +use pocketmine\network\mcpe\protocol\types\inventory\WindowTypes; |
21 | 26 | use pocketmine\permission\DefaultPermissions;
|
22 | 27 | use pocketmine\permission\PermissibleBase;
|
23 | 28 | use pocketmine\permission\PermissibleDelegateTrait;
|
@@ -136,9 +141,17 @@ public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player
|
136 | 141 | if (!$player->isCreative()) return true;
|
137 | 142 | if (!Server::getInstance()->isOp($player->getName())) return true;
|
138 | 143 |
|
139 |
| - $inventory = $tile->getInventory(); |
140 |
| - if ($inventory === $player->getCurrentWindow()) $player->removeCurrentWindow(); |
141 |
| - $player->setCurrentWindow($inventory); |
| 144 | + $inventoryManager = $player->getNetworkSession()->getInvManager(); |
| 145 | + |
| 146 | + $reflection = new \ReflectionClass(InventoryManager::class); |
| 147 | + $property = $reflection->getProperty("lastInventoryNetworkId"); |
| 148 | + $property->setAccessible(true); |
| 149 | + $value = $property->getValue($inventoryManager); |
| 150 | + $value = max(ContainerIds::FIRST, ($value + 1) % ContainerIds::LAST); |
| 151 | + $property->setValue($inventoryManager, $value); |
| 152 | + |
| 153 | + $pk = ContainerOpenPacket::blockInv($value, WindowTypes::COMMAND_BLOCK, BlockPosition::fromVector3($this->getPosition())); |
| 154 | + $player->getNetworkSession()->sendDataPacket($pk); |
142 | 155 | return true;
|
143 | 156 | }
|
144 | 157 |
|
|
0 commit comments