跳到主要内容

配方 API

配方是定义如何制作特定物品的方式。它们可以由插件或数据包定义, 但在这里我们只会介绍插件方面的内容。

ShapedRecipe

有序配方是一种需要在工作台中按特定模式放置物品来制作物品的配方。 这些配方使用模式字符串和字符到物品的映射来创建。模式字符串是 3 个 3 字符的字符串,代表工作台网格的行。它们可以这样创建:

TestPlugin.java
public class TestPlugin extends JavaPlugin {

@Override
public void onEnable() {
NamespacedKey key = new NamespacedKey(this, "WarriorSword");
ItemStack item = ItemStack.of(Material.DIAMOND_SWORD);

ShapedRecipe recipe = new ShapedRecipe(key, item);
recipe.shape(" A ", "AAA", " B ");
recipe.setIngredient('A', Material.DIAMOND);
recipe.setIngredient('B', Material.STICK);

getServer().addRecipe(recipe);
}
}

这个配方要求用一个钻石在顶行,一个木棍在中间行,一个钻石在底行来制作钻石剑。 钻石剑将在底行的中间列。在工作台中看起来像这样:

 A
AAA
B
信息

你不需要在插件的 onEnable 方法中注册配方,你可以在任何时候注册它。 但是,如果你在插件启用后且有玩家在线时注册配方,你需要重新发送所有配方给玩家或使用 addRecipe 方法中的布尔参数来更新所有玩家的新配方。

注意

你不能在有序配方中使用空气作为材料,这会导致错误。

ShapelessRecipe

无序配方是一种需要在工作台中放置特定数量的物品来制作物品的配方。 这些配方使用物品列表创建。它们可以这样创建:

TestPlugin.java
public class TestPlugin extends JavaPlugin {

@Override
public void onEnable() {
NamespacedKey key = new NamespacedKey(this, "WarriorSword");
ItemStack item = ItemStack.of(Material.DIAMOND_SWORD);

ShapelessRecipe recipe = new ShapelessRecipe(key, item);
recipe.addIngredient(3, Material.DIAMOND);
recipe.addIngredient(2, Material.STICK);

getServer().addRecipe(recipe);
}
}

这个配方声明你只需要 3 个钻石和 2 个木棍来制作物品,不需要在工作台网格中按特定的 十字形摆放。这可以用以下任何方式制作:

  DSS   |   SDS   |   S D
D | D | D
D | D | D S

以及 5 个物品的任何其他组合。