作者:iTXTec
项目:Genisy
public function generateChunk($chunkX, $chunkZ)
{
if ($this->emptyChunk !== null) {
//Use the cached empty chunk instead of generating a new one
$this->chunk = clone $this->emptyChunk;
} else {
$this->chunk = clone $this->level->getChunk($chunkX, $chunkZ);
$this->chunk->setGenerated();
$c = Biome::getBiome(1)->getColor();
$R = $c >> 16;
$G = $c >> 8 & 0xff;
$B = $c & 0xff;
for ($Z = 0; $Z < 16; ++$Z) {
for ($X = 0; $X < 16; ++$X) {
$this->chunk->setBiomeId($X, $Z, 1);
$this->chunk->setBiomeColor($X, $Z, $R, $G, $B);
for ($y = 0; $y < 128; ++$y) {
$this->chunk->setBlockId($X, $y, $Z, Block::AIR);
}
}
}
$spawn = $this->getSpawn();
if ($spawn->getX() >> 4 === $chunkX and $spawn->getZ() >> 4 === $chunkZ) {
$this->chunk->setBlockId(0, 64, 0, Block::GRASS);
} else {
$this->emptyChunk = $this->chunk;
}
}
$chunk = clone $this->chunk;
$chunk->setX($chunkX);
$chunk->setZ($chunkZ);
$this->level->setChunk($chunkX, $chunkZ, $chunk);
}
作者:Adam160
项目:MyPlo
public function execute(CommandSender $sender, array $args)
{
if (count($args) === 0) {
$biomes = TextFormat::WHITE . implode(", ", array_keys($this->biomes));
$sender->sendMessage($this->translateString("biome.possible", [$biomes]));
return true;
} elseif (count($args) !== 1) {
return false;
}
$player = $sender->getServer()->getPlayer($sender->getName());
$biome = strtoupper($args[0]);
$plot = $this->getPlugin()->getPlotByPosition($player->getPosition());
if ($plot === null) {
$sender->sendMessage(TextFormat::RED . $this->translateString("notinplot"));
return true;
}
if ($plot->owner !== $sender->getName()) {
$sender->sendMessage(TextFormat::RED . $this->translateString("notowner"));
return true;
}
if (!isset($this->biomes[$biome])) {
$sender->sendMessage(TextFormat::RED . $this->translateString("biome.invalid"));
$biomes = implode(", ", array_keys($this->biomes));
$sender->sendMessage(TextFormat::RED . $this->translateString("biome.possible", [$biomes]));
return true;
}
$biome = Biome::getBiome($this->biomes[$biome]);
if ($this->getPlugin()->setPlotBiome($plot, $biome)) {
$sender->sendMessage($this->translateString("biome.success", [$biome->getName()]));
} else {
$sender->sendMessage(TextFormat::RED . $this->translateString("error"));
}
return true;
}
作者:ClearSkyTea
项目:ClearSk
public function populate(ChunkManager $level, $chunkX, $chunkZ, Random $random)
{
$chunk = $level->getChunk($chunkX, $chunkZ);
for ($x = 0; $x < 16; ++$x) {
for ($z = 0; $z < 16; ++$z) {
$biome = Biome::getBiome($chunk->getBiomeId($x, $z));
$cover = $biome->getGroundCover();
if (count($cover) > 0) {
$diffY = 0;
if (!$cover[0]->isSolid()) {
$diffY = 1;
}
$column = $chunk->getBlockIdColumn($x, $z);
for ($y = 127; $y > 0; --$y) {
if ($column[$y] !== "" and !Block::get(ord($column[$y]))->isTransparent()) {
break;
}
}
$startY = min(127, $y + $diffY);
$endY = $startY - count($cover);
for ($y = $startY; $y > $endY and $y >= 0; --$y) {
$b = $cover[$startY - $y];
if ($column[$y] === "" and $b->isSolid()) {
break;
}
if ($b->getDamage() === 0) {
$chunk->setBlockId($x, $y, $z, $b->getId());
} else {
$chunk->setBlock($x, $y, $z, $b->getId(), $b->getDamage());
}
}
}
}
}
}
作者:RedstoneAlmeid
项目:SkyBlockP
public function execute(CommandSender $sender, array $args)
{
if (count($args) !== 1) {
return false;
}
$player = $sender->getServer()->getPlayer($sender->getName());
$biome = strtoupper($args[0]);
$plot = $this->getPlugin()->getPlotByPosition($player->getPosition());
if ($plot === null) {
$sender->sendMessage(TextFormat::RED . "You are not standing on an island");
return true;
}
if ($plot->owner !== $sender->getName()) {
$sender->sendMessage(TextFormat::RED . "You are not the owner of this island");
return true;
}
if (!isset($this->biomes[$biome])) {
$sender->sendMessage(TextFormat::RED . "That biome doesn't exist");
$biomes = implode(", ", array_keys($this->biomes));
$sender->sendMessage(TextFormat::RED . "The possible biomes are: {$biomes}");
return true;
}
$biome = Biome::getBiome($this->biomes[$biome]);
if ($this->getPlugin()->setPlotBiome($plot, $biome)) {
$sender->sendMessage(TextFormat::GREEN . "Changed the island biome");
} else {
$sender->sendMessage(TextFormat::RED . "Could not change the island biome");
}
return true;
}
作者:ClearSkyTea
项目:ClearSk
protected function parsePreset($preset, $chunkX, $chunkZ)
{
$this->preset = $preset;
$preset = explode(";", $preset);
$version = (int) $preset[0];
$blocks = isset($preset[1]) ? $preset[1] : "";
$biome = isset($preset[2]) ? $preset[2] : 1;
$options = isset($preset[3]) ? $preset[3] : "";
preg_match_all('#^(([0-9]*x|)([0-9]{1,3})(|:[0-9]{0,2}))$#m', str_replace(",", "\n", $blocks), $matches);
$y = 0;
$this->structure = [];
$this->chunks = [];
foreach ($matches[3] as $i => $b) {
$b = Item::fromString($b . $matches[4][$i]);
$cnt = $matches[2][$i] === "" ? 1 : intval($matches[2][$i]);
for ($cY = $y, $y += $cnt; $cY < $y; ++$cY) {
$this->structure[$cY] = [$b->getId(), $b->getDamage()];
}
}
$this->floorLevel = $y;
for (; $y < 0xff; ++$y) {
$this->structure[$y] = [0, 0];
}
$this->chunk = clone $this->level->getChunk($chunkX, $chunkZ);
$this->chunk->setGenerated();
$c = Biome::getBiome($biome)->getColor();
$R = $c >> 16;
$G = $c >> 8 & 0xff;
$B = $c & 0xff;
for ($Z = 0; $Z < 16; ++$Z) {
for ($X = 0; $X < 16; ++$X) {
$this->chunk->setBiomeId($X, $Z, $biome);
$this->chunk->setBiomeColor($X, $Z, $R, $G, $B);
for ($y = 0; $y < 128; ++$y) {
$this->chunk->setBlock($X, $y, $Z, ...$this->structure[$y]);
}
}
}
preg_match_all('#(([0-9a-z_]{1,})\\(?([0-9a-z_ =:]{0,})\\)?),?#', $options, $matches);
foreach ($matches[2] as $i => $option) {
$params = true;
if ($matches[3][$i] !== "") {
$params = [];
$p = explode(" ", $matches[3][$i]);
foreach ($p as $k) {
$k = explode("=", $k);
if (isset($k[1])) {
$params[$k[0]] = $k[1];
}
}
}
$this->options[$option] = $params;
}
}
作者:TexusDar
项目:Ananas-M
public function onRun()
{
Block::init();
Biome::init();
$manager = new SimpleChunkManager($this->seed);
$this->saveToThreadStore("generation.level{$this->levelId}.manager", $manager);
/** @var Generator $generator */
$generator = $this->generator;
$generator = new $generator($this->settings);
$generator->init($manager, new Random($manager->getSeed()));
$this->saveToThreadStore("generation.level{$this->levelId}.generator", $generator);
}
作者:ClearSkyTea
项目:ClearSk
protected function checkOldBiomes($data)
{
if (strlen($data) !== 256) {
return;
}
for ($x = 0; $x < 16; ++$x) {
for ($z = 0; $z < 16; ++$z) {
$biome = Biome::getBiome(ord($data[($z << 4) + $x]));
$this->setBiomeId($x, $z, $biome->getId());
$c = $biome->getColor();
$this->setBiomeColor($x, $z, $c >> 16, $c >> 8 & 0xff, $c & 0xff);
}
}
}
作者:iTXTec
项目:Genisy
protected static function register($id, Biome $biome)
{
self::$biomes[(int) $id] = $biome;
$biome->setId((int) $id);
$biome->grassColor = self::generateBiomeColor($biome->getTemperature(), $biome->getRainfall());
$flowerPopFound = false;
foreach ($biome->getPopulators() as $populator) {
if ($populator instanceof Flower) {
$flowerPopFound = true;
break;
}
}
if ($flowerPopFound === false) {
$flower = new Flower();
$biome->addPopulator($flower);
}
}
作者:HeechFiv
项目:pocketmine-plugin
public function generateChunk($chunkX, $chunkZ)
{
$spawn = $this->getSpawn();
// Adjust spawn so it is relative to current chunk...
$spawn->x = $spawn->x - ($chunkX << 4);
$spawn->z = $spawn->z - ($chunkZ << 4);
$inSpawn = -$this->radius <= $spawn->x && $spawn->x < 16 + $this->radius && -$this->radius <= $spawn->z && $spawn->z < 16 + $this->radius;
if ($inSpawn || $this->chunk === null) {
$chunk = $this->level->getChunk($chunkX, $chunkZ);
$chunk->setGenerated();
$c = Biome::getBiome($this->biome)->getColor();
$R = $c >> 16;
$G = $c >> 8 & 0xff;
$B = $c & 0xff;
$rad2 = $this->radius * $this->radius;
for ($Z = 0; $Z < 16; ++$Z) {
for ($X = 0; $X < 16; ++$X) {
$chunk->setBiomeId($X, $Z, $biome);
$chunk->setBiomeColor($X, $Z, $R, $G, $B);
$chunk->setBlock($X, 0, $Z, $this->baseFloor, 0);
for ($y = 1; $y < 128; ++$y) {
$chunk->setBlock($X, $y, $Z, Block::AIR, 0);
}
if (self::inSpawn($rad2, $spawn->x, $spawn->z, $X, $Z)) {
$chunk->setBlock($X, $this->floorLevel, $Z, $this->block);
}
}
}
if (!$inSpawn) {
$this->chunk = clone $chunk;
}
} else {
$chunk = clone $this->chunk;
}
$chunk->setX($chunkX);
$chunk->setZ($chunkZ);
$this->level->setChunk($chunkX, $chunkZ, $chunk);
}
作者:yungtechboy
项目:Genisy
public function generateChunk($chunkX, $chunkZ)
{
$this->chunk = clone $this->level->getChunk($chunkX, $chunkZ);
$this->chunk->setGenerated();
$c = Biome::getBiome(1)->getColor();
$R = $c >> 16;
$G = $c >> 8 & 0xff;
$B = $c & 0xff;
for ($Z = 0; $Z < 16; ++$Z) {
for ($X = 0; $X < 16; ++$X) {
$this->chunk->setBiomeId($X, $Z, 1);
$this->chunk->setBiomeColor($X, $Z, $R, $G, $B);
for ($y = 0; $y < 128; ++$y) {
$this->chunk->setBlockId($X, $y, $Z, Block::AIR);
}
}
}
$this->chunk->setBlockId(8, 64, 8, Block::GRASS);
$chunk = clone $this->chunk;
$chunk->setX($chunkX);
$chunk->setZ($chunkZ);
$this->level->setChunk($chunkX, $chunkZ, $chunk);
}
作者:TylerGame
项目:PocketMine-M
protected static function register($id, Biome $biome)
{
self::$biomes[(int) $id] = $biome;
$biome->setId((int) $id);
}
作者:ZenaGamingsk
项目:PocketBo
//.........这里部分代码省略.........
$this->banByName->load();
@touch($this->dataPath . "banned-ips.txt");
$this->banByIP = new BanList($this->dataPath . "banned-ips.txt");
$this->banByIP->load();
$this->maxPlayers = $this->getConfigInt("max-players", 20);
$this->setAutoSave($this->getConfigBoolean("auto-save", true));
if ($this->getConfigBoolean("hardcore", false) === true and $this->getDifficulty() < 3) {
$this->setConfigInt("difficulty", 3);
}
define("pocketmine\\DEBUG", (int) $this->getProperty("debug.level", 1));
if ($this->logger instanceof MainLogger) {
$this->logger->setLogDebug(\pocketmine\DEBUG > 1);
}
if (\pocketmine\DEBUG >= 0) {
@cli_set_process_title($this->getName() . " " . $this->getPocketMineVersion());
}
$this->logger->info($this->getLanguage()->translateString("pocketmine.server.networkStart", [$this->getIp() === "" ? "*" : $this->getIp(), $this->getPort()]));
define("BOOTUP_RANDOM", @Utils::getRandomBytes(16));
$this->serverID = Utils::getMachineUniqueId($this->getIp() . $this->getPort());
$this->getLogger()->debug("Server unique id: " . $this->getServerUniqueId());
$this->getLogger()->debug("Machine unique id: " . Utils::getMachineUniqueId());
$this->network = new Network($this);
$this->network->setName($this->getMotd());
$this->logger->info($this->getLanguage()->translateString("pocketmine.server.info", [$this->getName(), ($version->isDev() ? TextFormat::YELLOW : "") . $version->get(true) . TextFormat::WHITE, $this->getCodename(), $this->getApiVersion()]));
$this->logger->info($this->getLanguage()->translateString("pocketmine.server.license", [$this->getName()]));
Timings::init();
$this->consoleSender = new ConsoleCommandSender();
$this->commandMap = new SimpleCommandMap($this);
$this->registerEntities();
$this->registerTiles();
InventoryType::init();
Block::init();
Item::init();
Biome::init();
Effect::init();
Enchantment::init();
Attribute::init();
/** TODO: @deprecated */
TextWrapper::init();
$this->craftingManager = new CraftingManager();
$this->pluginManager = new PluginManager($this, $this->commandMap);
$this->pluginManager->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this->consoleSender);
$this->pluginManager->setUseTimings($this->getProperty("settings.enable-profiling", false));
$this->profilingTickRate = (double) $this->getProperty("settings.profile-report-trigger", 20);
$this->pluginManager->registerInterface(PharPluginLoader::class);
$this->pluginManager->registerInterface(ScriptPluginLoader::class);
set_exception_handler([$this, "exceptionHandler"]);
register_shutdown_function([$this, "crashDump"]);
$this->queryRegenerateTask = new QueryRegenerateEvent($this, 5);
$this->network->registerInterface(new RakLibInterface($this));
$this->pluginManager->loadPlugins($this->pluginPath);
$this->updater = new AutoUpdater($this, $this->getProperty("auto-updater.host", "www.pocketmine.net"));
$this->enablePlugins(PluginLoadOrder::STARTUP);
LevelProviderManager::addProvider($this, Anvil::class);
LevelProviderManager::addProvider($this, McRegion::class);
if (extension_loaded("leveldb")) {
$this->logger->debug($this->getLanguage()->translateString("pocketmine.debug.enable"));
LevelProviderManager::addProvider($this, LevelDB::class);
}
Generator::addGenerator(Flat::class, "flat");
Generator::addGenerator(Normal::class, "normal");
Generator::addGenerator(Normal::class, "default");
Generator::addGenerator(Nether::class, "hell");
Generator::addGenerator(Nether::class, "nether");
foreach ((array) $this->getProperty("worlds", []) as $name => $worldSetting) {
if ($this->loadLevel($name) === false) {
作者:gitter-badge
项目:MyPlo
/**
* Changes the biome of a plot
*
* @api
* @param Plot $plot
* @param Biome $biome
* @return bool
*/
public function setPlotBiome(Plot $plot, Biome $biome)
{
$plotLevel = $this->getLevelSettings($plot->levelName);
if ($plotLevel === null) {
return false;
}
$level = $this->getServer()->getLevelByName($plot->levelName);
$pos = $this->getPlotPosition($plot);
$plotSize = $plotLevel->plotSize;
$xMax = $pos->x + $plotSize;
$zMax = $pos->z + $plotSize;
$chunkIndexes = [];
for ($x = $pos->x; $x < $xMax; $x++) {
for ($z = $pos->z; $z < $zMax; $z++) {
$index = Level::chunkHash($x >> 4, $z >> 4);
if (!in_array($index, $chunkIndexes)) {
$chunkIndexes[] = $index;
}
$color = $biome->getColor();
$R = $color >> 16;
$G = $color >> 8 & 0xff;
$B = $color & 0xff;
$level->setBiomeColor($x, $z, $R, $G, $B);
}
}
foreach ($chunkIndexes as $index) {
Level::getXZ($index, $X, $Z);
$chunk = $level->getChunk($X, $Z);
foreach ($level->getChunkPlayers($X, $Z) as $player) {
$player->onChunkChanged($chunk);
}
}
$plot->biome = $biome->getName();
$this->dataProvider->savePlot($plot);
return true;
}
作者:Creeperface0
项目:ImagicalMin
public function populateChunk($chunkX, $chunkZ)
{
$this->random->setSeed(0xdeadbeef ^ $chunkX << 8 ^ $chunkZ ^ $this->level->getSeed());
foreach ($this->populators as $populator) {
$populator->populate($this->level, $chunkX, $chunkZ, $this->random);
}
$chunk = $this->level->getChunk($chunkX, $chunkZ);
$biome = Biome::getBiome($chunk->getBiomeId(7, 7));
$biome->populateChunk($this->level, $chunkX, $chunkZ, $this->random);
}
作者:organizatio
项目:PocketMine-MP_Window
protected static function register($id, Biome $biome)
{
self::$biomes[(int) $id] = $biome;
$biome->setId((int) $id);
$biome->grassColor = self::generateBiomeColor($biome->getTemperature(), $biome->getRainfall());
}
作者:kdani
项目:PEPlo
public function generateChunk($chunkX, $chunkZ)
{
$shape = $this->getShape($chunkX << 4, $chunkZ << 4);
$chunk = $this->level->getChunk($chunkX, $chunkZ);
$chunk->setGenerated();
$c = Biome::getBiome(1)->getColor();
$R = $c >> 16;
$G = $c >> 8 & 0xff;
$B = $c & 0xff;
$bottomBlockId = $this->bottomBlock->getId();
$bottomBlockMeta = $this->bottomBlock->getDamage();
$plotFillBlockId = $this->plotFillBlock->getId();
$plotFillBlockMeta = $this->plotFillBlock->getDamage();
$plotFloorBlockId = $this->plotFloorBlock->getId();
$plotFloorBlockMeta = $this->plotFloorBlock->getDamage();
$roadBlockId = $this->roadBlock->getId();
$roadBlockMeta = $this->roadBlock->getDamage();
$wallBlockId = $this->wallBlock->getId();
$wallBlockMeta = $this->wallBlock->getDamage();
$groundHeight = $this->groundHeight;
for ($Z = 0; $Z < 16; ++$Z) {
for ($X = 0; $X < 16; ++$X) {
$chunk->setBiomeId($X, $Z, 1);
$chunk->setBiomeColor($X, $Z, $R, $G, $B);
$chunk->setBlock($X, 0, $Z, $bottomBlockId, $bottomBlockMeta);
for ($y = 1; $y < $groundHeight; ++$y) {
$chunk->setBlock($X, $y, $Z, $plotFillBlockId, $plotFillBlockMeta);
}
$type = $shape[$Z << 4 | $X];
if ($type === self::PLOT) {
$chunk->setBlock($X, $groundHeight, $Z, $plotFloorBlockId, $plotFloorBlockMeta);
} elseif ($type === self::ROAD) {
$chunk->setBlock($X, $groundHeight, $Z, $roadBlockId, $roadBlockMeta);
} else {
$chunk->setBlock($X, $groundHeight, $Z, $roadBlockId, $roadBlockMeta);
$chunk->setBlock($X, $groundHeight + 1, $Z, $wallBlockId, $wallBlockMeta);
}
}
}
$chunk->setX($chunkX);
$chunk->setZ($chunkZ);
$this->level->setChunk($chunkX, $chunkZ, $chunk);
}
作者:orlando09
项目:ImagicalMin
/**
* @param int $x
* @param int $z
* @param bool $generate
*
* @return bool
*/
public function loadChunk($x, $z, $generate = true)
{
if (isset($this->chunks[$index = Level::chunkHash($x, $z)])) {
return true;
}
$this->timings->syncChunkLoadTimer->startTiming();
$this->cancelUnloadChunkRequest($x, $z);
$chunk = $this->provider->getChunk($x, $z, $generate);
if ($chunk === null) {
if ($generate) {
throw new \InvalidStateException("Could not create new Chunk");
}
return false;
}
if ($this->provider->getProviderName() == "mcregion") {
if ($chunk->getBiomeColor(0, 0) == [0, 0, 0]) {
for ($x = 0; $x < 16; ++$x) {
for ($z = 0; $z < 16; ++$z) {
$biome = Biome::getBiome(Biome::PLAINS);
$chunk->setBiomeId($x, $z, $biome->getId());
$c = $biome->getColor();
$chunk->setBiomeColor($x, $z, $c >> 16, $c >> 8 & 0xff, $c & 0xff);
}
}
}
}
$this->chunks[$index] = $chunk;
$chunk->initChunk();
if ($chunk->getProvider() !== null) {
$this->server->getPluginManager()->callEvent(new ChunkLoadEvent($chunk, !$chunk->isGenerated()));
} else {
$this->unloadChunk($x, $z, false);
$this->timings->syncChunkLoadTimer->stopTiming();
return false;
}
if (!$chunk->isLightPopulated() and $chunk->isPopulated() and $this->getServer()->getProperty("chunk-ticking.light-updates", false)) {
$this->getServer()->getScheduler()->scheduleAsyncTask(new LightPopulationTask($this, $chunk));
}
if ($this->isChunkInUse($x, $z)) {
foreach ($this->getChunkLoaders($x, $z) as $loader) {
$loader->onChunkLoaded($chunk);
}
} else {
$this->unloadChunkRequest($x, $z);
}
$this->timings->syncChunkLoadTimer->stopTiming();
return true;
}
作者:RedstoneAlmeid
项目:SkyBlockP
public function generateChunk($chunkX, $chunkZ)
{
$CX = $chunkX % 5 < 0 ? $chunkX % 5 + 5 : $chunkX % 5;
$CZ = $chunkZ % 5 < 0 ? $chunkZ % 5 + 5 : $chunkZ % 5;
switch ($CX . ":" . $CZ) {
case '0:0':
if ($this->chunk1 === null) {
$this->chunk1 = clone $this->level->getChunk($chunkX, $chunkZ);
$c = Biome::getBiome(1)->getColor();
$R = $c >> 16;
$G = $c >> 8 & 0xff;
$B = $c & 0xff;
for ($x = 0; $x < 16; $x++) {
for ($z = 0; $z < 16; $z++) {
$this->chunk1->setBiomeColor($x, $z, $R, $G, $B);
}
}
for ($x = 4; $x < 11; $x++) {
for ($z = 4; $z < 11; $z++) {
$this->chunk1->setBlockId($x, self::bedrockheight + (68 - 64), $z, Block::GRASS);
}
}
for ($x = 5; $x < 10; $x++) {
for ($z = 5; $z < 10; $z++) {
$this->chunk1->setBlockId($x, self::bedrockheight + (67 - 64), $z, Block::DIRT);
$this->chunk1->setBlockId($x, self::bedrockheight + (72 - 64), $z, Block::LEAVES);
// 72
}
}
for ($x = 6; $x < 9; $x++) {
for ($z = 6; $z < 9; $z++) {
$this->chunk1->setBlockId($x, self::bedrockheight + (73 - 64), $z, Block::LEAVES);
// 73
$this->chunk1->setBlockId($x, self::bedrockheight + (66 - 64), $z, Block::DIRT);
// 66
}
}
$this->chunk1->setBlockId(7, self::bedrockheight + (64 - 64), 7, Block::BEDROCK);
// 0
$this->chunk1->setBlockId(7, self::bedrockheight + (65 - 64), 7, Block::SAND);
// 1
$this->chunk1->setBlockId(7, self::bedrockheight + (66 - 64), 7, Block::SAND);
// 2
$this->chunk1->setBlockId(7, self::bedrockheight + (67 - 64), 7, Block::SAND);
// 3
$this->chunk1->setBlockId(7, self::bedrockheight + (69 - 64), 7, Block::LOG);
// 5
$this->chunk1->setBlockId(7, self::bedrockheight + (70 - 64), 7, Block::LOG);
// 6
$this->chunk1->setBlockId(7, self::bedrockheight + (71 - 64), 7, Block::LOG);
// 7
$this->chunk1->setBlockId(7, self::bedrockheight + (72 - 64), 7, Block::LOG);
// 8
$this->chunk1->setBlockId(7, self::bedrockheight + (73 - 64), 7, Block::LOG);
// 9
$this->chunk1->setBlockId(4, self::bedrockheight + (68 - 64), 4, Block::AIR);
// 68
$this->chunk1->setBlockId(4, self::bedrockheight + (68 - 64), 10, Block::AIR);
$this->chunk1->setBlockId(10, self::bedrockheight + (68 - 64), 4, Block::AIR);
$this->chunk1->setBlockId(10, self::bedrockheight + (68 - 64), 10, Block::AIR);
$this->chunk1->setBlockId(5, self::bedrockheight + (72 - 64), 5, Block::AIR);
// 72
$this->chunk1->setBlockId(5, self::bedrockheight + (72 - 64), 9, Block::AIR);
$this->chunk1->setBlockId(9, self::bedrockheight + (72 - 64), 5, Block::AIR);
$this->chunk1->setBlockId(9, self::bedrockheight + (72 - 64), 9, Block::AIR);
$this->chunk1->setBlockId(5, self::bedrockheight + (73 - 64), 7, Block::LEAVES);
// 73
$this->chunk1->setBlockId(7, self::bedrockheight + (73 - 64), 5, Block::LEAVES);
$this->chunk1->setBlockId(9, self::bedrockheight + (73 - 64), 7, Block::LEAVES);
$this->chunk1->setBlockId(7, self::bedrockheight + (73 - 64), 9, Block::LEAVES);
$this->chunk1->setBlockId(7, self::bedrockheight + (74 - 64), 6, Block::LEAVES);
// 74
$this->chunk1->setBlockId(6, self::bedrockheight + (74 - 64), 7, Block::LEAVES);
$this->chunk1->setBlockId(8, self::bedrockheight + (74 - 64), 7, Block::LEAVES);
$this->chunk1->setBlockId(7, self::bedrockheight + (74 - 64), 8, Block::LEAVES);
$this->chunk1->setBlockId(7, self::bedrockheight + (75 - 64), 7, Block::LEAVES);
// 75
// $this->chunk1->setBlockId(7, self::bedrockheight + (69 - 64), 8, Block::CHEST);
$this->chunk1->setBlockId(7, self::bedrockheight + (65 - 64), 8, Block::DIRT);
// 65
$this->chunk1->setBlockId(8, self::bedrockheight + (65 - 64), 7, Block::DIRT);
$this->chunk1->setBlockId(7, self::bedrockheight + (65 - 64), 6, Block::DIRT);
$this->chunk1->setBlockId(6, self::bedrockheight + (65 - 64), 7, Block::DIRT);
$this->chunk1->setBlockId(5, self::bedrockheight + (66 - 64), 7, Block::DIRT);
// 66
$this->chunk1->setBlockId(7, self::bedrockheight + (66 - 64), 5, Block::DIRT);
$this->chunk1->setBlockId(9, self::bedrockheight + (66 - 64), 7, Block::DIRT);
$this->chunk1->setBlockId(7, self::bedrockheight + (66 - 64), 9, Block::DIRT);
$this->chunk1->setBlockId(4, self::bedrockheight + (67 - 64), 7, Block::DIRT);
// 67
$this->chunk1->setBlockId(7, self::bedrockheight + (67 - 64), 4, Block::DIRT);
$this->chunk1->setBlockId(7, self::bedrockheight + (67 - 64), 10, Block::DIRT);
$this->chunk1->setBlockId(10, self::bedrockheight + (67 - 64), 7, Block::DIRT);
}
$chunk = clone $this->chunk1;
$chunk->setX($chunkX);
$chunk->setZ($chunkZ);
$this->level->setChunk($chunkX, $chunkZ, $chunk);
break;
default:
//.........这里部分代码省略.........
作者:kazuemo
项目:NIGHTMAR
public function addBiome(Biome $biome)
{
$this->biomes[$biome->getId()] = $biome;
}
作者:xuxugz
项目:Genisy
//.........这里部分代码省略.........
@touch($this->dataPath . "banned-cids.txt");
$this->banByCID = new BanList($this->dataPath . "banned-cids.txt");
$this->banByCID->load();
$this->maxPlayers = $this->getConfigInt("max-players", 20);
$this->setAutoSave($this->getConfigBoolean("auto-save", true));
if ($this->getConfigBoolean("hardcore", false) === true and $this->getDifficulty() < 3) {
$this->setConfigInt("difficulty", 3);
}
define("pocketmine\\DEBUG", (int) $this->getProperty("debug.level", 1));
if ($this->logger instanceof MainLogger) {
$this->logger->setLogDebug(\pocketmine\DEBUG > 1);
}
if (\pocketmine\DEBUG >= 0) {
@cli_set_process_title($this->getName() . " " . $this->getPocketMineVersion());
}
$this->logger->info($this->getLanguage()->translateString("pocketmine.server.networkStart", [$this->getIp() === "" ? "*" : $this->getIp(), $this->getPort()]));
define("BOOTUP_RANDOM", @Utils::getRandomBytes(16));
$this->serverID = Utils::getMachineUniqueId($this->getIp() . $this->getPort());
$this->getLogger()->debug("Server unique id: " . $this->getServerUniqueId());
$this->getLogger()->debug("Machine unique id: " . Utils::getMachineUniqueId());
$this->network = new Network($this);
$this->network->setName($this->getMotd());
$this->logger->info($this->getLanguage()->translateString("pocketmine.server.info", [$this->getName(), $this->getPocketMineVersion(), $this->getCodename(), $this->getApiVersion()]));
$this->logger->info($this->getLanguage()->translateString("pocketmine.server.license", [$this->getName()]));
Timings::init();
$this->consoleSender = new ConsoleCommandSender();
$this->commandMap = new SimpleCommandMap($this);
$this->registerEntities();
$this->registerTiles();
InventoryType::init(min(32, $this->inventoryNum));
//Bigger than 32 with cause problems
Block::init();
Item::init();
Biome::init();
Effect::init();
Enchantment::init();
Attribute::init();
/** TODO: @deprecated */
//TextWrapper::init();
$this->craftingManager = new CraftingManager($this->readRecipesFromJson);
$this->pluginManager = new PluginManager($this, $this->commandMap);
$this->pluginManager->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this->consoleSender);
$this->pluginManager->setUseTimings($this->getProperty("settings.enable-profiling", false));
$this->profilingTickRate = (double) $this->getProperty("settings.profile-report-trigger", 20);
$this->pluginManager->registerInterface(PharPluginLoader::class);
$this->pluginManager->registerInterface(FolderPluginLoader::class);
$this->pluginManager->registerInterface(ScriptPluginLoader::class);
//set_exception_handler([$this, "exceptionHandler"]);
register_shutdown_function([$this, "crashDump"]);
$this->queryRegenerateTask = new QueryRegenerateEvent($this, 5);
$this->network->registerInterface(new RakLibInterface($this));
$this->pluginManager->loadPlugins($this->pluginPath);
//$this->updater = new AutoUpdater($this, $this->getProperty("auto-updater.host", "www.pocketmine.net"));
$this->enablePlugins(PluginLoadOrder::STARTUP);
LevelProviderManager::addProvider($this, Anvil::class);
LevelProviderManager::addProvider($this, McRegion::class);
if (extension_loaded("leveldb")) {
$this->logger->debug($this->getLanguage()->translateString("pocketmine.debug.enable"));
LevelProviderManager::addProvider($this, LevelDB::class);
}
Generator::addGenerator(Flat::class, "flat");
Generator::addGenerator(Normal::class, "normal");
Generator::addGenerator(Normal::class, "default");
Generator::addGenerator(Nether::class, "hell");
Generator::addGenerator(Nether::class, "nether");
foreach ((array) $this->getProperty("worlds", []) as $name => $worldSetting) {