2017-11-17 16 views
1

내가 플러그인 개발에 새로운 해요 작동하지 공예 조리법을 기존의 결과를 설정. 그래서 여기에 단지 4 SlimeBalls와 SlimeBlocks 공예 싶어 내가 가진 무엇 :Bukkit/JavaPlugin는 - 나는/변경 공예 조리법을 추가 할 내 개인 마인 크래프트 서버를 들어 <p>Bukkit</p>에 대한

@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 
} 

이제 내가 결과를 오버라이드 (override) 할 9 slimeballs로 다시 공예 후 4 블록 공예에 의해 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

오류를 등록 onEnable 방법에

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); } } } 

를/콘솔은 무엇을 말하는가? – MCMastery

+0

'Bukket.getServer(). recipeIterator()'는 읽기 전용 일 것입니다. – MCMastery

+0

@MCMastery no no errors 아니오 경고, 결과를 emount하면 올바른 값을 표시하지만 Minecraft에서는 아무 것도 변경되지 않습니다. 나는 setAmount가 던져서 Error/Warning을 발생시킬 것이므로 읽기만 생각한다고 생각하지 않는다. – KilledByCheese

답변

1

몇 가지를 변경하여 작동 시켰습니다. ... Shapedrecipe는 실제 레시피가 아닌 레서피의 복제본/사본 만 제공합니다. 나는 선수가 뭔가 공예하고자하는 경우 결과를 변경할 수 PrepareItemCraftEvent을 사용 : 내 리스너 getServer().getPluginManager().registerEvents(new MyListener(), this);