Config int Problem!

Dieses Thema im Forum "Programmierung" wurde erstellt von Masterfran99, 6. April 2014.

  1. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Hallo Leute,

    Code (Text):
    1.             }else if(args[0].equalsIgnoreCase("setslot")){
    2.                 if(args[0].length() == 0){
    3.                     p.sendMessage("§cGebe ein Argument an!");
    4.                     return true;
    5.                 }
    6.                 String name = args[1].toLowerCase();
    7.                 String slotx = args[2].toLowerCase();
    8.                 Integer i;
    9.                 try {
    10.                     int slot = Integer.parseInt(slotx);
    11.                     invsetslot(p, name, slotx);
    12.                     cs.sendMessage("§aErfolgreich Slots gesetzt!");
    13.                 } catch (Exception e) {
    14.                     p.sendMessage("§cDu musst eine Zahl angeben!");
    15.                 }
    16.                 return true;
    Damit setze ich in meiner Config die Slot Anzahl eines Inventars jedoch setzt es immer einen String also "5" aber eigendlich sollte dort nur 5 stehen als Beispiel.

    ..
     
    #1
  2. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Wie genau sieht es in deiner Config aus? Steht da wirklich "5" mit "? Eigentlich sollte dort nur 5 ohne "" stehen. Außerdem solltest du etwas nur mit einer Exception catchen, die du auch erwartest, also in dem Fall "NumberFormatException", da du, falls es noch andere (unabsichtiche) Fehler gibt, diese sonst schlecht finden kannst.

    Code (Text):
    1. args[0].length() == 0
    ^ Ist falsch. Die Anzahl an Objekten in einem Array werden abgefragt mit: "args.length". So wie du es machst, fragts du die Länge des ersten Objektes im Array ab.

    Code (Text):
    1. invsetslot(p, name, slot);
    ^ Damit übergibst du den Integer (int) an die Konfigdatei und nicht den String aus dem Befehl.
     
    #2
  3. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Hä?

    Das mit args[0].length usw.. ist nur damit keine fehlermeldung kommt das hat hier jetzt nciht viel damit zutun.

    Ich frag nur warum immer "zahl" statt zahl in der Config steht?
     
    #3
  4. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Um die Zahl der Argumente, die bei dem Befehl benutzt wurden, musst du "args.length" benutzen.

    Bei dem letzten Code im obrigen Beitrag sollte das Problem nicht mehr auftreten.
     
    #4
  5. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    nein nein du verstehst das falsch ich will doch nicht die args länge haben.
    Lass alles mit args mal weg das hat hier gar nix damit zu tun.
     
    #5
  6. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Kannst du bitte ein Bild deiner Config schicken, ich verstehe dein Problem nicht ganz. Und bitte poste einmal deine Methode, mit der du in der Config schreibst.

    //Bitte Chat lesen
     
    #6
  7. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Danke aber ich habe es nun selbst geschafft.

    Nur eine Frage ist es möglich mit einer for-Schleife für jeden Wert z.B. in einer Config etwas auszuführen?
    z.B. sieht jetzt die Config so aus:

    Items:
    Item 1:
    slot: 0
    id: 2
    Item 2:
    slot: 1
    id: 155

    Es soll für Item 1 & 2 etwas passieren das macht man normaler Weise mit einer for-Schleife diese verlangt aber eine ArrayLists oder Ähnliches nun geht es auch anders und wenn nicht wie kann ich die Items beim onEnable in eine ArrayList packen?

    Danke
     
    #7
  8. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Ja, ist möglich. Bitte beim nächsten mal die Config als Code mit entsprechend richtigen Leerzeichen posten.

    Code (Text):
    1. for (String path : getConfig().getConfigurationSextion("Items").getKeys(false)) {
    2.   int slot = getConfig.getString("Items." path + ".slot");
    3. }
    "path" sind die Unterpunkte von "Items", die Nacheinander in der for-Schleife benutzt werden.
     
    #8
  9. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Folgendes:

    Code:
    Code (Text):
    1. for(String path : invc.getConfigurationSection("Items.").getKeys(false)){
    2.             String iname = invc.getString("Items.");
    3.             int id = invc.getInt("Items." + iname + ".ItemID");
    4.             int islot = invc.getInt("Items." + name + ".Slot");
    5.             ItemStack istack = new ItemStack(id);
    6.             ItemMeta istackMeta = istack.getItemMeta();
    7.             //istackMeta.setDisplayName(invc.getString("Items."));
    8.             istack.setItemMeta(istackMeta);
    9.            
    10.             inv.setItem(islot, istack);
    11.         }
    Config:
    Code (Text):
    1. Items:
    2.   mega:
    3.     Slot: 0
    4.     ItemID: 3
    5.     Command: dd
    Für das Item mega sollte eigendlich 1 Item im Inventar erstellt werden jedoch passiert nix aber auch keine Fehler.
     
    #9
  10. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Bei "getConfigurationSection("Items.").getKeys(false)) {" Darfst du keinen Punkt hiter "Items" machen. Benutze:
    Code (Text):
    1. getConfigurationSection("Items").getKeys(false)) {
     
    #10
  11. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    hatte ich auch schon probier ging trotzdem nicht D:
     
    #11
  12. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Ich vestehe nicht ganz, was du da gemacht hast. "path" ist immer der aktuelle Unterpunkt von "Items", der im Moment in der For-Schleife benutzt wird. Diesen musst du auch benutzen!
    Also mache das hier weg: "String iname = invc.getString("Items.");" und benutze überall, wo du "iname" benutzt "path".
     
    #12
  13. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Ok es hat geklappt aber sobald mehr als nur 1 Item hinzugefügt wurden:

    Code (Text):
    1. Items:
    2.   mega:
    3.     Slot: 0
    4.     ItemID: 3
    5.     Command: dd
    6.   *****:
    7.     Slot: 1
    8.     ItemID: 55
    9.     Command: c
    ist das inventar wieder leer.
     
    #13
  14. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Benutze nach dem ganzen mal "p.updateInventory()". Das ist zwar deprecated (und dadurch gelb unterstrichen), aber es sollte damit funktionieren.
     
    #14
  15. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Das Inventar hat aber keinen Holder ein Öffentliches Inventar.
     
    #15
  16. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Kann es sein, dass du jedes Item in den selben Slot setzt? Du musst zu der Schleife noch einen Counter hinzufügen:
    Code (Text):
    1. int counter = 0;
    2. for (Bedingung) {
    3.   //Code
    4.   inv.setItem(counter, ItemStack);
    5.   counter++;
    6. }
     
    #16