Support for non-linear protocol IDs in codegen

This commit is contained in:
jglrxavpok 2020-07-13 17:57:28 +02:00
parent 1b4f55bb9f
commit 7b53ec0999
3 changed files with 126 additions and 93 deletions

View File

@ -7,95 +7,97 @@ import net.minestom.server.utils.NamespaceID;
@SuppressWarnings({"deprecation"})
public enum Biome {
OCEAN("minecraft:ocean"),
PLAINS("minecraft:plains"),
DESERT("minecraft:desert"),
MOUNTAINS("minecraft:mountains"),
FOREST("minecraft:forest"),
TAIGA("minecraft:taiga"),
SWAMP("minecraft:swamp"),
RIVER("minecraft:river"),
NETHER_WASTES("minecraft:nether_wastes"),
THE_END("minecraft:the_end"),
FROZEN_OCEAN("minecraft:frozen_ocean"),
FROZEN_RIVER("minecraft:frozen_river"),
SNOWY_TUNDRA("minecraft:snowy_tundra"),
SNOWY_MOUNTAINS("minecraft:snowy_mountains"),
MUSHROOM_FIELDS("minecraft:mushroom_fields"),
MUSHROOM_FIELD_SHORE("minecraft:mushroom_field_shore"),
BEACH("minecraft:beach"),
DESERT_HILLS("minecraft:desert_hills"),
WOODED_HILLS("minecraft:wooded_hills"),
TAIGA_HILLS("minecraft:taiga_hills"),
MOUNTAIN_EDGE("minecraft:mountain_edge"),
JUNGLE("minecraft:jungle"),
JUNGLE_HILLS("minecraft:jungle_hills"),
JUNGLE_EDGE("minecraft:jungle_edge"),
DEEP_OCEAN("minecraft:deep_ocean"),
STONE_SHORE("minecraft:stone_shore"),
SNOWY_BEACH("minecraft:snowy_beach"),
BIRCH_FOREST("minecraft:birch_forest"),
BIRCH_FOREST_HILLS("minecraft:birch_forest_hills"),
DARK_FOREST("minecraft:dark_forest"),
SNOWY_TAIGA("minecraft:snowy_taiga"),
SNOWY_TAIGA_HILLS("minecraft:snowy_taiga_hills"),
GIANT_TREE_TAIGA("minecraft:giant_tree_taiga"),
GIANT_TREE_TAIGA_HILLS("minecraft:giant_tree_taiga_hills"),
WOODED_MOUNTAINS("minecraft:wooded_mountains"),
SAVANNA("minecraft:savanna"),
SAVANNA_PLATEAU("minecraft:savanna_plateau"),
BADLANDS("minecraft:badlands"),
WOODED_BADLANDS_PLATEAU("minecraft:wooded_badlands_plateau"),
BADLANDS_PLATEAU("minecraft:badlands_plateau"),
SMALL_END_ISLANDS("minecraft:small_end_islands"),
END_MIDLANDS("minecraft:end_midlands"),
END_HIGHLANDS("minecraft:end_highlands"),
END_BARRENS("minecraft:end_barrens"),
WARM_OCEAN("minecraft:warm_ocean"),
LUKEWARM_OCEAN("minecraft:lukewarm_ocean"),
COLD_OCEAN("minecraft:cold_ocean"),
DEEP_WARM_OCEAN("minecraft:deep_warm_ocean"),
DEEP_LUKEWARM_OCEAN("minecraft:deep_lukewarm_ocean"),
DEEP_COLD_OCEAN("minecraft:deep_cold_ocean"),
DEEP_FROZEN_OCEAN("minecraft:deep_frozen_ocean"),
THE_VOID("minecraft:the_void"),
SUNFLOWER_PLAINS("minecraft:sunflower_plains"),
DESERT_LAKES("minecraft:desert_lakes"),
GRAVELLY_MOUNTAINS("minecraft:gravelly_mountains"),
FLOWER_FOREST("minecraft:flower_forest"),
TAIGA_MOUNTAINS("minecraft:taiga_mountains"),
SWAMP_HILLS("minecraft:swamp_hills"),
ICE_SPIKES("minecraft:ice_spikes"),
MODIFIED_JUNGLE("minecraft:modified_jungle"),
MODIFIED_JUNGLE_EDGE("minecraft:modified_jungle_edge"),
TALL_BIRCH_FOREST("minecraft:tall_birch_forest"),
TALL_BIRCH_HILLS("minecraft:tall_birch_hills"),
DARK_FOREST_HILLS("minecraft:dark_forest_hills"),
SNOWY_TAIGA_MOUNTAINS("minecraft:snowy_taiga_mountains"),
GIANT_SPRUCE_TAIGA("minecraft:giant_spruce_taiga"),
GIANT_SPRUCE_TAIGA_HILLS("minecraft:giant_spruce_taiga_hills"),
MODIFIED_GRAVELLY_MOUNTAINS("minecraft:modified_gravelly_mountains"),
SHATTERED_SAVANNA("minecraft:shattered_savanna"),
SHATTERED_SAVANNA_PLATEAU("minecraft:shattered_savanna_plateau"),
ERODED_BADLANDS("minecraft:eroded_badlands"),
MODIFIED_WOODED_BADLANDS_PLATEAU("minecraft:modified_wooded_badlands_plateau"),
MODIFIED_BADLANDS_PLATEAU("minecraft:modified_badlands_plateau"),
BAMBOO_JUNGLE("minecraft:bamboo_jungle"),
BAMBOO_JUNGLE_HILLS("minecraft:bamboo_jungle_hills"),
SOUL_SAND_VALLEY("minecraft:soul_sand_valley"),
CRIMSON_FOREST("minecraft:crimson_forest"),
WARPED_FOREST("minecraft:warped_forest"),
BASALT_DELTAS("minecraft:basalt_deltas"),
OCEAN("minecraft:ocean", 0),
PLAINS("minecraft:plains", 1),
DESERT("minecraft:desert", 2),
MOUNTAINS("minecraft:mountains", 3),
FOREST("minecraft:forest", 4),
TAIGA("minecraft:taiga", 5),
SWAMP("minecraft:swamp", 6),
RIVER("minecraft:river", 7),
NETHER_WASTES("minecraft:nether_wastes", 8),
THE_END("minecraft:the_end", 9),
FROZEN_OCEAN("minecraft:frozen_ocean", 10),
FROZEN_RIVER("minecraft:frozen_river", 11),
SNOWY_TUNDRA("minecraft:snowy_tundra", 12),
SNOWY_MOUNTAINS("minecraft:snowy_mountains", 13),
MUSHROOM_FIELDS("minecraft:mushroom_fields", 14),
MUSHROOM_FIELD_SHORE("minecraft:mushroom_field_shore", 15),
BEACH("minecraft:beach", 16),
DESERT_HILLS("minecraft:desert_hills", 17),
WOODED_HILLS("minecraft:wooded_hills", 18),
TAIGA_HILLS("minecraft:taiga_hills", 19),
MOUNTAIN_EDGE("minecraft:mountain_edge", 20),
JUNGLE("minecraft:jungle", 21),
JUNGLE_HILLS("minecraft:jungle_hills", 22),
JUNGLE_EDGE("minecraft:jungle_edge", 23),
DEEP_OCEAN("minecraft:deep_ocean", 24),
STONE_SHORE("minecraft:stone_shore", 25),
SNOWY_BEACH("minecraft:snowy_beach", 26),
BIRCH_FOREST("minecraft:birch_forest", 27),
BIRCH_FOREST_HILLS("minecraft:birch_forest_hills", 28),
DARK_FOREST("minecraft:dark_forest", 29),
SNOWY_TAIGA("minecraft:snowy_taiga", 30),
SNOWY_TAIGA_HILLS("minecraft:snowy_taiga_hills", 31),
GIANT_TREE_TAIGA("minecraft:giant_tree_taiga", 32),
GIANT_TREE_TAIGA_HILLS("minecraft:giant_tree_taiga_hills", 33),
WOODED_MOUNTAINS("minecraft:wooded_mountains", 34),
SAVANNA("minecraft:savanna", 35),
SAVANNA_PLATEAU("minecraft:savanna_plateau", 36),
BADLANDS("minecraft:badlands", 37),
WOODED_BADLANDS_PLATEAU("minecraft:wooded_badlands_plateau", 38),
BADLANDS_PLATEAU("minecraft:badlands_plateau", 39),
SMALL_END_ISLANDS("minecraft:small_end_islands", 40),
END_MIDLANDS("minecraft:end_midlands", 41),
END_HIGHLANDS("minecraft:end_highlands", 42),
END_BARRENS("minecraft:end_barrens", 43),
WARM_OCEAN("minecraft:warm_ocean", 44),
LUKEWARM_OCEAN("minecraft:lukewarm_ocean", 45),
COLD_OCEAN("minecraft:cold_ocean", 46),
DEEP_WARM_OCEAN("minecraft:deep_warm_ocean", 47),
DEEP_LUKEWARM_OCEAN("minecraft:deep_lukewarm_ocean", 48),
DEEP_COLD_OCEAN("minecraft:deep_cold_ocean", 49),
DEEP_FROZEN_OCEAN("minecraft:deep_frozen_ocean", 50),
THE_VOID("minecraft:the_void", 127),
SUNFLOWER_PLAINS("minecraft:sunflower_plains", 129),
DESERT_LAKES("minecraft:desert_lakes", 130),
GRAVELLY_MOUNTAINS("minecraft:gravelly_mountains", 131),
FLOWER_FOREST("minecraft:flower_forest", 132),
TAIGA_MOUNTAINS("minecraft:taiga_mountains", 133),
SWAMP_HILLS("minecraft:swamp_hills", 134),
ICE_SPIKES("minecraft:ice_spikes", 140),
MODIFIED_JUNGLE("minecraft:modified_jungle", 149),
MODIFIED_JUNGLE_EDGE("minecraft:modified_jungle_edge", 151),
TALL_BIRCH_FOREST("minecraft:tall_birch_forest", 155),
TALL_BIRCH_HILLS("minecraft:tall_birch_hills", 156),
DARK_FOREST_HILLS("minecraft:dark_forest_hills", 157),
SNOWY_TAIGA_MOUNTAINS("minecraft:snowy_taiga_mountains", 158),
GIANT_SPRUCE_TAIGA("minecraft:giant_spruce_taiga", 160),
GIANT_SPRUCE_TAIGA_HILLS("minecraft:giant_spruce_taiga_hills", 161),
MODIFIED_GRAVELLY_MOUNTAINS("minecraft:modified_gravelly_mountains", 162),
SHATTERED_SAVANNA("minecraft:shattered_savanna", 163),
SHATTERED_SAVANNA_PLATEAU("minecraft:shattered_savanna_plateau", 164),
ERODED_BADLANDS("minecraft:eroded_badlands", 165),
MODIFIED_WOODED_BADLANDS_PLATEAU("minecraft:modified_wooded_badlands_plateau", 166),
MODIFIED_BADLANDS_PLATEAU("minecraft:modified_badlands_plateau", 167),
BAMBOO_JUNGLE("minecraft:bamboo_jungle", 168),
BAMBOO_JUNGLE_HILLS("minecraft:bamboo_jungle_hills", 169),
SOUL_SAND_VALLEY("minecraft:soul_sand_valley", 170),
CRIMSON_FOREST("minecraft:crimson_forest", 171),
WARPED_FOREST("minecraft:warped_forest", 172),
BASALT_DELTAS("minecraft:basalt_deltas", 173),
;
private String namespaceID;
private int id;
Biome(String namespaceID) {
Biome(String namespaceID, int id) {
this.namespaceID = namespaceID;
this.id = id;
Registries.biomes.put(NamespaceID.from(namespaceID), this);
}
public int getId() {
return ordinal();
return id;
}
public String getNamespaceID() {
@ -103,8 +105,10 @@ public enum Biome {
}
public static Biome fromId(int id) {
if(id >= 0 && id < values().length) {
return values()[id];
for(Biome o : values()) {
if(o.getId() == id) {
return o;
}
}
return null;
}

View File

@ -15,9 +15,18 @@ import java.util.TreeSet;
public abstract class BasicEnumGenerator extends MinestomEnumGenerator<BasicEnumGenerator.Container> {
private static final String MC_DATA_REGISTRIES_PATH = "minecraft_data/reports/registries.json";
/**
* Are IDs linear? Biomes are not for instance.
*/
private final boolean linear;
private NamespaceID defaultEntry;
protected BasicEnumGenerator(File targetFolder) throws IOException {
this(targetFolder, true);
}
protected BasicEnumGenerator(File targetFolder, boolean linear) throws IOException {
this.linear = linear;
generateTo(targetFolder);
}
@ -47,12 +56,23 @@ public abstract class BasicEnumGenerator extends MinestomEnumGenerator<BasicEnum
@Override
protected void postWrite(EnumGenerator generator) {
generator.addMethod("fromId", "(int id)", "static "+getClassName(),
"if(id >= 0 && id < values().length) {",
"\treturn values()[id];",
"}",
"return "+(defaultEntry == null ? "null" : identifier(defaultEntry))+";"
);
if(linear) {
generator.addMethod("fromId", "(int id)", "static "+getClassName(),
"if(id >= 0 && id < values().length) {",
"\treturn values()[id];",
"}",
"return "+(defaultEntry == null ? "null" : identifier(defaultEntry))+";"
);
} else {
generator.addMethod("fromId", "(int id)", "static "+getClassName(),
"for("+getClassName()+" o : values()) {",
"\tif(o.getId() == id) {",
"\t\treturn o;",
"\t}",
"}",
"return "+(defaultEntry == null ? "null" : identifier(defaultEntry))+";"
);
}
}
private String identifier(NamespaceID id) {
@ -67,8 +87,13 @@ public abstract class BasicEnumGenerator extends MinestomEnumGenerator<BasicEnum
generator.addClassAnnotation("@SuppressWarnings({\"deprecation\"})");
generator.addImport(Registries.class.getCanonicalName());
generator.addImport(NamespaceID.class.getCanonicalName());
generator.setParams("String namespaceID");
generator.addMethod("getId", "()", "int", "return ordinal();");
if(linear) {
generator.setParams("String namespaceID");
generator.addMethod("getId", "()", "int", "return ordinal();");
} else {
generator.setParams("String namespaceID", "int id");
generator.addMethod("getId", "()", "int", "return id;");
}
generator.addMethod("getNamespaceID", "()", "String", "return namespaceID;");
generator.appendToConstructor("Registries."+CodeGenerator.decapitalize(getClassName())+"s.put(NamespaceID.from(namespaceID), this);");
@ -76,7 +101,11 @@ public abstract class BasicEnumGenerator extends MinestomEnumGenerator<BasicEnum
@Override
protected void writeSingle(EnumGenerator generator, Container item) {
generator.addInstance(identifier(item.name), "\""+item.name.toString()+"\"");
if(linear) {
generator.addInstance(identifier(item.name), "\""+item.name.toString()+"\"");
} else {
generator.addInstance(identifier(item.name), "\""+item.name.toString()+"\"", item.id);
}
}
static class Container implements Comparable<Container> {

View File

@ -36,7 +36,7 @@ public class BiomesEnumGenerator extends BasicEnumGenerator {
}
private BiomesEnumGenerator(File targetFolder) throws IOException {
super(targetFolder);
super(targetFolder, false);
}
@Override