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

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
 
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
 
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