Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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);
    }
}
 
Код:
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"));
 
Код:
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"));
неа-, кидает все равно не так как нужно, + блоки рушит на мапе, но пофиксилось отнимание фаерболов
 
Загружай видео на ютуб, а не на помойный хостинг - больше шансов, что помогут.

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

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


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


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

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

Назад
Верх