Welcome to Bukkit France

Inscrivez-vous maintenant pour profiter d'un accès total à tout le contenu offert par la meilleur communauté Bukkit française ! Une fois inscrit et connecté, vous pourrez contribuez à la communauté en postant vos propres sujets et questions ou en répondant à ceux existants. Vous pourrez aussi customiser votre profil, recevoir des points de réputations, communiquer avec les autres membres via le chat, et plus encore! 

  • Annonces

    • Pskyco

      Bukkit France passe sous Discord !   02/20/16

      Bukkit France est désormais passé sur Discord, au revoir donc notre vieux Teamspeak ! Téléchargez le client et venez nous rejoindre sur notre salon en suivant les instructions suivantes.
      M-à-j du 25/02/2017 : Désormais, seuls les comptes actifs sur le forum se verront donner l'accès au Discord, ce dernier n'est pas une plateforme d'aide de la même manière que le chat.
raphtsonga

Restart le timer

20 messages dans ce sujet

Version (serveur) : 1.8.8
API utilisée : Spigot
IDE utilisé : Intellij IDEA
Explications du problème rencontré : Je souhaite que lorsque la playerList n'est plus égale au chiffre/nombre dans la configuration, le timer se restart seulement je n'arrive qu'à stoppé la task.
Recherches effectuées : Google
Code : https://hastebin.com/azevodexey.vbs

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Après 20, 20} il faut rajouter ).getTaskId() de mémoire c'est sa

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 3 minutes, Manercraft a dit :

Après 20, 20} il faut rajouter ).getTaskId() de mémoire c'est sa

Nop cela ne me donne pas de méthodes.

Au passage, j'ai vu sur un forum où ils parlaient de cancel(); mais pas plus

Modifié par raphtsonga

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 2 minutes, Manercraft a dit :

Après 20, 20} il faut rajouter ).getTaskId() de mémoire c'est sa

Non, il utilise la vieille méthode shedule qui retourne bien un int.

 

@raphtsonga utilise plutôt la méthode runTaskTimer ou un trucdu genre, elle fonctionne de la meme manière mais elle te retournera un BukkitTask au lieu d'un int.

Tu pourras ensuite faire BukkitTask.cancel() (où BukkitTask sera celui que tu as récupéré)

2 personnes aiment ça

Partager ce message


Lien à poster
Partager sur d’autres sites
private static final String prefix = "§8[§aBallOfSteel§8]§r";
private static final String msgRunGame = "%sLa partie commence !";
private static final String msgCancelGame = "%sLa partie n'a pas demarré car il n'y a pas assez de personne";
private static final String msgInfoGame = "%sLa partie commence dans %d seconde%s";

// ...

new BukkitRunnable()
{
	private int time = 31;

	public void run()
	{
		if (--time == 0)
		{
			if (BallOfSteel.getInstance().playerList.size() != pl.getConfig().getInt("minPlayers"))
				Bukkit.broadcastMessage(String.format(msgCancelGame, prefix));
			else
			{
				Bukkit.broadcastMessage(String.format(msgRunGame, prefix));
				// code pour lancer la partie
			}
			cancel();
		}
		else if (time < 5 || time % 5 == 0)
			Bukkit.broadcastMessage(String.format(msgInfoGame, prefix, time, time == 1 ? "" : "s"));
	}
}.runTaskTimer(pl, 20l, 20l);

 

Modifié par Dermenslof
1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 16 minutes, Dermenslof a dit :

private static final String prefix = "§8[§aBallOfSteel§8]§r";
private static final String msgRunGame = "%sLa partie commence !";
private static final String msgCancelGame = "%sLa partie n'a pas demarré car il n'y a pas assez de personne";
private static final String msgInfoGame = "%sLa partie commence dans %d seconde%s";

// ...

new BukkitRunnable()
{
	private int time = 31;

	public void run()
	{
		if (--time == 0)
		{
			if (BallOfSteel.getInstance().playerList.size() != pl.getConfig().getInt("minPlayers"))
				Bukkit.broadcastMessage(String.format(msgCancelGame, prefix));
			else
			{
				Bukkit.broadcastMessage(String.format(msgRunGame, prefix));
				// code pour lancer la partie
			}
			cancel();
		}
		else if (time < 5 || time % 5 == 0)
			Bukkit.broadcastMessage(String.format(msgInfoGame, prefix, time, time == 1 ? "" : "s"));
	}
}.runTaskTimer(pl, 20l, 20l);

 

Ouah merci beaucoup je peux le mettre dans une autre class qui extends de BukkitRunnable mais comment lancer la partie depuis playerJoin ? Ou alors je met sa dan la class que je vous ai montré ?

 

 

Modifié par raphtsonga

Partager ce message


Lien à poster
Partager sur d’autres sites

ce n'est pas une class mais un simple bout de code. tu le met ou tu veut

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup seulement dernières question les % dans le code servent a quoi ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Ils servent à être remplacer en faisant String.format(); par exemple :)

 

Par exemple ici :

 

String.format(msgInfoGame, prefix, time, time == 1 ? "" : "s")

 

Dans le String msgInfoGame, on remplace le premier %s par le préfix, le 2ème % par le temps et le 3ème, si le temps est supérieur a 1 on met un s a seconde :)

 

Voilà un peut de doc pour t'aider :P

 

https://www.dotnetperls.com/format-java

Modifié par Dow1t

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Dow1t a dit :

Ils servent à être remplacer en faisant String.format(); par exemple :)

 

Par exemple ici :

 


String.format(msgInfoGame, prefix, time, time == 1 ? "" : "s")

 

Dans le String msgInfoGame, on remplace le premier %s par le préfix, le 2ème % par le temps et le 3ème, si le temps est supérieur a 1 on met un s a seconde :)

 

Voilà un peut de doc pour t'aider :P

 

https://www.dotnetperls.com/format-java

Ah voilà je me disais bien que je n'avais pas vu sa dans mes cours java :)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai fait le code rien ne fonctionne la console me met un null pointer exception voici :

[10:05:45 ERROR]: Error occurred while enabling BallOfSteel v0.1 (Is it up to date?)
java.lang.NullPointerException
        at net.wixglo.events.PlayerJoin.<init>(PlayerJoin.java:47) ~[?:?]
        at net.wixglo.BallOfSteel.onEnable(BallOfSteel.java:64) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:741) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.Bukkit.reload(Bukkit.java:535) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:627) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:412) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_111]

Et voici la ligne concernée dans le playerJoin : 

String prefix = pl.getConfig().getString("Prefix").replace('&', '§');

Et dans le ballOfSteel.java c'est la ligne pour register les events

Partager ce message


Lien à poster
Partager sur d’autres sites

"J'ai fait le code rien ne fonctionne la console me met un null pointer exception voici : "

Le code marche très bien (ton erreur n'a rien avoir avec le code de dermen, faudrait que tu apprennes à comprendre les exceptions c'est très pratique ^^), c'est juste que ta config ne doit pas être créée ou ne doit pas contenir la clé "Prefix" :)

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 36 minutes, Lucidiax a dit :

"J'ai fait le code rien ne fonctionne la console me met un null pointer exception voici : "

Le code marche très bien (ton erreur n'a rien avoir avec le code de dermen, faudrait que tu apprennes à comprendre les exceptions c'est très pratique ^^), c'est juste que ta config ne doit pas être créée ou ne doit pas contenir la clé "Prefix" :)

Nn nn, j'ai bien fait la config ect le code lorsque je me connecte ne lance pas le timer et l'erreur est toujours présente

Même le message de join ne fonctionne pas pourtant avant il fonctionnait avec ma config

Après je ne critique en rien dermen c'est même très gentil à lui de m'avoir donné cette solution :)

Modifié par raphtsonga

Partager ce message


Lien à poster
Partager sur d’autres sites

c'eat pas la config mais l''objet pl qui est null.
a mon avis tu fait une initialisation statique pour ta "prefix" ce qui est une grosse erreur

donne ton code, sinon on peut pas ti'aider
on te corrigera

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 11 minutes, Dermenslof a dit :

c'eat pas la config mais l''objet pl qui est null.
a mon avis tu fait une initialisation statique pour ta "prefix" ce qui est une grosse erreur

donne ton code, sinon on peut pas ti'aider
on te corrigera

Justement j'ai enlevé le static j'ai juste mit string http://prntscr.com/duqoua

J'avais tenté avec pubic String mais ne fonctionne pas nn plus

Partager ce message


Lien à poster
Partager sur d’autres sites

donne ton code en entier ..
on ne sais pas ou tu as mis ca.
et pas de screenshot stp, j'ai pas envie de tout recopier pour te corriger, il y a les balises code pour ca

Modifié par Dermenslof

Partager ce message


Lien à poster
Partager sur d’autres sites
/*
 * MIT License
 *
 * Copyright (c) 2017 Wixglo
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package net.wixglo.events;

import net.wixglo.BallOfSteel;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
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;
import org.bukkit.scheduler.BukkitRunnable;

public class PlayerJoin implements Listener {

    public BallOfSteel pl;
    public PlayerJoin(BallOfSteel ballOfSteel) {
        this.pl = ballOfSteel;
    }

    int timer = 30;
    int task;

    String prefix = pl.getConfig().getString("prefix").replace('&', '§');
    String msgRunGame = prefix+"§rLa partie commence";
    String msgCancelGame = prefix+"§rLa partie n'a pas demarré car il n'y a pas assez de personnes";
    String msgInfoGame = prefix+"§rLa partie commence dans "+timer+"s";

    @EventHandler
    public void playerJoin(PlayerJoinEvent e) {
        Player p = e.getPlayer();
        BallOfSteel.getInstance().playerList.add(p);

        e.setJoinMessage(ChatColor.translateAlternateColorCodes('&', pl.getConfig()
                .getString("Message de connexion")
                .replace("%PLAYER", p.getName())
                .replace("%COUNTPLAYER", toString().valueOf(BallOfSteel.getInstance().playerList.size()))
                .replace("%MAXPLAYER", toString().valueOf(Bukkit.getMaxPlayers()))));

        new BukkitRunnable() {

            public int time = 31;

            public void run() {

                if(--time == 0) {

                    if(BallOfSteel.getInstance().playerList.size() != pl.getConfig().getInt("minPlayers")) {
                        Bukkit.broadcastMessage(prefix+msgCancelGame);

                    }else {
                        Bukkit.broadcastMessage(prefix+msgRunGame);
                    }
                    cancel();
                }
                else if(time < 5 || time % 5 == 0) {
                    Bukkit.broadcastMessage(prefix+msgInfoGame);
                }
            }
        }.runTaskTimer(pl, 20l, 20l);

    }

    @EventHandler
    public void playerQuit(PlayerQuitEvent e) {
        Player p = e.getPlayer();
        BallOfSteel.getInstance().playerList.remove(p);

        e.setQuitMessage(ChatColor.translateAlternateColorCodes('&', pl.getConfig()
                .getString("Message de deconnexion"))
                .replace("%PLAYER", p.getName())
                .replace("%COUNTPLAYER", toString().valueOf(BallOfSteel.getInstance().playerList.size()))
                .replace("%MAXPLAYER", toString().valueOf(Bukkit.getMaxPlayers())));
    }
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

donc c'est bien ce que je disais, le problème vient bien d'une initialisation statique.

quand tu déclare les fields de ta  class et que tu les initialises en même temps
on appel ca une initialisation statique parce que ceci est créer juste avant la création de l'instance elle même (l'appel du constructeur).

et dans ton cas plus particulièrement,  c'est dans ton constructeur que tu défini la valeur de l'objet pl.
donc l'initialisation de ton objet prefix ne peut pas fonctionner car a ce moment la pl vaut null.
donc si pl vaut null: pl.getConfig() == null.getConfig() == NullPointerException

 

et en plus WTF, tu défini tes message par msg = prefix + "...";
et derrière tu fait Bukkit.broadcastMessage(prefix + msg)
tu vois pas un gros problème ???
 

 

correction:

	public BallOfSteel pl;
	private String prefix;
	private static final String msgRunGame = "%sLa partie commence !";
	private static final String msgCancelGame = "%sLa partie n'a pas demarré car il n'y a pas assez de personne";
	private static final String msgInfoGame = "%sLa partie commence dans %d seconde%s";

	public PlayerJoin(BallOfSteel ballOfSteel)
	{
		pl = ballOfSteel;
		prefix = ChatColor.translateAlternateColorCodes('&', pl.getConfig().getString("prefix"));
	}

 

 

et franchement il va falloir franchement réfléchir avant de pondre du code, il y a plein d'erreurs dans ton code 

pl == BallOfSteel.getInstance()
donc soit tu utilise pl soi BallOfSteel.getInstance(), mais pas les deux

écrire ceci

toString().valueOf(BallOfSteel.getInstance().playerList.size())

reviens a cela:

"" + pl.playerList.size()

 

 

et pour finit tu compte lancer une nouvelle task à chaque fois qu'un joueur rejoins le server ???
 

Modifié par Dermenslof
1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 5 minutes, Dermenslof a dit :

donc c'est bien ce que je disais, le probleme viens bien d'une initialisation statique.

quand tu declare les fields de ta  class et que tu les initialises en meme temps
on appel ca une initialisation statique parce que ceci est creer juste avant la creation de l'instance elle meme (l'appel du constructeur).

et dans ton cas plus particulièrement,  c'est dans ton constructeur que tu defini la valeur de l'objet pl.
donc l'initialisation de ton objet prefix ne peut pas fonctionner car a ce moment la pl vaut null.
donc si pl vaut null: pl.getConfig() == null.getConfig() == NullPointerException

 

et en plus WTF, tu definit tes message par msg = prefix + "...";
et derriere tu fait Bukkit.broadcastMessage(prefix + msg)
tu vois pas un gros probleme ???
 

 

correction:


	public BallOfSteel pl;
	private String prefix;
	private static final String msgRunGame = "%sLa partie commence !";
	private static final String msgCancelGame = "%sLa partie n'a pas demarré car il n'y a pas assez de personne";
	private static final String msgInfoGame = "%sLa partie commence dans %d seconde%s";

	public PlayerJoin(BallOfSteel ballOfSteel)
	{
		pl = ballOfSteel;
		prefix = pl.getConfig().getString("prefix").replace('&', '§');
	}

 

 

et franchement il va falloir franchement reflechir avant de pondre du code, il y a plein d'erreurs dans ton code 

pl == BallOfSteel.getInstance()
donc soit tu utilise pl soi BallOfSteel.getInstance(), mais pas les deux

ecrire ceci


toString().valueOf(BallOfSteel.getInstance().playerList.size())

reviens a cela:


"" + pl.playerList.size()

 

 

et pour finit tu compte lancer une nouvelle task a chaque fois au'un joueur rejoins le server ???
 

Tout d'abord merci pour tout ces conseils. Ensuite, pour le toString().valueOf c'est pour lire la variable avant je ne faisais pas comme ca et cela ne fonctionnait pas.

Pour la task, je compte la lancer lorsque il y a le nombre nécessaire de joueur là pour le moment je cherche déjà à ne plus avoir d'erreur.

Merci pour la correction au niveau du pl et du getInstance je vient de le corriger.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.