- Баллы
- 76
Когда игрок использует Shift+click при крафте, CraftItemEvent срабатывает лишь один раз и изменяет лишь первый случай. Мне нужно отменять потерю одного из предметов в сетке.
Как вторгнуться в обработку каждого цикла? (При шифте крафтится 2 предмета.)
Как вторгнуться в обработку каждого цикла? (При шифте крафтится 2 предмета.)
Код:
@EventHandler
public void craft(CraftItemEvent e){
if(e.getInventory()==null)return;
ItemStack item=e.getInventory().getResult();
if(item==null)return;
if(item.hasItemMeta()&&item.getItemMeta().hasDisplayName()){
int am=getAmountCraftItem(item.getType(), e);
if(am>1){
e.setCancelled(true);
return;
}
ItemMeta meta=item.getItemMeta();
String name=meta.getDisplayName();
if(name.contains("Замок")){
if(am>0){
ItemStack[] matrix = e.getInventory().getMatrix();
ItemStack left=matrix[3];
if(GepUtil.loreContains(left, ChatColor.BLACK+"Key_id=")){
left.setAmount(left.getAmount()+1);
return;
}
ItemStack keys=ItemUtil.create(Material.IRON_NUGGET, am, 0, ChatColor.AQUA+"Ключ", new String[]{
ChatColor.RED+"ЗАГОТОВКА.",
ChatColor.RED+"Требуется выплавить.",
ChatColor.BLACK+"Key_id="+(GepUtil.intFromLore(item, ChatColor.BLACK+"Key_id="))
}, null, 0);
e.getWhoClicked().getInventory().addItem(keys);
}
}else if(name.contains("Ключ")){
if(am>0){
ItemStack[] matrix = e.getInventory().getMatrix();
ItemStack left=matrix[3];
if(GepUtil.loreContains(left, ChatColor.BLACK+"Key_id=")){
left.setAmount(left.getAmount()+1);
return;
}else{
e.getInventory().setResult(null);
}
}
}
return;
}
}