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

ArrayList gut oder schlecht?

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Hallo,
Ich hab versucht eine Art Waffenschein Plugin zu schreiben. Wenn man /waffenschein kaufen eingibt wird man in eine ArrayList gespeichert welche nach einen Reload verschwindet.
Kann man das Speichern oder muss das anderst gelösst werden?
PS: Ja man kann noch unendlich mal den Waffenschein kaufen

Funktionieren tut es bis das es nicht gespeichert wird.

Main:
Java:
package de.axt.main;

import java.io.File;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{

    public void onEnable() {
        System.out.println("[Lizensen] wurde geladen!");

}
    public void onDisable() {
   
}


    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        Player p = (Player)sender;
        if(cmd.getName().equalsIgnoreCase("waffenschein")){
            if(args.length == 0){
    p.sendMessage("§7[§eWaffenschein§7] §7Um einen Waffenschein zu kaufen geb §a/waffenschein kaufen §7ein!");}
       
        else if(args.length == 1){
            if(args[0].equalsIgnoreCase("list")){
                if(p.hasPermission("axt.polizei")){
                    Methoden.sendList(p);
                }
           
            } else if(args[0].equalsIgnoreCase("kaufen")){
           
                if(Methoden.hatLizenz(p)){
                    p.sendMessage("§7[§eWaffenschein§7] §7Du hast schon einen Waffenschein!");
                } else{
                Methoden.addLizenz(p);
                p.sendMessage("§7[§eWaffenschein§7] §7Du hast nun deinen Waffenschein!");
                }
            }
        } else if(args.length == 2){
            if(args[0].equalsIgnoreCase("wegnehmen")){
                @SuppressWarnings("deprecation")
                Player a = Bukkit.getPlayer(args[1]);
                if(a ==null){
                    p.sendMessage("§7[§eWaffenschein§7] §cDer angegebene Spieler ist nicht Online!");
                }
                if(Methoden.LinzenzList != null){
                    Methoden.leaveWaffenschein(a);
                    a.sendMessage("§7[§eWaffenschein§7] §7Dir wurde der Waffenschein von "+ p.getDisplayName() + " weggenommen!");
                    p.sendMessage("§7[§eWaffenschein§7] §7Du hast " + a.getName() + " §7Den Waffenschein weggenommen!");
                } else {
                    p.sendMessage("§7[§eWaffenschein§7] §7Der Spieler hat keine Waffenschein!");
                }
           
           
            }
        }
        }
        return false;
        }
Methoden:
Java:
package de.axt.main;

import java.util.ArrayList;

import org.bukkit.entity.Player;

public class Methoden {

    public static ArrayList<Player> LinzenzList = new ArrayList<>();

    public static void sendList(Player p) {
        p.sendMessage("§7[§eWaffenschein§7] §cFolgende Spieler haben ein Waffenschein:");
        try {
       
            if(LinzenzList.size() < 0){
                p.sendMessage("§7[§eWaffenschein§7] §cEs hat kein Spieler eine Lizenz!");
            } else {
                String listall = "";
                for(Player a : LinzenzList){
                    listall = ", " +a.getName() +listall;
                }
                listall = listall.substring(2);
                p.sendMessage("§a"+listall);
        } }catch (Exception d){
            p.sendMessage("§7[§eWaffenschein§7] §cEs hat kein Spieler eine Lizenz!");
        }
   
    }

    public static void addLizenz(Player p) {
        LinzenzList.add(p);
   
    }

    public static void leaveWaffenschein(Player p) {
        LinzenzList.remove(p);
   
    }

    public static boolean hatLizenz(Player p) {
        LinzenzList.contains(p);
        return false;
    }

}


}
 
Zuletzt bearbeitet von einem Moderator:

Lapura

Kuhfänger
Registriert
28 Dezember 2014
Beiträge
73
Alter
26
Diamanten
314
Wenn diese Linzens dauerhaft sein sollte, troz Neustart, dann solltest du es umbedingt in .yml Datei verpacken
So sollte die .yml Datei aussehen:

<UUID>:
Waffenschein: true / false


Einfach den Waffenschein in einem boolean speichern damit du einfacher abfragen kannst.
Wichtig ist das du die UUID abspeicherst, und wenn der Spieler das erste mal Joint direkt in die .yml Datei eingetragen wird
als Standart solltest du natürlich 'false' setzen.

LG, Lukas
 

ForYaSee

Minecrafter
Registriert
30 Dezember 2016
Beiträge
1
Alter
23
Diamanten
300
Minecraft
ForYaSee
Code:
File file = new File(getDataFolder(), "player.yml");
YamlConfiguration cfg = new YamlConfiguration();

//Wenn der Spieler einen Waffenschein gekauft hat
cfg.set(p.getUniqueId()+ ".waffenschein", true);
try {
    cfg.save(file);
} catch (IOException e) {
    e.printStackTrace();
}

//Abfrage ob Spieler einen Waffenschein hat
if(cfg.getBoolean(p.getUniqueId() + ".waffenschein")) {
    //Dein Code
}

Wäre eine Möglichkeit
 
Zuletzt bearbeitet:

moinless

Schafhirte
Registriert
4 Oktober 2013
Beiträge
103
Diamanten
302
Ich würde dir noch empfehlen, um dein Plugin performanter bei großen Spielerzahlen zu machen, an folgender Stelle

Code:
                String listall = "";
                for(Player a : LinzenzList){
                    listall = ", " +a.getName() +listall;
                }

Den Code abzuändern in
Code:
        StringBuilder builder = new StringBuilder();
        for (Player a : LizenzList()){
            if (!builder.toString().isEmpty()) builder.append(", ");
            builder.append(a.getName());
        }
        String listall = builder.toString();
 

PSandro

Kuhfänger
Registriert
7 November 2016
Beiträge
51
Diamanten
302
Ich würde dir noch empfehlen, um dein Plugin performanter bei großen Spielerzahlen zu machen, an folgender Stelle

Code:
                String listall = "";
                for(Player a : LinzenzList){
                    listall = ", " +a.getName() +listall;
                }

Den Code abzuändern in
Code:
        StringBuilder builder = new StringBuilder();
        for (Player a : LizenzList()){
            if (!builder.toString().isEmpty()) builder.append(", ");
            builder.append(a.getName());
        }
        String listall = builder.toString();
Ich würde mit folgendem am besten klar kommen - kurz und knackig:
Code:
String listAll = lizenzenList.stream().map(Player::getName).collect(Collectors.joining(", "));
Zum Speichern:
Bukkit liefert da direkt eine nette Klasse mit:
https://minecraft-server.eu/forum/threads/arraylist-speichern.22783/
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Ich würde dir noch empfehlen, um dein Plugin performanter bei großen Spielerzahlen zu machen, an folgender Stelle

Code:
                String listall = "";
                for(Player a : LinzenzList){
                    listall = ", " +a.getName() +listall;
                }

Den Code abzuändern in
Code:
        StringBuilder builder = new StringBuilder();
        for (Player a : LizenzList()){
            if (!builder.toString().isEmpty()) builder.append(", ");
            builder.append(a.getName());
        }
        String listall = builder.toString();

Ich würde mit folgendem am besten klar kommen - kurz und knackig:
Code:
String listAll = lizenzenList.stream().map(Player::getName).collect(Collectors.joining(", "));
Zum Speichern:
Bukkit liefert da direkt eine nette Klasse mit:
https://minecraft-server.eu/forum/threads/arraylist-speichern.22783/

Ich würds einfach so lassen wie es ist, weil der Kompiler selbst in der Lage ist nen Stringbuilder zu verwenden. Ihr macht euch damit nur euren Code kaputt.
 
Oben