Aller au contenu
Invité

[Java] Un vrai "wait" ?

Messages recommandés

Invité

Bonjour,

 

Il y a quelques semaines je suis venu ici pour vous demander si il exister un "wait" en Java.

 

Aujourd'hui je réitère ma demande puisque la solution apporter par @SwiKZiiK n'est fonctionne plus (ou n'est plus d'actualité ) puisque par tout les moyens que ce soit, il y a toujours une erreur.

 

Donc, qui à une vrai solution (car je veux l'utiliser dans un event et je sais que c'est possible vu qu'en skript cela marche ) ?

 

Pour ce qui veulent, j'ai la fameuse vague rouge en dessous de "scheduleSyncDelayedTask".

Mon code :

 

[spoiler=Listener avec la tentative de wait]

package com.swencake.hubcore;


import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;


public class Listeners implements Listener
   {

       @EventHandler
       public void onJoin(PlayerJoinEvent onJoin)
           {

               Player player = onJoin.getPlayer();
               //Delai
               int seconds = 1; // secondes

               Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable()
                   {
                       @Override
                        public void run()
                            {
                                onJoin.setJoinMessage(ChatColor.DARK_GRAY + "[" + ChatColor.RED + "+" + ChatColor.DARK_GRAY + "] " + ChatColor.BLUE + player.getName());
                               player.performCommand("hub");
                               player.setHealth(20.0);
                               player.setFoodLevel(20);
                               player.setFireTicks(0);
                               player.setLevel(0);
                               player.sendMessage(ChatColor.BOLD + "" + ChatColor.DARK_GRAY + "--------------------");
                               player.sendMessage(ChatColor.BLUE + "Bienvenue sur " + ChatColor.GOLD + "Legends " + ChatColor.BLUE + "!");
                               player.sendMessage(ChatColor.BOLD + "" + ChatColor.DARK_GRAY + "--------------------");
                               if(player.hasPermission("mod.hub.bypass"))
                                   {
                                       player.setGameMode(GameMode.CREATIVE);
                                   }
                               else
                                   {
                                       player.setGameMode(GameMode.ADVENTURE);
                                       player.getInventory().clear();
                                   }
                            }
                   }, (seconds * 20));


           }

       @EventHandler
       public void onQuit(PlayerQuitEvent onQuit)
           {
               Player player = onQuit.getPlayer();
               onQuit.setQuitMessage(ChatColor.DARK_GRAY + "[" + ChatColor.RED + "-" + ChatColor.DARK_GRAY + "] " + ChatColor.BLUE + player.getName());
           }

       }

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité

Tu dois refermer la boucle en définissant le Delayed comme celà :

 

}, secondesL, 20L); // Remplaçe secondes par le nombre de ticks que tu veux 1 secondes = 20 ticks

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Tu dois refermer la boucle en définissant le Delayed comme celà :

 

}, secondesL, 20L); // Remplaçe secondes par le nombre de ticks que tu veux 1 secondes = 20 ticks

 

Effectivement, je n'avais pas vu. Merci :)

 

EDIT : BAh enfait, ça ne change rien :(

[spoiler=Erreur d'eclipse --&gt]

The method scheduleSyncDelayedTask(Plugin, Runnable, long) in the type BukkitScheduler is not applicable for the arguments (Listeners, new Runnable(){}, int)

 

 

Salut,

 

Ici c'est du skript, pas du java ...

 

Et donc ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité

Hum, merci, je vais tester cela ! :)

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité

@SwiKZiiK Il n'y a aucun rapport entre ce que tu dis et l'erreur renvoyé par Eclipse lol.

Dans ta classe principale, crée une instance (public static TaMain instance;).

Ensuite, définis-la dans ton onEnable(this = instance;).

Puis crée la méthode pour la récupérer :

 

public static TaMain getInstance() {

return instance;

}

 

 

Après, dans ton scheduleSyncRepeatingTask au lieu de mettre this ou plugin tu mets TaMain.getInstance()

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Salut,

 

Ici c'est du skript, pas du java ...

Rappel moi en quoi est fait skript ? En java, donc il n'y a pas de problème d'avoir une demande d'aide pour du java ... x)

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
@SwiKZiiK Il n'y a aucun rapport entre ce que tu dis et l'erreur renvoyé par Eclipse lol.

Dans ta classe principale, crée une instance (public static TaMain instance;).

Ensuite, définis-la dans ton onEnable(this = instance;).

Puis crée la méthode pour la récupérer :

 

public static TaMain getInstance() {

return instance;

}

 

 

Après, dans ton scheduleSyncRepeatingTask au lieu de mettre this ou plugin tu mets TaMain.getInstance()

 

Merci à toi encore poir ta réponse :) Je vais tester cela !

 

Rappel moi en quoi est fait skript ? En java, donc il n'y a pas de problème d'avoir une demande d'aide pour du java ... x)

 

Merci d'avoir developpé x)

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Merci à toi encore poir ta réponse :) Je vais tester cela !

 

 

 

Merci d'avoir developpé x)

Sinon @Galaxie69 a raison, donc normalement ton scheduler devrait fonctionner. Et de rien x) Mais en vrai je n'ai pas fait grand choses

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité

@Galaxie69, je n'est plus d'erreur au niveau du scheduler mais j'en ai encore une sur l'instance (sur le "this = instance"), eclipse me renvoi ça :

The left-hand side of an assignment must be a variable

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
@Galaxie69, je n'est plus d'erreur au niveau du scheduler mais j'en ai encore une sur l'instance (sur le "this = instance"), eclipse me renvoi ça :

The left-hand side of an assignment must be a variable

Bah au pire pourquoi pas faire instance = this; (je ne suis pas sur mais essaye)...

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité

Ok merci je vais tester :)

 

EDIT : Effectivement cela a l'air de marcher !

Partager ce message


Lien à poster
Partager sur d’autres sites

Regarde y a plus simple. Prenons exemple, tu veux envoyer un message, attendre 10 secondes, et envoyer un autre message. Tu fais ça :

 

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Regarde y a plus simple. Prenons exemple, tu veux envoyer un message, attendre 10 secondes, et envoyer un autre message. Tu fais ça :

 

player.sendMessage("Ton premier message.");
TimeUnit.SECONDS.sleep(10);
player.sendMessage("Ton deuxième message.");

 

J'ai déjà essayer avec ton exemple d'avant mais cela ne marchait pas.

 

La solution de @Galaxie69 est super ! :)

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Regarde y a plus simple. Prenons exemple, tu veux envoyer un message, attendre 10 secondes, et envoyer un autre message. Tu fais ça :

 

player.sendMessage("Ton premier message.");
TimeUnit.SECONDS.sleep(10);
player.sendMessage("Ton deuxième message.");

Ouais fin bon, simple mais ça ne remplace un scheduler x)

Partager ce message


Lien à poster
Partager sur d’autres sites
J'ai déjà essayer avec ton exemple d'avant mais cela ne marchait pas.

 

La solution de @Galaxie69 est super ! :)

Es-tu sûr d'avoir ajouté le bloc try/catch avec l'exception InterruptedException ? Comme ceci :

 

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

Partager ce message


Lien à poster
Partager sur d’autres sites

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.