mirror of
				https://github.com/pmmp/PocketMine-MP.git
				synced 2025-10-31 17:58:35 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
|  *
 | |
|  *  ____            _        _   __  __ _                  __  __ ____
 | |
|  * |  _ \ ___   ___| | _____| |_|  \/  (_)_ __   ___      |  \/  |  _ \
 | |
|  * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
 | |
|  * |  __/ (_) | (__|   <  __/ |_| |  | | | | | |  __/_____| |  | |  __/
 | |
|  * |_|   \___/ \___|_|\_\___|\__|_|  |_|_|_| |_|\___|     |_|  |_|_|
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Lesser General Public License as published by
 | |
|  * the Free Software Foundation, either version 3 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * @author PocketMine Team
 | |
|  * @link http://www.pocketmine.net/
 | |
|  *
 | |
|  *
 | |
|  */
 | |
| 
 | |
| declare(strict_types=1);
 | |
| 
 | |
| namespace pocketmine\build\generate_biome_ids;
 | |
| 
 | |
| use pocketmine\data\bedrock\BedrockDataFiles;
 | |
| use pocketmine\utils\Filesystem;
 | |
| use pocketmine\utils\Utils;
 | |
| use function asort;
 | |
| use function dirname;
 | |
| use function fclose;
 | |
| use function fopen;
 | |
| use function fwrite;
 | |
| use function is_array;
 | |
| use function is_int;
 | |
| use function is_string;
 | |
| use function json_decode;
 | |
| use function str_replace;
 | |
| use function strtoupper;
 | |
| use const SORT_NUMERIC;
 | |
| 
 | |
| require dirname(__DIR__) . '/vendor/autoload.php';
 | |
| 
 | |
| const HEADER = <<<'HEADER'
 | |
| <?php
 | |
| 
 | |
| /*
 | |
|  *
 | |
|  *  ____            _        _   __  __ _                  __  __ ____
 | |
|  * |  _ \ ___   ___| | _____| |_|  \/  (_)_ __   ___      |  \/  |  _ \
 | |
|  * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
 | |
|  * |  __/ (_) | (__|   <  __/ |_| |  | | | | | |  __/_____| |  | |  __/
 | |
|  * |_|   \___/ \___|_|\_\___|\__|_|  |_|_|_| |_|\___|     |_|  |_|_|
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Lesser General Public License as published by
 | |
|  * the Free Software Foundation, either version 3 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * @author PocketMine Team
 | |
|  * @link http://www.pocketmine.net/
 | |
|  *
 | |
|  *
 | |
|  */
 | |
| 
 | |
| declare(strict_types=1);
 | |
| 
 | |
| 
 | |
| HEADER;
 | |
| 
 | |
| /** @return resource */
 | |
| function safe_fopen(string $file, string $flags){
 | |
| 	$result = fopen($file, $flags);
 | |
| 	if($result === false){
 | |
| 		throw new \RuntimeException("Failed to open file");
 | |
| 	}
 | |
| 	return $result;
 | |
| }
 | |
| 
 | |
| function make_const_name(string $name) : string{
 | |
| 	return strtoupper(str_replace(['.', 'minecraft:'], ['_', ''], $name));
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * @param int[] $map
 | |
|  * @phpstan-param array<string, int> $map
 | |
|  */
 | |
| function generate(array $map, string $outputFile) : void{
 | |
| 	$file = safe_fopen($outputFile, 'wb');
 | |
| 	fwrite($file, HEADER);
 | |
| 	fwrite($file, <<<'CLASSHEADER'
 | |
| namespace pocketmine\data\bedrock;
 | |
| 
 | |
| final class BiomeIds{
 | |
| 
 | |
| 	private function __construct(){
 | |
| 		//NOOP
 | |
| 	}
 | |
| 
 | |
| 
 | |
| CLASSHEADER
 | |
| );
 | |
| 	$list = $map;
 | |
| 	asort($list, SORT_NUMERIC);
 | |
| 	$lastId = -1;
 | |
| 	foreach(Utils::stringifyKeys($list) as $name => $id){
 | |
| 		if($name === ""){
 | |
| 			continue;
 | |
| 		}
 | |
| 		if($id !== $lastId + 1){
 | |
| 			fwrite($file, "\n");
 | |
| 		}
 | |
| 		$lastId = $id;
 | |
| 		fwrite($file, "\tpublic const " . make_const_name($name) . ' = ' . $id . ';' . "\n");
 | |
| 	}
 | |
| 	fwrite($file, "}\n");
 | |
| 	fclose($file);
 | |
| }
 | |
| 
 | |
| $ids = json_decode(Filesystem::fileGetContents(BedrockDataFiles::BIOME_ID_MAP_JSON), true);
 | |
| if(!is_array($ids)){
 | |
| 	throw new \RuntimeException("Invalid biome ID map, expected array for root JSON object");
 | |
| }
 | |
| $cleanedIds = [];
 | |
| foreach(Utils::promoteKeys($ids) as $name => $id){
 | |
| 	if(!is_string($name) || !is_int($id)){
 | |
| 		throw new \RuntimeException("Invalid biome ID map, expected string => int map");
 | |
| 	}
 | |
| 	$cleanedIds[$name] = $id;
 | |
| }
 | |
| generate($cleanedIds, dirname(__DIR__) . '/src/data/bedrock/BiomeIds.php');
 | |
| 
 | |
| echo "Done. Don't forget to run CS fixup after generating code.\n";
 |