php pocketmine-utils-MainLogger类(方法)实例源码

下面列出了php pocketmine-utils-MainLogger 类(方法)源码代码实例,从而了解它的用法。

作者:LegionP    项目:LegionPE-Et   
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);
     }
 }

作者:ianj    项目:PocketMine-M   
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;
         }
     }
 }

作者:boyboo    项目:PocketMine-M   
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;
 }

作者:LegionP    项目:LegionPE-Et   
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;
 }

作者:VonHirsc    项目:PocketMine-0.13.   
\ini_set("display_errors", 1);
 \ini_set("display_startup_errors", 1);
 \ini_set("default_charset", "utf-8");
 \ini_set("memory_limit", -1);
 \define("pocketmine\\START_TIME", \microtime(\true));
 $opts = \getopt("", ["data:", "plugins:", "no-wizard", "enable-profiler"]);
 \define("pocketmine\\DATA", isset($opts["data"]) ? $opts["data"] . DIRECTORY_SEPARATOR : \getcwd() . DIRECTORY_SEPARATOR);
 \define("pocketmine\\PLUGIN_PATH", isset($opts["plugins"]) ? $opts["plugins"] . DIRECTORY_SEPARATOR : \getcwd() . DIRECTORY_SEPARATOR . "plugins" . DIRECTORY_SEPARATOR);
 Terminal::init();
 \define("pocketmine\\ANSI", Terminal::hasFormattingCodes());
 if (!\file_exists(\pocketmine\DATA)) {
     \mkdir(\pocketmine\DATA, 0777, \true);
 }
 //Logger has a dependency on timezone, so we'll set it to UTC until we can get the actual timezone.
 \date_default_timezone_set("UTC");
 $logger = new MainLogger(\pocketmine\DATA . "server.log", \pocketmine\ANSI);
 if (!\ini_get("date.timezone")) {
     if ($timezone = detect_system_timezone() and \date_default_timezone_set($timezone)) {
         //Success! Timezone has already been set and validated in the if statement.
         //This here is just for redundancy just in case some program wants to read timezone data from the ini.
         \ini_set("date.timezone", $timezone);
     } else {
         //If system timezone detection fails or timezone is an invalid value.
         if ($response = Utils::getURL("http://ip-api.com/json") and $ip_geolocation_data = \json_decode($response, \true) and $ip_geolocation_data['status'] != 'fail' and \date_default_timezone_set($ip_geolocation_data['timezone'])) {
             //Again, for redundancy.
             \ini_set("date.timezone", $ip_geolocation_data['timezone']);
         } else {
             \ini_set("date.timezone", "UTC");
             \date_default_timezone_set("UTC");
             $logger->warning("Timezone could not be automatically determined. An incorrect timezone will result in incorrect timestamps on console logs. It has been set to \"UTC\" by default. You can change it on the php.ini file.");
         }

作者:applqpa    项目:plugin-remake   
/**
  * @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);
     }
 }

作者:LegionP    项目:LegionPE-Et   
/**
  * 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);
     }
 }

作者:rry    项目:PocketMine-M   
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;
     }
 }

作者:kniffo8    项目:Genisy   
/**
  * @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;
     }
 }

作者:ClearSkyTea    项目:ClearSk   
/**
  * @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);
     }
 }

作者:rry    项目:PocketMine-M   
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;
 }

作者:ChiefArt    项目:AntiFl   
public function onDisable()
 {
     MainLogger::getLogger()->info(TextFormat::LIGHT_PURPLE . "AntiFly disabled.");
 }

作者:legoboy021    项目:LegionPE-Theta-Bas   
/**
  * @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;
     }
 }

作者:xpyctu    项目:PocketMinePlusPlu   
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");
     }
 }

作者:xpyctu    项目:PocketMinePlusPlu   
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;
     }
 }

作者:Edwardthedog    项目:Steadfast   
/**
  * @param string $message
  */
 public function sendMessage($message)
 {
     foreach (\explode("\n", \trim($message)) as $line) {
         MainLogger::getLogger()->info($line);
     }
 }

作者:boyboo    项目:PocketMine-M   
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;
 }

作者:ZenaGamingsk    项目:Steadfast   
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;
     }
 }

作者:MrDoni9    项目:Genisy   
/**
  * @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;
         }
     }
 }

作者:PepbookPv    项目:Genisy   
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)));
//.........这里部分代码省略.........


问题


面经


文章

微信
公众号

扫码关注公众号