Помогите Дать эффект стреле

Статус
Закрыто для дальнейших ответов.
В общем, пробовал так:
Java:
package prefix;

import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;

public class Scheduler3  extends Thread {
    @Override
    public void run() {
        for(;;) {
            try {
                for(World w : Bukkit.getServer().getWorlds()) {
                    for(Entity en :w.getEntities()) {
                        if(en.getType() == EntityType.ARROW && !en.isOnGround()) {
                            w.playEffect(en.getLocation(), Effect.FLAME, 0);
                        }
                    }
                }
            } catch (Exception e) {}
        }
    }
}
кек
Спаунит только один партикл, потом, сервер висит.


Код:
Arrow a = (Arrow) p.launchProjectile(Arrow.class);
            a.setVelocity(p.getLocation().getDirection().multiply(200));
            if(c.getBoolean("effect-ammo")){
                new ParticleThread().run();
            }
 
В общем, пробовал так:

Спаунит только один партикл, потом, сервер висит.


Код:
Arrow a = (Arrow) p.launchProjectile(Arrow.class);
            a.setVelocity(p.getLocation().getDirection().multiply(200));
            if(c.getBoolean("effect-ammo")){
                new ParticleThread().run();
            }
Потому что ты дурачек :D. new Scheduler().start();
 
Он пакетом отправляет, я тоже так хотел, но, он может в пакет аргументы писать, я - нет...
Там до 1.7 (включ.) можно было размещать аргументы в пакет, дальше, видимо, как то по другому, как?
 
Он пакетом отправляет, я тоже так хотел, но, он может в пакет аргументы писать, я - нет...
Там до 1.7 (включ.) можно было размещать аргументы в пакет, дальше, видимо, как то по другому, как?
Ты какую версию используешь?
 
Пример запроса хотя-бы
Крч, полазил, хочу сделать так:
Код:
public void sendToPlayer(Player player, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) throws Exception {
        Packet63WorldParticles packet = new Packet63WorldParticles();
        ReflectionUtilities.setValue(packet, "a", particleName);
        ReflectionUtilities.setValue(packet, "b", (float) location.getX());
        ReflectionUtilities.setValue(packet, "c", (float) location.getY());
        ReflectionUtilities.setValue(packet, "d", (float) location.getZ());
        ReflectionUtilities.setValue(packet, "e", offsetX);
        ReflectionUtilities.setValue(packet, "f", offsetY);
        ReflectionUtilities.setValue(packet, "g", offsetZ);
        ReflectionUtilities.setValue(packet, "h", speed);
        ReflectionUtilities.setValue(packet, "i", count);
        ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
    }
Щас буду пробовать :D
 
Пример запроса хотя-бы
Крч, полазил, хочу сделать так:
Код:
public void sendToPlayer(Player player, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) throws Exception {
        Packet63WorldParticles packet = new Packet63WorldParticles();
        ReflectionUtilities.setValue(packet, "a", particleName);
        ReflectionUtilities.setValue(packet, "b", (float) location.getX());
        ReflectionUtilities.setValue(packet, "c", (float) location.getY());
        ReflectionUtilities.setValue(packet, "d", (float) location.getZ());
        ReflectionUtilities.setValue(packet, "e", offsetX);
        ReflectionUtilities.setValue(packet, "f", offsetY);
        ReflectionUtilities.setValue(packet, "g", offsetZ);
        ReflectionUtilities.setValue(packet, "h", speed);
        ReflectionUtilities.setValue(packet, "i", count);
        ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
    }
Щас буду пробовать :D
https://hastebin.com/amejawibij.java - партиклы.
https://hastebin.com/jenoqogale.java - зависимый класс.
Это как 2-ой вариант :D
 
Код:
new Thread(){
                    public void run(){
                        while(!a.isOnGround() || !a.isDead() || a == null){
                            ParticleEffect.SMOKE_NORMAL.display(0, 0, 0, 1, 14, a.getLocation(), 1);
                        }
                    }
                }.start();
Без потока - спаунит, в потоке - нет, как так?
 
Код:
new Thread(){
                    public void run(){
                        while(!a.isOnGround() || !a.isDead() || a == null){
                            ParticleEffect.SMOKE_NORMAL.display(0, 0, 0, 1, 14, a.getLocation(), 1);
                        }
                    }
                }.start();
Без потока - спаунит, в потоке - нет, как так?
Насколько я знаю, не главный тред - не может использовать много чего из ВедроАПИ.
 
Насколько я знаю, не главный тред - не может использовать много чего из ВедроАПИ.
А как мне партиклы тогда спаунить?
Код:
while(!a.isOnGround() || !a.isDead() || a == null){
                        ParticleEffect.SMOKE_NORMAL.display(0, 0, 0, 1, 14, a.getLocation(), 1);
                    }
Делаю так, и остаюсь без сервера
 
world.spawnParticle(Particle.FLAME, en.getLocation(), 0);
ставь 0 - никогда не прогадаешь. у разных партиклов он отвечает за разное, но при 0 они дефолтные
 
world.spawnParticle(Particle.FLAME, en.getLocation(), 0);
ставь 0 - никогда не прогадаешь. у разных партиклов он отвечает за разное, но при 0 они дефолтные
А по циклу все-равно провиснет сервер
В новом потоке, вообще тогда не работает.
Я понял ;D
Скорость стрелы - настолько большая, что добирается она до своей точки, за 1 тик, как уменьшить скорость стрелы, не потеряв при это ее точность?
Ура! Мы сделали это :D Спасибо вам!
Сделал это так:

Код:
for(int i = 0; i <= 240; i++){
                     loc = loc.add(loc.getDirection().getX(), loc.getDirection().getY() - 0.05, loc.getDirection().getZ());
                     a.getWorld().spawnParticle(Particle.FLAME, loc, 0);
                 }
Выше, код запуска стрелы...

Еще раз спасибо, закрываю топик
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх