Compare commits
3 commits
master
...
loottables
Author | SHA1 | Date | |
---|---|---|---|
|
2767113421 | ||
|
1f10807c7b | ||
|
58b4870fee |
42 changed files with 1604 additions and 1819 deletions
10
README.md
10
README.md
|
@ -46,4 +46,14 @@ Welcome user to the home of a new PocketMine World Generator which features 9 ne
|
||||||
### These two biomes now are a bit better by the additions of bushes.
|
### These two biomes now are a bit better by the additions of bushes.
|
||||||
<img src="https://raw.githubusercontent.com/Ad5001/BetterGen/master/imgs/bushes.png" style="width: 500px"></img>
|
<img src="https://raw.githubusercontent.com/Ad5001/BetterGen/master/imgs/bushes.png" style="width: 500px"></img>
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
# Notice:
|
||||||
|
|
||||||
|
### To generate loot like in vanilla MCPE, you have to put the default behaviour pack contents of the game into the "addon" folder.
|
||||||
|
### Due to legal issues we are not able to include these directly into the repository.
|
||||||
|
### You can get them here: https://aka.ms/behaviorpacktemplate or here https://github.com/dktapps/mcpe-default-addon for an optimised version
|
||||||
|
### The folder has to look like this:
|
||||||
|
<img src="https://raw.githubusercontent.com/Ad5001/BetterGen/master/imgs/addon_setup.png" style="width: 500px"></img>
|
||||||
|
|
||||||
All content here is copyrighted (C) Ad5001 2017. Infos about this copyright can be found in the license file.
|
All content here is copyrighted (C) Ad5001 2017. Infos about this copyright can be found in the license file.
|
BIN
imgs/addon_setup.png
Normal file
BIN
imgs/addon_setup.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
12
plugin.yml
12
plugin.yml
|
@ -10,11 +10,11 @@
|
||||||
# @author Ad5001
|
# @author Ad5001
|
||||||
# @link https://github.com/Ad5001/BetterGen
|
# @link https://github.com/Ad5001/BetterGen
|
||||||
name: BetterGen
|
name: BetterGen
|
||||||
author: Ad5001
|
authors: Ad5001, XenialDan
|
||||||
main: Ad5001\BetterGen\Main
|
main: Ad5001\BetterGen\Main
|
||||||
version: 1.1
|
version: 2.0
|
||||||
load: STARTUP
|
load: STARTUP
|
||||||
api: [3.0.1, 3.0.0-ALPHA3]
|
api: [3.0.0-ALPHA3, 3.0.0-ALPHA5]
|
||||||
commands:
|
commands:
|
||||||
createworld:
|
createworld:
|
||||||
description: Generates a new world.
|
description: Generates a new world.
|
||||||
|
@ -24,9 +24,9 @@ commands:
|
||||||
description: Teleports you to an another world
|
description: Teleports you to an another world
|
||||||
usage: "/worldtp <world name>"
|
usage: "/worldtp <world name>"
|
||||||
permission: bettergen.cmd.worldtp
|
permission: bettergen.cmd.worldtp
|
||||||
temple:
|
structure:
|
||||||
description: Spawns a temple for debugging
|
description: Spawns a structure for debugging
|
||||||
usage: "/temple"
|
usage: "/structure <type>"
|
||||||
permission: bettergen.cmd.debug
|
permission: bettergen.cmd.debug
|
||||||
permissions:
|
permissions:
|
||||||
bettergen.cmd.createworld:
|
bettergen.cmd.createworld:
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
[]
|
|
|
@ -1,183 +0,0 @@
|
||||||
{
|
|
||||||
"max": 27,
|
|
||||||
"rail": {
|
|
||||||
"percentage": 79,
|
|
||||||
"minCount": 4,
|
|
||||||
"maxCount": 8,
|
|
||||||
"minStacks": 3,
|
|
||||||
"maxStacks": 3,
|
|
||||||
"id": 66,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"torch": {
|
|
||||||
"percentage": 66,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 16,
|
|
||||||
"minStacks": 3,
|
|
||||||
"maxStacks": 3,
|
|
||||||
"id": 50,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"bread": {
|
|
||||||
"percentage": 45,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 3,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 297,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"name tag": {
|
|
||||||
"percentage": 42,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 297,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"coal": {
|
|
||||||
"percentage": 32,
|
|
||||||
"minCount": 3,
|
|
||||||
"maxCount": 8,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 263,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"beetroot seeds": {
|
|
||||||
"percentage": 32,
|
|
||||||
"minCount": 2,
|
|
||||||
"maxCount": 4,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 458,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"melon seeds": {
|
|
||||||
"percentage": 32,
|
|
||||||
"minCount": 2,
|
|
||||||
"maxCount": 4,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 362,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"pumpkin seeds": {
|
|
||||||
"percentage": 32,
|
|
||||||
"minCount": 2,
|
|
||||||
"maxCount": 4,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 361,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"iron ingot": {
|
|
||||||
"percentage": 32,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 5,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 365,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"golden apple": {
|
|
||||||
"percentage": 28,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 1,
|
|
||||||
"maxStacks": 1,
|
|
||||||
"id": 322,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"activator rail": {
|
|
||||||
"percentage": 27,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 4,
|
|
||||||
"minStacks": 3,
|
|
||||||
"maxStacks": 3,
|
|
||||||
"id": 126,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"detector rail": {
|
|
||||||
"percentage": 27,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 4,
|
|
||||||
"minStacks": 3,
|
|
||||||
"maxStacks": 3,
|
|
||||||
"id": 28,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"powered rail": {
|
|
||||||
"percentage": 27,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 4,
|
|
||||||
"minStacks": 3,
|
|
||||||
"maxStacks": 3,
|
|
||||||
"id": 27,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"lapis lazuli": {
|
|
||||||
"percentage": 17,
|
|
||||||
"minCount": 4,
|
|
||||||
"maxCount": 9,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 351,
|
|
||||||
"data": 4
|
|
||||||
},
|
|
||||||
"redstone": {
|
|
||||||
"percentage": 17,
|
|
||||||
"minCount": 4,
|
|
||||||
"maxCount": 9,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 331,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"gold ingot": {
|
|
||||||
"percentage": 17,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 3,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 366,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"enchanted book": {
|
|
||||||
"percentage": 14,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 1,
|
|
||||||
"maxStacks": 1,
|
|
||||||
"id": 403,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"diamond": {
|
|
||||||
"percentage": 11,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 2,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 264,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"iron pickaxe": {
|
|
||||||
"percentage": 7,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 1,
|
|
||||||
"maxStacks": 1,
|
|
||||||
"id": 257,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"enchanted golden apple": {
|
|
||||||
"percentage": 1,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 1,
|
|
||||||
"maxStacks": 1,
|
|
||||||
"id": 466,
|
|
||||||
"data": 0
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,154 +0,0 @@
|
||||||
{
|
|
||||||
"max": 27,
|
|
||||||
"bone": {
|
|
||||||
"percentage": 71,
|
|
||||||
"minCount": 4,
|
|
||||||
"maxCount": 6,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 352,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"rotten_flesh": {
|
|
||||||
"percentage": 71,
|
|
||||||
"minCount": 3,
|
|
||||||
"maxCount": 7,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 367,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"gunpowder": {
|
|
||||||
"percentage": 59,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 8,
|
|
||||||
"minStacks": 4,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 289,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"sand": {
|
|
||||||
"percentage": 59,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 8,
|
|
||||||
"minStacks": 4,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 12,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"string": {
|
|
||||||
"percentage": 59,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 8,
|
|
||||||
"minStacks": 4,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 287,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"spider_eye": {
|
|
||||||
"percentage": 29,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 3,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 375,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"enchanted_book": {
|
|
||||||
"percentage": 24,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"id": 403,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"saddle": {
|
|
||||||
"percentage": 24,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 329,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"golden_apple": {
|
|
||||||
"percentage": 24,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 1,
|
|
||||||
"maxStacks": 1,
|
|
||||||
"id": 322,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"gold_ingot": {
|
|
||||||
"percentage": 18,
|
|
||||||
"minCount": 2,
|
|
||||||
"maxCount": 7,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 266,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"iron_ingot": {
|
|
||||||
"percentage": 18,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 5,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 265,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"emerald": {
|
|
||||||
"percentage": 18,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 3,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 388,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"iron_horse_armor": {
|
|
||||||
"percentage": 18,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 417,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"gold_horse_armor": {
|
|
||||||
"percentage": 12,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 418,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"diamond": {
|
|
||||||
"percentage": 6,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 3,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 264,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"diamond_horse_armor": {
|
|
||||||
"percentage": 6,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 419,
|
|
||||||
"data": 0
|
|
||||||
},
|
|
||||||
"enchanted_golden_apple": {
|
|
||||||
"percentage": 3,
|
|
||||||
"minCount": 1,
|
|
||||||
"maxCount": 1,
|
|
||||||
"minStacks": 2,
|
|
||||||
"maxStacks": 4,
|
|
||||||
"id": 466,
|
|
||||||
"data": 0
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -17,62 +17,85 @@ namespace Ad5001\BetterGen;
|
||||||
use Ad5001\BetterGen\biome\BetterForest;
|
use Ad5001\BetterGen\biome\BetterForest;
|
||||||
use Ad5001\BetterGen\generator\BetterNormal;
|
use Ad5001\BetterGen\generator\BetterNormal;
|
||||||
use Ad5001\BetterGen\loot\LootTable;
|
use Ad5001\BetterGen\loot\LootTable;
|
||||||
|
use Ad5001\BetterGen\structure\FallenTree;
|
||||||
|
use Ad5001\BetterGen\structure\Igloo;
|
||||||
|
use Ad5001\BetterGen\structure\SakuraTree;
|
||||||
use Ad5001\BetterGen\structure\Temple;
|
use Ad5001\BetterGen\structure\Temple;
|
||||||
|
use Ad5001\BetterGen\structure\Well;
|
||||||
use pocketmine\block\Block;
|
use pocketmine\block\Block;
|
||||||
|
use pocketmine\block\Chest;
|
||||||
use pocketmine\command\Command;
|
use pocketmine\command\Command;
|
||||||
use pocketmine\command\CommandSender;
|
use pocketmine\command\CommandSender;
|
||||||
use pocketmine\command\ConsoleCommandSender;
|
|
||||||
use pocketmine\event\block\BlockBreakEvent;
|
use pocketmine\event\block\BlockBreakEvent;
|
||||||
use pocketmine\event\level\ChunkPopulateEvent;
|
|
||||||
use pocketmine\event\Listener;
|
use pocketmine\event\Listener;
|
||||||
use pocketmine\event\player\PlayerInteractEvent;
|
use pocketmine\event\player\PlayerInteractEvent;
|
||||||
|
use pocketmine\item\Item;
|
||||||
use pocketmine\level\generator\biome\Biome;
|
use pocketmine\level\generator\biome\Biome;
|
||||||
use pocketmine\level\generator\Generator;
|
use pocketmine\level\generator\Generator;
|
||||||
|
use pocketmine\level\generator\object\OakTree;
|
||||||
|
use pocketmine\level\Position;
|
||||||
use pocketmine\nbt\tag\CompoundTag;
|
use pocketmine\nbt\tag\CompoundTag;
|
||||||
use pocketmine\nbt\tag\IntTag;
|
use pocketmine\nbt\tag\IntTag;
|
||||||
use pocketmine\nbt\tag\ListTag;
|
|
||||||
use pocketmine\nbt\tag\StringTag;
|
use pocketmine\nbt\tag\StringTag;
|
||||||
use pocketmine\Player;
|
use pocketmine\Player;
|
||||||
use pocketmine\plugin\PluginBase;
|
use pocketmine\plugin\PluginBase;
|
||||||
use pocketmine\tile\Chest;
|
use pocketmine\tile\Chest as TileChest;
|
||||||
use pocketmine\tile\Tile;
|
use pocketmine\tile\Tile;
|
||||||
use pocketmine\utils\Config;
|
use pocketmine\utils\Config;
|
||||||
use pocketmine\utils\Random;
|
use pocketmine\utils\Random;
|
||||||
|
use pocketmine\utils\TextFormat;
|
||||||
|
|
||||||
class Main extends PluginBase implements Listener {
|
class Main extends PluginBase implements Listener {
|
||||||
const PREFIX = "§l§o§b[§r§l§2Better§aGen§o§b]§r§f ";
|
const PREFIX = "§l§o§b[§r§l§2Better§aGen§o§b]§r§f ";
|
||||||
const SAKURA_FOREST = 100; // Letting some place for future biomes.
|
const SAKURA_FOREST = 100; // Letting some place for future biomes.
|
||||||
|
private static $instance;
|
||||||
|
|
||||||
/*
|
|
||||||
* Called when the plugin enables
|
/**
|
||||||
|
* Registers a biome for the normal generator. Normal means(Biome::register) doesn't allow biome to be generated
|
||||||
|
* @param $id int
|
||||||
|
* @param $biome Biome
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static function registerBiome(int $id, Biome $biome) {
|
public static function registerBiome(int $id, Biome $biome) {
|
||||||
BetterNormal::registerBiome($biome);
|
BetterNormal::registerBiome($biome);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Called when the plugin disables
|
* Places a looting chest block and creates the corresponding tile
|
||||||
|
* @param Block $block
|
||||||
|
* @param $lootfile
|
||||||
*/
|
*/
|
||||||
|
static public function placeLootChest(Block $block, $lootfile) {
|
||||||
|
$block->getLevel()->setBlock($block, $block, true);
|
||||||
|
$nbt = new CompoundTag("", [
|
||||||
|
new StringTag("id", Tile::CHEST),
|
||||||
|
new IntTag("x", (int)$block->x),
|
||||||
|
new IntTag("y", (int)$block->y),
|
||||||
|
new IntTag("z", (int)$block->z),
|
||||||
|
new StringTag("generateLoot", $lootfile)
|
||||||
|
]);
|
||||||
|
$tile = new TileChest($block->getLevel(), $nbt);
|
||||||
|
$tile->spawnToAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the plugin enables
|
||||||
|
*/
|
||||||
public function onEnable() {
|
public function onEnable() {
|
||||||
|
self::$instance = $this;
|
||||||
$this->getServer()->getPluginManager()->registerEvents($this, $this);
|
$this->getServer()->getPluginManager()->registerEvents($this, $this);
|
||||||
Generator::addGenerator(BetterNormal::class, "betternormal");
|
Generator::addGenerator(BetterNormal::class, "betternormal");
|
||||||
if ($this->isOtherNS()) $this->getLogger()->warning("Tesseract detected. Note that Tesseract is not up to date with the generation structure and some generation features may be limited or not working");
|
if ($this->isOtherNS()) $this->getLogger()->warning("Tesseract detected. Note that Tesseract is not up to date with the generation structure and some generation features may be limited or not working");
|
||||||
@mkdir($this->getDataFolder());
|
@mkdir($this->getDataFolder());
|
||||||
if (!file_exists(LootTable::getPluginFolder() . "processingLoots.json"))
|
@mkdir($this->getDataFolder() . 'addon');
|
||||||
file_put_contents(LootTable::getPluginFolder() . "processingLoots.json", "{}");
|
if ((($files = @scandir($this->getDataFolder() . 'addon')) && count($files) <= 2)) $this->getLogger()->alert('The loot files are missing, this means no loot will generate! You can get them here: https://aka.ms/behaviorpacktemplate or here https://github.com/dktapps/mcpe-default-addon for an optimised version');
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Called when one of the defined commands of the plugin has been called
|
* Check if it's a Tesseract like namespace
|
||||||
* @param $sender \pocketmine\command\CommandSender
|
* @return bool
|
||||||
* @param $cmd \pocketmine\command\Command
|
|
||||||
* @param $label mixed
|
|
||||||
* @param $args array
|
|
||||||
* return bool
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static function isOtherNS() {
|
public static function isOtherNS() {
|
||||||
try {
|
try {
|
||||||
return @class_exists("pocketmine\\level\\generator\\normal\\object\\OakTree");
|
return @class_exists("pocketmine\\level\\generator\\normal\\object\\OakTree");
|
||||||
|
@ -81,24 +104,20 @@ class Main extends PluginBase implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Registers a forest type.
|
* Called when the plugin disables
|
||||||
* @param $name string
|
|
||||||
* @param $treeClass string
|
|
||||||
* @params $infos Array(temperature, rainfall)
|
|
||||||
* @return bool
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function onDisable() {
|
public function onDisable() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Registers a biome for the normal generator. Normal means(Biome::register) doesn't allow biome to be generated
|
* Called when one of the defined commands of the plugin has been called
|
||||||
* @param $id int
|
* @param $sender \pocketmine\command\CommandSender
|
||||||
* @param $biome Biome
|
* @param $cmd \pocketmine\command\Command
|
||||||
* @return void
|
* @param $label mixed
|
||||||
|
* @param $args array
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args): bool {
|
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args): bool {
|
||||||
switch ($cmd->getName()) {
|
switch ($cmd->getName()) {
|
||||||
case "createworld": // /createworld <name> [generator = betternormal] [seed = rand()] [options(json)]
|
case "createworld": // /createworld <name> [generator = betternormal] [seed = rand()] [options(json)]
|
||||||
|
@ -179,6 +198,11 @@ class Main extends PluginBase implements Listener {
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
case "worldtp":
|
case "worldtp":
|
||||||
|
if (!$sender instanceof Player) {
|
||||||
|
$sender->sendMessage(TextFormat::RED . 'You can\'t use this command');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/** @var Player $sender */
|
||||||
if (isset($args[0])) {
|
if (isset($args[0])) {
|
||||||
if (is_null($this->getServer()->getLevelByName($args[0]))) {
|
if (is_null($this->getServer()->getLevelByName($args[0]))) {
|
||||||
$this->getServer()->loadLevel($args[0]);
|
$this->getServer()->loadLevel($args[0]);
|
||||||
|
@ -187,41 +211,78 @@ class Main extends PluginBase implements Listener {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$sender->teleport(\pocketmine\level\Position::fromObject($player, $this->getServer()->getLevelByName($args[0])));
|
$sender->teleport(Position::fromObject($sender, $this->getServer()->getLevelByName($args[0])));
|
||||||
$sender->sendMessage("§aTeleporting to {$args[0]}...");
|
$sender->sendMessage("§aTeleporting to {$args[0]}...");
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'temple':{
|
case 'structure': {
|
||||||
if($sender instanceof ConsoleCommandSender) return false;
|
if (!$sender instanceof Player) {
|
||||||
|
$sender->sendMessage(TextFormat::RED . 'You can\'t use this command');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
/** @var Player $sender */
|
/** @var Player $sender */
|
||||||
|
if (isset($args[0])) {
|
||||||
|
switch ($args[0]) {
|
||||||
|
case 'temple': {
|
||||||
$temple = new Temple();
|
$temple = new Temple();
|
||||||
$temple->placeObject($sender->getLevel(), $sender->x, $sender->y, $sender->z, new Random(microtime()));
|
$temple->placeObject($sender->getLevel(), $sender->x, $sender->y, $sender->z, new Random(microtime()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case 'fallen': {
|
||||||
|
$temple = new FallenTree(new OakTree());
|
||||||
|
$temple->placeObject($sender->getLevel(), $sender->x, $sender->y, $sender->z);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'igloo': {
|
||||||
|
$temple = new Igloo();
|
||||||
|
$temple->placeObject($sender->getLevel(), $sender->x, $sender->y, $sender->z, new Random(microtime()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'well': {
|
||||||
|
$temple = new Well();
|
||||||
|
$temple->placeObject($sender->getLevel(), $sender->x, $sender->y, $sender->z, new Random(microtime()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'sakura': {
|
||||||
|
$temple = new SakuraTree();
|
||||||
|
$temple->placeObject($sender->getLevel(), $sender->x, $sender->y, $sender->z, new Random(microtime()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$sender->sendMessage(implode(', ', ['temple', 'fallen', 'igloo', 'well', 'sakura']));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Generates a(semi) random seed.
|
* Generates a(semi) random seed.
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function generateRandomSeed(): int {
|
public function generateRandomSeed(): int {
|
||||||
return (int)round(rand(0, round(time()) / memory_get_usage(true)) * (int)str_shuffle("127469453645108") / (int)str_shuffle("12746945364"));
|
return (int)round(rand(0, round(time()) / memory_get_usage(true)) * (int)str_shuffle("127469453645108") / (int)str_shuffle("12746945364"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Listener
|
/**
|
||||||
|
* Registers a forest type.
|
||||||
/*
|
* @param $name string
|
||||||
* Checks after a chunk populates so we an add tiles and loot tables
|
* @param $treeClass string
|
||||||
* @param $event pocketmine\event\level\ChunkPopulateEvent
|
* @param array $infos
|
||||||
* @return int
|
* @return bool
|
||||||
|
* @params $infos Array(temperature, rainfall)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function registerForest(string $name, string $treeClass, array $infos): bool {
|
public function registerForest(string $name, string $treeClass, array $infos): bool {
|
||||||
if (!@class_exists($treeClass))
|
if (!@class_exists($treeClass))
|
||||||
return false;
|
return false;
|
||||||
|
@ -232,66 +293,60 @@ class Main extends PluginBase implements Listener {
|
||||||
return BetterForest::registerForest($name, $treeClass, $infos);
|
return BetterForest::registerForest($name, $treeClass, $infos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
/*
|
* Checks when a player attempts to open a loot chest which is not created yet
|
||||||
* Checks when a player interacts with a loot chest to create it.
|
* @param PlayerInteractEvent $event
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function onChunkPopulate(ChunkPopulateEvent $event) {
|
|
||||||
$cfg = new Config(LootTable::getPluginFolder() . "processingLoots.json", Config::JSON);
|
|
||||||
foreach ($cfg->getAll() as $key => $value) {
|
|
||||||
list($x, $y, $z) = explode(";", $key);
|
|
||||||
if ($value["saveAs"] == "chest" && $event->getLevel()->getBlockIdAt($x, $y, $z) == Block::AIR) {
|
|
||||||
$event->getLevel()->setBlockIdAt($x, $y, $z, Block::CHEST);
|
|
||||||
} else {
|
|
||||||
$cfg->remove($key);
|
|
||||||
$cfg->save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Checks when a player breaks a loot chest which is not created to create it
|
|
||||||
*/
|
|
||||||
|
|
||||||
public function onInteract(PlayerInteractEvent $event) {
|
public function onInteract(PlayerInteractEvent $event) {
|
||||||
$cfg = new Config(LootTable::getPluginFolder() . "processingLoots.json", Config::JSON);
|
if (($block = $event->getBlock())->getId() !== Block::CHEST || $event->getAction() !== PlayerInteractEvent::RIGHT_CLICK_BLOCK) return;
|
||||||
if ($event->getBlock()->getId() !== Block::CHEST) return;
|
$this->generateLootChest($block);
|
||||||
if (!$cfg->exists($event->getBlock()->getX() . ";" . $event->getBlock()->getY() . ";" . $event->getBlock()->getZ())) return;
|
|
||||||
$nbt = new CompoundTag("", [
|
|
||||||
new ListTag("Items", []),
|
|
||||||
new StringTag("id", Tile::CHEST),
|
|
||||||
new IntTag("x", $event->getBlock()->x),
|
|
||||||
new IntTag("y", $event->getBlock()->y),
|
|
||||||
new IntTag("z", $event->getBlock()->z)
|
|
||||||
]);
|
|
||||||
/** @var Chest $chest */
|
|
||||||
$chest = Tile::createTile(Tile::CHEST, $event->getBlock()->getLevel(), $nbt);
|
|
||||||
$chest->setName("§k(Fake)§r Minecart chest");
|
|
||||||
LootTable::fillChest($chest->getInventory(), $event->getBlock());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Check if it's a Tesseract like namespace
|
* Fills a chest with loot
|
||||||
* @return bool
|
* @param Block $block
|
||||||
|
* @param Random|null $random
|
||||||
*/
|
*/
|
||||||
|
static public function generateLootChest(Block $block, Random $random = null) {
|
||||||
public function onBlockBreak(BlockBreakEvent $event) {
|
if (!$block instanceof Chest) return;
|
||||||
$cfg = new Config(LootTable::getPluginFolder() . "processingLoots.json", Config::JSON);
|
$tile = $block->getLevel()->getTile($block);
|
||||||
if ($event->getBlock()->getId() !== Block::CHEST) return;
|
if (is_null($tile)) {
|
||||||
if (!$cfg->exists($event->getBlock()->getX() . ";" . $event->getBlock()->getY() . ";" . $event->getBlock()->getZ())) return;
|
//TODO new tile, but no loot, because we don't know which type of loot chest this is
|
||||||
$nbt = new CompoundTag("", [
|
$nbt = new CompoundTag("", [
|
||||||
new ListTag("Items", []),
|
|
||||||
new StringTag("id", Tile::CHEST),
|
new StringTag("id", Tile::CHEST),
|
||||||
new IntTag("x", $event->getBlock()->x),
|
new IntTag("x", (int)$block->x),
|
||||||
new IntTag("y", $event->getBlock()->y),
|
new IntTag("y", (int)$block->y),
|
||||||
new IntTag("z", $event->getBlock()->z)
|
new IntTag("z", (int)$block->z)
|
||||||
]);
|
]);
|
||||||
/** @var Chest $chest */
|
$tile = new TileChest($block->getLevel(), $nbt);
|
||||||
$chest = Tile::createTile(Tile::CHEST, $event->getBlock()->getLevel(), $nbt);
|
$tile->spawnToAll();
|
||||||
$chest->setName("§k(Fake)§r Minecart chest");
|
return;
|
||||||
LootTable::fillChest($chest->getInventory(), $event->getBlock());
|
}
|
||||||
// $event->setCancelled(); //i think nope. You want to break it with items
|
if (!$tile instanceof TileChest) return;
|
||||||
|
//Check if lootchest (or already generated loot)
|
||||||
|
if (!isset($tile->namedtag->generateLoot)) return;
|
||||||
|
$table = new LootTable($config = new Config(self::getInstance()->getDataFolder() . 'addon\\' . $tile->namedtag->generateLoot . '.json', Config::DETECT, []));
|
||||||
|
$size = $tile->getInventory()->getSize();
|
||||||
|
$loot = $table->getRandomLoot($random);
|
||||||
|
$items = array_pad($loot, $size, Item::get(0));
|
||||||
|
shuffle($items);
|
||||||
|
$tile->getInventory()->setContents($items);
|
||||||
|
unset($tile->namedtag->generateLoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Main
|
||||||
|
*/
|
||||||
|
static public function getInstance() {
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks when a player breaks a loot chest which is not created yet
|
||||||
|
* @param BlockBreakEvent $event
|
||||||
|
*/
|
||||||
|
public function onBlockBreak(BlockBreakEvent $event) {
|
||||||
|
if (($block = $event->getBlock())->getId() !== Block::CHEST) return;
|
||||||
|
$this->generateLootChest($block);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,14 +11,15 @@
|
||||||
* @author Ad5001
|
* @author Ad5001
|
||||||
* @link https://github.com/Ad5001/BetterGen
|
* @link https://github.com/Ad5001/BetterGen
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Ad5001\BetterGen\biome;
|
namespace Ad5001\BetterGen\biome;
|
||||||
|
|
||||||
|
use Ad5001\BetterGen\generator\BetterNormal;
|
||||||
use Ad5001\BetterGen\populator\CactusPopulator;
|
use Ad5001\BetterGen\populator\CactusPopulator;
|
||||||
use Ad5001\BetterGen\populator\DeadbushPopulator;
|
use Ad5001\BetterGen\populator\DeadbushPopulator;
|
||||||
use Ad5001\BetterGen\populator\SugarCanePopulator;
|
use Ad5001\BetterGen\populator\SugarCanePopulator;
|
||||||
use Ad5001\BetterGen\populator\TemplePopulator;
|
use Ad5001\BetterGen\populator\TemplePopulator;
|
||||||
use Ad5001\BetterGen\populator\WellPopulator;
|
use Ad5001\BetterGen\populator\WellPopulator;
|
||||||
use Ad5001\BetterGen\generator\BetterNormal;
|
|
||||||
use pocketmine\block\Block;
|
use pocketmine\block\Block;
|
||||||
use pocketmine\level\generator\biome\Biome;
|
use pocketmine\level\generator\biome\Biome;
|
||||||
use pocketmine\level\generator\normal\biome\SandyBiome;
|
use pocketmine\level\generator\normal\biome\SandyBiome;
|
||||||
|
@ -73,11 +74,12 @@ class BetterDesert extends SandyBiome implements Mountainable {
|
||||||
Block::get(Block::SANDSTONE, 0)
|
Block::get(Block::SANDSTONE, 0)
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName(): string {
|
public function getName(): string {
|
||||||
return "BetterDesert";
|
return "BetterDesert";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns biome id
|
* Returns biome id
|
||||||
*/
|
*/
|
||||||
public function getId() {
|
public function getId() {
|
||||||
|
|
|
@ -34,6 +34,7 @@ class BetterForest extends ForestBiome implements Mountainable {
|
||||||
Biome::BIRCH_FOREST,
|
Biome::BIRCH_FOREST,
|
||||||
Main::SAKURA_FOREST
|
Main::SAKURA_FOREST
|
||||||
];
|
];
|
||||||
|
|
||||||
public function __construct($type = 0, array $infos = [0.6, 0.5]) {
|
public function __construct($type = 0, array $infos = [0.6, 0.5]) {
|
||||||
parent::__construct($type);
|
parent::__construct($type);
|
||||||
$this->clearPopulators();
|
$this->clearPopulators();
|
||||||
|
@ -63,17 +64,7 @@ class BetterForest extends ForestBiome implements Mountainable {
|
||||||
$this->temperature = $infos[0];
|
$this->temperature = $infos[0];
|
||||||
$this->rainfall = $infos[1];
|
$this->rainfall = $infos[1];
|
||||||
}
|
}
|
||||||
public function getName() {
|
|
||||||
return str_ireplace(" ", "", self::$types[$this->type]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the ID relatively.
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getId() {
|
|
||||||
return self::$ids[$this->type];
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @param string $treeClass
|
* @param string $treeClass
|
||||||
|
@ -87,4 +78,16 @@ class BetterForest extends ForestBiome implements Mountainable {
|
||||||
Main::register(Main::SAKURA_FOREST + (count(self::$types) - 2), new BetterForest(count(self::$types) - 1, $infos));
|
Main::register(Main::SAKURA_FOREST + (count(self::$types) - 2), new BetterForest(count(self::$types) - 1, $infos));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getName() {
|
||||||
|
return str_ireplace(" ", "", self::$types[$this->type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the ID relatively.
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getId() {
|
||||||
|
return self::$ids[$this->type];
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -42,6 +42,7 @@ class BetterIcePlains extends SnowyBiome implements Mountainable {
|
||||||
$this->temperature = 0.05;
|
$this->temperature = 0.05;
|
||||||
$this->rainfall = 0.8;
|
$this->rainfall = 0.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName() {
|
public function getName() {
|
||||||
return "BetterIcePlains";
|
return "BetterIcePlains";
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,11 +104,12 @@ class BetterMesa extends SandyBiome {
|
||||||
Block::get(Block::RED_SANDSTONE, 0)
|
Block::get(Block::RED_SANDSTONE, 0)
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName(): string {
|
public function getName(): string {
|
||||||
return "BetterMesa";
|
return "BetterMesa";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns biome id
|
* Returns biome id
|
||||||
*/
|
*/
|
||||||
public function getId() {
|
public function getId() {
|
||||||
|
|
|
@ -100,11 +100,12 @@ class BetterMesaPlains extends SandyBiome {
|
||||||
Block::get(Block::RED_SANDSTONE, 0)
|
Block::get(Block::RED_SANDSTONE, 0)
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName(): string {
|
public function getName(): string {
|
||||||
return "BetterMesaPlains";
|
return "BetterMesaPlains";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns biome id
|
* Returns biome id
|
||||||
*/
|
*/
|
||||||
public function getId() {
|
public function getId() {
|
||||||
|
|
|
@ -40,11 +40,12 @@ class BetterRiver extends Biome {
|
||||||
$this->temperature = 0.5;
|
$this->temperature = 0.5;
|
||||||
$this->rainfall = 0.7;
|
$this->rainfall = 0.7;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName() {
|
public function getName() {
|
||||||
return "BetterRiver";
|
return "BetterRiver";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the ID relatively.
|
* Returns the ID relatively.
|
||||||
*/
|
*/
|
||||||
public function getId() {
|
public function getId() {
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
* @author Ad5001
|
* @author Ad5001
|
||||||
* @link https://github.com/Ad5001/BetterGen
|
* @link https://github.com/Ad5001/BetterGen
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Ad5001\BetterGen\generator;
|
namespace Ad5001\BetterGen\generator;
|
||||||
|
|
||||||
use pocketmine\level\generator\biome\Biome;
|
use pocketmine\level\generator\biome\Biome;
|
||||||
|
@ -31,6 +32,7 @@ class BetterBiomeSelector extends BiomeSelector {
|
||||||
/** @var Biome[] */
|
/** @var Biome[] */
|
||||||
private $biomes = [];
|
private $biomes = [];
|
||||||
private $lookup;
|
private $lookup;
|
||||||
|
|
||||||
public function __construct(Random $random, callable $lookup, Biome $fallback) {
|
public function __construct(Random $random, callable $lookup, Biome $fallback) {
|
||||||
parent::__construct($random, $lookup, $fallback);
|
parent::__construct($random, $lookup, $fallback);
|
||||||
$this->fallback = $fallback;
|
$this->fallback = $fallback;
|
||||||
|
@ -38,17 +40,13 @@ class BetterBiomeSelector extends BiomeSelector {
|
||||||
$this->temperature = new Simplex($random, 2, 1 / 16, 1 / 512);
|
$this->temperature = new Simplex($random, 2, 1 / 16, 1 / 512);
|
||||||
$this->rainfall = new Simplex($random, 2, 1 / 16, 1 / 512);
|
$this->rainfall = new Simplex($random, 2, 1 / 16, 1 / 512);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function recalculate() {
|
public function recalculate() {
|
||||||
} // Using our own system, No need for that
|
} // Using our own system, No need for that
|
||||||
|
|
||||||
public function addBiome(Biome $biome) {
|
public function addBiome(Biome $biome) {
|
||||||
$this->biomes[$biome->getId()] = $biome;
|
$this->biomes[$biome->getId()] = $biome;
|
||||||
}
|
}
|
||||||
public function getTemperature($x, $z) {
|
|
||||||
return ($this->temperature->noise2D($x, $z, true) + 1) / 2;
|
|
||||||
}
|
|
||||||
public function getRainfall($x, $z) {
|
|
||||||
return ($this->rainfall->noise2D($x, $z, true) + 1) / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -67,4 +65,12 @@ class BetterBiomeSelector extends BiomeSelector {
|
||||||
$b = (($biomeId instanceof Biome) ? $biomeId : ($this->biomes[$biomeId] ?? $this->fallback));
|
$b = (($biomeId instanceof Biome) ? $biomeId : ($this->biomes[$biomeId] ?? $this->fallback));
|
||||||
return $b;
|
return $b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getTemperature($x, $z) {
|
||||||
|
return ($this->temperature->noise2D($x, $z, true) + 1) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRainfall($x, $z) {
|
||||||
|
return ($this->rainfall->noise2D($x, $z, true) + 1) / 2;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -59,19 +59,11 @@ class BetterNormal extends Generator {
|
||||||
Block::WATER,
|
Block::WATER,
|
||||||
Block::STILL_WATER
|
Block::STILL_WATER
|
||||||
];
|
];
|
||||||
/** @var BetterBiomeSelector */
|
|
||||||
protected $selector;
|
|
||||||
/** @var Level */
|
|
||||||
protected $level;
|
|
||||||
/** @var Random */
|
|
||||||
protected $random;
|
|
||||||
protected $populators = [ ];
|
|
||||||
protected $generationPopulators = [ ];
|
|
||||||
public static $biomes = [];
|
public static $biomes = [];
|
||||||
/** @var Biome[] */
|
/** @var Biome[] */
|
||||||
public static $biomeById = [];
|
public static $biomeById = [];
|
||||||
public static $levels = [];
|
public static $levels = [];
|
||||||
protected static $GAUSSIAN_KERNEL = null; // From main class
|
protected static $GAUSSIAN_KERNEL = null;
|
||||||
protected static $SMOOTH_SIZE = 2;
|
protected static $SMOOTH_SIZE = 2;
|
||||||
protected static $options = [
|
protected static $options = [
|
||||||
"delBio" => [
|
"delBio" => [
|
||||||
|
@ -80,33 +72,59 @@ class BetterNormal extends Generator {
|
||||||
"Lakes"
|
"Lakes"
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
/** @var BetterBiomeSelector */
|
||||||
|
protected $selector;
|
||||||
|
/** @var Level */
|
||||||
|
protected $level;
|
||||||
|
/** @var Random */
|
||||||
|
protected $random; // From main class
|
||||||
|
protected $populators = [];
|
||||||
|
protected $generationPopulators = [];
|
||||||
protected $waterHeight = 63;
|
protected $waterHeight = 63;
|
||||||
private $noiseBase;
|
private $noiseBase;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Picks a biome by X and Z
|
* Constructs the class
|
||||||
* @param $x int
|
* @param $options array
|
||||||
* @param $z int
|
|
||||||
* @return Biome
|
|
||||||
*/
|
*/
|
||||||
public function pickBiome($x, $z) {
|
public function __construct(array $options = []) {
|
||||||
$hash = $x * 2345803 ^ $z * 9236449 ^ $this->level->getSeed ();
|
self::$options["preset"] = $options["preset"];
|
||||||
$hash *= $hash + 223;
|
$options = (array)json_decode($options["preset"]);
|
||||||
$xNoise = $hash >> 20 & 3;
|
if (isset($options["delBio"])) {
|
||||||
$zNoise = $hash >> 22 & 3;
|
if (is_string($options["de"])) $options["delBio"] = explode(",", $options["delBio"]);
|
||||||
if ($xNoise == 3) {
|
if (count($options["delBio"]) !== 0) {
|
||||||
$xNoise = 1;
|
self::$options["delBio"] = $options["delBio"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($options["delStruct"])) {
|
||||||
|
if (is_string($options["delStruct"])) $options["delStruct"] = explode(",", $options["delStruct"]);
|
||||||
|
if (count($options["delStruct"]) !== 0) {
|
||||||
|
self::$options["delStruct"] = $options["delStruct"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (self::$GAUSSIAN_KERNEL === null) {
|
||||||
|
self::generateKernel();
|
||||||
}
|
}
|
||||||
if ($zNoise == 3) {
|
|
||||||
$zNoise = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$b = $this->selector->pickBiome($x + $xNoise - 1, $z + $zNoise - 1);
|
/**
|
||||||
if ($b instanceof Mountainable && $this->random->nextBoundedInt(1000) < 3) {
|
* Generates the generation kernel based on smooth size (here 2)
|
||||||
$b = clone $b;
|
*/
|
||||||
// $b->setElevation($b->getMinElevation () + (50 * $b->getMinElevation () / 100), $b->getMaxElevation () + (50 * $b->getMinElevation () / 100));
|
private static function generateKernel() {
|
||||||
|
self::$GAUSSIAN_KERNEL = [];
|
||||||
|
|
||||||
|
$bellSize = 1 / self::$SMOOTH_SIZE;
|
||||||
|
$bellHeight = 2 * self::$SMOOTH_SIZE;
|
||||||
|
|
||||||
|
for ($sx = -self::$SMOOTH_SIZE; $sx <= self::$SMOOTH_SIZE; $sx++) {
|
||||||
|
self::$GAUSSIAN_KERNEL[$sx + self::$SMOOTH_SIZE] = [];
|
||||||
|
|
||||||
|
for ($sz = -self::$SMOOTH_SIZE; $sz <= self::$SMOOTH_SIZE; $sz++) {
|
||||||
|
$bx = $bellSize * $sx;
|
||||||
|
$bz = $bellSize * $sz;
|
||||||
|
self::$GAUSSIAN_KERNEL[$sx + self::$SMOOTH_SIZE] [$sz + self::$SMOOTH_SIZE] = $bellHeight * exp(-($bx * $bx + $bz * $bz) / 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $b;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -224,7 +242,7 @@ class BetterNormal extends Generator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Adds a biome to the selector. Do not use this method directly use Main::registerBiome which registers it properly
|
* Adds a biome to the selector. Do not use this method directly use Main::registerBiome which registers it properly
|
||||||
* @param $biome Biome
|
* @param $biome Biome
|
||||||
* @return bool
|
* @return bool
|
||||||
|
@ -242,7 +260,7 @@ class BetterNormal extends Generator {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns a biome by temperature
|
* Returns a biome by temperature
|
||||||
* @param $temperature float
|
* @param $temperature float
|
||||||
* @param $rainfall float
|
* @param $rainfall float
|
||||||
|
@ -274,16 +292,7 @@ class BetterNormal extends Generator {
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns a biome by its id
|
|
||||||
* @param $id int
|
|
||||||
* @return Biome
|
|
||||||
*/
|
|
||||||
public function getBiomeById(int $id): Biome {
|
|
||||||
return self::$biomeById[$id] ?? self::$biomeById[Biome::OCEAN];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Generates a chunk.
|
* Generates a chunk.
|
||||||
* Cloning method to make it work with new methods.
|
* Cloning method to make it work with new methods.
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -356,7 +365,33 @@ class BetterNormal extends Generator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
|
* Picks a biome by X and Z
|
||||||
|
* @param $x int
|
||||||
|
* @param $z int
|
||||||
|
* @return Biome
|
||||||
|
*/
|
||||||
|
public function pickBiome($x, $z) {
|
||||||
|
$hash = $x * 2345803 ^ $z * 9236449 ^ $this->level->getSeed();
|
||||||
|
$hash *= $hash + 223;
|
||||||
|
$xNoise = $hash >> 20 & 3;
|
||||||
|
$zNoise = $hash >> 22 & 3;
|
||||||
|
if ($xNoise == 3) {
|
||||||
|
$xNoise = 1;
|
||||||
|
}
|
||||||
|
if ($zNoise == 3) {
|
||||||
|
$zNoise = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$b = $this->selector->pickBiome($x + $xNoise - 1, $z + $zNoise - 1);
|
||||||
|
if ($b instanceof Mountainable && $this->random->nextBoundedInt(1000) < 3) {
|
||||||
|
$b = clone $b;
|
||||||
|
// $b->setElevation($b->getMinElevation () + (50 * $b->getMinElevation () / 100), $b->getMaxElevation () + (50 * $b->getMinElevation () / 100));
|
||||||
|
}
|
||||||
|
return $b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
* Populates a chunk.
|
* Populates a chunk.
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
* @param $chunk2 int
|
* @param $chunk2 int
|
||||||
|
@ -380,74 +415,41 @@ class BetterNormal extends Generator {
|
||||||
$biome->populateChunk($this->level, $chunkX, $chunkZ, $this->random);
|
$biome->populateChunk($this->level, $chunkX, $chunkZ, $this->random);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Constructs the class
|
* Returns a biome by its id
|
||||||
* @param $options array
|
* @param $id int
|
||||||
|
* @return Biome
|
||||||
*/
|
*/
|
||||||
public function __construct(array $options = []) {
|
public function getBiomeById(int $id): Biome {
|
||||||
self::$options["preset"] = $options["preset"];
|
return self::$biomeById[$id] ?? self::$biomeById[Biome::OCEAN];
|
||||||
$options = (array) json_decode($options["preset"]);
|
|
||||||
if(isset($options["delBio"])) {
|
|
||||||
if(is_string($options["de"])) $options["delBio"] = explode(",", $options["delBio"]);
|
|
||||||
if(count($options["delBio"]) !== 0) {
|
|
||||||
self::$options["delBio"] = $options["delBio"];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(isset($options["delStruct"])) {
|
|
||||||
if(is_string($options["delStruct"])) $options["delStruct"] = explode(",", $options["delStruct"]);
|
|
||||||
if(count($options["delStruct"]) !== 0) {
|
|
||||||
self::$options["delStruct"] = $options["delStruct"];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (self::$GAUSSIAN_KERNEL === null) {
|
|
||||||
self::generateKernel ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Generates the generation kernel based on smooth size (here 2)
|
|
||||||
*/
|
|
||||||
private static function generateKernel() {
|
|
||||||
self::$GAUSSIAN_KERNEL = [ ];
|
|
||||||
|
|
||||||
$bellSize = 1 / self::$SMOOTH_SIZE;
|
|
||||||
$bellHeight = 2 * self::$SMOOTH_SIZE;
|
|
||||||
|
|
||||||
for($sx = - self::$SMOOTH_SIZE; $sx <= self::$SMOOTH_SIZE; $sx++) {
|
|
||||||
self::$GAUSSIAN_KERNEL[$sx + self::$SMOOTH_SIZE] = [ ];
|
|
||||||
|
|
||||||
for($sz = - self::$SMOOTH_SIZE; $sz <= self::$SMOOTH_SIZE; $sz++) {
|
|
||||||
$bx = $bellSize * $sx;
|
|
||||||
$bz = $bellSize * $sz;
|
|
||||||
self::$GAUSSIAN_KERNEL[$sx + self::$SMOOTH_SIZE] [$sz + self::$SMOOTH_SIZE] = $bellHeight * exp(- ($bx * $bx + $bz * $bz) / 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the name of the generator
|
// Returns the name of the generator
|
||||||
|
|
||||||
public function getName() {
|
public function getName() {
|
||||||
return "betternormal";
|
return "betternormal";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gives the generators settings.
|
* Gives the generators settings.
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getSettings(): array {
|
public function getSettings(): array {
|
||||||
return self::$options;
|
return self::$options;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSpawn() {
|
public function getSpawn() {
|
||||||
return new Vector3(127.5, 128, 127.5);
|
return new Vector3(127.5, 128, 127.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns a safe spawn location
|
* Returns a safe spawn location
|
||||||
*/
|
*/
|
||||||
public function getSafeSpawn() {
|
public function getSafeSpawn() {
|
||||||
return new Vector3(127.5, $this->getHighestWorkableBlock(127, 127), 127.5);
|
return new Vector3(127.5, $this->getHighestWorkableBlock(127, 127), 127.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
|
|
@ -14,116 +14,157 @@
|
||||||
|
|
||||||
namespace Ad5001\BetterGen\loot;
|
namespace Ad5001\BetterGen\loot;
|
||||||
|
|
||||||
use pocketmine\inventory\BaseInventory;
|
use Ad5001\BetterGen\Main;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\item\Tool;
|
||||||
use pocketmine\nbt\NBT;
|
|
||||||
use pocketmine\utils\Config;
|
use pocketmine\utils\Config;
|
||||||
use pocketmine\utils\Random;
|
use pocketmine\utils\Random;
|
||||||
|
|
||||||
/*
|
|
||||||
* This class is used for loot setting.
|
|
||||||
* Please note that they AREN'T as powerful as PC ones due to some implementations limitations.
|
|
||||||
* Loot table format:
|
|
||||||
* {
|
|
||||||
* "max": Max number of loots (storable amount)
|
|
||||||
* "example": {
|
|
||||||
* "percentage": Chance of appearing(in percent)
|
|
||||||
* "minCount": Minimal count
|
|
||||||
* "maxCount": Maximal count
|
|
||||||
* "id": Id of the item
|
|
||||||
* "data": Item damage
|
|
||||||
* "tags": {"display": {"Name": "Example NBT data"}}. This parameter is optional
|
|
||||||
* "minStacks": If chosen, the minimum amount of stacks that can be found
|
|
||||||
* "maxStacks": If chosen the maximum number of stacks that can be chosen
|
|
||||||
* }
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
class LootTable {
|
class LootTable {
|
||||||
const LOOT_NAMES = [
|
|
||||||
"temple",
|
|
||||||
"igloo",
|
|
||||||
"mineshaft"
|
|
||||||
];
|
|
||||||
const LOOT_SAVE = [
|
|
||||||
"chest",
|
|
||||||
"chest",
|
|
||||||
"chest"
|
|
||||||
];
|
|
||||||
const LOOT_DESERT_TEMPLE = 0;
|
|
||||||
const LOOT_IGLOO = 1;
|
|
||||||
const LOOT_MINESHAFT = 2;
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Asynchronous loot table choosing
|
* @var null|Config The lootfile (.json) thats used
|
||||||
* @param $place pocketmine\math\Vector3
|
|
||||||
* @param $type int
|
|
||||||
* @param $random pocketmine\utils\Random
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public static function buildLootTable(Vector3 $place, int $type, Random $random) {
|
private $lootFile = null;
|
||||||
if($place->y < 1) return; // Making sure sometimes that it doesn't write for nothing
|
|
||||||
$cfg = new Config(self::getPluginFolder() . "processingLoots.json", Config::JSON);
|
/**
|
||||||
$lootsFromJson = json_decode(file_get_contents(self::getResourcesFolder() . "loots/" . self::LOOT_NAMES[$type] . ".json"), true);
|
* LootTable constructor.
|
||||||
$loots =[];
|
* @param Config $lootFile
|
||||||
foreach($lootsFromJson as $loot) {
|
*/
|
||||||
if(is_array($loot) && $random->nextBoundedInt(101) < $loot["percentage"])
|
public function __construct(Config $lootFile) {
|
||||||
$loots[] = $loot;
|
$this->lootFile = $lootFile;
|
||||||
}
|
|
||||||
if($lootsFromJson["max"] < count($loots)) {
|
|
||||||
while($lootsFromJson["max"] < count($loots))
|
|
||||||
unset($loots[array_rand($loots)]);
|
|
||||||
}
|
|
||||||
$loots["saveAs"] = self::LOOT_SAVE[$type];
|
|
||||||
$cfg->set($place->x . ";" . $place->y . ";" . $place->z, $loots);
|
|
||||||
$cfg->save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Synchronous inventory filling with loot table.
|
* Public function to generate loot. A {@link: \pocketmine\utils\Random} can be passed. Serves as file reader + sub-table loader
|
||||||
* @param $inv pocketmine\inventory\BaseInventory
|
* Do _NOT_ use this in the source, use LootTable::createLoot instead
|
||||||
* @param $pos pocketmine\math\Vector3
|
* @param Random|null $random
|
||||||
* @return void
|
* @return Item[]
|
||||||
*/
|
*/
|
||||||
public static function fillChest(BaseInventory $inv, Vector3 $pos) {
|
public function getRandomLoot(Random $random = null) {
|
||||||
$cfg = new Config(self::getPluginFolder() . "processingLoots.json", Config::JSON);
|
if (is_null($random)) $random = new Random();
|
||||||
if($cfg->exists($pos->x . ";" . $pos->y . ";" . $pos->z)) {
|
|
||||||
$loots = $cfg->get($pos->x . ";" . $pos->y . ";" . $pos->z);
|
|
||||||
$items = [];
|
$items = [];
|
||||||
foreach($loots as $loot) {
|
foreach ($this->lootFile->get("pools") as $rolls) {
|
||||||
if(!is_array($loot)) continue;
|
if (isset($rolls["rolls"]["min"]) && isset($rolls["rolls"]["max"])) $maxrolls = $random->nextRange($rolls["rolls"]["min"], $rolls["rolls"]["max"]);
|
||||||
$randCount = rand($loot["minStacks"], $loot["maxStacks"]);
|
else $maxrolls = $rolls["rolls"];//TODO: $rolls["conditions"] //Example: looting swords
|
||||||
for($i = 0; $i <= $randCount; $i++) {
|
while ($maxrolls > 0) {
|
||||||
$rand = rand(0, count($loots));
|
$array = [];
|
||||||
$items[$rand] = Item::get($loot["id"], $loot["data"], rand($loot["minCount"], $loot["maxCount"]));
|
$maxrolls--;
|
||||||
if(isset($loot["tags"])) $items[$rand]->setCompoundTag(NBT::parseJSON($loot["tags"]));
|
foreach ($rolls["entries"] as $index => $entries) {
|
||||||
|
$array[] = $entries["weight"]??1;
|
||||||
|
}
|
||||||
|
$val = $rolls["entries"][$this->getRandomWeightedElement($array)];
|
||||||
|
//typecheck
|
||||||
|
if ($val["type"] == "loot_table") {
|
||||||
|
$loottable = new LootTable(new Config(Main::getInstance()->getDataFolder() . 'addon\\' . $val["name"] . ".json", Config::DETECT, []));
|
||||||
|
$items = array_merge($items, $loottable->getRandomLoot($random));
|
||||||
|
unset($loottable);
|
||||||
|
} elseif ($val["type"] == "item") {
|
||||||
|
//name fix
|
||||||
|
$val["name"] = self::fixItemName($val["name"]);
|
||||||
|
$item = Item::fromString($val["name"]);
|
||||||
|
if (isset($val["functions"])) {
|
||||||
|
foreach ($val["functions"] as $function) {
|
||||||
|
switch ($functionname = $function["function"]) {
|
||||||
|
case "set_damage": {
|
||||||
|
if ($item instanceof Tool) $item->setDamage($random->nextRange($function["damage"]["min"] * $item->getMaxDurability(), $function["damage"]["max"] * $item->getMaxDurability()));
|
||||||
|
else $item->setDamage($random->nextRange($function["damage"]["min"], $function["damage"]["max"]));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "set_data": {
|
||||||
|
//fish fix, blame mojang
|
||||||
|
if ($item->getId() == Item::RAW_FISH) {
|
||||||
|
switch ($function["data"]) {
|
||||||
|
case 1:
|
||||||
|
$item = Item::get(Item::RAW_SALMON, $item->getDamage(), $item->getCount(), $item->getCompoundTag());
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$item = Item::get(Item::CLOWN_FISH, $item->getDamage(), $item->getCount(), $item->getCompoundTag());
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
$item = Item::get(Item::PUFFER_FISH, $item->getDamage(), $item->getCount(), $item->getCompoundTag());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else $item->setDamage($function["data"]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "set_count": {
|
||||||
|
$item->setCount($random->nextRange($function["count"]["min"], $function["count"]["max"]));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "furnace_smelt": {
|
||||||
|
/* TODO
|
||||||
|
Mostly bound to conditions (burning)
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "entity_properties",
|
||||||
|
"entity": "this",
|
||||||
|
"properties": {
|
||||||
|
"on_fire": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$inv->setContents($items);
|
]
|
||||||
$cfg->remove($pos->x . ";" . $pos->y . ";" . $pos->z);
|
*/
|
||||||
$cfg->save();
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case "enchant_randomly": {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "enchant_with_levels": {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "looting_enchant": {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
assert("Unknown looting table function $functionname, skipping");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$items[] = $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $items;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the plugins folder.
|
* TODO: Make Random::class actually useful here.
|
||||||
* @return string
|
* @param array $weightedValues
|
||||||
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function getPluginFolder(): string {
|
private function getRandomWeightedElement(array $weightedValues) {
|
||||||
$dir = explode(DIRECTORY_SEPARATOR, __DIR__);
|
$array = array();
|
||||||
$c = count($dir);
|
foreach ($weightedValues as $key => $weight) {
|
||||||
unset($dir[$c - 1], $dir[$c - 2], $dir[$c - 3], $dir[$c - 4], $dir[$c - 5]);
|
$array = array_merge(array_fill(0, $weight, $key), $array);
|
||||||
return str_ireplace("phar://", "", implode(DIRECTORY_SEPARATOR, $dir)) . DIRECTORY_SEPARATOR . "BetterGen" . DIRECTORY_SEPARATOR;
|
}
|
||||||
|
return $array[array_rand($array)];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the resources folder.
|
* Fixes the item names because #BlameMojang for not changing the id's from PC -> PE
|
||||||
* @return string
|
* @param $name
|
||||||
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function getResourcesFolder(): string {
|
private static function fixItemName($name) {
|
||||||
$dir = explode(DIRECTORY_SEPARATOR, __DIR__);
|
switch ($name) {
|
||||||
$c = count($dir);
|
case 'minecraft:horsearmoriron':
|
||||||
unset($dir[$c - 1], $dir[$c - 2], $dir[$c - 3], $dir[$c - 4]);
|
$name = 'minecraft:iron_horse_armor';
|
||||||
return str_ireplace("phar://", "", implode(DIRECTORY_SEPARATOR, $dir)) . DIRECTORY_SEPARATOR . "resources" . DIRECTORY_SEPARATOR;
|
break;
|
||||||
|
case 'minecraft:horsearmorgold':
|
||||||
|
$name = 'minecraft:gold_horse_armor';
|
||||||
|
break;
|
||||||
|
case 'minecraft:horsearmordiamond':
|
||||||
|
$name = 'minecraft:diamond_horse_armor';
|
||||||
|
break;
|
||||||
|
default: {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $name;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -21,27 +21,11 @@ abstract class AmountPopulator extends Populator {
|
||||||
protected $baseAmount = 0;
|
protected $baseAmount = 0;
|
||||||
protected $randomAmount = 0;
|
protected $randomAmount = 0;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Crosssoftware class for random amount
|
* Crosssoftware class for random amount
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Sets the random addition amount
|
|
||||||
* @param $amount int
|
|
||||||
*/
|
|
||||||
public function setRandomAmount(int $amount) {
|
|
||||||
$this->randomAmount = $amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the base addition amount
|
|
||||||
* @param $amount int
|
|
||||||
*/
|
|
||||||
public function setBaseAmount(int $amount) {
|
|
||||||
$this->baseAmount = $amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the amount based on random
|
* Returns the amount based on random
|
||||||
* @param $random Random
|
* @param $random Random
|
||||||
*/
|
*/
|
||||||
|
@ -49,7 +33,7 @@ abstract class AmountPopulator extends Populator {
|
||||||
return $this->baseAmount + $random->nextRange(0, $this->randomAmount + 1);
|
return $this->baseAmount + $random->nextRange(0, $this->randomAmount + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the base amount
|
* Returns the base amount
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
|
@ -57,11 +41,27 @@ abstract class AmountPopulator extends Populator {
|
||||||
return $this->baseAmount;
|
return $this->baseAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
|
* Sets the base addition amount
|
||||||
|
* @param $amount int
|
||||||
|
*/
|
||||||
|
public function setBaseAmount(int $amount) {
|
||||||
|
$this->baseAmount = $amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
* Returns the random additional amount
|
* Returns the random additional amount
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function getRandomAmount(): int {
|
public function getRandomAmount(): int {
|
||||||
return $this->randomAmount;
|
return $this->randomAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the random addition amount
|
||||||
|
* @param $amount int
|
||||||
|
*/
|
||||||
|
public function setRandomAmount(int $amount) {
|
||||||
|
$this->randomAmount = $amount;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -25,7 +25,7 @@ class BushPopulator extends AmountPopulator {
|
||||||
protected $level;
|
protected $level;
|
||||||
protected $type;
|
protected $type;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Constructs the class
|
* Constructs the class
|
||||||
* @param $type int
|
* @param $type int
|
||||||
*/
|
*/
|
||||||
|
@ -33,7 +33,7 @@ class BushPopulator extends AmountPopulator {
|
||||||
$this->type = $type;
|
$this->type = $type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -56,7 +56,7 @@ class BushPopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
|
|
@ -24,7 +24,8 @@ use pocketmine\utils\Random;
|
||||||
class CactusPopulator extends AmountPopulator {
|
class CactusPopulator extends AmountPopulator {
|
||||||
/** @var ChunkManager */
|
/** @var ChunkManager */
|
||||||
protected $level;
|
protected $level;
|
||||||
/*
|
|
||||||
|
/**
|
||||||
* Constructs the class
|
* Constructs the class
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
|
@ -32,7 +33,7 @@ class CactusPopulator extends AmountPopulator {
|
||||||
$this->setRandomAmount(2);
|
$this->setRandomAmount(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -53,7 +54,7 @@ class CactusPopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
|
|
@ -22,12 +22,12 @@ use pocketmine\math\Vector3;
|
||||||
use pocketmine\utils\Random;
|
use pocketmine\utils\Random;
|
||||||
|
|
||||||
class CavePopulator extends AmountPopulator {
|
class CavePopulator extends AmountPopulator {
|
||||||
/** @var ChunkManager */
|
|
||||||
protected $level;
|
|
||||||
const STOP = false;
|
const STOP = false;
|
||||||
const CONTINUE = true;
|
const CONTINUE = true;
|
||||||
|
/** @var ChunkManager */
|
||||||
|
protected $level;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -60,7 +60,7 @@ class CavePopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
@ -78,7 +78,7 @@ class CavePopulator extends AmountPopulator {
|
||||||
return ++$y;
|
return ++$y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Generates a cave
|
* Generates a cave
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $y int
|
* @param $y int
|
||||||
|
@ -97,7 +97,8 @@ class CavePopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
|
/**
|
||||||
* Generates a cave branch.
|
* Generates a cave branch.
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $y int
|
* @param $y int
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
|
|
||||||
namespace Ad5001\BetterGen\populator;
|
namespace Ad5001\BetterGen\populator;
|
||||||
|
|
||||||
use Ad5001\BetterGen\generator\BetterBiomeSelector;
|
|
||||||
use pocketmine\block\Block;
|
use pocketmine\block\Block;
|
||||||
use pocketmine\level\ChunkManager;
|
use pocketmine\level\ChunkManager;
|
||||||
use pocketmine\level\generator\biome\Biome;
|
use pocketmine\level\generator\biome\Biome;
|
||||||
|
@ -25,7 +24,7 @@ class DeadbushPopulator extends AmountPopulator {
|
||||||
/** @var ChunkManager */
|
/** @var ChunkManager */
|
||||||
protected $level;
|
protected $level;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
|
|
@ -25,7 +25,8 @@ class FallenTreePopulator extends AmountPopulator {
|
||||||
/** @var ChunkManager */
|
/** @var ChunkManager */
|
||||||
protected $level;
|
protected $level;
|
||||||
protected $type;
|
protected $type;
|
||||||
/*
|
|
||||||
|
/**
|
||||||
* Constructs the class
|
* Constructs the class
|
||||||
* @param $type int
|
* @param $type int
|
||||||
*/
|
*/
|
||||||
|
@ -35,7 +36,7 @@ class FallenTreePopulator extends AmountPopulator {
|
||||||
$this->setRandomAmount(2);
|
$this->setRandomAmount(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
|
|
@ -33,7 +33,7 @@ use pocketmine\utils\Random;
|
||||||
|
|
||||||
class FloatingIslandPopulator extends AmountPopulator {
|
class FloatingIslandPopulator extends AmountPopulator {
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -62,8 +62,7 @@ class FloatingIslandPopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
/*
|
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
@ -82,8 +81,7 @@ class FloatingIslandPopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
/*
|
|
||||||
* Builds a an island shape
|
* Builds a an island shape
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $pos pocketmine\math\Vector3
|
* @param $pos pocketmine\math\Vector3
|
||||||
|
@ -132,9 +130,7 @@ class FloatingIslandPopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
/*
|
|
||||||
* BPopulate the island with ores
|
* BPopulate the island with ores
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $pos pocketmine\math\Vector3
|
* @param $pos pocketmine\math\Vector3
|
||||||
|
|
|
@ -24,7 +24,7 @@ class IglooPopulator extends AmountPopulator {
|
||||||
/** @var ChunkManager */
|
/** @var ChunkManager */
|
||||||
protected $level;
|
protected $level;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -43,7 +43,7 @@ class IglooPopulator extends AmountPopulator {
|
||||||
$igloo->placeObject($level, $x, $y, $z, $random);
|
$igloo->placeObject($level, $x, $y, $z, $random);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
|
|
@ -25,7 +25,7 @@ class LakePopulator extends AmountPopulator {
|
||||||
/** @var ChunkManager */
|
/** @var ChunkManager */
|
||||||
protected $level;
|
protected $level;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -52,7 +52,7 @@ class LakePopulator extends AmountPopulator {
|
||||||
$level->setBlockIdAt($xx, $yy, $zz, Block::AIR);
|
$level->setBlockIdAt($xx, $yy, $zz, Block::AIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
|
|
@ -22,9 +22,6 @@ use pocketmine\math\Vector3;
|
||||||
use pocketmine\utils\Random;
|
use pocketmine\utils\Random;
|
||||||
|
|
||||||
class MineshaftPopulator extends AmountPopulator {
|
class MineshaftPopulator extends AmountPopulator {
|
||||||
protected $maxPath;
|
|
||||||
/** @var ChunkManager */
|
|
||||||
protected $level;
|
|
||||||
const DIR_XPLUS = 0;
|
const DIR_XPLUS = 0;
|
||||||
const DIR_XMIN = 1;
|
const DIR_XMIN = 1;
|
||||||
const DIR_ZPLUS = 2;
|
const DIR_ZPLUS = 2;
|
||||||
|
@ -32,8 +29,11 @@ class MineshaftPopulator extends AmountPopulator {
|
||||||
const TYPE_FORWARD = 0;
|
const TYPE_FORWARD = 0;
|
||||||
const TYPE_CROSSPATH = 1;
|
const TYPE_CROSSPATH = 1;
|
||||||
const TYPE_STAIRS = 2;
|
const TYPE_STAIRS = 2;
|
||||||
|
protected $maxPath;
|
||||||
|
/** @var ChunkManager */
|
||||||
|
protected $level;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -420,4 +420,5 @@ class MineshaftPopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -21,11 +21,11 @@ use pocketmine\level\Level;
|
||||||
use pocketmine\utils\Random;
|
use pocketmine\utils\Random;
|
||||||
|
|
||||||
class RavinePopulator extends AmountPopulator {
|
class RavinePopulator extends AmountPopulator {
|
||||||
|
const NOISE = 250;
|
||||||
/** @var ChunkManager */
|
/** @var ChunkManager */
|
||||||
protected $level;
|
protected $level;
|
||||||
const NOISE = 250;
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -69,7 +69,7 @@ class RavinePopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
@ -87,7 +87,7 @@ class RavinePopulator extends AmountPopulator {
|
||||||
return ++$y;
|
return ++$y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Builds a ravine part
|
* Builds a ravine part
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $y int
|
* @param $y int
|
||||||
|
|
|
@ -23,7 +23,8 @@ use pocketmine\utils\Random;
|
||||||
class SugarCanePopulator extends AmountPopulator {
|
class SugarCanePopulator extends AmountPopulator {
|
||||||
/** @var ChunkManager */
|
/** @var ChunkManager */
|
||||||
protected $level;
|
protected $level;
|
||||||
/*
|
|
||||||
|
/**
|
||||||
* Constructs the class
|
* Constructs the class
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
|
@ -31,7 +32,7 @@ class SugarCanePopulator extends AmountPopulator {
|
||||||
$this->setRandomAmount(2);
|
$this->setRandomAmount(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -52,7 +53,7 @@ class SugarCanePopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
|
|
@ -24,7 +24,7 @@ class TemplePopulator extends AmountPopulator {
|
||||||
/** @var Level */
|
/** @var Level */
|
||||||
protected $level;
|
protected $level;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -43,7 +43,7 @@ class TemplePopulator extends AmountPopulator {
|
||||||
$temple->placeObject($level, $x, $y - 1, $z, $random);
|
$temple->placeObject($level, $x, $y - 1, $z, $random);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
|
|
@ -33,7 +33,7 @@ class TreePopulator extends AmountPopulator {
|
||||||
protected $level;
|
protected $level;
|
||||||
protected $type;
|
protected $type;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Constructs the class
|
* Constructs the class
|
||||||
*/
|
*/
|
||||||
public function __construct($type = 0) {
|
public function __construct($type = 0) {
|
||||||
|
@ -47,7 +47,7 @@ class TreePopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -71,7 +71,7 @@ class TreePopulator extends AmountPopulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
|
|
@ -24,7 +24,7 @@ class WellPopulator extends AmountPopulator {
|
||||||
/** @var ChunkManager */
|
/** @var ChunkManager */
|
||||||
protected $level;
|
protected $level;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Populate the chunk
|
* Populate the chunk
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $chunkX int
|
* @param $chunkX int
|
||||||
|
@ -43,7 +43,7 @@ class WellPopulator extends AmountPopulator {
|
||||||
$well->placeObject($level, $x, $y, $z, $random);
|
$well->placeObject($level, $x, $y, $z, $random);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Gets the top block (y) on an x and z axes
|
* Gets the top block (y) on an x and z axes
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $z int
|
* @param $z int
|
||||||
|
|
|
@ -30,7 +30,7 @@ class Bush extends Object {
|
||||||
protected $leaf;
|
protected $leaf;
|
||||||
protected $height;
|
protected $height;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Constructs the class
|
* Constructs the class
|
||||||
* @param $leafId int
|
* @param $leafId int
|
||||||
* @param $leafData int
|
* @param $leafData int
|
||||||
|
@ -42,7 +42,7 @@ class Bush extends Object {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a bush
|
* Places a bush
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
@ -64,7 +64,7 @@ class Bush extends Object {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a leaf
|
* Places a leaf
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $y int
|
* @param $y int
|
||||||
|
|
|
@ -21,7 +21,7 @@ use pocketmine\utils\Random;
|
||||||
|
|
||||||
class Cactus extends Object {
|
class Cactus extends Object {
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Checks if a cactus is placeable
|
* Checks if a cactus is placeable
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
@ -42,7 +42,7 @@ class Cactus extends Object {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a cactus
|
* Places a cactus
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
|
|
@ -41,7 +41,7 @@ class FallenTree extends Object {
|
||||||
protected $random;
|
protected $random;
|
||||||
private $length = 0;
|
private $length = 0;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Constructs the class
|
* Constructs the class
|
||||||
* @param $tree ObjectTree
|
* @param $tree ObjectTree
|
||||||
* @throws Exeption
|
* @throws Exeption
|
||||||
|
@ -50,7 +50,7 @@ class FallenTree extends Object {
|
||||||
$this->tree = $tree;
|
$this->tree = $tree;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a fallen tree
|
* Places a fallen tree
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
@ -103,7 +103,7 @@ class FallenTree extends Object {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a fallen tree
|
* Places a fallen tree
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
@ -147,7 +147,7 @@ class FallenTree extends Object {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a Block
|
* Places a Block
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $y int
|
* @param $y int
|
||||||
|
|
|
@ -33,57 +33,13 @@ class Igloo extends Object {
|
||||||
];
|
];
|
||||||
protected $direction;
|
protected $direction;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Checks if an igloo is placeable
|
|
||||||
* @param $level pocketmine\level\ChunkManager
|
|
||||||
* @param $x int
|
|
||||||
* @param $y int
|
|
||||||
* @param $z int
|
|
||||||
* @param $random pocketmine\utils\Random
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function canPlaceObject(ChunkManager $level, $x, $y, $z, Random $random) {
|
|
||||||
$this->direction = $random->nextBoundedInt(4);
|
|
||||||
switch ($this->direction) {
|
|
||||||
case 0 : // Entrance is x+
|
|
||||||
for($xx = $x - 3; $xx <= $x + 4; $xx ++)
|
|
||||||
for($yy = $y + 1; $yy <= $y + 4; $yy ++)
|
|
||||||
for($zz = $z - 3; $zz <= $z + 3; $zz ++)
|
|
||||||
if (! isset($this->overridable[$level->getBlockIdAt($xx, $yy, $zz)]))
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
case 1 : // Entrance is x-
|
|
||||||
for($xx = $x - 4; $xx <= $x + 3; $xx ++)
|
|
||||||
for($yy = $y + 1; $yy <= $y + 4; $yy ++)
|
|
||||||
for($zz = $z - 3; $zz <= $z + 3; $zz ++)
|
|
||||||
if (! isset($this->overridable[$level->getBlockIdAt($xx, $yy, $zz)]))
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
case 2 : // Entrance is z+
|
|
||||||
for($xx = $x - 3; $xx <= $x + 3; $xx ++)
|
|
||||||
for($yy = $y + 1; $yy <= $y + 4; $yy ++)
|
|
||||||
for($zz = $z - 3; $zz <= $z + 4; $zz ++)
|
|
||||||
if (! isset($this->overridable[$level->getBlockIdAt($xx, $yy, $zz)]))
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
case 3 : // Entrance is z-
|
|
||||||
for($xx = $x - 3; $xx <= $x + 3; $xx ++)
|
|
||||||
for($yy = $y + 1; $yy <= $y + 4; $yy ++)
|
|
||||||
for($zz = $z - 4; $zz <= $z + 3; $zz ++)
|
|
||||||
if (! isset($this->overridable[$level->getBlockIdAt($xx, $yy, $zz)]))
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Places an igloo
|
* Places an igloo
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param ChunkManager $level
|
||||||
* @param $x int
|
* @param $x
|
||||||
* @param $y int
|
* @param $y
|
||||||
* @param $z int
|
* @param $z
|
||||||
* @param $random pocketmine\utils\Random
|
* @param Random $random
|
||||||
* @return bool placed
|
* @return bool placed
|
||||||
*/
|
*/
|
||||||
public function placeObject(ChunkManager $level, $x, $y, $z, Random $random) {
|
public function placeObject(ChunkManager $level, $x, $y, $z, Random $random) {
|
||||||
|
@ -388,4 +344,48 @@ class Igloo extends Object {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if an igloo is placeable
|
||||||
|
* @param ChunkManager $level
|
||||||
|
* @param $x
|
||||||
|
* @param $y
|
||||||
|
* @param $z
|
||||||
|
* @param Random $random
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function canPlaceObject(ChunkManager $level, $x, $y, $z, Random $random) {
|
||||||
|
$this->direction = $random->nextBoundedInt(4);
|
||||||
|
switch ($this->direction) {
|
||||||
|
case 0 : // Entrance is x+
|
||||||
|
for ($xx = $x - 3; $xx <= $x + 4; $xx++)
|
||||||
|
for ($yy = $y + 1; $yy <= $y + 4; $yy++)
|
||||||
|
for ($zz = $z - 3; $zz <= $z + 3; $zz++)
|
||||||
|
if (!isset($this->overridable[$level->getBlockIdAt($xx, $yy, $zz)]))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case 1 : // Entrance is x-
|
||||||
|
for ($xx = $x - 4; $xx <= $x + 3; $xx++)
|
||||||
|
for ($yy = $y + 1; $yy <= $y + 4; $yy++)
|
||||||
|
for ($zz = $z - 3; $zz <= $z + 3; $zz++)
|
||||||
|
if (!isset($this->overridable[$level->getBlockIdAt($xx, $yy, $zz)]))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case 2 : // Entrance is z+
|
||||||
|
for ($xx = $x - 3; $xx <= $x + 3; $xx++)
|
||||||
|
for ($yy = $y + 1; $yy <= $y + 4; $yy++)
|
||||||
|
for ($zz = $z - 3; $zz <= $z + 4; $zz++)
|
||||||
|
if (!isset($this->overridable[$level->getBlockIdAt($xx, $yy, $zz)]))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case 3 : // Entrance is z-
|
||||||
|
for ($xx = $x - 3; $xx <= $x + 3; $xx++)
|
||||||
|
for ($yy = $y + 1; $yy <= $y + 4; $yy++)
|
||||||
|
for ($zz = $z - 4; $zz <= $z + 3; $zz++)
|
||||||
|
if (!isset($this->overridable[$level->getBlockIdAt($xx, $yy, $zz)]))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -445,7 +445,7 @@ class SakuraTree extends Tree {
|
||||||
public $leafType;
|
public $leafType;
|
||||||
public $leaf2Type;
|
public $leaf2Type;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Constructs the class
|
* Constructs the class
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
|
@ -457,7 +457,7 @@ class SakuraTree extends Tree {
|
||||||
$this->type = Wood::OAK;
|
$this->type = Wood::OAK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Builds the tree.
|
* Builds the tree.
|
||||||
* @param $level \pocketmine\level\ChunkManager
|
* @param $level \pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
@ -656,7 +656,7 @@ class SakuraTree extends Tree {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Fills a log at.
|
* Fills a log at.
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
@ -668,7 +668,7 @@ class SakuraTree extends Tree {
|
||||||
$level->setBlockDataAt($x, $y, $z, $this->type);
|
$level->setBlockDataAt($x, $y, $z, $this->type);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Fills a leave at.
|
* Fills a leave at.
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
|
|
@ -22,7 +22,7 @@ use pocketmine\utils\Random;
|
||||||
|
|
||||||
class SugarCane extends Object {
|
class SugarCane extends Object {
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Checks if a cactus is placeable
|
* Checks if a cactus is placeable
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
@ -41,7 +41,7 @@ class SugarCane extends Object {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a cactus
|
* Places a cactus
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
|
|
@ -14,10 +14,12 @@
|
||||||
|
|
||||||
namespace Ad5001\BetterGen\structure;
|
namespace Ad5001\BetterGen\structure;
|
||||||
|
|
||||||
|
use Ad5001\BetterGen\Main;
|
||||||
use Ad5001\BetterGen\utils\BuildingUtils;
|
use Ad5001\BetterGen\utils\BuildingUtils;
|
||||||
use pocketmine\block\Block;
|
use pocketmine\block\Block;
|
||||||
use pocketmine\level\ChunkManager;
|
use pocketmine\level\ChunkManager;
|
||||||
use pocketmine\level\generator\object\Object;
|
use pocketmine\level\generator\object\Object;
|
||||||
|
use pocketmine\level\Position;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
use pocketmine\utils\Random;
|
use pocketmine\utils\Random;
|
||||||
|
|
||||||
|
@ -111,16 +113,15 @@ class Temple extends Object {
|
||||||
private $level;
|
private $level;
|
||||||
private $direction = 0;
|
private $direction = 0;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Checks if a temple is placeable
|
* Checks if a temple is placeable
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param ChunkManager $level
|
||||||
* @param $x int
|
* @param $x
|
||||||
* @param $y int
|
* @param $y
|
||||||
* @param $z int
|
* @param $z
|
||||||
* @param $random pocketmine\utils\Random
|
* @param Random $random
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function canPlaceObject(ChunkManager $level, $x, $y, $z, Random $random) {
|
public function canPlaceObject(ChunkManager $level, $x, $y, $z, Random $random) {
|
||||||
$this->level = $level;
|
$this->level = $level;
|
||||||
$this->direction = $random->nextBoundedInt(4);
|
$this->direction = $random->nextBoundedInt(4);
|
||||||
|
@ -132,13 +133,13 @@ class Temple extends Object {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a temple
|
* Places a temple
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param ChunkManager $level
|
||||||
* @param $x int
|
* @param $x
|
||||||
* @param $y int
|
* @param $y
|
||||||
* @param $z int
|
* @param $z
|
||||||
* @param $random pocketmine\utils\Random
|
* @param Random $random
|
||||||
*/
|
*/
|
||||||
public function placeObject(ChunkManager $level, $x, $y, $z, Random $random) {
|
public function placeObject(ChunkManager $level, $x, $y, $z, Random $random) {
|
||||||
// Clearing space...
|
// Clearing space...
|
||||||
|
@ -216,20 +217,19 @@ class Temple extends Object {
|
||||||
$this->placeBlock($xx, $y - 13, $zz, Block::TNT);
|
$this->placeBlock($xx, $y - 13, $zz, Block::TNT);
|
||||||
$this->placeBlock($x, $y - 11, $z, Block::STONE_PRESSURE_PLATE);
|
$this->placeBlock($x, $y - 11, $z, Block::STONE_PRESSURE_PLATE);
|
||||||
|
|
||||||
//TODO TILES
|
|
||||||
$this->placeBlock($x, $y - 11, $z + 2, Block::CHEST, 4);
|
|
||||||
$this->placeBlock($x, $y - 11, $z - 2, Block::CHEST, 2);
|
|
||||||
$this->placeBlock($x + 2, $y - 11, $z, Block::CHEST, 5);
|
|
||||||
$this->placeBlock($x - 2, $y - 11, $z, Block::CHEST, 3);
|
|
||||||
$this->placeBlock($x, $y - 10, $z + 2, Block::AIR);
|
$this->placeBlock($x, $y - 10, $z + 2, Block::AIR);
|
||||||
$this->placeBlock($x, $y - 10, $z - 2, Block::AIR);
|
$this->placeBlock($x, $y - 10, $z - 2, Block::AIR);
|
||||||
$this->placeBlock($x + 2, $y - 10, $z, Block::AIR);
|
$this->placeBlock($x + 2, $y - 10, $z, Block::AIR);
|
||||||
$this->placeBlock($x - 2, $y - 10, $z, Block::AIR);
|
$this->placeBlock($x - 2, $y - 10, $z, Block::AIR);
|
||||||
// Chests
|
// Chests
|
||||||
/*LootTable::buildLootTable(new Vector3($x, $y - 11, $z + 2), LootTable::LOOT_DESERT_TEMPLE, $random);//TODO: Improve using addon
|
#$this->placeBlock($x, $y - 11, $z + 2, Block::CHEST, 4);
|
||||||
LootTable::buildLootTable(new Vector3($x, $y - 11, $z - 2), LootTable::LOOT_DESERT_TEMPLE, $random);
|
#$this->placeBlock($x, $y - 11, $z - 2, Block::CHEST, 2);
|
||||||
LootTable::buildLootTable(new Vector3($x + 2, $y - 11, $z), LootTable::LOOT_DESERT_TEMPLE, $random);
|
#$this->placeBlock($x + 2, $y - 11, $z, Block::CHEST, 5);
|
||||||
LootTable::buildLootTable(new Vector3($x - 2, $y - 11, $z), LootTable::LOOT_DESERT_TEMPLE, $random);*/
|
#$this->placeBlock($x - 2, $y - 11, $z, Block::CHEST, 3);
|
||||||
|
Main::placeLootChest(Block::get(Block::CHEST, 2, new Position($x, $y - 11, $z + 2, $this->level)), 'loot_tables\\chests\\desert_pyramid');
|
||||||
|
Main::placeLootChest(Block::get(Block::CHEST, 3, new Position($x, $y - 11, $z - 2, $this->level)), 'loot_tables\\chests\\desert_pyramid');
|
||||||
|
Main::placeLootChest(Block::get(Block::CHEST, 4, new Position($x + 2, $y - 11, $z, $this->level)), 'loot_tables\\chests\\desert_pyramid');
|
||||||
|
Main::placeLootChest(Block::get(Block::CHEST, 5, new Position($x - 2, $y - 11, $z, $this->level)), 'loot_tables\\chests\\desert_pyramid');
|
||||||
|
|
||||||
// Entrance is a rectangular parallelepiped
|
// Entrance is a rectangular parallelepiped
|
||||||
switch ($this->direction) {
|
switch ($this->direction) {
|
||||||
|
@ -896,6 +896,7 @@ class Temple extends Object {
|
||||||
* @param $z int
|
* @param $z int
|
||||||
* @param $id int
|
* @param $id int
|
||||||
* @param $meta int
|
* @param $meta int
|
||||||
|
* @param bool $top
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function placeSlab($x, $y, $z, $id = 44, $meta = 1, $top = false) {
|
protected function placeSlab($x, $y, $z, $id = 44, $meta = 1, $top = false) {
|
||||||
|
|
|
@ -22,8 +22,6 @@ use pocketmine\utils\Random;
|
||||||
|
|
||||||
|
|
||||||
class Well extends Object {
|
class Well extends Object {
|
||||||
/** @var ChunkManager */
|
|
||||||
protected $level;
|
|
||||||
public $overridable = [
|
public $overridable = [
|
||||||
Block::AIR => true,
|
Block::AIR => true,
|
||||||
6 => true,
|
6 => true,
|
||||||
|
@ -36,6 +34,8 @@ class Well extends Object {
|
||||||
Block::LEAVES2 => true,
|
Block::LEAVES2 => true,
|
||||||
Block::CACTUS => true
|
Block::CACTUS => true
|
||||||
];
|
];
|
||||||
|
/** @var ChunkManager */
|
||||||
|
protected $level;
|
||||||
protected $directions = [
|
protected $directions = [
|
||||||
[
|
[
|
||||||
1,
|
1,
|
||||||
|
@ -55,7 +55,7 @@ class Well extends Object {
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Checks if a well is placeable
|
* Checks if a well is placeable
|
||||||
* @param $level ChunkManager
|
* @param $level ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
@ -74,7 +74,7 @@ class Well extends Object {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a well
|
* Places a well
|
||||||
* @param $level ChunkManager
|
* @param $level ChunkManager
|
||||||
* @param $x int
|
* @param $x int
|
||||||
|
@ -111,7 +111,7 @@ class Well extends Object {
|
||||||
$this->placeBlock($x, $y, $z, Block::WATER);
|
$this->placeBlock($x, $y, $z, Block::WATER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Places a slab
|
* Places a slab
|
||||||
* @param $x int
|
* @param $x int
|
||||||
* @param $y int
|
* @param $y int
|
||||||
|
|
|
@ -30,7 +30,7 @@ class BuildingUtils {
|
||||||
Block::PLANK
|
Block::PLANK
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Fills an area
|
* Fills an area
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $pos1 pocketmine\math\Vector3
|
* @param $pos1 pocketmine\math\Vector3
|
||||||
|
@ -47,8 +47,22 @@ class BuildingUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns 2 vector3, one with minimal values, one with max values of the provided ones.
|
||||||
|
* @param $pos1 pocketmine\math\Vector3
|
||||||
|
* @param $pos2 pocketmine\math\Vector3
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected static function minmax(Vector3 $pos1, Vector3 $pos2): array {
|
||||||
|
$v1 = new Vector3(max($pos1->x, $pos2->x), max($pos1->y, $pos2->y), max($pos1->z, $pos2->z));
|
||||||
|
$v2 = new Vector3(min($pos1->x, $pos2->x), min($pos1->y, $pos2->y), min($pos1->z, $pos2->z));
|
||||||
|
return [
|
||||||
|
$v1,
|
||||||
|
$v2
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Fills an area randomly
|
* Fills an area randomly
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $pos1 pocketmine\math\Vector3
|
* @param $pos1 pocketmine\math\Vector3
|
||||||
|
@ -67,7 +81,7 @@ class BuildingUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Fills an area by custom filling
|
* Fills an area by custom filling
|
||||||
* @param $pos1 pocketmine\math\Vector3
|
* @param $pos1 pocketmine\math\Vector3
|
||||||
* @param $pos2 pocketmine\math\Vector3
|
* @param $pos2 pocketmine\math\Vector3
|
||||||
|
@ -84,7 +98,7 @@ class BuildingUtils {
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Creates walls
|
* Creates walls
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $pos1 pocketmine\math\Vector3
|
* @param $pos1 pocketmine\math\Vector3
|
||||||
|
@ -110,7 +124,7 @@ class BuildingUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Creates the top of a structure
|
* Creates the top of a structure
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $pos1 pocketmine\math\Vector3
|
* @param $pos1 pocketmine\math\Vector3
|
||||||
|
@ -127,7 +141,7 @@ class BuildingUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Creates all corners from positions. Used for Mineshaft.
|
* Creates all corners from positions. Used for Mineshaft.
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $pos1 pocketmine\math\Vector3
|
* @param $pos1 pocketmine\math\Vector3
|
||||||
|
@ -149,7 +163,7 @@ class BuildingUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Creates the bottom of a structure
|
* Creates the bottom of a structure
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $pos1 pocketmine\math\Vector3
|
* @param $pos1 pocketmine\math\Vector3
|
||||||
|
@ -166,7 +180,7 @@ class BuildingUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Builds a random structure depending of length, height, depth and random
|
* Builds a random structure depending of length, height, depth and random
|
||||||
* @param $level pocketmine\level\ChunkManager
|
* @param $level pocketmine\level\ChunkManager
|
||||||
* @param $pos pocketmine\math\Vector3
|
* @param $pos pocketmine\math\Vector3
|
||||||
|
@ -192,19 +206,4 @@ class BuildingUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns 2 vector3, one with minimal values, one with max values of the provided ones.
|
|
||||||
* @param $pos1 pocketmine\math\Vector3
|
|
||||||
* @param $pos2 pocketmine\math\Vector3
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
protected static function minmax(Vector3 $pos1, Vector3 $pos2): array {
|
|
||||||
$v1 = new Vector3(max($pos1->x, $pos2->x), max($pos1->y, $pos2->y), max($pos1->z, $pos2->z));
|
|
||||||
$v2 = new Vector3(min($pos1->x, $pos2->x), min($pos1->y, $pos2->y), min($pos1->z, $pos2->z));
|
|
||||||
return [
|
|
||||||
$v1,
|
|
||||||
$v2
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue