- Баллы
- 76
Во-первых, я не могу найти аналог устаревшему e.setCancelled(); есть только Result отдельно по предмету и блоку, но что с ним делать - не нашёл (МБ плохо гуглил)
Во-вторых, LEFT_CLICK_... вызывается при правом клике бронёй.
Нафига оно мне надо: использую ArmorEquipEvent (стороннюю либу), которая уже пишет сообщение о том, что броню с надписью "ЗАГОТОВКА." одеть нельзя, и отменяет ивент. Но PlayerInteractEvent этого не понимает и пишет свои сообщения, в итоге в чате спам, который очень бросается в глаза. Предметов с надписью "ЗАГОТОВКА.", кроме брони, много, и мне нужно запретить их использовать по ПКМ и ЛКМ.
Код для вас, перфекционисты любых тем...
В чате выводит и ЛКМ и ПКМ одновременно.
Во-вторых, LEFT_CLICK_... вызывается при правом клике бронёй.
Нафига оно мне надо: использую ArmorEquipEvent (стороннюю либу), которая уже пишет сообщение о том, что броню с надписью "ЗАГОТОВКА." одеть нельзя, и отменяет ивент. Но PlayerInteractEvent этого не понимает и пишет свои сообщения, в итоге в чате спам, который очень бросается в глаза. Предметов с надписью "ЗАГОТОВКА.", кроме брони, много, и мне нужно запретить их использовать по ПКМ и ЛКМ.
Код для вас, перфекционисты любых тем...
Код:
@EventHandler
public void interact(PlayerInteractEvent e){
if (e.getHand()!=null&&!e.getHand().equals(EquipmentSlot.HAND)){return;}//Шаманство от двойных срабатываний
.......
p.sendMessage(e.getAction()+"");
if(e.getAction().equals(Action.LEFT_CLICK_AIR)||e.getAction().equals(Action.LEFT_CLICK_BLOCK)){
ItemStack hitem=p.getInventory().getItemInMainHand();
if(GepUtil.loreContains(hitem, ChatColor.RED+"ЗАГОТОВКА.")){
e.setCancelled(true);
if(b!=null&&b.getType().equals(Material.ANVIL)){
p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 2, 0.75f+r.nextFloat());
return;
}
TextUtil.mes(p, "&6Kingdom", "Это заготовка. Ей нельзя бить, копать, одевать, &cЕЁ НУЖНО ВЫКОВАТЬ!");
}
}