我是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);
}
}
我做错了什么,我赞成每一个帮助/提示
答案 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);