public static function log($logger, $flag, $msg, $timeout = 5) { if (isset(self::$msgs[$flag])) { if (microtime(true) - self::$msgs[$flag] < $timeout) { return; } } self::$msgs[$flag] = microtime(true); if ($logger instanceof \Logger) { $logger->notice($msg); } else { MainLogger::getLogger()->notice($msg); } }
public function __construct() { // load recipes from src/pocketmine/recipes.json $recipes = new Config(Server::getInstance()->getFilePath() . "src/pocketmine/resources/recipes.json", Config::JSON, []); MainLogger::getLogger()->info("Loading recipes..."); foreach ($recipes->getAll() as $recipe) { switch ($recipe["Type"]) { case 0: // TODO: handle multiple result items if (count($recipe["Result"]) == 1) { $first = $recipe["Result"][0]; $result = new ShapelessRecipe(Item::get($first["ID"], $first["Damage"], $first["Count"])); foreach ($recipe["Ingredients"] as $ingredient) { $result->addIngredient(Item::get($ingredient["ID"], $ingredient["Damage"], $ingredient["Count"])); } $this->registerRecipe($result); } break; case 1: // TODO: handle multiple result items if (count($recipe["Result"]) == 1) { $first = $recipe["Result"][0]; $result = new ShapedRecipe(Item::get($first["ID"], $first["Damage"], $first["Count"]), $recipe["Height"], $recipe["Width"]); $shape = array_chunk($recipe["Ingredients"], $recipe["Width"]); foreach ($shape as $y => $row) { foreach ($row as $x => $ingredient) { $result->addIngredient($x, $y, Item::get($ingredient["ID"], $ingredient["Damage"] < 0 ? null : $ingredient["Damage"], $ingredient["Count"])); } } $this->registerRecipe($result); } break; case 2: $result = $recipe["Result"]; $resultItem = Item::get($result["ID"], $result["Damage"], $result["Count"]); $this->registerRecipe(new FurnaceRecipe($resultItem, Item::get($recipe["Ingredients"], 0, 1))); break; case 3: $result = $recipe["Result"]; $resultItem = Item::get($result["ID"], $result["Damage"], $result["Count"]); $this->registerRecipe(new FurnaceRecipe($resultItem, Item::get($recipe["Ingredients"]["ID"], $recipe["Ingredients"]["Damage"], 1))); break; default: break; } } }
public function parseInfo() { $this->seek(0); if (fread($this->fp, 3) !== "PMF") { return false; } $this->version = ord($this->read(1)); switch ($this->version) { case 0x1: $this->type = ord($this->read(1)); break; default: MainLogger::getLogger()->alert("Tried loading non-supported PMF version " . $this->version . " on file " . $this->file); return false; } return true; }
public function query($msg, $fetch, ...$args) { foreach ($args as &$arg) { if (is_string($arg)) { $arg = "'" . $this->mysqli->escape_string($arg) . "'"; } else { $arg = "{$arg}"; } } if (count($args) > 0) { try { if ($fetch !== 3) { $result = $this->mysqli->query($query = sprintf($msg, ...$args)); } else { return sprintf($msg, ...$args); } } catch (\RuntimeException $e) { MainLogger::getLogger()->alert($e->getTraceAsString()); MainLogger::getLogger()->alert("Query: " . TextFormat::YELLOW . $msg); MainLogger::getLogger()->alert("Args: " . var_export($args, true)); return null; } } else { $result = $this->mysqli->query($query = $msg); // to make it faster } if ($result === false) { $server = Server::getInstance(); $server->getLogger()->warning("Query failed! Query:"); $server->getLogger()->warning($query); $server->getLogger()->warning("Message: " . $this->mysqli->error); } if ($result instanceof \mysqli_result) { if ($fetch === self::ASSOC) { return $result->fetch_assoc(); } elseif ($fetch === self::ALL) { return $result->fetch_all(MYSQLI_ASSOC); } return $result; } return $result; }
/** * @param string $message */ public function sendMessage($message) { if ($message instanceof TextContainer) { $message = $this->getServer()->getLanguage()->translate($message); } else { $message = $this->getServer()->getLanguage()->translateString($message); } foreach (explode("\n", trim($message)) as $line) { MainLogger::getLogger()->info($line); } }
/** * @param string $str * * @return BanEntry */ public static function fromString($str) { if (strlen($str) < 2) { return null; } else { $str = explode("|", trim($str)); $entry = new BanEntry(trim(array_shift($str))); if (count($str) > 0) { $datetime = \DateTime::createFromFormat(self::$format, array_shift($str)); if (!$datetime instanceof \DateTime) { MainLogger::getLogger()->alert("Error parsing date for BanEntry for player \"" . $entry->getName() . "\", the format may be invalid!"); return $entry; } $entry->setCreated($datetime); if (count($str) > 0) { $entry->setSource(trim(array_shift($str))); if (count($str) > 0) { $expire = trim(array_shift($str)); if (strtolower($expire) !== "forever" and strlen($expire) > 0) { $entry->setExpires(\DateTime::createFromFormat(self::$format, $expire)); } if (count($str) > 0) { $entry->setReason(trim(array_shift($str))); } } } } return $entry; } }
public function loadChunk($X, $Z) { if ($this->isChunkLoaded($X, $Z)) { return true; } $index = self::getIndex($X, $Z); $path = $this->getChunkPath($X, $Z); if (!file_exists($path)) { if ($this->generateChunk($X, $Z) === false) { return false; } if ($this->isGenerating === 0) { $this->populateChunk($X, $Z); } return true; } $chunk = file_get_contents($path); if ($chunk === false) { return false; } $chunk = zlib_decode($chunk); $offset = 0; $this->chunkInfo[$index] = [0 => ord($chunk[0]), 1 => Binary::readInt(substr($chunk, 1, 4))]; $offset += 5; $len = Binary::readInt(substr($chunk, $offset, 4)); $offset += 4; $nbt = new NBT(NBT::BIG_ENDIAN); $nbt->read(substr($chunk, $offset, $len)); $this->chunkInfo[$index][2] = $nbt->getData(); $offset += $len; $this->chunks[$index] = []; $this->chunkChange[$index] = [-1 => false]; $this->chunkInfo[$index][3] = substr($chunk, $offset, 256); //Biome data $offset += 256; for ($Y = 0; $Y < 8; ++$Y) { if (($this->chunkInfo[$index][0] & 1 << $Y) !== 0) { // 4096 + 2048 + 2048, Block Data, Meta, Light if (strlen($this->chunks[$index][$Y] = substr($chunk, $offset, 8192)) < 8192) { MainLogger::getLogger()->notice("Empty corrupt chunk detected [{$X},{$Z},:{$Y}], recovering contents"); $this->fillMiniChunk($X, $Z, $Y); } $offset += 8192; } else { $this->chunks[$index][$Y] = false; } } if ($this->isGenerating === 0 and !$this->isPopulated($X, $Z)) { $this->populateChunk($X, $Z); } return true; }
public function save($flag = \true) { $this->removeExpired(); $fp = @\fopen($this->file, "w"); if (\is_resource($fp)) { if ($flag === \true) { \fwrite($fp, "# Updated " . \strftime("%x %H:%M", \time()) . " by " . Server::getInstance()->getName() . " " . Server::getInstance()->getPocketMineVersion() . "\n"); \fwrite($fp, "# victim name | ban date | banned by | banned until | reason\n\n"); } foreach ($this->list as $entry) { \fwrite($fp, $entry->getString() . "\n"); } \fclose($fp); } else { MainLogger::getLogger()->error("Could not save ban list"); } }
/** * Send to the subscriber a message * @param string $msg a string message, could be formatted in the sprintf() method * @param string ...$args arguments to be formatted in sprintf() * @return void */ public function tell($msg, ...$args) { try { MainLogger::getLogger()->info(sprintf($msg, ...$args)); } catch (\RuntimeException $e) { var_dump($msg, $args, $e); } }
public function readChunk($x, $z) { $index = self::getChunkOffset($x, $z); if ($index < 0 or $index >= 4096) { return \null; } $this->lastUsed = \time(); if (!$this->isChunkGenerated($index)) { return \null; } \fseek($this->filePointer, $this->locationTable[$index][0] << 12); $length = \unpack("N", \fread($this->filePointer, 4))[1] << 32 >> 32; $compression = \ord(\fgetc($this->filePointer)); if ($length <= 0 or $length > self::MAX_SECTOR_LENGTH) { //Not yet generated / corrupted if ($length >= self::MAX_SECTOR_LENGTH) { $this->locationTable[$index][0] = ++$this->lastSector; $this->locationTable[$index][1] = 1; MainLogger::getLogger()->error("Corrupted chunk header detected"); } return \null; } if ($length > $this->locationTable[$index][1] << 12) { //Invalid chunk, bigger than defined number of sectors MainLogger::getLogger()->error("Corrupted bigger chunk detected"); $this->locationTable[$index][1] = $length >> 12; $this->writeLocationIndex($index); } elseif ($compression !== self::COMPRESSION_ZLIB and $compression !== self::COMPRESSION_GZIP) { MainLogger::getLogger()->error("Invalid compression type"); return \null; } $chunk = $this->unserializeChunk(\fread($this->filePointer, $length - 1)); if ($chunk instanceof FullChunk) { return $chunk; } else { MainLogger::getLogger()->error("Corrupted chunk detected"); return \null; } }
/** * @param string $message */ public function sendMessage($message) { foreach (\explode("\n", \trim($message)) as $line) { MainLogger::getLogger()->info($line); } }
public function readChunk($x, $z, $generate = true, $forward = false) { $index = self::getChunkOffset($x, $z); if ($index < 0 or $index >= 4096) { return null; } $this->lastUsed = time(); if (!$this->isChunkGenerated($index)) { if ($generate === true) { //Allocate space $this->locationTable[$index][0] = ++$this->lastSector; $this->locationTable[$index][1] = 1; fseek($this->filePointer, $this->locationTable[$index][0] << 12); fwrite($this->filePointer, str_pad(pack("N", 0) . chr(self::COMPRESSION_ZLIB), 4096, "", STR_PAD_RIGHT)); $this->writeLocationIndex($index); } else { return null; } } fseek($this->filePointer, $this->locationTable[$index][0] << 12); $length = PHP_INT_SIZE === 8 ? unpack("N", fread($this->filePointer, 4))[1] << 32 >> 32 : unpack("N", fread($this->filePointer, 4))[1]; $compression = ord(fgetc($this->filePointer)); if ($length <= 0 or $length > self::MAX_SECTOR_LENGTH) { //Not yet generated / corrupted if ($length >= self::MAX_SECTOR_LENGTH) { $this->locationTable[$index][0] = ++$this->lastSector; $this->locationTable[$index][1] = 1; MainLogger::getLogger()->error("Corrupted chunk header detected"); } $this->generateChunk($x, $z); fseek($this->filePointer, $this->locationTable[$index][0] << 12); $length = PHP_INT_SIZE === 8 ? unpack("N", fread($this->filePointer, 4))[1] << 32 >> 32 : unpack("N", fread($this->filePointer, 4))[1]; $compression = ord(fgetc($this->filePointer)); } if ($length > $this->locationTable[$index][1] << 12) { //Invalid chunk, bigger than defined number of sectors MainLogger::getLogger()->error("Corrupted bigger chunk detected"); $this->locationTable[$index][1] = $length >> 12; $this->writeLocationIndex($index); } elseif ($compression !== self::COMPRESSION_ZLIB and $compression !== self::COMPRESSION_GZIP) { MainLogger::getLogger()->error("Invalid compression type"); return null; } $chunk = Chunk::fromBinary(fread($this->filePointer, $length - 1), $this->levelProvider); if ($chunk instanceof Chunk) { return $chunk; } elseif ($forward === false) { MainLogger::getLogger()->error("Corrupted chunk detected"); $this->generateChunk($x, $z); return $this->readChunk($x, $z, $generate, true); } else { return null; } }
public function import() { if (file_exists($this->path . "tileEntities.dat")) { //OldPM $level = unserialize(file_get_contents($this->path . "level.dat")); MainLogger::getLogger()->info("Importing OldPM level \"" . $level["LevelName"] . "\" to PMF format"); $entities = new Config($this->path . "entities.yml", Config::YAML, unserialize(file_get_contents($this->path . "entities.dat"))); $entities->save(); $tiles = new Config($this->path . "tiles.yml", Config::YAML, unserialize(file_get_contents($this->path . "tileEntities.dat"))); $tiles->save(); } elseif (file_exists($this->path . "chunks.dat") and file_exists($this->path . "level.dat")) { //Pocket $nbt = new NBT(NBT::LITTLE_ENDIAN); $nbt->read(substr(file_get_contents($this->path . "level.dat"), 8)); $level = $nbt->getData(); if ($level["LevelName"] == "") { $level["LevelName"] = "world" . time(); } MainLogger::getLogger()->info("Importing Pocket level \"" . $level->LevelName . "\" to PMF format"); unset($level->Player); $nbt->read(substr(file_get_contents($this->path . "entities.dat"), 12)); $entities = $nbt->getData(); if (!isset($entities->TileEntities)) { $entities->TileEntities = []; } $tiles = $entities->TileEntities; $entities = $entities->Entities; $entities = new Config($this->path . "entities.yml", Config::YAML, $entities); $entities->save(); $tiles = new Config($this->path . "tiles.yml", Config::YAML, $tiles); $tiles->save(); } else { return false; } $pmf = new LevelFormat($this->path . "level.pmf", ["name" => $level->LevelName, "seed" => $level->RandomSeed, "time" => $level->Time, "spawnX" => $level->SpawnX, "spawnY" => $level->SpawnY, "spawnZ" => $level->SpawnZ, "height" => 8, "generator" => "default", "generatorSettings" => "", "extra" => ""]); $chunks = new PocketChunkParser(); $chunks->loadFile($this->path . "chunks.dat"); $chunks->loadMap(); for ($Z = 0; $Z < 16; ++$Z) { for ($X = 0; $X < 16; ++$X) { $chunk = [0 => "", 1 => "", 2 => "", 3 => "", 4 => "", 5 => "", 6 => "", 7 => ""]; $pmf->initCleanChunk($X, $Z); for ($z = 0; $z < 16; ++$z) { for ($x = 0; $x < 16; ++$x) { $block = $chunks->getChunkColumn($X, $Z, $x, $z, 0); $meta = $chunks->getChunkColumn($X, $Z, $x, $z, 1); for ($Y = 0; $Y < 8; ++$Y) { $chunk[$Y] .= substr($block, $Y << 4, 16); $chunk[$Y] .= substr($meta, $Y << 3, 8); $chunk[$Y] .= ""; } } } foreach ($chunk as $Y => $data) { $pmf->setMiniChunk($X, $Z, $Y, $data); } $pmf->setPopulated($X, $Z); $pmf->saveChunk($X, $Z); } MainLogger::getLogger()->notice("Importing level " . ceil(($Z + 1) / 0.16) . "%"); } $chunks->map = null; $chunks = null; @unlink($this->path . "level.dat"); @unlink($this->path . "level.dat_old"); @unlink($this->path . "player.dat"); @unlink($this->path . "entities.dat"); @unlink($this->path . "chunks.dat"); @unlink($this->path . "chunks.dat.gz"); @unlink($this->path . "tiles.dat"); unset($chunks, $level, $entities, $tiles, $nbt); return true; }
public function onDisable() { MainLogger::getLogger()->info(TextFormat::LIGHT_PURPLE . "AntiFly disabled."); }
public function readChunk($x, $z, $generate = true, $forward = false) { $index = self::getChunkOffset($x, $z); if ($index < 0 or $index >= 4096) { //Regenerate chunk due to corruption $this->locationTable[$index][0] = 0; $this->locationTable[$index][1] = 1; } if (!$this->isChunkGenerated($index)) { if ($generate === true) { //Allocate space $this->locationTable[$index][0] = ++$this->lastSector; $this->locationTable[$index][1] = 1; fseek($this->filePointer, $this->locationTable[$index][0] << 12); fwrite($this->filePointer, str_pad(Binary::writeInt(-1) . chr(self::COMPRESSION_ZLIB), 4096, "", STR_PAD_RIGHT)); $this->writeLocationIndex($index); } else { return false; } } fseek($this->filePointer, $this->locationTable[$index][0] << 12); $length = Binary::readInt(fread($this->filePointer, 4)); $compression = ord(fgetc($this->filePointer)); if ($length <= 0) { //Not yet generated $this->generateChunk($x, $z); fseek($this->filePointer, $this->locationTable[$index][0] << 12); $length = Binary::readInt(fread($this->filePointer, 4)); $compression = ord(fgetc($this->filePointer)); } if ($length > $this->locationTable[$index][1] << 12) { //Invalid chunk, bigger than defined number of sectors MainLogger::getLogger()->error("Corrupted chunk detected"); $this->locationTable[$index][1] = $length >> 12; $this->writeLocationIndex($index); } elseif ($compression !== self::COMPRESSION_ZLIB and $compression !== self::COMPRESSION_GZIP) { MainLogger::getLogger()->error("Invalid compression type"); return false; } $chunk = Chunk::fromBinary(fread($this->filePointer, $length - 1), $this->levelProvider); if ($chunk instanceof Chunk) { return $chunk; } elseif ($forward === false) { MainLogger::getLogger()->error("Corrupted chunk detected"); $this->generateChunk($x, $z); return $this->readChunk($x, $z, $generate, true); } else { return null; } }
/** * @param Plugin $plugin */ public function disablePlugin(Plugin $plugin) { if ($plugin instanceof PluginBase and $plugin->isEnabled()) { MainLogger::getLogger()->info("Disabling " . $plugin->getDescription()->getFullName()); Server::getInstance()->getPluginManager()->callEvent(new PluginDisableEvent($plugin)); $plugin->setEnabled(false); } }
public function __construct(bool $useJson = false) { $this->registerBrewingStand(); if ($useJson) { // load recipes from src/pocketmine/recipes.json $recipes = new Config(Server::getInstance()->getFilePath() . "src/pocketmine/resources/recipes.json", Config::JSON, []); MainLogger::getLogger()->Info("Loading recipes..."); foreach ($recipes->getAll() as $recipe) { switch ($recipe["Type"]) { case 0: // TODO: handle multiple result items if (count($recipe["Result"]) == 1) { $first = $recipe["Result"][0]; $result = new ShapelessRecipe(Item::get($first["ID"], $first["Damage"], $first["Count"])); foreach ($recipe["Ingredients"] as $ingredient) { $result->addIngredient(Item::get($ingredient["ID"], $ingredient["Damage"], $ingredient["Count"])); } $this->registerRecipe($result); } break; case 1: // TODO: handle multiple result items if (count($recipe["Result"]) == 1) { $first = $recipe["Result"][0]; $result = new ShapedRecipeFromJson(Item::get($first["ID"], $first["Damage"], $first["Count"]), $recipe["Height"], $recipe["Width"]); $shape = array_chunk($recipe["Ingredients"], $recipe["Width"]); foreach ($shape as $y => $row) { foreach ($row as $x => $ingredient) { $result->addIngredient($x, $y, Item::get($ingredient["ID"], $ingredient["Damage"] < 0 ? null : $ingredient["Damage"], $ingredient["Count"])); } } $this->registerRecipe($result); } break; case 2: $result = $recipe["Result"]; $resultItem = Item::get($result["ID"], $result["Damage"], $result["Count"]); $this->registerRecipe(new FurnaceRecipe($resultItem, Item::get($recipe["Ingredients"], 0, 1))); break; case 3: $result = $recipe["Result"]; $resultItem = Item::get($result["ID"], $result["Damage"], $result["Count"]); $this->registerRecipe(new FurnaceRecipe($resultItem, Item::get($recipe["Ingredients"]["ID"], $recipe["Ingredients"]["Damage"], 1))); break; default: break; } } } else { $this->registerStonecutter(); $this->registerFurnace(); $this->registerDyes(); $this->registerIngots(); $this->registerTools(); $this->registerWeapons(); $this->registerArmor(); $this->registerFood(); $this->registerBrewingStand(); $this->registerRecipe((new ShapedRecipe(Item::get(Item::CLAY_BLOCK, 0, 1), "X"))->setIngredient("X", Item::get(Item::CLAY, 0, 4))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::WORKBENCH, 0, 1), "XX", "XX"))->setIngredient("X", Item::get(Item::WOODEN_PLANK, null))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::GLOWSTONE_BLOCK, 0, 1), "XX", "XX"))->setIngredient("X", Item::get(Item::GLOWSTONE_DUST, 0, 4))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::LIT_PUMPKIN, 0, 1), "X ", "Y "))->setIngredient("X", Item::get(Item::PUMPKIN, 0, 1))->setIngredient("Y", Item::get(Item::TORCH, 0, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::SNOW_BLOCK, 0, 1), "XX", "XX"))->setIngredient("X", Item::get(Item::SNOWBALL))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::SNOW_LAYER, 0, 6), "X"))->setIngredient("X", Item::get(Item::SNOW_BLOCK, 0, 3))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::STICK, 0, 4), "X ", "X "))->setIngredient("X", Item::get(Item::WOODEN_PLANK, null))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::STONECUTTER, 0, 1), "XX", "XX"))->setIngredient("X", Item::get(Item::COBBLESTONE))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::WOODEN_PLANK, Planks::OAK, 4), "X"))->setIngredient("X", Item::get(Item::WOOD, Wood::OAK, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::WOODEN_PLANK, Planks::SPRUCE, 4), "X"))->setIngredient("X", Item::get(Item::WOOD, Wood::SPRUCE, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::WOODEN_PLANK, Planks::BIRCH, 4), "X"))->setIngredient("X", Item::get(Item::WOOD, Wood::BIRCH, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::WOODEN_PLANK, Planks::JUNGLE, 4), "X"))->setIngredient("X", Item::get(Item::WOOD, Wood::JUNGLE, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::WOODEN_PLANK, Planks::ACACIA, 4), "X"))->setIngredient("X", Item::get(Item::WOOD2, Wood2::ACACIA, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::WOODEN_PLANK, Planks::DARK_OAK, 4), "X"))->setIngredient("X", Item::get(Item::WOOD2, Wood2::DARK_OAK, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::WOOL, 0, 1), "XX", "XX"))->setIngredient("X", Item::get(Item::STRING, 0, 4))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::TORCH, 0, 4), "C ", "S"))->setIngredient("C", Item::get(Item::COAL, 0, 1))->setIngredient("S", Item::get(Item::STICK, 0, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::TORCH, 0, 4), "C ", "S"))->setIngredient("C", Item::get(Item::COAL, 1, 1))->setIngredient("S", Item::get(Item::STICK, 0, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::SUGAR, 0, 1), "S"))->setIngredient("S", Item::get(Item::SUGARCANE, 0, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::BED, 0, 1), "WWW", "PPP"))->setIngredient("W", Item::get(Item::WOOL, null, 3))->setIngredient("P", Item::get(Item::WOODEN_PLANK, null, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::CHEST, 0, 1), "PPP", "P P", "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, null, 8))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE, 0, 3), "PSP", "PSP"))->setIngredient("S", Item::get(Item::STICK, 0, 2))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::OAK, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE, Planks::SPRUCE, 3), "PSP", "PSP"))->setIngredient("S", Item::get(Item::STICK, 0, 2))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::SPRUCE, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE, Planks::BIRCH, 3), "PSP", "PSP"))->setIngredient("S", Item::get(Item::STICK, 0, 2))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::BIRCH, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE, Planks::JUNGLE, 3), "PSP", "PSP"))->setIngredient("S", Item::get(Item::STICK, 0, 2))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::JUNGLE, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE, Planks::ACACIA, 3), "PSP", "PSP"))->setIngredient("S", Item::get(Item::STICK, 0, 2))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::ACACIA, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE, Planks::DARK_OAK, 3), "PSP", "PSP"))->setIngredient("S", Item::get(Item::STICK, 0, 2))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::DARK_OAK, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE_GATE, 0, 1), "SPS", "SPS"))->setIngredient("S", Item::get(Item::STICK, 0, 4))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::OAK, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE_GATE_SPRUCE, 0, 1), "SPS", "SPS"))->setIngredient("S", Item::get(Item::STICK, 0, 4))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::SPRUCE, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE_GATE_BIRCH, 0, 1), "SPS", "SPS"))->setIngredient("S", Item::get(Item::STICK, 0, 4))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::BIRCH, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE_GATE_JUNGLE, 0, 1), "SPS", "SPS"))->setIngredient("S", Item::get(Item::STICK, 0, 4))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::JUNGLE, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE_GATE_DARK_OAK, 0, 1), "SPS", "SPS"))->setIngredient("S", Item::get(Item::STICK, 0, 4))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::DARK_OAK, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FENCE_GATE_ACACIA, 0, 1), "SPS", "SPS"))->setIngredient("S", Item::get(Item::STICK, 0, 4))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::ACACIA, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::FURNACE, 0, 1), "CCC", "C C", "CCC"))->setIngredient("C", Item::get(Item::COBBLESTONE, 0, 8))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::GLASS_PANE, 0, 16), "GGG", "GGG"))->setIngredient("G", Item::get(Item::GLASS, 0, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::LADDER, 0, 2), "S S", "SSS", "S S"))->setIngredient("S", Item::get(Item::STICK, 0, 7))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::NETHER_REACTOR, 0, 1), "IDI", "IDI", "IDI"))->setIngredient("D", Item::get(Item::DIAMOND, 0, 3))->setIngredient("I", Item::get(Item::IRON_INGOT, 0, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::TRAPDOOR, 0, 2), "PPP", "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, null, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOODEN_DOOR, 0, 1), "PP", "PP", "PP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, null, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::BIRCH_DOOR, 0, 1), "PP", "PP", "PP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::BIRCH, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SPRUCE_DOOR, 0, 1), "PP", "PP", "PP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::SPRUCE, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::JUNGLE_DOOR, 0, 1), "PP", "PP", "PP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::JUNGLE, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::ACACIA_DOOR, 0, 1), "PP", "PP", "PP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::ACACIA, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::DARK_OAK_DOOR, 0, 1), "PP", "PP", "PP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::DARK_OAK, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOODEN_STAIRS, 0, 4), " P", " PP", "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::OAK, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOOD_SLAB, Planks::OAK, 6), "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::OAK, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SPRUCE_WOOD_STAIRS, 0, 4), " P", " PP", "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::SPRUCE, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOOD_SLAB, Planks::SPRUCE, 6), "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::SPRUCE, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::BIRCH_WOOD_STAIRS, 0, 4), " P", " PP", "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::BIRCH, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOOD_SLAB, Planks::BIRCH, 6), "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::BIRCH, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::JUNGLE_WOOD_STAIRS, 0, 4), "P", "PP", "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::JUNGLE, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOOD_SLAB, Planks::JUNGLE, 6), "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::JUNGLE, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::ACACIA_WOOD_STAIRS, 0, 4), " P", " PP", "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::ACACIA, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOOD_SLAB, Planks::ACACIA, 6), "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::ACACIA, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::DARK_OAK_WOOD_STAIRS, 0, 4), " P", " PP", "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::DARK_OAK, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOOD_SLAB, Planks::DARK_OAK, 6), "PPP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, Planks::DARK_OAK, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::BUCKET, 0, 1), "I I", " I"))->setIngredient("I", Item::get(Item::IRON_INGOT, 0, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::CLOCK, 0, 1), " G", "GR", " G"))->setIngredient("G", Item::get(Item::GOLD_INGOT, 0, 4))->setIngredient("R", Item::get(Item::REDSTONE_DUST, 0, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::COMPASS, 0, 1), " I ", "IRI", " I"))->setIngredient("I", Item::get(Item::IRON_INGOT, 0, 4))->setIngredient("R", Item::get(Item::REDSTONE_DUST, 0, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::TNT, 0, 1), "GSG", "SGS", "GSG"))->setIngredient("G", Item::get(Item::GUNPOWDER, 0, 5))->setIngredient("S", Item::get(Item::SAND, null, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::BOWL, 0, 4), "P P", " P"))->setIngredient("P", Item::get(Item::WOODEN_PLANKS, null, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::MINECART, 0, 1), "I I", "III"))->setIngredient("I", Item::get(Item::IRON_INGOT, 0, 5))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::BOOK, 0, 1), "P P", " P "))->setIngredient("P", Item::get(Item::PAPER, 0, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::BOOKSHELF, 0, 1), "PBP", "PBP", "PBP"))->setIngredient("P", Item::get(Item::WOODEN_PLANK, null, 6))->setIngredient("B", Item::get(Item::BOOK, 0, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::PAINTING, 0, 1), "SSS", "SWS", "SSS"))->setIngredient("S", Item::get(Item::STICK, 0, 8))->setIngredient("W", Item::get(Item::WOOL, null, 1))); $this->registerRecipe((new ShapedRecipe(Item::get(Item::PAPER, 0, 3), "SS", "S"))->setIngredient("S", Item::get(Item::SUGARCANE, 0, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SIGN, 0, 3), "PPP", "PPP", " S"))->setIngredient("S", Item::get(Item::STICK, 0, 1))->setIngredient("P", Item::get(Item::WOODEN_PLANKS, null, 6))); //TODO: check if it gives one sign or three $this->registerRecipe((new BigShapedRecipe(Item::get(Item::IRON_BARS, 0, 16), "III", "III", "III"))->setIngredient("I", Item::get(Item::IRON_INGOT, 0, 9))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::GLASS_BOTTLE, 0, 3), "G G", " G ", " "))->setIngredient("G", Item::get(Item::GLASS, 0, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOODEN_PRESSURE_PLATE, 0, 1), " ", " ", "XX "))->setIngredient("X", Item::get(Item::WOODEN_PLANK, null, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::HEAVY_WEIGHTED_PRESSURE_PLATE, 0, 1), " ", "XX ", " "))->setIngredient("X", Item::get(Item::IRON_INGOT, 0, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::LIGHT_WEIGHTED_PRESSURE_PLATE, 0, 1), " ", "XX ", " "))->setIngredient("X", Item::get(Item::GOLD_INGOT, 0, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE_PRESSURE_PLATE, 0, 1), " ", "XX ", " "))->setIngredient("X", Item::get(Item::STONE, 0, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::INACTIVE_REDSTONE_LAMP, 0, 1), " R ", "RGR", " R "))->setIngredient("R", Item::get(Item::REDSTONE, 0, 4))->setIngredient("G", Item::get(Item::GLOWSTONE_BLOCK, 0, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::REDSTONE_TORCH, 0, 1), " ", " R ", " S "))->setIngredient("R", Item::get(Item::REDSTONE, 0, 1))->setIngredient("S", Item::get(Item::STICK, 0, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::WOODEN_BUTTON, 0, 1), " ", " X ", " "))->setIngredient("X", Item::get(Item::WOODEN_PLANK, null, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE_BUTTON, 0, 1), " ", " X ", " "))->setIngredient("X", Item::get(Item::COBBLESTONE, 0, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::LEVER, 0, 1), " ", " X ", " Y "))->setIngredient("X", Item::get(Item::STICK, 0, 1))->setIngredient("Y", Item::get(Item::COBBLESTONE, 0, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::COBBLESTONE_STAIRS, 0, 4), "P ", "PP ", "PPP"))->setIngredient("P", Item::get(Item::COBBLESTONE, 0, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE_BRICK_STAIRS, 0, 4), "P ", "PP ", "PPP"))->setIngredient("P", Item::get(Item::STONE_BRICK, 0, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SLAB, 0, 6), " ", "PPP"))->setIngredient("P", Item::get(Item::STONE, '', 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SLAB, 5, 6), " ", "PPP"))->setIngredient("P", Item::get(Item::STONE_BRICK, '', 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE_BRICK, 3, 1), " ", "PP "))->setIngredient("P", Item::get(Item::SLAB, 5, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SLAB, 1, 6), " ", "PPP"))->setIngredient("P", Item::get(Item::SANDSTONE, 0, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SANDSTONE, 1, 1), " ", "PP "))->setIngredient("P", Item::get(Item::SLAB, 1, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE_BRICK, 0, 4), "XX ", "XX "))->setIngredient("X", Item::get(Item::STONE, '', 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::QUARTZ_BLOCK, 0, 1), "XX ", "XX "))->setIngredient("X", Item::get(Item::QUARTZ, 0, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::BRICK_STAIRS, 0, 4), "P ", "PP ", "PPP"))->setIngredient("P", Item::get(Item::BRICKS_BLOCK, 0, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::BRICKS_BLOCK, 0, 1), "XX ", "XX "))->setIngredient("X", Item::get(Item::BRICK, 0, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SLAB, 4, 6), " ", "PPP"))->setIngredient("P", Item::get(Item::BRICKS_BLOCK, 0, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::QUARTZ_BLOCK, 1, 1), " ", "PP "))->setIngredient("P", Item::get(Item::SLAB, 6, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SLAB, 3, 6), " ", "PPP"))->setIngredient("P", Item::get(Item::COBBLESTONE, 0, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::COBBLESTONE, 0, 1), " ", "PP "))->setIngredient("P", Item::get(Item::SLAB, 3, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::COBBLESTONE_WALL, 0, 6), "PPP", "PPP"))->setIngredient("P", Item::get(Item::COBBLESTONE, 0, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::COBBLESTONE_WALL, 1, 6), "PPP", "PPP"))->setIngredient("P", Item::get(Item::MOSS_STONE, 0, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::NETHER_BRICKS, 0, 1), "XX ", "XX "))->setIngredient("X", Item::get(Item::NETHER_BRICK, 0, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::NETHER_BRICKS_STAIRS, 0, 4), "XXX", "XXX"))->setIngredient("X", Item::get(Item::NETHER_BRICKS, 0, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::QUARTZ_BLOCK, 2, 2), " ", "PP "))->setIngredient("P", Item::get(Item::QUARTZ_BLOCK, 0, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SLAB, 6, 6), " ", "PPP"))->setIngredient("P", Item::get(Item::QUARTZ_BLOCK, 0, 3))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SANDSTONE_STAIRS, 0, 4), "P ", "PP ", "PPP"))->setIngredient("P", Item::get(Item::SANDSTONE, 0, 6))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SANDSTONE, 0, 1), "XX ", "XX "))->setIngredient("X", Item::get(Item::SAND, 0, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::SANDSTONE, 2, 4), "XX ", "XX "))->setIngredient("X", Item::get(Item::SANDSTONE, 0, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE, Stone::POLISHED_GRANITE, 4), "XX ", "XX "))->setIngredient("X", Item::get(Item::STONE, Stone::GRANITE, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE, Stone::POLISHED_DIORITE, 4), "XX ", "XX "))->setIngredient("X", Item::get(Item::STONE, Stone::DIORITE, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE, Stone::POLISHED_ANDESITE, 4), "XX ", "XX "))->setIngredient("X", Item::get(Item::STONE, Stone::ANDESITE, 4))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE_BRICK, 1, 1), " ", " Y ", " X "))->setIngredient("X", Item::get(Item::STONE_BRICK, 0, 1))->setIngredient("Y", Item::get(Item::VINES, 0, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE, Stone::GRANITE, 1), " ", " Y ", " X "))->setIngredient("X", Item::get(Item::STONE, Stone::DIORITE, 1))->setIngredient("Y", Item::get(Item::QUARTZ, 0, 1))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE, Stone::DIORITE, 2), "YY ", "XX ", " "))->setIngredient("X", Item::get(Item::COBBLESTONE, 0, 2))->setIngredient("Y", Item::get(Item::QUARTZ, 0, 2))); $this->registerRecipe((new BigShapedRecipe(Item::get(Item::STONE, Stone::ANDESITE, 2), " ", " Y ", " X "))->setIngredient("X", Item::get(Item::COBBLESTONE, 0, 1))->setIngredient("Y", Item::get(Item::STONE, Stone::DIORITE, 1))); } }
/** * @param $content */ private function parseProperties($content) { if (preg_match_all('/([a-zA-Z0-9\\-_\\.]*)=([^\\r\\n]*)/u', $content, $matches) > 0) { //false or 0 matches foreach ($matches[1] as $i => $k) { $v = trim($matches[2][$i]); switch (strtolower($v)) { case "on": case "true": case "yes": $v = true; break; case "off": case "false": case "no": $v = false; break; } if (isset($this->config[$k])) { MainLogger::getLogger()->debug("[Config] Repeated property " . $k . " on file " . $this->file); } $this->config[$k] = $v; } } }
/** * @param Player $player * @param mixed[]|null $loginData * @return bool */ public function newSession(Player $player, $loginData = null) { if ($loginData === null) { $player->sendMessage(Phrases::VAR_wait . "Welcome to Legion PE! Please wait while we are preparing to register an account for you."); new NewUserQuery($this, $player); return false; } try { $this->sessions[$player->getId()] = $this->createSession($player, $loginData); return true; } catch (\Exception $e) { $this->getLogger()->error("An error occurred while trying to initialize session for player {$player->getName()}: "); MainLogger::getLogger()->logException($e); return false; } }