コード例 #1
0
ファイル: Human.php プロジェクト: MunkySkunk/BukkitPE
 protected function initEntity()
 {
     $this->setDataFlag(self::DATA_PLAYER_FLAGS, self::DATA_PLAYER_FLAG_SLEEP, false);
     $this->setDataProperty(self::DATA_PLAYER_BED_POSITION, self::DATA_TYPE_POS, [0, 0, 0]);
     $this->inventory = new PlayerInventory($this);
     if ($this instanceof Player) {
         $this->addWindow($this->inventory, 0);
     }
     if (!$this instanceof Player) {
         if (isset($this->namedtag->NameTag)) {
             $this->setNameTag($this->namedtag["NameTag"]);
         }
         if (isset($this->namedtag->Skin) and $this->namedtag->Skin instanceof Compound) {
             $this->setSkin($this->namedtag->Skin["Data"], $this->namedtag->Skin["Name"] > 0);
         }
         $this->uuid = UUID::fromData($this->getId(), $this->getSkinData(), $this->getNameTag());
     }
     if (isset($this->namedtag->Inventory) and $this->namedtag->Inventory instanceof Enum) {
         foreach ($this->namedtag->Inventory as $item) {
             if ($item["Slot"] >= 0 and $item["Slot"] < 9) {
                 //Hotbar
                 $this->inventory->setHotbarSlotIndex($item["Slot"], isset($item["TrueSlot"]) ? $item["TrueSlot"] : -1);
             } elseif ($item["Slot"] >= 100 and $item["Slot"] < 104) {
                 //Armor
                 $this->inventory->setItem($this->inventory->getSize() + $item["Slot"] - 100, NBT::getItemHelper($item));
             } else {
                 $this->inventory->setItem($item["Slot"] - 9, NBT::getItemHelper($item));
             }
         }
     }
     parent::initEntity();
 }
コード例 #2
0
ファイル: SendUsageTask.php プロジェクト: MunkySkunk/BukkitPE
 public function __construct(Server $server, $type, $playerList = [])
 {
     $endpoint = "http://" . $server->getProperty("anonymous-statistics.host", "stats.BukkitPE.net") . "/";
     $data = [];
     $data["uniqueServerId"] = $server->getServerUniqueId()->toString();
     $data["uniqueMachineId"] = Utils::getMachineUniqueId()->toString();
     $data["uniqueRequestId"] = UUID::fromData($server->getServerUniqueId(), microtime(true))->toString();
     switch ($type) {
         case self::TYPE_OPEN:
             $data["event"] = "open";
             $version = new VersionString();
             $data["server"] = ["port" => $server->getPort(), "software" => $server->getName(), "fullVersion" => $version->get(true), "version" => $version->get(), "build" => $version->getBuild(), "api" => $server->getApiVersion(), "minecraftVersion" => $server->getVersion(), "protocol" => Info::CURRENT_PROTOCOL];
             $data["system"] = ["operatingSystem" => Utils::getOS(), "cores" => Utils::getCoreCount(), "phpVersion" => PHP_VERSION, "machine" => php_uname("a"), "release" => php_uname("r"), "platform" => php_uname("i")];
             $data["players"] = ["count" => 0, "limit" => $server->getMaxPlayers()];
             $plugins = [];
             foreach ($server->getPluginManager()->getPlugins() as $p) {
                 $d = $p->getDescription();
                 $plugins[$d->getName()] = ["name" => $d->getName(), "version" => $d->getVersion(), "enabled" => $p->isEnabled()];
             }
             $data["plugins"] = $plugins;
             break;
         case self::TYPE_STATUS:
             $data["event"] = "status";
             $data["server"] = ["ticksPerSecond" => $server->getTicksPerSecondAverage(), "tickUsage" => $server->getTickUsageAverage(), "ticks" => $server->getTick()];
             //This anonymizes the user ids so they cannot be reversed to the original
             foreach ($playerList as $k => $v) {
                 $playerList[$k] = md5($v);
             }
             $players = [];
             foreach ($server->getOnlinePlayers() as $p) {
                 if ($p->isOnline()) {
                     $players[] = md5($p->getUniqueId()->toBinary());
                 }
             }
             $data["players"] = ["count" => count($players), "limit" => $server->getMaxPlayers(), "currentList" => $players, "historyList" => array_values($playerList)];
             $info = Utils::getMemoryUsage(true);
             $data["system"] = ["mainMemory" => $info[0], "totalMemory" => $info[1], "availableMemory" => $info[2], "threadCount" => Utils::getThreadCount()];
             break;
         case self::TYPE_CLOSE:
             $data["event"] = "close";
             $data["crashing"] = $server->isRunning();
             break;
     }
     $this->endpoint = $endpoint . "api/post";
     $this->data = json_encode($data);
 }
コード例 #3
0
ファイル: Utils.php プロジェクト: MunkySkunk/BukkitPE
 /**
  * Gets this machine / server instance unique ID
  * Returns a hash, the first 32 characters (or 16 if raw)
  * will be an identifier that won't change frequently.
  * The rest of the hash will change depending on other factors.
  *
  * @param string $extra optional, additional data to identify the machine
  *
  * @return UUID
  */
 public static function getMachineUniqueId($extra = "")
 {
     if (self::$serverUniqueId !== null and $extra === "") {
         return self::$serverUniqueId;
     }
     $machine = php_uname("a");
     $machine .= file_exists("/proc/cpuinfo") ? implode(preg_grep("/(model name|Processor|Serial)/", file("/proc/cpuinfo"))) : "";
     $machine .= sys_get_temp_dir();
     $machine .= $extra;
     $os = Utils::getOS();
     if ($os === "win") {
         @exec("ipconfig /ALL", $mac);
         $mac = implode("\n", $mac);
         if (preg_match_all("#Physical Address[. ]{1,}: ([0-9A-F\\-]{17})#", $mac, $matches)) {
             foreach ($matches[1] as $i => $v) {
                 if ($v == "00-00-00-00-00-00") {
                     unset($matches[1][$i]);
                 }
             }
             $machine .= implode(" ", $matches[1]);
             //Mac Addresses
         }
     } elseif ($os === "linux") {
         if (file_exists("/etc/machine-id")) {
             $machine .= file_get_contents("/etc/machine-id");
         } else {
             @exec("ifconfig", $mac);
             $mac = implode("\n", $mac);
             if (preg_match_all("#HWaddr[ \t]{1,}([0-9a-f:]{17})#", $mac, $matches)) {
                 foreach ($matches[1] as $i => $v) {
                     if ($v == "00:00:00:00:00:00") {
                         unset($matches[1][$i]);
                     }
                 }
                 $machine .= implode(" ", $matches[1]);
                 //Mac Addresses
             }
         }
     } elseif ($os === "android") {
         $machine .= @file_get_contents("/system/build.prop");
     } elseif ($os === "mac") {
         $machine .= `system_profiler SPHardwareDataType | grep UUID`;
     }
     $data = $machine . PHP_MAXPATHLEN;
     $data .= PHP_INT_MAX;
     $data .= PHP_INT_SIZE;
     $data .= get_current_user();
     foreach (get_loaded_extensions() as $ext) {
         $data .= $ext . ":" . phpversion($ext);
     }
     $uuid = UUID::fromData($machine, $data);
     if ($extra === "") {
         self::$serverUniqueId = $uuid;
     }
     return $uuid;
 }
コード例 #4
0
 /**
  * @param Recipe $recipe
  */
 public function registerRecipe(Recipe $recipe)
 {
     $recipe->setId(UUID::fromData(++self::$RECIPE_COUNT, $recipe->getResult()->getId(), $recipe->getResult()->getDamage(), $recipe->getResult()->getCount(), $recipe->getResult()->getCompoundTag()));
     if ($recipe instanceof ShapedRecipe) {
         $this->registerShapedRecipe($recipe);
     } elseif ($recipe instanceof ShapelessRecipe) {
         $this->registerShapelessRecipe($recipe);
     } elseif ($recipe instanceof FurnaceRecipe) {
         $this->registerFurnaceRecipe($recipe);
     } elseif ($recipe instanceof BrewingRecipe) {
         $this->registerBrewingRecipe($recipe);
     }
 }
コード例 #5
0
ファイル: BinaryStream.php プロジェクト: MunkySkunk/BukkitPE
 public function putUUID(UUID $uuid)
 {
     $this->put($uuid->toBinary());
 }