Scoreboard nur in bestimmter welt

Dieses Thema im Forum "Programmierung" wurde erstellt von xxProgramerx, 12. April 2014.

  1. xxProgramerx
    Offline

    xxProgramerx

    Registriert seit:
    16. März 2014
    Beiträge:
    26
    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
     
    #1
  2. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    #2
  3. xxProgramerx
    Offline

    xxProgramerx

    Registriert seit:
    16. März 2014
    Beiträge:
    26
    Naja vlt. Haste ja das thema gesehen programmieren! Also würde mich eher interessieren wie man das programmieren kann..
    aber trotzdem danke :)

    MFG
     
    #3
  4. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    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 (Text):
    1. private HashMap<String, String> getHashMapStrWorld(Configuration config, String path) {
    2.         HashMap<String, String> hm = new HashMap<>();
    3.         for(String key : config.getConfigurationSection(path).getKeys(false)) {
    4.             if(Bukkit.getWorld(key) != null)
    5.                 hm.put(key.toLowerCase(), config.getString(path + key));
    6.             else
    7.                 _plugin.getLog().debug("Die angebene Welt " + key + " existiert nicht und wird Ignoriert.");
    8.         }
    9.         return hm;
    10.     }
    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 (Text):
    1. public void setScoreboard(Player p) {
    2.         if(getStatus(p)) {
    3.             if(_plugin.getMyConfig()._sbOnWorld.containsKey(p.getLocation().getWorld().getName().toLowerCase())) {
    4.                 setScoreboard(p, _plugin.getMyConfig()._sbOnWorld.get(p.getLocation().getWorld().getName().toLowerCase()));
    5.             } else if(_plugin.getMyConfig()._sbOnWorld.containsKey("default")) {
    6.                 setScoreboard(p, _plugin.getMyConfig()._sbOnWorld.get("default"));
    7.             } else {
    8.                 clearScoreboard(p);
    9.             }
    10.         }
    11.     }
    12.    
    13.     public void setScoreboard(Player p, String sb) {
    14.         switch(sb.toLowerCase()) {
    15.             case "sb":
    16.               //Ruft das Scoreboard auf
    17.               getSB().setScoreboard(p);
    18.               break;
    19.             case "sb1":
    20.               //Ruft das Scoreboard auf
    21.               getSB1().setScoreboard(p);
    22.               break;
    23.             case "sb2":
    24.               //Ruft das Scoreboard auf
    25.               getSB2().setScoreboard(p);
    26.               break;
    27.             default:
    28.               clearScoreboard(p);
    29.               break;
    30.         }
    31.     }
     
    #4
  5. xxProgramerx
    Offline

    xxProgramerx

    Registriert seit:
    16. März 2014
    Beiträge:
    26
    Oke, danke!
    Jetzt habe ich nur eine andere Frage, nämlich wie sieht deine Methode clearScoreboard(p) aus?

    MFG
     
    #5
  6. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni


    Code (Text):
    1. public void clearScoreboard(Player p) {
    2.         Scoreboard board = null;
    3.         board = p.getScoreboard();
    4.        
    5.         if(board == null)
    6.             return;
    7.        
    8.         Objective obj = board.getObjective("[COLOR="#FF0000"][B]Name deines Objektes[/B][/COLOR]");
    9.         if(obj != null)
    10.             obj.unregister();
    11.         board.clearSlot(DisplaySlot.SIDEBAR);
    12.         p.setScoreboard(board);
    13.     }
    Wobei jeglicher Code noch ungetestet ist und angepasst werden muss auf jedenfall.
     
    #6
  7. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Wieso nicht einfach beim PlayerTeleportEvent gucken ob Spieler die Welt ändert. Wenn geändert, DANN Scoreboard updaten.
     
    #7
  8. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    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.
     
    #8
  9. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Ich sag ja nur.. in dem Beitrag ging es ja darum das Scoreboard nur in bestimmten Welten anzuzeigen und nicht um Währungen etc
     
    #9
  10. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    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..
     
    #10