Minecraft Plugin programmieren Schedular/Timer/Countdown stoppen

1 Antwort

Du hast es doch da schon stehen. Du weist dem Scheduler einen Integer zu,
z.B. countdown. Dann machst du vor Bukkit.getScheduler()...
countdown = Bukkit.getScheduler()...
Stoppen tust du diesen mit Bukkit.getScheduler().cancelTask(countdown);

Dies kannst du natürlich in schöne Methoden packen, um dies z.B. mit Commands zu stoppen/starten. Beachte dabei bitte, dass du ein Boolean nutzt, der sich zu true stellt, wenn der Scheduler anfängt. Dann ist eine Abfrage wie z.B. if(running).
Ich hoffe, ich konnte dir helfen.

LG Paroone

Minecraft Spigot 1.8.x plugin mit mehreren commands & was ist die GameState?

Hey, ich möchte gerne ein ein Plugin mit einem Befehl machen der Mehrere argumente besitzt aber wenn ich das mache kommt ein problem mit dem Plugin und dem Server!

  1. Frage: Wenn man ein MiniGame programmiert dann verwendet man die Klasse "gamestate"! Was ist die Klasse, für was wird sie gebraucht und was macht die Klasse?

Danke für eure Antworten im Voraus!

...zur Frage

Wie kann ich meinen taschenrechner programmieren?

Hey, wir bekommen für das neue schuljahr grafikfähige taschenrechner. Die kann man auch am pc amschließen und sie haben einen internen speicher von 8 gb. Also dachte ich man könnte theoretisch kleinigkeiten darauf programmieren, wie minigames oder so.

Ich müsste dann nur wissen welche sprache ich lernen muss und wie ich das mit der grafik mache. Am besten alles kostenlos ^^

Unnnd vielleicht auch wie man texte daraufladen kann (wir können gar nicht spicken das wird kontrolliert, ust nur aus interesse)

...zur Frage

Bukkit Plugins Programmieren!

Hallo ich ein kleines Test Plugin geschrieben (Kann noch nicht gut programmieren). Es ist einfach ein Countdown und dort muss ich denn Integer ja wieder auf die Anfangszahl setzen aber wie und wo ? :D

Code:

public class Countdown extends JavaPlugin implements Listener{

int high = 21;
int countdown;

@Override
public void onEnable() {
    
}

@Override
public void onDisable() {
    
}

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    final Player p = (Player) sender;
    
    if(cmd.getName().equalsIgnoreCase("Countdown")) {
        p.setLevel(20);
        p.sendMessage("§5Der Countdown hat gestartet!");
        countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
                if(high != 0) {
                    high--;
                    p.sendMessage("§6Noch " + high + " §6Sekunden!");
                    p.setLevel(high);
                }else {
                    p.sendMessage("§cDein Hunger wurde geleert!");
                    p.setFoodLevel(0);
                    p.setLevel(0);
                    Bukkit.getScheduler().cancelTask(countdown);

                }
                
                
            }
        }, 0, 20);
        
        
        
        
        return true;
    }
    
    
    return false;
    
}

}

...zur Frage

Bei bestimmter Spielerzahl Countdown Starten?

ich programmiere gerade ein Plugin und ab auch schon alles geschaut das es z,b einen Spieler erkennt aber er führt den Countdown nicht aus! es kommt auch keine fehlermeldung

Mein PlayerJoinEvent + Countdown:

    if(Bukkit.getOnlinePlayers().size() == 1){
        scheduler = Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, new Runnable(){

            @Override
            public void run() {
                if(nummer != 0){
                    nummer--;
                    Bukkit.broadcastMessage("§7§1"+nummer);
                }else{
                    Bukkit.broadcastMessage("Go");
                    Bukkit.getScheduler().cancelTask(scheduler);
                }
                
            }
            
        }, 0, 20);
        
    }
...zur Frage

Minecraft "Anti Chat Spam" programmieren?

Hallo, ich wollte mal ein "Anti Spam" für Minecraft mit Java Programmieren,

Das kann man ja mit Scheduler machen, hier ist mein code. ich habe das im Internet so gesehen dass es eig. so funktionieren soll:

public class AntiSpamListener implements Listener {
    
    public static ArrayList<Player> chat = new ArrayList<>();
    
    @EventHandler
    
    public void onChat(AsyncPlayerChatEvent e) {
        
        Player p = (Player)e.getPlayer();
        
        if(!chat.contains(p)) {
            
            chat.add(p);
            
            e.setCancelled(false);
            
            Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
                
                @Override
                public void run() {
                    
                    chat.remove(p);
                    
                }
            }, 20*2);
            
        } else {
            
            p.sendMessage(EssentialsMain.Chat + "Bitte schreibe etwas langsamer.");
            
            e.setCancelled(true);
            
        }
        
    }

}
    
...zur Frage

In for schleife werden Spieler immer mehr?

Hallo. Ich habe eine Frage. Ich Programmiere Java Minecraft Plugins. Ich habe in einem Scheduler der, jede Sekunde ausgeführt wird, eine for schleife, in der alle Spieler in all abgespeichert werden. Jedoch ist es so, dass die Funktion (gekennzeichnet mit //a) mehrmals ausgeführt wird, je mehr Spieler auf dem Server waren. Kann man das Irgendwie verhindern?

Hier ein Video um zu erläutern wie ich das Meine; https://youtu.be/-_26qo3DTJ4

Code:

public void onKick(Player p) {
    if(!Bukkit.getScheduler().isCurrentlyRunning(sched)) {
        sched = Bukkit.getScheduler().scheduleSyncRepeatingTask(main, new Runnable() {
            
            @Override
            public void run() {
                
                if(Bukkit.getOnlinePlayers().size() == 0) {
                    Bukkit.getScheduler().cancelTask(sched);
                    return;
                }
                
                long jetzt = System.currentTimeMillis();
                
                for(Player all : Bukkit.getOnlinePlayers()) {
                    if(zeit.containsKey(all.getName())) {
                        int rest = (int) ((zeit.get(all.getName()) + (1*1000*60)) - jetzt);
                        if(rest/1000 == 30) {
                            MSG(all.getName(), 30); //a
                        }else if(rest/1000 == 20) {
                            MSG(all.getName(), 20); //a
                        }else if(rest/1000 == 10) {
                            MSG(all.getName(), 10); //a
                        }else if(rest/1000 == 5) {
                            MSG(all.getName(), 5); //a
                        }else if(rest/1000 == 4) {
                            MSG(all.getName(), 4); //a
                        }else if(rest/1000 == 3) {
                            MSG(all.getName(), 3); //a
                        }else if(rest/1000 == 2) {
                            MSG(all.getName(), 2); //a
                        }else if(rest/1000 == 1) {
                            MSG(all.getName(), 1); //a
                        }else if(rest/1000 <= 0) { //&lt;= bedeutet kleiner gleich
                            all.kickPlayer("§cDu wurdest gekickt, da deine Spielzeit abgelaufen ist!");
                            zeit.remove(all.getName());
                            if(Bukkit.getOnlinePlayers().size() == 0) {
                                Bukkit.getScheduler().cancelTask(sched);
                            }
                        }
                    }
                }
            }
        }, 0, 20);
    }
}

 //a
public void MSG(String name, int i) {
    if(main.getConfig().getBoolean("KickCountdown."+name)){
        Bukkit.broadcastMessage("§b"+name+ " §7wird in §b"+i+" §7Sekunden gekickt!");
        main.getConfig().set("KickCountdown."+name, false);
        main.saveConfig();
        Bukkit.getScheduler().runTaskLater(main, new Runnable() {
            
            @Override
            public void run() {
                main.getConfig().set("KickCountdown."+name, true);
                main.saveConfig();
            }
        }, 19);
    }
}
...zur Frage

Was möchtest Du wissen?