Помогите Футбол в майнкрафте

Spsiska_13

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Yura2108
Опишу вкратце, нужно создать что-то наподобие футбола в майнкрафте, знаю, что есть такой плагин, но он не подходит по другим критериям. Допустим используем слайма в качестве мяча. Меня интересует как его перемещать от удара игроком, при этом он двигаться не будет и отслеживать попадание в ворота?
 
Опишу вкратце, нужно создать что-то наподобие футбола в майнкрафте, знаю, что есть такой плагин, но он не подходит по другим критериям. Допустим используем слайма в качестве мяча. Меня интересует как его перемещать от удара игроком, при этом он двигаться не будет и отслеживать попадание в ворота?
Как двигать:
Чекаешь что ударяет игрок. Если слайм, тогда пполучаешь direction игрока и в этом direction, через N блоков спавнишь новый слайм, а старый делитаешь.

Отслеживать ворота:
Когда переместил слайм, проверяй кубоид. Если сходится с кубоидом ворот == гол

Изи же
 
Не знаю будет ли работать, но с помощью PlayerPickupItemEvent , получать айтем, если это слайм то, присваивать ему вектор.
 
Как двигать:
Чекаешь что ударяет игрок. Если слайм, тогда пполучаешь direction игрока и в этом direction, через N блоков спавнишь новый слайм, а старый делитаешь.

Отслеживать ворота:
Когда переместил слайм, проверяй кубоид. Если сходится с кубоидом ворот == гол

Изи же
При такой работе он будет телепортироваться, а если делать плавное перемещение? Ну и в случае с твой идей можно просто слайм тепать, так как у него есть такая функция, старый даже удалять не придётся. Но я всё же хочу сделать это не как мгновенное перемещение, а плавное.
 
Не знаю будет ли работать, но с помощью PlayerPickupItemEvent , получать айтем, если это слайм то, присваивать ему вектор.
Не понял, к чему PickUpItem? Я имел ввиду моба, а не айтем
 
При такой работе он будет телепортироваться, а если делать плавное перемещение? Ну и в случае с твой идей можно просто слайм тепать, так как у него есть такая функция, старый даже удалять не придётся. Но я всё же хочу сделать это не как мгновенное перемещение, а плавное.
Попробуй мой метод, если сработает то он должен лететь , например, как стрела
 
Не понял, к чему PickUpItem? Я имел ввиду моба, а не айтем
Прошу прощения, подумал, о слаймболе, но без разницы, проверяй значит какой энтити получил дамаг, если слайм, то присваивай ему вектор, чтобы усилить/уменьшить дальность полета, используй дистанцию от энтити к плееру

UPD если будет улетать далека из-за того , что часто бьется ставь больше setNoDamageTicks, setMaximumNoDamageTick
 
Прошу прощения, подумал, о слаймболе, но без разницы, проверяй значит какой энтити получил дамаг, если слайм, то присваивай ему вектор, чтобы усилить/уменьшить дальность полета, используй дистанцию от энтити к плееру
Пытался использовать setVelocity() и как вектор пытался использовать как положения игрока, так и направление его глаз. В обоих случаях моб просто исчезал.
 
Пытался использовать setVelocity() и как вектор пытался использовать как положения игрока, так и направление его глаз. В обоих случаях моб просто исчезал.
Слишком большие значения значит ставил.
Используй метод который я нашел на просторах
Код:
     public void pullEntityToLocation(final Entity e, final Location loc) {
         final Location entityLoc = e.getLocation();
         entityLoc.setY(entityLoc.getY() + 0.1);
         e.teleport(entityLoc);
         entityLoc.setX(Math.round(entityLoc.getX()));
         entityLoc.setY(Math.round(entityLoc.getY()));
         entityLoc.setZ(Math.round(entityLoc.getZ()));
         final double g = -0.08;
         final double t = Math.round(loc.distance(entityLoc));
         final double v_x = (0.3 + 0.07 * t) * (Math.round(loc.getX()) - entityLoc.getX()) / t;
         final double v_y = (0.2 + 0.03 * t) * (Math.round(loc.getY()) - entityLoc.getY()) / t - 0.5 * g * t;
         final double v_z = (0.3 + 0.07 * t) * (Math.round(loc.getZ()) - entityLoc.getZ()) / t;
         final Vector v = e.getVelocity();
         v.setX(v_x);
         v.setY(v_y);
         v.setZ(v_z);
         e.setVelocity(v);
     }
Поиграй со значениями, если не понимаешь, что там что. На практике разберешься.
Но этот метод будет притягивать моба к тебе например, чтобы сработало от тебя используй в качестве энтити моба, а в качестве локации, локацию игрока, и умножай это *e.setVelocity(v);* на -1
 
Слишком большие значения значит ставил.
Используй метод который я нашел на просторах
Код:
     public void pullEntityToLocation(final Entity e, final Location loc) {
         final Location entityLoc = e.getLocation();
         entityLoc.setY(entityLoc.getY() + 0.1);
         e.teleport(entityLoc);
         entityLoc.setX(Math.round(entityLoc.getX()));
         entityLoc.setY(Math.round(entityLoc.getY()));
         entityLoc.setZ(Math.round(entityLoc.getZ()));
         final double g = -0.08;
         final double t = Math.round(loc.distance(entityLoc));
         final double v_x = (0.3 + 0.07 * t) * (Math.round(loc.getX()) - entityLoc.getX()) / t;
         final double v_y = (0.2 + 0.03 * t) * (Math.round(loc.getY()) - entityLoc.getY()) / t - 0.5 * g * t;
         final double v_z = (0.3 + 0.07 * t) * (Math.round(loc.getZ()) - entityLoc.getZ()) / t;
         final Vector v = e.getVelocity();
         v.setX(v_x);
         v.setY(v_y);
         v.setZ(v_z);
         e.setVelocity(v);
     }
Поиграй со значениями, если не понимаешь, что там что. На практике разберешься.
Но этот метод будет притягивать моба к тебе например, чтобы сработало от тебя используй в качестве энтити моба, а в качестве локации, локацию игрока, и умножай это *e.setVelocity(v);* на -1

UPD в качестве ворот можешь использовать портал, и соответственно EntityPortalEvent
 
При такой работе он будет телепортироваться, а если делать плавное перемещение? Ну и в случае с твой идей можно просто слайм тепать, так как у него есть такая функция, старый даже удалять не придётся. Но я всё же хочу сделать это не как мгновенное перемещение, а плавное.
Окей
Стенд + шедулер
 
Подробнее плз, не понял вообще)
Спавнишь армор стенд, ставишь ему слайма, вертешь как надо и через шедулер тпхаешь каждую сек. Таким образом, запусканшь стенд в нужном тебе направлении и он летит плавно
 
Назад
Верх