はじめに

こんにちは。yurisiです

今回はsrcのgeneratorをいじってワールドをカスタマイズする方法をこの場に備忘録として書かせていただきます。

初心者さんにはとても難しい作業となりますのでわからないことがあればコメント等で聞いてくださるといいと思います。

それとsrcのバックアップは取っておきましょう!

1,ジェネレーターのファイル構成

src\pocketmine\level\biome に基本のバイオームのデータ

src\pocketmine\level\generater\normal\Normal.php が埋める鉱石やバイオームを分けるためのデータ

src\pocketmine\level\generater\hell\Nether.php がネザーのデータです

基本的には上2つのデータを弄ることでいろいろなワールドに変化させることができます

2-1,biomeについて

ファイルごとに説明していきます

Biome.php

これに関してはいじる必要なしです。

DesertBiome.php

これもイジる必要はなし

ForestBiome.php

もし草を生やしたくないなら

use pocketmine\level\generator\populator\TallGrass;

		$tallGrass = new TallGrass();
		$tallGrass->setBaseAmount(3);

		$this->addPopulator($tallGrass);

を削除しましょう

GrassyBiome.php

$this->setGroundCover

の配列の中のブロックを変えることで上から5ブロックまでのブロックが選択されたブロックに変わります。

もし上から 安山岩→安山岩→安山岩→閃緑岩→閃緑岩にしたいときは

		$this->setGroundCover([
			BlockFactory::get(1,5),
			BlockFactory::get(1,5),
			BlockFactory::get(1,5),
			BlockFactory::get(1,3),
			BlockFactory::get(1,3),
		]);

このように変えましょう

ほかは特に説明することがないですが

どのソースコードも上のように編集すれば同じようになります

2-2,Normal

バイオームを変える方法

例えば initの中のselectorを

$this->selector = new class($this->random) extends BiomeSelector{
	protected function lookup(float $temperature, float $rainfall) : int{
		if($rainfall < 0.25){
			if($temperature < 0.7){
				return Biome::PLAINS;
			}elseif($temperature < 0.85){
				return Biome::PLAINS;
			}else{
				return Biome::PLAINS;
			}
		}elseif($rainfall < 0.60){
			if($temperature < 0.25){
				return Biome::PLAINS;
			}elseif($temperature < 0.75){
				return Biome::PLAINS;
			}else{
				return Biome::PLAINS;
			}
		}elseif($rainfall < 0.80){
			if($temperature < 0.25){
				return Biome::PLAINS;
			}elseif($temperature < 0.75){
				return Biome::PLAINS;
			}else{
				return Biome::PLAINS;
			}
		}else{
			if($rainfall < 0.25){
				return Biome::PLAINS;
			}elseif($rainfall < 0.70){
				return Biome::PLAINS;
			}else{
				return Biome::PLAINS;
			}
		}
	}
};
$this->selector->recalculate();

に変えるとPLAINSだけのバイオームが出来上がります

PLAINSはGrassyBiome.phpのGroundCoverを利用して地形を生成するのでGrowndCoberを編集すれば地表のブロック構成が変わります。

他にもMountainやForestなどもGrassyBiome.phpを利用してるのでここを変更することで表面のブロックを変えることができます

GrassyBiomeの配列をすべてPacked_Iceにして、バイオームをプレーンにするとこうなります。

氷の世界の誕生です。

最後に

これでジェネレーターをいじることはできたのですが、これだとdefaultのジェネレーター自体がこの様になってしまうため、普通のワールドと氷の世界の共存ができません。
それとある程度プラグインが作れる人でないとジェネレーターの作成はとてもきついものだと思います。やるにしろ自己責任で必ずバックアップは取るようにしてください

次回は本当にジェネレーター自体を自分で作る方法を説明していきたいと思います。