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

Spigot ArrayList fehlerhaft.

Shoqrii

Redstoneengineer
Registriert
16 Juni 2018
Beiträge
46
Diamanten
301
Minecraft
Shoqrii
Hallo,

Ich habe in einer CFG mit einer ArrayList gearbeitet, um mehrere Punkte in der CFG hinzufügen zu können.
Beispielsweise:
Polizei:
Mitglieder:
- Spieler A
- Spieler B
- Spieler C
Wenn ich nun Spieler A mit /invite einlade funktioniert es einwandfrei.
Sobald ich allerdings Spieler B einlade, wird Spieler A rausgenommen und nur B ist da.

Java:
public class PZ_Invite implements CommandExecutor {
    
    private ArrayList<String> FR = new ArrayList<String>();
    
    @Override
    public boolean onCommand(CommandSender cs, Command arg1, String arg2, String[] args) {
        Player p = (Player) cs;
        int blockDistance = 3;
        
        if(args.length == 1) {
            Player t = Bukkit.getPlayer(args[0]);
            if ((p.getLocation().distance(t.getLocation()) <= blockDistance)) {
        if(CFG.cfg.getString(p.getUniqueId() + ".fraktion").equals("Polizei")) {
            if(CFG.cfg.getBoolean(p.getUniqueId() + ".leader") == true) {
                
                try {
                    CFG.cfg.set(t.getUniqueId() + ".fraktion", "Polizei");
                    FR.addAll(CFG.cfg.getStringList("System" + ".Polizei" + ".Mitglieder"));
                    FR.add(t.getName());
                    CFG.cfg.set("System" + ".Polizei" + ".Mitglieder", FR);
                    Main.getPlugin().saveConfig();
                    p.sendMessage(Main.prefix + "Du hast " + t.getName() + " in die Fraktion aufgenommen.");
                    t.sendMessage(Main.prefix + "Du wurdest von " + p.getName() + " in die Fraktion aufgenommen.");
                    FR.clear();
                } catch (Exception e) {
                    p.sendMessage(Main.prefix + "§cEin Fehler ist aufgetreten.");
                }
                
            } else {
                p.sendMessage(Main.prefix + "Du bist kein Leader.");
            }
        }
        } else {
            p.sendMessage(Main.prefix + "Der Spieler befindet sich nicht in deiner Nähe.");
        }
        } else {
            p.sendMessage(Main.us + "/invite <Spieler>");
        }
                
        return false;
    }

}
 

WlanGehtNicht

Schafhirte
Registriert
30 Mai 2017
Beiträge
105
Diamanten
312
Code:
CFG.cfg.set(t.getUniqueId() + ".fraktion", "Polizei");

Wenn du das so machst überschreibt Spieler B den Spieler A.

So könntest du das z.B. schreiben:
Code:
CFG.cfg.set("Player." + t.getUniqueId() + ".fraktion", "Polizei");
 
Zuletzt bearbeitet:

Shoqrii

Redstoneengineer
Registriert
16 Juni 2018
Beiträge
46
Diamanten
301
Minecraft
Shoqrii
Code:
CFG.cfg.set(t.getUniqueId() + ".fraktion", "Polizei");

Wenn du das so machst überschreibt Spieler B den Spieler A.

So könntest du das z.B. schreiben:
Code:
CFG.cfg.set("Player." + t.getUniqueId() + ".fraktion", "Polizei");
Code:
CFG.cfg.set(t.getUniqueId() + ".fraktion", "Polizei");

Wenn du das so machst überschreibt Spieler B den Spieler A.

So könntest du das z.B. schreiben:
Code:
CFG.cfg.set("Player." + t.getUniqueId() + ".fraktion", "Polizei");
Nein, das ist nicht gemeint.

Ich meine diese Abfrage.
Java:
FR.addAll(CFG.cfg.getStringList("System" + ".Polizei" + ".Mitglieder"));
                    FR.add(t.getName());
                    CFG.cfg.set("System" + ".Polizei" + ".Mitglieder", FR);
                    Main.getPlugin().saveConfig();
 

Shoqrii

Redstoneengineer
Registriert
16 Juni 2018
Beiträge
46
Diamanten
301
Minecraft
Shoqrii
Na, aber wenn ich es doch mit CFG.cfg.set("System" + ".Polizei" + ".Mitglieder", p.getName()); abspeichere wird es überschrieben.
Genau das ist mein Problem, es müssen mehrere Punkte sein.
Mitglieder
-Max
-Ben

-Alex
 
Registriert
10 Dezember 2017
Beiträge
161
Alter
26
Diamanten
322
Minecraft
DerFrZocker
Dein Problem ist das du wie @BlackHole schon in einen anderen Beitrag geschrieben hat, das du java noch nicht ganz verstanden hast, in diesem fall die Object Referenzierung bzw. was generell ein Object in java ist.

Dein Problem entsteht da du immer auf die selbe Array Object referenzierst.

Spielen wir deine code mit der Array am besten grob durch.

erstes mal ausführen -> In die Array wird der Spieler gespeichert -> die file wird gespeichert -> ein spieler in der liste und in der File -> danach clearst du die Array wieder -> sprich array 0 Spieler file 1 spieler

zweites mal ausführen -> du hohlst dir die gleiche Array mit 0 Spielern und fügst sie sich selber wieder hinzu (hoffe es ist verständlich) -> sprich 0 spieler in der array 1 in der file -> du fügst dem spieler der array zu -> 1 spieler in der array 1 anderer in der file -> du speicherst die file -> 1 spieler in der array 1 spieler in der file -> du clearst die array wieder -> 0 Spieler in der array 1 spieler in der file


Hoffe es ist einiger masen verständlich und du kannst dir nun grob vorstellen was bei deinen code passiert und warum es passiert.
 
Oben