pocketmine\nbt\NBT::parseJSON PHP Метод

parseJSON() публичный статический Метод

public static parseJSON ( $data, &$offset )
    public static function parseJSON($data, &$offset = 0)
    {
        $len = strlen($data);
        for (; $offset < $len; ++$offset) {
            $c = $data[$offset];
            if ($c === "{") {
                ++$offset;
                $data = self::parseCompound($data, $offset);
                return new CompoundTag("", $data);
            } elseif ($c !== " " and $c !== "\r" and $c !== "\n" and $c !== "\t") {
                throw new \Exception("Syntax error: unexpected '{$c}' at offset {$offset}");
            }
        }
        return null;
    }

Usage Example

Пример #1
0
 public function execute(CommandSender $sender, $currentAlias, array $args)
 {
     if (!$this->testPermission($sender)) {
         return true;
     }
     if (count($args) < 2) {
         $sender->sendMessage(new TranslationContainer("commands.generic.usage", [$this->usageMessage]));
         return true;
     }
     $player = $sender->getServer()->getPlayer($args[0]);
     $item = Item::fromString($args[1]);
     if (!isset($args[2])) {
         $item->setCount($item->getMaxStackSize());
     } else {
         $item->setCount((int) $args[2]);
     }
     if (isset($args[3])) {
         $tags = $exception = null;
         $data = implode(" ", array_slice($args, 3));
         try {
             $tags = NBT::parseJSON($data);
         } catch (\Throwable $ex) {
             $exception = $ex;
         }
         if (!$tags instanceof CompoundTag or $exception !== null) {
             $sender->sendMessage(new TranslationContainer("commands.give.tagError", [$exception !== null ? $exception->getMessage() : "Invalid tag conversion"]));
             return true;
         }
         $item->setNamedTag($tags);
     }
     if ($player instanceof Player) {
         if ($item->getId() === 0) {
             $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.give.item.notFound", [$args[1]]));
             return true;
         }
         //TODO: overflow
         $player->getInventory()->addItem(clone $item);
     } else {
         $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.generic.player.notFound"));
         return true;
     }
     Command::broadcastCommandMessage($sender, new TranslationContainer("%commands.give.success", [$item->getName() . " (" . $item->getId() . ":" . $item->getDamage() . ")", (string) $item->getCount(), $player->getName()]));
     return true;
 }
All Usage Examples Of pocketmine\nbt\NBT::parseJSON