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

Scoreboard nur in bestimmter welt

xxProgramerx

Minecrafter
Registriert
16 März 2014
Beiträge
26
Diamanten
0
Hey leute,

wie ihr in der Überschrift lesen könnt ist meine frage, ob man ein scoreboard, welches nur für eine bestimmte welt ist erstellen/programmieren kann! Also nur wenn der spieler in welt x/y ist bekommt er das scoreboard xy angezeigt! Geht das? Wurde mich uber hilfreiche antworten freuen!

MFG
 

Pappi

Schafhirte
Gesperrt
Registriert
28 Oktober 2012
Beiträge
141
Alter
40
Diamanten
0
Minecraft
Pappi / PapaHarni
MAchst ne HashMap für die Config

Machst dann dort rein zB

SBInWorld:
default: "sb"
Welt1: "sb1"
Welt2: "sb2"


Edit : HashMap erstellen beim Laden
Code:
private HashMap<String, String> getHashMapStrWorld(Configuration config, String path) {
        HashMap<String, String> hm = new HashMap<>();
        for(String key : config.getConfigurationSection(path).getKeys(false)) {
            if(Bukkit.getWorld(key) != null)
                hm.put(key.toLowerCase(), config.getString(path + key));
            else
                _plugin.getLog().debug("Die angebene Welt " + key + " existiert nicht und wird Ignoriert.");
        }
        return hm;
    }
Edit Ende

Dann machste zB nen Update Task der alle XX Sekunden läuft und das Scoreboard Updated.

Dieser schaut dann in welcher Welt der Spieler ist und ob die Welt in der HashMap ist, dann rufste das passende Scoreboard ab.

Bei mir schaut das zB in etwa so aus :

Code:
public void setScoreboard(Player p) {
        if(getStatus(p)) {
            if(_plugin.getMyConfig()._sbOnWorld.containsKey(p.getLocation().getWorld().getName().toLowerCase())) {
                setScoreboard(p, _plugin.getMyConfig()._sbOnWorld.get(p.getLocation().getWorld().getName().toLowerCase()));
            } else if(_plugin.getMyConfig()._sbOnWorld.containsKey("default")) {
                setScoreboard(p, _plugin.getMyConfig()._sbOnWorld.get("default"));
            } else {
                clearScoreboard(p);
            }
        }
    }
    
    public void setScoreboard(Player p, String sb) {
        switch(sb.toLowerCase()) {
            case "sb":
              //Ruft das Scoreboard auf
              getSB().setScoreboard(p);
              break;
            case "sb1":
              //Ruft das Scoreboard auf
              getSB1().setScoreboard(p);
              break;
            case "sb2":
              //Ruft das Scoreboard auf
              getSB2().setScoreboard(p);
              break;
            default:
              clearScoreboard(p);
              break;
        }
    }
 
Zuletzt bearbeitet:

Pappi

Schafhirte
Gesperrt
Registriert
28 Oktober 2012
Beiträge
141
Alter
40
Diamanten
0
Minecraft
Pappi / PapaHarni
Oke, danke!
Jetzt habe ich nur eine andere Frage, nämlich wie sieht deine Methode clearScoreboard(p) aus?

MFG



Code:
public void clearScoreboard(Player p) {
        Scoreboard board = null;
        board = p.getScoreboard();
        
        if(board == null)
            return;
        
        Objective obj = board.getObjective("[COLOR="#FF0000"][B]Name deines Objektes[/B][/COLOR]");
        if(obj != null)
            obj.unregister();
        board.clearSlot(DisplaySlot.SIDEBAR);
        p.setScoreboard(board);
    }

Wobei jeglicher Code noch ungetestet ist und angepasst werden muss auf jedenfall.
 

Paulomart

Schafhirte
Registriert
3 November 2013
Beiträge
147
Diamanten
0
Minecraft
Paulomart
Dann machste zB nen Update Task der alle XX Sekunden läuft und das Scoreboard Updated.

Dieser schaut dann in welcher Welt der Spieler ist und ob die Welt in der HashMap ist, dann rufste das passende Scoreboard ab.

Wieso nicht einfach beim PlayerTeleportEvent gucken ob Spieler die Welt ändert. Wenn geändert, DANN Scoreboard updaten.
 

Pappi

Schafhirte
Gesperrt
Registriert
28 Oktober 2012
Beiträge
141
Alter
40
Diamanten
0
Minecraft
Pappi / PapaHarni
Wieso nicht einfach beim PlayerTeleportEvent gucken ob Spieler die Welt ändert. Wenn geändert, DANN Scoreboard updaten.

Ich hab einen Task alle 20 Sekunden laufen der bei jedem das Scoreboard Updated.
So brauch ich nicht bei jeder aktion prüfen ob sich was geändert hat.

Hab zB die aktuelle InGame Geld anzeige drin und so Zeug. Da müsste ich viele Aktionen mit überwachen. So hab ich es bei mir in einem.

Im PlayerTeleportEvent kann man es ja auch noch mit reinpacken. Das ist ja das kleinere Problem.
 

Pappi

Schafhirte
Gesperrt
Registriert
28 Oktober 2012
Beiträge
141
Alter
40
Diamanten
0
Minecraft
Pappi / PapaHarni
Ich sag ja nur.. in dem Beitrag ging es ja darum das Scoreboard nur in bestimmten Welten anzuzeigen und nicht um Währungen etc

Das stimmt , nur irgendwas ist da ja drin ;-) Er müsste also wenn er kein Task hat dafür , die Methode überall rein setzten wenn es Updates gibt. Zumindest würd ich es wenn dann so machen , da man sonst jeden Teil neu schreiben müsste..
 
Oben