Skip to content

Commit 55422e9

Browse files
committed
Fix command block inventory #102
1 parent f338d91 commit 55422e9

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

src/tedo0627/redstonecircuit/block/mechanism/BlockCommand.php

+16-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
use pocketmine\lang\Translatable;
1919
use pocketmine\math\Facing;
2020
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;
2126
use pocketmine\permission\DefaultPermissions;
2227
use pocketmine\permission\PermissibleBase;
2328
use pocketmine\permission\PermissibleDelegateTrait;
@@ -136,9 +141,17 @@ public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player
136141
if (!$player->isCreative()) return true;
137142
if (!Server::getInstance()->isOp($player->getName())) return true;
138143

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);
142155
return true;
143156
}
144157

src/tedo0627/redstonecircuit/listener/CommandBlockListener.php

-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ public function onDataPacketReceive(DataPacketReceiveEvent $event): void {
1616

1717
$player = $event->getOrigin()->getPlayer();
1818
if ($player === null) return;
19-
20-
$player->removeCurrentWindow();
2119
if (!$packet->isBlock) return;
2220

2321
$server = Server::getInstance();

0 commit comments

Comments
 (0)