- Баллы
- 61
Как сделать так, чтоб удочкой 1 игрок мог притянуть другого игрока к сибе?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Бери событие PlayerInteractEvent, проверяй, чтобы это событие было кликание правой кнопкой мыши по блоку или воздуху ( if(e.getAction.equals(Action.RIGHT_CLICK_BLOCK) || if(e.getAction.equals(Action.RIGHT_CLICK_AIR)) ). Затем проверяешь, чтобы у игрока в руке был придмет удочка ( e.getPlayer.getItemInHand.getType.equals(Material.FISHING_ROD) ). И если все проходит, то берешь Велоушити человека и добавляешь к нему вектор.Как сделать так, чтоб удочкой 1 игрок мог притянуть другого игрока к сибе?
А как тут достать человека, которого ударил крюк удочки (Через евент дамага?). Поскольку ему вектор надо добавить, который притянет его к человеку с удочкой.И если все проходит, то берешь Велоушити человека и добавляешь к нему вектор.
Во-первых, чтобы это был именно ХУК-удочка, тебе надо сначала создать его. Через ItemStack. Metadat'u и.т.д. (Посмотри в инете про это).А как тут достать человека, которого ударил крюк удочки (Через евент дамага?). Поскольку ему вектор надо добавить, который притянет его к человеку с удочкой.
гдеО, плагиатик с плекса.
ща попробуемВо-первых, чтобы это был именно ХУК-удочка, тебе надо сначала создать его. Через ItemStack. Metadat'u и.т.д. (Посмотри в инете про это).
Во-вторых, сначала проверяешь, что игрок получил домаг (EntityDamageByEntityEvent), смотришь, был ли это человек (e.getEntity().getType().equals(EntityType.PLAYER))? Таким же образом проверяешь, был ли доммагер человеком. Затем берешь доммагера, конвентируешь его в игрока ( ((Player)e.getDamager()) ) и проверяешь у него в руках удочку, с метадатой (именем), которую ты дал хуку. Если все проходит берешь велоушети Entity и добавляешь ему мнвентированный вектор доммагера.
а как инвертировать? Просто getVelocity ?добавляешь ему мнвентированный вектор доммагера.
А как инвертировать вектор дамагера.Умножь на -1, например.
Плагин робит когда ударить удочкой ЛКМ, а когда в руках удочка, крюк которой уже запустили, то не читаетЗатем берешь доммагера, конвентируешь его в игрока ( ((Player)e.getDamager()) ) и проверяешь у него в руках удочку
А как. Я только учусь писать плагины, и я еще не шарю в ArrayListЕсли все верно, то удаляешь крючок из hook, добавляешь ударенной Entity вектор скорости etc.
ArrayList <Fish> hook = new ArrayList <Fish>();
@EventHandler
public void onPlayerFishing (PlayerFishEvent e){
Player p = e.getPlayer();
ItemStack i = p.getItemInHand();
if (i.getType() == Material.FISHING_ROD){
Fish h = e.getHook();
p.getVelocity();
Vector v = p.getVelocity();
}
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
e.getEntity();
Entity s;
s = e.getEntity();
if (e.getDamager().getType() == EntityType.FISHING_HOOK){
if (hook.contains(e.getDamager())){
}
}
}
ArrayList <Fish> hook = new ArrayList <Fish>();
@EventHandler
public void onPlayerFishing (PlayerFishEvent e){
Player p = e.getPlayer();
ItemStack i = p.getItemInHand();
if (i != null && i.getType() == Material.FISHING_ROD){
hook.add(e.getHook());
}
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
if (e.getEntity() instanceof Player){
Player entity = (Player) e.getEntity();
if (e.getDamager() instanceof Fish){
if (hook.contains(e.getDamager())){
e.setCancelled(true);
e.getDamager().remove();
Player shooter = (Player) ((Fish)e.getDamager()).getShooter();
entity.setVelocity(shooter.getLocation().toVector().subtract(entity.getLocation().toVector()).multiply(0.2).setY(1));
}
}
}
}
Огромное спасибоНо есть небольшая проблема: будет всегда один клик задержки между запусками крючковКод:ArrayList <Fish> hook = new ArrayList <Fish>(); @EventHandler public void onPlayerFishing (PlayerFishEvent e){ Player p = e.getPlayer(); ItemStack i = p.getItemInHand(); if (i != null && i.getType() == Material.FISHING_ROD){ hook.add(e.getHook()); } } @EventHandler public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { if (e.getEntity() instanceof Player){ Player entity = (Player) e.getEntity(); if (e.getDamager() instanceof Fish){ if (hook.contains(e.getDamager())){ e.setCancelled(true); e.getDamager().remove(); Player shooter = (Player) ((Fish)e.getDamager()).getShooter(); entity.setVelocity(shooter.getLocation().toVector().subtract(entity.getLocation().toVector()).multiply(0.2).setY(1)); } } } }