Bukkit / JavaPlugin - 设置现有制作配方无效的结果

时间:2017-11-17 22:06:40

标签: java minecraft bukkit

我是Pluk Development for Bukkit的新手

对于我的私人Minecraft服务器,我想添加/更改制作配方。我想用4个SlimeBalls制作SlimeBlocks所以这就是我得到的:

 @Override
public void onEnable() {

    ItemStack slimeBlockStack = new ItemStack(Material.SLIME_BLOCK);
    ShapedRecipe slimeBlockRecipe = new ShapedRecipe(slimeBlockStack);

    slimeBlockRecipe.shape("###", "#oo", "#oo");
    slimeBlockRecipe.setIngredient('o', Material.SLIME_BALL);
    slimeBlockRecipe.setIngredient('#', Material.AIR);

    getServer().addRecipe(slimeBlockRecipe);

//....here comes more   
}

现在你不能"欺骗" slimeballs用4制作块然后再制作回到9个slimeballs我想要覆盖现有制作配方的结果 - 我试图用所有食谱迭代一个列表然后设置结果的数量,但它不起作用...

Iterator<Recipe> it = Bukkit.getServer().recipeIterator();
    while(it.hasNext()) {
        ItemStack result = it.next().getResult();
        if(result.isSimilar(new ItemStack(Material.SLIME_BALL))) {

            result.setAmount(4);

        }
    }

我做错了什么,我赞成每一个帮助/提示

1 个答案:

答案 0 :(得分:1)

我通过改变一些事情来实现它...... Shapedrecipe仅提供配方的克隆/副本,而不是实际配方。 如果玩家想要制作一些东西,我使用PrepareItemCraftEvent来改变结果:

public class MyListener implements Listener {

@EventHandler
public void craftEvent(PrepareItemCraftEvent event) {
    ItemStack[] contents = event.getInventory().getContents();
    ItemStack firstInContents = contents[0];

    if((firstInContents.getType()==Material.SLIME_BALL) && (firstInContents.getAmount() == 9)) {
        firstInContents.setAmount(4);
    }

}
}

在onEnable方法中我注册了我的Listener getServer().getPluginManager().registerEvents(new MyListener(), this);