Biome arguments

In Minecraft 1.16, they added the ability to refer to in-game biomes. The CommandAPI implements this using the BiomeArgument. As expected, this returns Bukkit's Biome enum when used.
Example - Setting the biome of a chunk
Say you want to set the biome of the current chunk that a player is in. We can do this using the World.setBiome(x, y, z, biome) method for a given world. We will use this command syntax to set the biome of our current chunk:
/setbiome <biome>
And we can set the biome of the current chunk as expected:
new CommandAPICommand("setbiome")
.withArguments(new BiomeArgument("biome"))
.executesPlayer((player, args) -> {
Biome biome = (Biome) args[0];
Chunk chunk = player.getLocation().getChunk();
player.getWorld().setBiome(chunk.getX(), player.getLocation().getBlockY(), chunk.getZ(), biome);
})
.register();
CommandAPICommand("setbiome")
.withArguments(BiomeArgument("biome"))
.executesPlayer(PlayerCommandExecutor { player, args ->
val biome = args[0] as Biome
val chunk = player.location.chunk
player.world.setBiome(chunk.x, player.location.blockY, chunk.z, biome)
})
.register()
The BiomeArgument also supports returning a NamespacedKey for custom biomes. This can be done by using the BiomeArgument.NamespacedKey constructor instead of the normal BiomeArgument constructor:
// Makes a BiomeArgument that returns a Biome
new BiomeArgument("biome");
// Makes a BiomeArgument that returns a NamespacedKey
new BiomeArgument.NamespacedKey("biome");
Developer's Note:
Spigot's support for custom biomes is really limited! If you have an example that lets you use custom biomes with namespaced keys, please open a GitHub issue, or reach out to us on Discord!