I noticed essentialspe only clears online player's inventory, is their a way to clear an offline player's inventory? can we use getOfflinePlayer or getPlayerExact for this?
PHP: /** @license LGPLv3 @author PocketMine Team & robske_110 */use pocketmine\nbt\NBT;use pocketmine\nbt\tag\ListTag;/** @var $server pocketmine\Server *//** @var string */$playerName = "yourplayername";if(file_exists($server->getDataPath()."players/".$playerName.".dat")){ $namedtag = $server->getOfflinePlayerData($playerName); $namedtag->setTag(new ListTag("Inventory", [], NBT::TAG_Compound)); $nbt = new NBT(NBT::BIG_ENDIAN); $nbt->setData($namedtag); file_put_contents($server->getDataPath()."players/".$playerName.".dat", $nbt->writeCompressed());} that should do it
I found an easier way to write the data: PHP: /** @license LGPLv3 @author PocketMine Team & robske_110 */use pocketmine\nbt\NBT;use pocketmine\nbt\tag\ListTag;/** @var $server pocketmine\Server *//** @var string */$playerName = "yourplayername";if(file_exists($server->getDataPath()."players/".$playerName.".dat")){ $namedtag = $server->getOfflinePlayerData($playerName); $namedtag->setTag(new ListTag("Inventory", [], NBT::TAG_Compound)); $server->saveOfflinePlayerData($playerName, $namedtag, true); //last arg is whether to save async or not.}
You can use PHP: /** @var \pocketmine\OfflinePlayer $player */if($player->hasPlayedBefore()){ } Instead of It save your time
No, it doesn’t save time at all. Constructing an offline player is way more expensive than the things i have done above.