Configuration Résolu Java : rotation tête de monstre

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Salut,

Ajoute un message de débug (print console ou broadcast) dans ta boucle où tu affiches les nouvelles coordonnées de l'armor stand. Tu vera directement où ça bloque ;)


Cordialement,
Detobel36
J'ai effectué ce que tu as demandé. Voici donc en premier le code avec les Sysout pour se repérer et ensuite les logs serveur. Tout fonctionne bien pourtant.

Code :
Code:
package fr.alexfatta.armorstand.manager;

import java.util.ArrayList;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.ArmorStand;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;

import fr.alexfatta.armorstand.main;

public class ArmorStandManager {

    private static main instance;

    private static ArrayList<ArmorStand> stands = new ArrayList<>();

    public static ArmorStand spawnNewArmorStand(Location loc) {
        System.out.println("SpawnNewArmorStand");
        ArmorStand stand = spawnArmorStand(loc);
        runnable(stand);
        return stand;
    }

    public static ArmorStand spawnArmorStand(Location loc) {
        System.out.println("spawnArmorStand");
        ArmorStand stand = loc.getWorld().spawn(loc, ArmorStand.class);
        stand.setGravity(false);
        stand.setSmall(false);
        ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1);
        SkullMeta meta = (SkullMeta) skull.getItemMeta();
        meta.setOwner("MHF_WSkeleton");
        skull.setItemMeta(meta);
        stand.setHelmet(skull);
        stand.setVisible(true);
        stand.setCustomNameVisible(false);
        stands.add(stand);
        return stand;
    }

    public static void runnable (ArmorStand stand) {
        Bukkit.getScheduler().scheduleSyncRepeatingTask(getInstance(), new Runnable() {

            @Override
            public void run() {
                System.out.println("Début runnable");
                Location newLocation = (Location) stand.getLocation().clone();
                float pitch = newLocation.getPitch() + 1;
                newLocation.setPitch(pitch);
                System.out.println("Ancien pitch : " + stand.getLocation().getPitch() + "\nNouveau pitch : " + newLocation.getPitch());
                stand.teleport(newLocation);
                System.out.println("Stand téléporté, nouveau runnable appelé.");
            }
        }, 20L, 20L);
    }

    public static void removeArmorStand(){
        for(ArmorStand stand : stands) {
            stand.remove();
        }
        stands.clear();
    }

    public static main getInstance() {
        return instance;
    }

    public static void setInstance(main instance) {
        ArmorStandManager.instance = instance;
    }

}
Console :
Code:
[21:47:16 INFO]: AlexFatta issued server command: /as set
[21:47:16 INFO]: SpawnNewArmorStand
[21:47:16 INFO]: spawnArmorStand
[21:47:17 INFO]: DÚbut runnable
[21:47:17 INFO]: Ancien pitch : 14.100033
Nouveau pitch : 15.100033
[21:47:17 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:18 INFO]: DÚbut runnable
[21:47:18 INFO]: Ancien pitch : 15.100033
Nouveau pitch : 16.100033
[21:47:18 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:20 INFO]: DÚbut runnable
[21:47:20 INFO]: Ancien pitch : 16.100033
Nouveau pitch : 17.100033
[21:47:20 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:21 INFO]: DÚbut runnable
[21:47:21 INFO]: Ancien pitch : 17.100033
Nouveau pitch : 18.100033
[21:47:21 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:22 INFO]: DÚbut runnable
[21:47:22 INFO]: Ancien pitch : 18.100033
Nouveau pitch : 19.100033
[21:47:22 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:23 INFO]: DÚbut runnable
[21:47:23 INFO]: Ancien pitch : 19.100033
Nouveau pitch : 20.100033
[21:47:23 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:24 INFO]: DÚbut runnable
[21:47:24 INFO]: Ancien pitch : 20.100033
Nouveau pitch : 21.100033
[21:47:24 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:25 INFO]: DÚbut runnable
[21:47:25 INFO]: Ancien pitch : 21.100033
Nouveau pitch : 22.100033
[21:47:25 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:26 INFO]: DÚbut runnable
[21:47:26 INFO]: Ancien pitch : 22.100033
Nouveau pitch : 23.100033
[21:47:26 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:27 INFO]: DÚbut runnable
[21:47:27 INFO]: Ancien pitch : 23.100033
Nouveau pitch : 24.100033
[21:47:27 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:28 INFO]: DÚbut runnable
[21:47:28 INFO]: Ancien pitch : 24.100033
Nouveau pitch : 25.100033
[21:47:28 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:29 INFO]: DÚbut runnable
[21:47:29 INFO]: Ancien pitch : 25.100033
Nouveau pitch : 26.100033
[21:47:29 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:30 INFO]: DÚbut runnable
[21:47:30 INFO]: Ancien pitch : 26.100033
Nouveau pitch : 27.100033
[21:47:30 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:31 INFO]: DÚbut runnable
[21:47:31 INFO]: Ancien pitch : 27.100033
Nouveau pitch : 28.100033
[21:47:31 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:32 INFO]: DÚbut runnable
[21:47:32 INFO]: Ancien pitch : 28.100033
Nouveau pitch : 29.100033
[21:47:32 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:33 INFO]: DÚbut runnable
[21:47:33 INFO]: Ancien pitch : 29.100033
Nouveau pitch : 30.100033
[21:47:33 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:34 INFO]: DÚbut runnable
[21:47:34 INFO]: Ancien pitch : 30.100033
Nouveau pitch : 31.100033
[21:47:34 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:35 INFO]: DÚbut runnable
[21:47:35 INFO]: Ancien pitch : 31.100033
Nouveau pitch : 32.100033
[21:47:35 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:36 INFO]: DÚbut runnable
[21:47:36 INFO]: Ancien pitch : 32.100033
Nouveau pitch : 33.100033
[21:47:36 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:37 INFO]: DÚbut runnable
[21:47:37 INFO]: Ancien pitch : 33.100033
Nouveau pitch : 34.100033
[21:47:37 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:38 INFO]: DÚbut runnable
[21:47:38 INFO]: Ancien pitch : 34.100033
Nouveau pitch : 35.100033
[21:47:38 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:39 INFO]: DÚbut runnable
[21:47:39 INFO]: Ancien pitch : 34.100033
Nouveau pitch : 35.100033
[21:47:39 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:40 INFO]: DÚbut runnable
[21:47:40 INFO]: Ancien pitch : 34.100033
Nouveau pitch : 35.100033
[21:47:40 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:41 INFO]: DÚbut runnable
[21:47:41 INFO]: Ancien pitch : 34.100033
Nouveau pitch : 35.100033
[21:47:41 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.
[21:47:42 INFO]: DÚbut runnable
[21:47:42 INFO]: Ancien pitch : 34.100033
Nouveau pitch : 35.100033
[21:47:42 INFO]: Stand tÚlÚportÚ, nouveau runnable appelÚ.

Bon nous passerons outre les U a la place des é xD Mais bizarre que tout fonctionne et que l'armorstand ne bouge pas :/

AlexFatta
 

A:Z

Moi même, et en personne
17 Décembre 2017
16
1
4
20
40 km autour de Paris
Sinon plutôt que de téléporter l'armor stand, ne peut on pas seulement changer l'orientation de sa tête ? (Via un simulacre d'entitydata par exemple)
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonjour !

Detobel j'ai essayé avec 10, 15 et 30 mais il ne se passe rien. Rien c'est à dire que l'armorstand ne bouge pas d'un pouce. Il ne fais rien :/

@A:Z j'ai pas compris ^^

AlexFatta
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonjour à tous ! :D

C'est bon problème résolu ! En modifiant le pitch cela ne fonctionnait pas. Grâce à l'aide d'un tiers, j'ai utiliser la rotation de la tête avec la méthode setHeadPose(EulerAngle angle) puis utiliser Math pour convertir l'int en radian ! :D

Code:
    public static void runnable (ArmorStand stand) {
        Bukkit.getScheduler().scheduleSyncRepeatingTask(getInstance(), new Runnable() {
            
            int y = -360;

            @Override
            public void run() {
                Location newLocation = stand.getLocation();
                newLocation.setPitch(y);
                stand.teleport(newLocation);
                stand.setHeadPose(new EulerAngle(0, Math.toRadians(y), 0));
                
                y += 1;
            }
        }, 1, 1);
    }

Voilà ! :D Le reste du code est inchangé.

AlexFatta