2016-04-04 14 views
0

Hi Ich frage mich, wie könnte ich möglicherweise Spielerdaten speichern? Brauche ich eine Extraklasse? Brauche ich einen bestimmten Code? Ich bin nicht sicher, wie man das macht, und wenn jemand helfen könnte, würde das geschätzt werden! Ich möchte Daten speichern, wenn ein Spieler ein Set auswählt, kann er kein anderes auswählen.Bukkit wie man Daten speichert

+0

Sie meinen, Sie möchten in eine Datei schreiben zum Beispiel 'Spielername: Kitname'? – Nightfighter001

+0

Ja, damit ich feststellen kann, ob sie ein anderes Kit verwenden können oder nicht. – CodeIsCool

Antwort

1

Wenn Sie speichern möchten, welches Kit ein Benutzer für temporäre Speicherung verwendet, können Sie eine Karte mit der UUID und dem Kit des Players verwenden. Zum Beispiel Map<UUID, Kit> userKits = new HashMap<UUID, Kit>(); unter der Annahme, dass Ihr Kit ein eigenes Objekt hat. Dann, wenn sie versuchen, einen anderen auszuwählen, überprüfen Sie einfach, ob sie in der Karte sind und wenn sie ihnen eine Nachricht senden, wenn sie nicht hinzufügen.

Wenn Sie mehr dauerhaften Speicher wünschen, müssen Sie dies in einer Datei speichern.

+0

Grundsätzlich möchte ich es so machen, dass ein Spieler ein Kit auswählen kann, nur eins auswählt, und wenn sie sterben, dann können sie ein anderes auswählen, ich denke, ich brauche einen Listener für PlayerDeathEvent, aber würde ich eine bestimmte Klasse für die hashmap brauchen /Karte? – CodeIsCool

+1

Sie müssten tatsächlich auf Todesfälle hören.Sobald sie sterben, entferne sie von der Karte. Nein, du brauchst keine bestimmte Klasse dafür, es kann in jede Klasse gehen. Stellen Sie nur sicher, dass kein statischer Missbrauch vorliegt. – bwfcwalshy

-3

So einfach sagen Sie, dass, wenn ein Spieler ein Kit auswählt, sie nicht in der Lage sein werden, ein Kit wieder zu wählen, wenn sie nicht sterben. Eine einfache Lösung besteht darin, sie in einem Array zu speichern. Ich persönlich benutze Arraylisten, um jederzeit Daten für jeden Spieler speichern zu können.

Also zum Beispiel. Wenn Sie eine neue Arraylist namens kitTrue erstellen möchten, müssen Sie diese Methode verwenden.

ArrayList<Player> kitTrue = new ArrayList<Player>(); 

Dann einfach den Player in der Arraylist speichern. Dies ist eine gute Methode, einfach zu verwenden, weil Sie den Player bei Todesereignissen entfernen und Ereignisse hinterlassen können. Wenn der Spieler einfach das Kit gewählt hat, können Sie diese zur Arraylist hinzufügen. Wenn sie sterben oder sich ausloggen, werden sie aus der Arraylist entfernt.

Um Spieler von Arraylist zu entfernen:

kitTrue.remove(p); 

Spieler Hinzufügen zu Arraylist:

kitTrue.add(p); 

hier So ist ein Beispiel, wie Sie den Player über den Tod entfernen würden und Ereignis beenden.

Wenn also ein Spieler das Kit auswählt, könnte dies eine Option sein, wie Sie es ausführen würden. Könnte so aussehen. Aber Sie werden die Idee bekommen. So fügen Sie der Arraylist einen Player hinzu.

@Override 
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { 
    Player p = (Player) sender; 
    if(cmd.getLabel().equalsIgnoreCase("kit")){ 
     if(args.length == 0){ 
      p.sendMessage("§7You have chosen the kit."); 
      archer(p); 
      kitTrue.add(p); 
     } else{ 
      p.sendMessage("§7Usage§8: §b/kit"); 
     } 
    } 
    return false; 
    } 

Als nächstes möchten Sie feststellen, ob der Spieler bereits einen Bausatz gewählt hat. Es gibt viele Möglichkeiten, dieses System einzurichten, aber ich werde Ihnen nur die Grundlagen zeigen, wie alles funktioniert. Also hoffe, du kommst auf die Idee.

@Override 
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { 
    Player p = (Player) sender; 
    if(cmd.getLabel().equalsIgnoreCase("kit")){ 
     if(args.length == 0){ 
      if(kitTrue.contains(p)){ 
       p.sendMessage("§7You have already chosen a kit this life."); 
      } 
      p.sendMessage("§7You have chosen the kit."); 
      archer(p); 
      kitTrue.add(p); 
     } 
    } 
    return false; 
    } 

Also warum sollten Sie Arraylisten wählen? Gut Arraylists haben die Fähigkeit, einzelne Werte wie Spieler und Zeichenketten etc. zu speichern. Sie können einfach überprüfen, ob die Arraylist den Spieler oder die Schnur in der Liste hat und dann können Sie einen Code laufen lassen, der besagt, dass der Spieler innerhalb der Liste ist Player existiert nicht innerhalb des Arrays. Sehr einfach und habe das immer benutzt. Ich hoffe, dass dies etwas ist, wonach Sie suchen.

Thx Pixl

+0

Warum ein Objekt eines Spielers verwenden, wenn Sie seine UUID verwenden können? – Lightspeed360

+0

Sie können beide verwenden und ich weiß, dass UUID eine bessere Möglichkeit ist, den Player zu identifizieren, aber es spielt keine Rolle. – Pixlation

+1

Eigentlich tut es das. Sie betonen überhaupt nicht, warum das Entfernen des Players von der Liste beim Trennen ** wichtig ist. Player-Objekte im Gegensatz zu UUID's Hold-Chunks werden geladen, wenn sie beim Trennen nicht entfernt werden, so dass ein großer RAM-Leak entsteht. Nun, was den Rest des Codes betrifft, ist es nicht großartig. Zuerst missbrauchen Sie das Casting, es ist nicht logisch, Player to Player zu spielen. Es ist ebenso unlogisch, ** Sender ** in ** Player ** zu übertragen, ohne sicherzugehen, dass es sich tatsächlich um eine Player-Instanz handelt. Glauben Sie mir nicht? Führen Sie den Befehl/Kit über die Konsole und finden Sie es selbst heraus. –