1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как сделать фаерболы, чтобы они пуляли игрока вперед, от земли?

Тема в разделе "Разработка плагинов для новичков", создана пользователем WhiteJQ, 21 фев 2024.

  1. Автор темы
    WhiteJQ

    WhiteJQ Ньюби

    Баллы:
    1
    Здравствуйте, я разрабатываю сервер, и нужно написать фаерболы, чтобы они пуляли игрока вперед, от земли, так же сделать, если игрок стоит задом, то тоже пуляло. Прикрепил видео ссылкой, как это сделано на известном сервере RuHypixel

    Есть так же баг с последним оставшимся фаерболом, он не вычитается :c

    Кто накодит, дай бог вам здоровья!

    Ссылка на видео: https://www.mediafire.com/file/ziremshfzp9jbuw/2024-02-21_00-20-39.mp4/file

    Вот так накодил я (база фаерболов, чтобы кидали вверх):
    Код:
    package ru.solarcloud.duels.fireballfight.management;
    import net.minecraft.server.v1_8_R3.EntityPlayer;
    import net.minecraft.server.v1_8_R3.PacketPlayOutEntityTeleport;
    import net.minecraft.server.v1_8_R3.PacketPlayOutEntityVelocity;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Fireball;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.util.Vector;
    import ru.tynixcloud.util.PlayerCooldownUtil;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.event.entity.EntityDamageEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import java.util.concurrent.TimeUnit;
    
    public class FireballManagement implements Listener {
    
        private final ProtocolManager protocolManager;
    
        public FireballManagement() {
            this.protocolManager = ProtocolLibrary.getProtocolManager();
        }
    
        @EventHandler
        public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
            Entity damages = event.getDamager();
            Entity damaged = event.getEntity();
    
            if (damages.getType() == EntityType.FIREBALL) {
                if (damaged instanceof Player) {
                    Player player = (Player) damaged;
                    event.setCancelled(true);
     //               Location location = player.getEyeLocation().clone();
                    Vector playerDirection = player.getLocation().getDirection();
    
    
                    Vector velocity = playerDirection.clone().multiply(2).normalize();
                    velocity.setY(1.5);
                    player.setVelocity(velocity);
    
                }
            }
        }
    
        @EventHandler
        public void on(PlayerInteractEvent event) {
            Player player = event.getPlayer();
            if (event.hasItem() && event.getItem() != null && event.getItem().getType() == Material.FIREBALL) {
                if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
                    if (PlayerCooldownUtil.hasCooldown("fireball", player)) {
                        return;
                    }
                   
                    spawnCustomFireball(player);
                    PlayerCooldownUtil.putCooldown("fireball", player, TimeUnit.SECONDS.toMillis(1));
                }
            }
        }
    
        @EventHandler
        public void onDamage(EntityDamageEvent event) {
            if (event.getCause().equals(EntityDamageEvent.DamageCause.FALL)) {
                event.setCancelled(true);
            }
        }
    
        @EventHandler
        public void onplace(BlockPlaceEvent event) {
            Player player = event.getPlayer();
            if (player.getItemInHand().getType().equals(Material.FIREBALL)) {
                event.setBuild(false);
            }
        }
    
        public void spawnCustomFireball(Player player) {
            Fireball fireball = player.launchProjectile(Fireball.class);
            fireball.setVelocity(fireball.getLocation().getDirection().multiply(1.4));
            fireball.setIsIncendiary(false);
        }
    }
     
  2. MrAlexeiMK

    MrAlexeiMK Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    MrAlexeiMK
    Код:
    if (p.getItemInHand().getAmount() == 1) {
      p.setItemInHand(null);
    } else {
      p.getItemInHand().setAmount(p.getItemInHand().getAmount() - 1);
    }
    float angle = (float) (-p.getLocation().getYaw() * Math.PI / 180.0D);
    float dz = (float) (BedWars.getConfig().getDouble("fireball_distance_from_player") * Math.cos(angle));
    float dx = (float) (BedWars.getConfig().getDouble("fireball_distance_from_player") * Math.sin(angle));
    Location start = p.getLocation().add(dx, 1.0D, dz);
    Fireball fireball = (Fireball) p.getWorld().spawn(start, Fireball.class);
    fireball.setYield(BedWars.getConfig().getInt("fireball_radius_explosion"));
    
     
  3. Автор темы
    WhiteJQ

    WhiteJQ Ньюби

    Баллы:
    1
    неа-, кидает все равно не так как нужно, + блоки рушит на мапе, но пофиксилось отнимание фаерболов
     
  4. Автор темы
    WhiteJQ

    WhiteJQ Ньюби

    Баллы:
    1
  5. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Загружай видео на ютуб, а не на помойный хостинг - больше шансов, что помогут.

    Yield какой? При нулевом не должно разрушать

    Ну так давно бы разобрался, что в коде написано, и подправил бы под себя. Или ты хочешь, чтобы за тебя уже полностью готовый код написали?
    Тем более, мы мысли не читаем и не знаем, что конкретно тебя не строило в предложенном решении
     
  6. Автор темы
    WhiteJQ

    WhiteJQ Ньюби

    Баллы:
    1
    так я голову уже неделю ломаю с этой штукой, никак не пойму, как это накодить :), Yield 7 ставил
     

Поделиться этой страницей