• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Spigot Scheduler startet nicht

Status
Nicht offen für weitere Antworten.

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
Hallo,

ich programmiere zur Zeit ein Fußballplugin und komme gerade nicht weiter. Ich habe eine methode, welche einen Countdown im Chat anzeigt, jedohc wird der Schdeuler dazu nicht ausgeführt.

Im Log sind keine Fehler.


Code:
package de.dsltrans.soccer.game;

import java.util.ArrayList;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

import de.dsltrans.soccer.main.Main;

public class EveryTick {

    public static final String error =  Main.error;
    public static final String info = Main.info;
    public static final String succes = Main.succes;
    
    private Plugin plugin = Main.getPlugin();
    private ArrayList<Player> players = Players.getPlayers();
    private int countdown = 10;
    private int taskID;
    
    public void startContdown() {
        System.out.println("hallo!");
        taskID = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
            
            @Override
            public void run() {
                if(players.size() % 2 != 0) {
                    if(countdown > 1) {
                        new Players().sendMessage(players, info + "Das Spiel startet in " + succes + countdown + info + "Sekunden!");
                        countdown--;
                    }else if(countdown == 1) {
                        new Players().sendMessage(players, info + "Das Spiel startet in " + succes + "einer " + info + "Sekunde!");
                        countdown--;
                    }else {
                        countdown--;
                        new Players().sendMessage(players, info + "Das Spiel startet " + succes + "jetzt" + info +"!");
                    }
                    
                }else {
                    new Players().sendMessage(players, error + "Abbruch! Die Spieleranzahl muss gerade sein!");
                    countdown = 10;
                    
                    
                }
                
            }
        }, 0, 20);
        
        
        
    }
    
    
}
Sorry für die rechtschreibfehler, bin gerade in eile
 

SirYwell

Vorarbeiter
Osterei Experte
Mitglied seit
30 Juni 2017
Beiträge
251
Alter
20
Minecraft
SirYwell
Zeile 28: players.size() % 2 != 0 bedeutet, alles innerhalb deiner if-Abfrage wird genau dann ausgeführt, wenn die Größe der ArrayList Modulo 2 nicht 0 ist. Das widerspricht allerdings deinem else bzw. der Meldung in Zeile 41.

Allerdings würde ich dir sowieso dazu raten, erst einmal die Grundlagen von Java ordentlich zu lernen. Ich lasse dir mal diesen Link da.
 

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
Hallo,
Und Danke für die schnelle Antwort.
Das Plugin ist für mich zum üben. Aber sind arrayLists nicht so, dass die Size, wenn 2 Player drin sind 1 ist?

SkyPlayerTV

PS: Das Buch hab ich schon, bin dann nur bei der OOP nicht mehr durchgestiegen. Hab den Teil dann über YT Tutorials gelernt. So halb wie vermute.
 

SirYwell

Vorarbeiter
Osterei Experte
Mitglied seit
30 Juni 2017
Beiträge
251
Alter
20
Minecraft
SirYwell
Du verwechselts hier den Index mit der Größe. Der Index gibt die Stelle an, an welcher ein Element ist, die Größe gibt die Anzahl an Elementen an. Ich versuche das mal zu verdeutlichen:
| 0 | 1 | 2 | 3 | 4 | 5 | <-- Index
| A | B | C | D | E | F | <-- Elemente
Es sind nun 6 Elemente in der Liste, aber der maximale Index ist 5. Wären A-F nun Spieler, hättest du eine Liste mit 6 Spielern (also eine gerade Anzahl) und eine Liste mit der Größe 6.

Dass der Index in Java und in vielen anderen Programmiersprachen bei 0 anfängt, ist anfangs vielleicht gewöhnungsbedürftig, aber hat verschiedene Gründe. Wenn du dir das genauer anschauen möchtest, kannst du dir ja mal diese Antwort auf StackOverflow durchlesen.
 

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
Hallo,
okay, dann ist mir das jetzt auch klar. Ich hatte es davor auch schon anders rum, hat aber auch nicht funktioniert. Also würde ich jetzt Mal im Scheduler eine logausgabe machen lassen, und wenn sie funktioniert das Problem in der Players.sendMessage() Methode suchen. Kann es was damit zu tun haben, das es nicht static ist?
 
Zuletzt bearbeitet:

SirYwell

Vorarbeiter
Osterei Experte
Mitglied seit
30 Juni 2017
Beiträge
251
Alter
20
Minecraft
SirYwell
Ich weiß nicht, was deine Players-Klasse macht, allerdings deutet es oftmals auf geringe Erfahrung und dadurch entstehende Fehler hin, wenn du zu viele statische Variablen und Methoden hast. Am besten wäre es daher, wenn du erläuterst, was genau der Sinn dieser Klasse ist.
 

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
Sie verwaltet die mitspielenden Player, da ich gerade am PC bin, hab ich mal den Code von ihr:

Java:
package de.dsltrans.soccer.game;

import java.util.ArrayList;

import org.bukkit.entity.Player;

public class Players {

    private static ArrayList<Player> players = new ArrayList<>();

    public static ArrayList<Player> getPlayers() {
        return players;
    }

    public void setPlayers(ArrayList<Player> players) {
        Players.players = players;
    }
    // Die fragliche Methode
    public void sendMessage(ArrayList<Player> receivers, String msg) {
        for(int i = 0; i >= receivers.size(); i++) {
            receivers.get(i).sendMessage(msg);
        }
    }
    
    public void addPlayer(Player p) {
        players.add(p);
    }
    
    
    
    
}
Kann es was damit zu tun haben, das es nicht static ist?
Hab mich da vertan, nur die ArrayList ist static, sowie der zugehörige Getter.
Ich mach jetzt mal das mit der Logausgabe und melde mich dann nochmal.
 

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
Ok, es funktioniert. Also ist die .sendMessage Methode falsch.
 

Brickchef

Schafhirte
Osterei Experte
Mitglied seit
8 Oktober 2017
Beiträge
120
Alter
19
Minecraft
Brickchef
Da List das Iterator Interface implementiert kannst du die for Schleife kannst du auch leserlicher gestalten:
Java:
for (Player p : reveivers) {
   p.sendMessage(msg);
}
Davon abgesehen implementiert ArrayList das List Interface welches ich als Datentyp für die players Variable sowie für die Parameter verwenden würde, da die Implementierung der Liste hier nicht relevant ist.
 

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
Also als forEach-Schleife, oder? Jedenfalls funktioniert es damit. Wird das Listinterface von
java.util.List; importiert?
 

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
Ok, jetzt noch eine Frage: warum wird, wenn ich den Scheduler auf einen Intervall von 20 Ticks setze jede Nachricht 2mal ausgegegben?
 

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
ihr habt den code....

Hallo,

ich programmiere zur Zeit ein Fußballplugin und komme gerade nicht weiter. Ich habe eine methode, welche einen Countdown im Chat anzeigt, jedohc wird der Schdeuler dazu nicht ausgeführt.

Im Log sind keine Fehler.


Code:
package de.dsltrans.soccer.game;

import java.util.ArrayList;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

import de.dsltrans.soccer.main.Main;

public class EveryTick {

    public static final String error =  Main.error;
    public static final String info = Main.info;
    public static final String succes = Main.succes;
   
    private Plugin plugin = Main.getPlugin();
    private ArrayList<Player> players = Players.getPlayers();
    private int countdown = 10;
    private int taskID;
   
    public void startContdown() {
        System.out.println("hallo!");
        taskID = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
           
            @Override
            public void run() {
                if(players.size() % 2 != 0) {
                    if(countdown > 1) {
                        new Players().sendMessage(players, info + "Das Spiel startet in " + succes + countdown + info + "Sekunden!");
                        countdown--;
                    }else if(countdown == 1) {
                        new Players().sendMessage(players, info + "Das Spiel startet in " + succes + "einer " + info + "Sekunde!");
                        countdown--;
                    }else {
                        countdown--;
                        new Players().sendMessage(players, info + "Das Spiel startet " + succes + "jetzt" + info +"!");
                    }
                   
                }else {
                    new Players().sendMessage(players, error + "Abbruch! Die Spieleranzahl muss gerade sein!");
                    countdown = 10;
                   
                   
                }
               
            }
        }, 0, 20); //Hier ist die Intervallangabe
       
       
       
    }
   
   
}
Sorry für die rechtschreibfehler, bin gerade in eile
 

SirYwell

Vorarbeiter
Osterei Experte
Mitglied seit
30 Juni 2017
Beiträge
251
Alter
20
Minecraft
SirYwell
Vielleicht rufst du deine Methode irgendwie zwei mal auf oder hast Spieler doppelt in der Liste
 

DerFrZocker

Miner
Osterei Experte
Mitglied seit
10 Dezember 2017
Beiträge
153
Alter
19
Minecraft
DerFrZocker
Um doppelt Spieler in der Liste zu verhindern, würde sich eine set empfehlen.
 

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
Naja, wenn ich den Intervall auf 40 Ticks also 2 sekunden stelle, kommt nur eine Nachricht
 

SkyPlayerTV

Minecrafter
Mitglied seit
6 August 2017
Beiträge
20
Minecraft
SkyPlayerTV
Hab jetzt, wenn ich das richtig verstanden hab was @DerFrZocker geschrieben hat, addPlayer() der Playerklasse hinzugefügt. Jetzt geht es auch mit Intervall auf 20.
 
Status
Nicht offen für weitere Antworten.

Twitter

Allgemein
Hilfe Benutzer
  • IgelZocker IgelZocker:
    Werde ich mir mal anschauen, danke :cake:
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    So spät auf die Nacht würd ich das nicht mehr machen.
  • IgelZocker IgelZocker:
    Ich habe mir auch nur ein paar Einblicke ver
    schafft
  • Kroseida Kroseida:
    mach ne Ausbildung, lernst du mehr
  • Kroseida Kroseida:
    und bist für die Wirtschaft zu gebrauchen xD
  • Matthias Matthias:
    Guten Morgen
  • Stern☆ Stern☆:
    Morgen :)
  • LottaXL LottaXL:
    Moin, moin =)
  • IgelZocker IgelZocker:
    Wenn die Ausbildungsplätze nicht so mager bezahlt werden würden, dann
    würde ich eine Ausbildung bevorzugen.
  • IgelZocker IgelZocker:
    Und guten Morgen
    :p
  • SirYwell SirYwell:
    "lernst du mehr" halte ich für eine gewagte Aussage :D
  • iTz_Proph3t iTz_Proph3t:
    @IgelZocker studiere Angewandte Informatik an ner FH, Mathe ist durchaus machbar, wenn man am Ball bleibt
  • iTz_Proph3t iTz_Proph3t:
    aber es ist halt auch nur Mathematik die man vlt auch mal brauchen kann und nicht so nutzloses zeug :p
  • SirYwell SirYwell:
    Mathe ist niemals nutzloses Zeug xD
  • Kroseida Kroseida:
    @SirYwell ich gucke mir nur die Stundenten in unserer Firma an die keine Ahnung von der Praxis haben und haue mir gegen den Kopf.
  • Kroseida Kroseida:
    Können mir irgendwelche Algorithmen nennen aber haben kein Plan wie sie die Umsetzen und was genau die tun
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Eventuell bekommt ihr nur die schlechten Studenten ab.
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Studium ist übrigens nicht als Ersatz für ne Ausbildung als Softwareentwickler gedacht. Wer nach dem Studium Webseiten baut, wär in der Ausbildung besser aufgehoben gewesen.
  • Kroseida Kroseida:
    Also als Erweiterung finde ich es wirklich okay, aber reines Studium fehlt einfach die Erfahrung.
  • Kroseida Kroseida:
    Gefühlt* bin kein Experte, ist nur wie ich das mitbekomme.
  • SirYwell SirYwell:
    Du siehst halt vermutlich wirklich nur die Studenten, die halt nix können. Aber insbesondere sind halt die Themen unterschiedlich, an der Uni lernt man aber halt trotzdem mehr. Auch wenn man in einem reinen Softwareentwickler-Job damit nicht viel anfangen kann.
  • Kroseida Kroseida:
    Da hast du wohl Recht. Bin mal gespannt, evtl. fange ich nächstes Jahr, nach meiner Ausbildung, auch ein Studium an.
  • Kroseida Kroseida:
    Bin mir da aber nicht sicher da ich im Moment relativ sicher einen Platz als Software Architekt hätte
  • Stern☆ Stern☆:
    Die werden immer gesucht bei Minigames und speziell Citybuildserver. Kannst dich dort ja mal beweisen:)
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Zufällig bei Stern und Mond GmbH
    ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️: Zufällig bei Stern und Mond GmbH
    Oben