[Bukkit] Scheduler Problem, wie lösen?

3 Antworten

http://pastebin.com/bzbxWjNG

--Es gibt keine Fehlermeldung... nur, falls zwei oder mehr Spieler beigetreten sind, gibt der durchgehend 19 aus ...

Hm ich finde da jetzt auf anhieb keine fehler

Poste lieber mal die Fehlermeldung. Und nochmal den code und zwar auf pastebin und nicht hier schlecht lesbar

hab ich :D Es gibt keine Fehlermeldung...

0

Minecraft Spigot 1.8 plugin Bug (Selbst programmiert)!?

Hallo. ich ahbe eein plugin geschrieben (mit video hilfe) womit ich ein hideall item habe also wnen man mit nem item (im meinem fall Lohrenrute) rechtsklick macht, sollen alle unsichtbar werden, abber in aclipse meckert der an, das ".getServer()" nicht definiert wäre.

Heir mal der code:

package System;

import java.util.ArrayList;

import javax.sound.midi.MidiDevice.Info;

import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent;

public class Items implements Listener {

private Info plugin;
ArrayList<String> hidden = new ArrayList<>();

public Items(Info info) {
    this.plugin = info;
    this.plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

@EventHandler
public void onplayerItneract(PlayerInteractEvent e) {
    Player p = e.getPlayer();
    
    if(e.getAction() ==Action.RIGHT_CLICK_AIR | e.getAction() == Action.RIGHT_CLICK_BLOCK) {
        if(e.getMaterial().equals(Material.BLAZE_ROD)) {
            
            for(Player players : Bukkit.getOnlinePlayers()) {
                
                if(hidden.contains(p.getName())) {
                    hidden.remove(p.getName());
                    p.showPlayer(players);
                    p.sendMessage("§aAlle Spieler sind nun wieder sichtbar!");
                }else
                    if(!hidden.contains(p.getName())) {
                        hidden.add(p.getName());
                        p.hidePlayer(players);
                        p.sendMessage("§cAlle Spieler sind nun unsichtbar");
                        
                    }
            }
        }
    }
}

}

...zur Frage

Wie füge ich die Onlinezeit eines Spielers in mein Scoreboard Plugin ein?

Hallo,

Ich habe einen eigenen Server und möchte für diesen ein Scoreboard Programmieren.

Ich wollte fragen, wie ich jetzt noch die Onlinezeit von einem Spieler in H einfügen kann.

Hier ist der Sourcecode:

package de.xite.main;

import org.bukkit.Bukkit; 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.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.ScoreboardManager;

public class main extends JavaPlugin implements Listener {

@Override
public void onEnable() {

    this.getServer().getPluginManager().registerEvents(this, this);
    
}

public void setScoreboard(Player p) {
    
ScoreboardManager sm = Bukkit.getScoreboardManager();
final Scoreboard board = sm.getNewScoreboard();
final Objective o = board.registerNewObjective("Scoreboard", "dummy");

o.setDisplaySlot(DisplaySlot.SIDEBAR);
o.setDisplayName("§7» §6Xitecraft.ml §7«");

o.getScore("§a ").setScore(15);
o.getScore("§bDein Rang:").setScore(14);


if (p.hasPermission("Prefix.admin")) {
    o.getScore("§4Admin").setScore(13);
} else if (p.hasPermission("Prefix.dev")) {
    o.getScore("§bDeveloper").setScore(12);
} else {
    o.getScore("§8Spieler").setScore(11);
}



o.getScore("§b ").setScore(10);
o.getScore("§bOnline: ").setScore(9);
o.getScore("§a" + Bukkit.getOnlinePlayers().size() + "/" + Bukkit.getMaxPlayers()).setScore(8);
o.getScore("§c ").setScore(8);
o.getScore("§bWebsite").setScore(7);
o.getScore("§a/website").setScore(6);
o.getScore("§d ").setScore(5);
o.getScore("§bTeamSpeak:").setScore(4);
o.getScore("§a/teamspeak").setScore(3);
o.getScore("§e ").setScore(2);
o.getScore("§bSkype").setScore(1);
o.getScore("§aXitecraftServer").setScore(0);

    
p.setScoreboard(board);

}

@EventHandler
public void onJoin(PlayerJoinEvent e) {
    
    new BukkitRunnable() {
        @Override
        public void run() {
            
            for (Player all : Bukkit.getOnlinePlayers()) {
                setScoreboard(all);
            }
            
        }
    }.runTaskLater(this, 1);
}

@EventHandler
public void onQuit(PlayerQuitEvent e) {
    
    new BukkitRunnable() {  
        @Override
        public void run() {
            
            for (Player all : Bukkit.getOnlinePlayers()) {
                setScoreboard(all);
            }
            
        }
    }.runTaskLater(this, 1);
}

}

...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?