public function handle($address, $port, $packet) { $offset = 2; $packetType = ord($packet[$offset++]); $sessionID = Binary::readInt(substr($packet, $offset, 4)); $offset += 4; $payload = substr($packet, $offset); switch ($packetType) { case self::HANDSHAKE: //Handshake $reply = chr(self::HANDSHAKE); $reply .= Binary::writeInt($sessionID); $reply .= self::getTokenString($this->token, $address) . ""; $this->server->getNetwork()->sendPacket($address, $port, $reply); break; case self::STATISTICS: //Stat $token = Binary::readInt(substr($payload, 0, 4)); if ($token !== self::getTokenString($this->token, $address) and $token !== self::getTokenString($this->lastToken, $address)) { break; } $reply = chr(self::STATISTICS); $reply .= Binary::writeInt($sessionID); if ($this->timeout < microtime(true)) { $this->regenerateInfo(); } if (strlen($payload) === 8) { $reply .= $this->longData; } else { $reply .= $this->shortData; } $this->server->getNetwork()->sendPacket($address, $port, $reply); break; } }
/** * @deprecated */ public static function randomUUID() { return Utils::toUUID(Binary::writeInt(time()) . Binary::writeShort(getmypid()) . Binary::writeShort(getmyuid()) . Binary::writeInt(mt_rand(-0x7fffffff, 0x7fffffff)) . Binary::writeInt(mt_rand(-0x7fffffff, 0x7fffffff)), 2); }
public function __construct($level, Compound $nbt = null) { if ($nbt === null) { $this->provider = $level; $this->nbt = new Compound("Level", []); return; } $this->nbt = $nbt; if (!isset($this->nbt->Entities) or !$this->nbt->Entities instanceof Enum) { $this->nbt->Entities = new Enum("Entities", []); $this->nbt->Entities->setTagType(NBT::TAG_Compound); } if (!isset($this->nbt->TileEntities) or !$this->nbt->TileEntities instanceof Enum) { $this->nbt->TileEntities = new Enum("TileEntities", []); $this->nbt->TileEntities->setTagType(NBT::TAG_Compound); } if (!isset($this->nbt->TileTicks) or !$this->nbt->TileTicks instanceof Enum) { $this->nbt->TileTicks = new Enum("TileTicks", []); $this->nbt->TileTicks->setTagType(NBT::TAG_Compound); } if (!isset($this->nbt->Sections) or !$this->nbt->Sections instanceof Enum) { $this->nbt->Sections = new Enum("Sections", []); $this->nbt->Sections->setTagType(NBT::TAG_Compound); } if (!isset($this->nbt->BiomeColors) or !$this->nbt->BiomeColors instanceof IntArray) { $this->nbt->BiomeColors = new IntArray("BiomeColors", array_fill(0, 256, 0)); } if (!isset($this->nbt->HeightMap) or !$this->nbt->HeightMap instanceof IntArray) { $this->nbt->HeightMap = new IntArray("HeightMap", array_fill(0, 256, 0)); } $sections = []; foreach ($this->nbt->Sections as $section) { if ($section instanceof Compound) { $y = (int) $section["Y"]; if ($y < 8) { $sections[$y] = new ChunkSection($section); } } } for ($y = 0; $y < 8; ++$y) { if (!isset($sections[$y])) { $sections[$y] = new EmptyChunkSection($y); } } $extraData = []; if (!isset($this->nbt->ExtraData) or !$this->nbt->ExtraData instanceof ByteArray) { $this->nbt->ExtraData = new ByteArray("ExtraData", Binary::writeInt(0)); } else { $stream = new BinaryStream($this->nbt->ExtraData->getValue()); $count = $stream->getInt(); for ($i = 0; $i < $count; ++$i) { $key = $stream->getInt(); $extraData[$key] = $stream->getShort(false); } } parent::__construct($level, (int) $this->nbt["xPos"], (int) $this->nbt["zPos"], $sections, $this->nbt->BiomeColors->getValue(), $this->nbt->HeightMap->getValue(), $this->nbt->Entities->getValue(), $this->nbt->TileEntities->getValue(), $extraData); if (isset($this->nbt->Biomes)) { $this->checkOldBiomes($this->nbt->Biomes->getValue()); unset($this->nbt->Biomes); } unset($this->nbt->Sections, $this->nbt->ExtraData); }
protected function createBlank() { fseek($this->filePointer, 0); ftruncate($this->filePointer, 0); $this->lastSector = 1; $table = ""; for ($i = 0; $i < 1024; ++$i) { $this->locationTable[$i] = [0, 0]; $table .= Binary::writeInt(0); } $time = time(); for ($i = 0; $i < 1024; ++$i) { $this->locationTable[$i][2] = $time; $table .= Binary::writeInt($time); } fwrite($this->filePointer, $table, 4096 * 2); }
public function putInt($v) { $this->buffer .= Binary::writeInt($v); }
public function putInt($v) { $this->buffer .= $this->endianness === self::BIG_ENDIAN ? Binary::writeInt($v) : Binary::writeLInt($v); }