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

Scheduler() der wo immer langsammer wird?

Biberbau_99

Minecrafter
Registriert
11 März 2018
Beiträge
8
Alter
35
Diamanten
300
Hallo Leute,
ich wollte mal fragen ob es ein Scheduler() gibt der wo immer langsammer wird oder wie kann man das machen?
Also ich will nach einer Sekunde Hallo sagen und nach 2.Sekunden wieder und so weiter bis die 16.Sekunden vobei sind.

1.Sekunde = Hallo
2.Sekunde = Hallo2
4.Sekunde = Hallo3
8.Sekunde = Hallo4
16.Sekunde = HalloStopp

Liebe Grüße,
Biberbau_99
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Die eleganteste Möglichkeit, die mir gerade einfällt, ist, in der Runnable mit einem Counter zu arbeiten. Beispiel:
Code:
public class MyRunnable implements Runnable {
    private int counter;

    @Override
    public void run() {
        switch(counter) {
            case 1:
                // code
                break;
            case 2:
                // code
                break;
        }
        counter++;
    }
}

Das Switch-Statement könnte man natürlich auch durch etwas anderes, mehr variables ersetzen. Aber so als Starthilfe dürfte das wohl ganz nützlich sein.
 

petomka

Redstoneengineer
Registriert
8 Oktober 2012
Beiträge
41
Alter
26
Diamanten
322
Wenn du bereits diese counter Variable wie von @SirYwell vorgeschlagen hast, kannst du auch diese zum schedulen verwenden.
Das Schedulen kannst du auch in einer anderen Methode auslagern, und diese nur aufrufen, wenn der counter unter einem bestimmten Wert ist (oder auch direkt im switch)

Bsp.:
Java:
/**
* Methode zum erneuten schedulen
*
* @param counter Wie oft der Task bereits gelaufen ist
*/
private void reschedule(int counter) {
  this.runTaskLater(plugin, Math.square(2, counter));
}

private final int timesToRun = 5;
private int counter = 1;

public void run() {
  switch(counter) {
  //...
  }
  if(counter <= timesToRun) {
    reschedule(counter++); //inkrementiert die countervariable nach dem Methodenaufruf
  }
}
 
Oben