Closed dadodasyra closed 1 year ago
if(!$sender instanceof Player) return;
$pk = UpdateBlockPacket::create(
BlockPosition::fromVector3($pos = $sender->getPosition()->add(0, 5, 0)),
TypeConverter::getInstance()->getBlockTranslator()->internalIdToNetworkId(VanillaBlocks::CHEST()->getStateId()),
UpdateBlockPacket::FLAG_NETWORK,
UpdateBlockPacket::DATA_LAYER_NORMAL
);
$sender->getNetworkSession()->sendDataPacket($pk);
$sender->getNetworkSession()->sendDataPacket(
UpdateBlockPacket::create(
BlockPosition::fromVector3($pos->add(1, 0, 0)),
TypeConverter::getInstance()->getBlockTranslator()->internalIdToNetworkId(VanillaBlocks::CHEST()->getStateId()),
UpdateBlockPacket::FLAG_NETWORK,
UpdateBlockPacket::DATA_LAYER_NORMAL
)
);
$sender->getNetworkSession()->sendDataPacket(
BlockActorDataPacket::create(
BlockPosition::fromVector3($pos),
new CacheableNbt(CompoundTag::create()
->setString(Tile::TAG_ID, "Chest")
->setInt(Tile::TAG_X, $pos->getFloorX())
->setInt(Tile::TAG_Y, $pos->getFloorY())
->setInt(Tile::TAG_Z, $pos->getFloorZ())
->setString(Chest::TAG_CUSTOM_NAME, "TEST")
->setInt(Chest::TAG_PAIRX, $pos->getFloorX() + 1)
->setInt(Chest::TAG_PAIRZ, $pos->getFloorZ())
)
)
);
$sender->getNetworkSession()->sendDataPacket(
BlockActorDataPacket::create(
BlockPosition::fromVector3($pos->add(1, 0, 0)),
new CacheableNbt(CompoundTag::create()
->setString(Tile::TAG_ID, "Chest")
->setInt(Tile::TAG_X, $pos->getFloorX() + 1)
->setInt(Tile::TAG_Y, $pos->getFloorY())
->setInt(Tile::TAG_Z, $pos->getFloorZ())
->setString(Chest::TAG_CUSTOM_NAME, "TEST")
->setInt(Chest::TAG_PAIRX, $pos->getFloorX())
->setInt(Chest::TAG_PAIRZ, $pos->getFloorZ())
)
)
);
$this->getScheduler()->scheduleDelayedTask(new ClosureTask(function() use ($sender, $pos) : void{
$sender->getNetworkSession()->sendDataPacket(
ContainerOpenPacket::blockInv(
1,
WindowTypes::CONTAINER,
BlockPosition::fromVector3($pos),
)
);
}), 10);
$sender->sendMessage("Complete");
From what I can tell is that this code works. Looks like we need to add a delay for container opening?
@alvin0319 Can you confirm this is not related to my code and your InvMenu is broken too ?
I don't really understand what could have break since I found no server software changing anything about UIs..
We're experiencing the same issue. However I've no clue what causes it yet
If I try to open a InvMenu, I can open it one time. If I try to open it a second time (no matter what contents or name the invmenu-inventory have), it doesn't work - no inventory is opening. If I try to open my own player-inventory, everything works fine.
I think the InvMenu-inventory wasn't closed the right way. Maybe we have to show what the code for closing the inventory do.
I also tried to use debug-messages but that wasn't helpful.
The issue is the timestamp, InvMenu store the timestamp without long value and MCPE sent the packet with long (many 0)
The issue is the timestamp, InvMenu store the timestamp with an long value and MCPE sent the packet without long
Any idea how to fix?
This is the quickfix on the PlayerNetwork method notify
Seems like there was a change in behavior of NetworkStackLatencyPacket in Bedrock Edition v1.20.10. This protocol change may be impacting PlayStation users as well, however I do not have access to one at the moment to test it.
Thank you for the details and analysis @alvin0319 @supercrafter333 @aabstractt.
Seems like nothing is happening, the chest pops out put not the UI..