Changer particle de couleur

Brokeos

Développeur Java/Web indépendant
12 Mars 2012
402
42
135
26
In my bedroom
brokeos.fr
Bonjour,

j'ai lu l’entièreté du sujet, et je ne comprends pas pourquoi ce problème n'est pas encore résolu. Tout d'abord, voici deux liens qui peuvent t'être utile :

Ensuite, tu a la possibilité de choisir la couleur des particules avec ou sans nms. Voici la version avec, venant tout droit d'ici, vu que c'est celle qui semble t’intéresser (j'ai simplement ctrl/C, ctrl/v les morceaux important du code + traduit ;))

Code:
Packet p = new PacketPlayOutWorldParticles(EnumParticle.REDSTONE, true, (float) loc.getX(), (float) loc.getY(), (float) loc.getZ(), (float) 0, (float) 0, (float) 0, (float) 0, 0, 0);

Les trois premiers floats après la location, acceptent des code de couleur RGB.Cependant, Minecraft ne semble pas utiliser le code RBG exact. Le rouge dans Minecraft :
Code:
Packet p = new PacketPlayOutWorldParticles(EnumParticle.REDSTONE, true, (float) loc.getX(), (float) loc.getY(), (float) loc.getZ(), (float) 255, (float) 0, (float) 0, (float) 0, 0, 0);


Voici les palettes de couleur de Minecraft :

Merci de ta réponse, qui est très complète !

Seulement j'ai déjà testé ce code, j'ai du oublier de le préciser.. et malheureusement celui-ci ne change pas la couleur, en tout cas pour moi.
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Seulement j'ai déjà testé ce code, j'ai du oublier de le préciser.. et malheureusement celui-ci ne change pas la couleur, en tout cas pour moi.
Ha effectivement, c'est donc là qu'est le soucis. Du coup je comprends mieux pourquoi ce n'est pas encore réglé :/

Sinon il y a un moyen sans les nms normalement (vu que les nms ne veulent pas correctement fonctionner :/), mais ça ne t'arrange pas ?! Je vais voir si avec quelques potions magique je peut faire fonctionner ce code ;)
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Re, désolé par avance pour le double post :)

Je croit avoir trouver quelque chose de plutôt intéressant ! J'ai repris ton code et j'ai réussi à faire spawn des particules multi-colores :)
Voici le code :
Code:
public int random(){
        Random r = new Random();
        int ra = r.nextInt(255);
        return ra;
    }
 
    @EventHandler
    public void onMove(PlayerMoveEvent e){
        Player p = e.getPlayer();
        Location l = p.getLocation();
        Packet pa = new PacketPlayOutWorldParticles(EnumParticle.FALLING_DUST, true, (float)l.getX(), (float)l.getY(), (float)l.getZ(), 0, 0, 0, 0, 0, random());
//Random permet de spawn une particule d'une couleur aléatoire
        CraftPlayer cp = (CraftPlayer)p;
       cp.getHandle().playerConnection.sendPacket(pa);
    }

Ce qui donne :
1501935854-2017-08-05-14-23-01.png

(Désolé pour la qualité de l'images, pas possible de faire mieux :/)

J'ai fait quelques tentatives pour comprendre à quoi servent tous les nombres, mais je ne voit pas : les cinq premiers zéros, respectivement quatre float et un int, ne semble pas avoir d'effet. Si quelqu'un arrive à trouver leur utilité, ça m’intéresse.


Édit :

J'ai touché au code de cette manière :
Code:
Packet pa = new PacketPlayOutWorldParticles(
                EnumParticle.FALLING_DUST, true, (float)l.getX(), (float)l.getY(), (float)l.getZ(), 0.75f, 0.75f, 0.75f, 5, 50, random());
        CraftPlayer cp = (CraftPlayer)p;
        cp.getHandle().playerConnection.sendPacket(pa);
ce qui me produite ceci (c'est plutôt très sympathique) :
1501937667-2017-08-05-14-54-08.png



Du coup, j'ai également continuer mes recherches, et je suis très souvent retombé sur cette structure :
Code:
PacketPlayOutWorldParticles particles = new PacketPlayOutWorldParticles(
    type, boolean, x, y, z, randSeed, randSeed, randSeed, data, amount);
Les floats correspondrait aux "randSeed"; aucune idée de ce que ça peut-être ??! :confused:

J'ai aussi trouvé ceci :
Code:
EnumParticle particletype, int x, int y, int z, boolean londgdistance, float offsetx, float offsety, float offsetz, float speed, int amount
ce qui me parait bien plus correct. Ça signifierait que les floats correspond aux offset et à la vitesse, ce qui se tient :)

Du coup, j'en déduis que le dernier tableau d'int, correspond à la couleur, mais, étant donné que c'est un tableau et que seul la première valeur semble être importante (d'après mes test) : je trouve ça bizarre...


PS: J'ai décompiler le spigot mais les valeurs s’appellent float1, float2, etc... Ça ne donne aucune infos, ça se voit que c'est la partie "caché" et que les gens préfèrent pas qu'on y touchent :D
 
Dernière édition:

Brokeos

Développeur Java/Web indépendant
12 Mars 2012
402
42
135
26
In my bedroom
brokeos.fr
Re, désolé par avance pour le double post :)

Je croit avoir trouver quelque chose de plutôt intéressant ! J'ai repris ton code et j'ai réussi à faire spawn des particules multi-colores :)
Voici le code :
Code:
public int random(){
        Random r = new Random();
        int ra = r.nextInt(255);
        return ra;
    }
 
    @EventHandler
    public void onMove(PlayerMoveEvent e){
        Player p = e.getPlayer();
        Location l = p.getLocation();
        Packet pa = new PacketPlayOutWorldParticles(EnumParticle.FALLING_DUST, true, (float)l.getX(), (float)l.getY(), (float)l.getZ(), 0, 0, 0, 0, 0, random());
//Random permet de spawn une particule d'une couleur aléatoire
        CraftPlayer cp = (CraftPlayer)p;
       cp.getHandle().playerConnection.sendPacket(pa);
    }

Ce qui donne :
1501935854-2017-08-05-14-23-01.png

(Désolé pour la qualité de l'images, pas possible de faire mieux :/)

J'ai fait quelques tentatives pour comprendre à quoi servent tous les nombres, mais je ne voit pas : les cinq premiers zéros, respectivement quatre float et un int, ne semble pas avoir d'effet. Si quelqu'un arrive à trouver leur utilité, ça m’intéresse.


Édit :

J'ai touché au code de cette manière :
Code:
Packet pa = new PacketPlayOutWorldParticles(
                EnumParticle.FALLING_DUST, true, (float)l.getX(), (float)l.getY(), (float)l.getZ(), 0.75f, 0.75f, 0.75f, 5, 50, random());
        CraftPlayer cp = (CraftPlayer)p;
        cp.getHandle().playerConnection.sendPacket(pa);
ce qui me produite ceci (c'est plutôt très sympathique) :
1501937667-2017-08-05-14-54-08.png



Du coup, j'ai également continuer mes recherches, et je suis très souvent retombé sur cette structure :
Code:
PacketPlayOutWorldParticles particles = new PacketPlayOutWorldParticles(
    type, boolean, x, y, z, randSeed, randSeed, randSeed, data, amount);
Les floats correspondrait aux "randSeed"; aucune idée de ce que ça peut-être ??! :confused:

J'ai aussi trouvé ceci :
Code:
EnumParticle particletype, int x, int y, int z, boolean londgdistance, float offsetx, float offsety, float offsetz, float speed, int amount
ce qui me parait bien plus correct. Ça signifierait que les floats correspond aux offset et à la vitesse, ce qui se tient :)

Du coup, j'en déduis que le dernier tableau d'int, correspond à la couleur, mais, étant donné que c'est un tableau et que seul la première valeur semble être importante (d'après mes test) : je trouve ça bizarre...


PS: J'ai décompiler le spigot mais les valeurs s’appellent float1, float2, etc... Ça ne donne aucune infos, ça se voit que c'est la partie "caché" et que les gens préfèrent pas qu'on y touchent :D

La particule n'existe pas en 1.8.8.

De plus j'ai remplacé le random par une valeur fixe, j'obtiens la même chose que toi.
 

Brokeos

Développeur Java/Web indépendant
12 Mars 2012
402
42
135
26
In my bedroom
brokeos.fr
Non pas vraiment d'équivalent, mais j'ai une petite avancé :

Code:
Player player = event.getPlayer();
Location l = player.getLocation();
Packet packet = new PacketPlayOutWorldParticles(EnumParticle.REDSTONE, true, (float)l.getX(), (float)l.getY(), (float)l.getZ(), 0f, 0f, 1f, 1, 0);
CraftPlayer craftPlayer = (CraftPlayer)player;
craftPlayer.getHandle().playerConnection.sendPacket(packet);

Il m'affiche des particules en violet !