LootTable argument

A loot table argument showing a list of Minecraft loot tables as suggestions

The LootTableArgument class can be used to get a Bukkit LootTable object.

Example - Filling a chest with loot table contents

Say we wanted to write a command that populates a chest with some loot table contents. For this example, we'll use the following command:

/giveloottable <loottable> <location>

We ensure that the location provided is a container (such as a chest or shulkerbox) and then update the contents of that container:

new CommandAPICommand("giveloottable")
    .withArguments(new LootTableArgument("loottable"))
    .withArguments(new LocationArgument("location", LocationType.BLOCK_POSITION))
    .executes((sender, args) -> {
        LootTable lootTable = (LootTable) args[0];
        Location location = (Location) args[1];

        BlockState state = location.getBlock().getState();

        // Check if the input block is a container (e.g. chest)
        if (state instanceof Container container && state instanceof Lootable lootable) {
            // Apply the loot table to the chest
            lootable.setLootTable(lootTable);
            container.update();
        }
    })
    .register();
CommandAPICommand("giveloottable")
    .withArguments(LootTableArgument("loottable"))
    .withArguments(LocationArgument("location", LocationType.BLOCK_POSITION))
    .executes(CommandExecutor { _, args ->
        val lootTable = args[0] as LootTable
        val location = args[1] as Location

        val state = location.getBlock().getState()

        // Check if the input block is a container (e.g. chest)
        if (state is Container && state is Lootable) {
            // Apply the loot table to the chest
            state.setLootTable(lootTable)
            state.update()
        }
    })
    .register()