13declare(strict_types=1);
15namespace pocketmine\network\mcpe\protocol\tools\generate_entity_ids;
17use
function array_flip;
21use
function file_get_contents;
25use
function json_decode;
27use
function str_replace;
28use
function strtoupper;
30if(count($argv) !== 2){
31 fwrite(STDERR,
"Required arguments: path to level sound event ID mapping file\n");
32 fwrite(STDERR,
"Hint: Input file is a JSON file like level_sound_id_map.json in pmmp/BedrockData\n");
36$jsonRaw = file_get_contents($argv[1]);
37if($jsonRaw ===
false){
38 fwrite(STDERR,
"Failed to read level sound event ID mapping file\n");
42$list = json_decode($jsonRaw,
true, flags: JSON_THROW_ON_ERROR);
44 fwrite(STDERR,
"Failed to decode level sound event ID mapping file, expected a JSON object\n");
47$list = array_flip($list);
51 151 =>
"imitate.endermite",
52 195 =>
"lt.reaction.glow_stick",
53 196 =>
"lt.reaction.glow_stick_2",
54 197 =>
"lt.reaction.luminol",
55 198 =>
"lt.reaction.salt",
59foreach(MISSING as $id => $name){
60 if(!isset($list[$id])){
62 }elseif($list[$id] !== $name){
63 echo
"WARNING: Mismatch of expected name for ID $id: expected $name, got {$list[$id]}\n";
66ksort($list, SORT_NUMERIC);
68$output = fopen(dirname(__DIR__) .
"/src/types/LevelSoundEvent.php",
"wb");
70 throw new \RuntimeException(
"Failed to open output file");
73fwrite($output, <<<
'CODE'
86declare(strict_types=1);
88namespace pocketmine\network\mcpe\protocol\types;
94final class LevelSoundEvent{
95 private function __construct(){
102foreach($list as $id => $name){
103 $constantName = strtoupper(str_replace(
".",
"_", $name));
104 if($id !== $prev + 1){
105 fwrite($output,
"\n");
108 fwrite($output,
"\tpublic const $constantName = $id;\n");
110fwrite($output,
"\n");
112fwrite($output,
"}\n");
115echo
"Successfully regenerated LevelSoundEvent enum" . PHP_EOL;