Я пытаюсь создать рецепт крафта с bukkit, и я хочу, чтобы рецепт принимал ТОЛЬКО кожаный шлем с названием «Лучший шлем». прямо сейчас у меня есть это:
public static ItemStack lvl2Head = new ItemStack(Material.LEATHER_HELMET, 1);
{
//removed unnessecary information
lvl2HeadMeta.setDisplayName("Better Helmet 2");
}
public void lvl1ArmorHead() {
ShapedRecipe recipe = new ShapedRecipe(lvl2Head);
recipe.shape("AAA", "ABA", "AAA");
recipe.setIngredient('A', Material.DIAMOND);
//want it to check it under here in place of "LEATHER_HELMET"
recipe.setIngredient('B', Material.LEATHER_HELMET);
this.getServer().addRecipe(recipe);
}
Есть ли способ сделать это? Я попытался поставить имя нового ItemStack вместо Material.LEATHER_HELMET
, но он хочет MaterialData
, а не ItemStack
.
обновить
Я все еще могу вытащить предмет из верстака, используя обычный кожаный шлем, этот код создан с помощью jojodmo.
Основной класс:
public static ShapedRecipe lvl1ArmorHeadRecipe() {
ShapedRecipe recipe = new ShapedRecipe(lvl1Head);
recipe.shape("AAA", "ABA", "AAA");
recipe.setIngredient('A', Material.DIAMOND);
recipe.setIngredient('B', Material.LEATHER_HELMET);
return recipe;
}
public void lvl1ArmorHead(){
this.getServer().addRecipe(lvl1ArmorHeadRecipe());
}
Класс EventHandler:
@EventHandler
public void craft(CraftItemEvent e){
if(e.getInventory() instanceof CraftingInventory){
CraftingInventory inv = (CraftingInventory) e.getInventory();
if(inv.getSize() != 4 && e.getRecipe().equals(Main.lvl1ArmorHeadRecipe())){
org.bukkit.inventory.ItemStack helm = inv.getMatrix()[5];
if(helm.hasItemMeta()){
if(helm.getItemMeta().getDisplayName().equals("Better Helmet")){
//done.
} else{
e.setCancelled(true);
}
} else {
e.setCancelled(true);
}
}
}
}
Примечание. Это для Bukkit 1.7.2.