2016-04-04 16 views
0

こんにちは、私はおそらくプレーヤーのデータを保存することができますか?私は余分なクラスが必要ですか?特定のコードが必要ですか?私はこれをどうやって行うのか分からず、もし誰かがそれを助けることができれば喜ばれるだろう!私はデータを保存したいので、プレイヤーがキットを選ぶと、別のものを選ぶことはできません。Bukkitデータの保存方法

+0

「playername:kitname」というファイルに書き込むことを意味しますか? – Nightfighter001

+0

はい、他のキットを使用できるかどうかを検出できます。 – CodeIsCool

答えて

1

ユーザーが一時的な保管用に使用しているキットを保管したい場合は、プレーヤーのUUIDとキットでマップを使用することができます。たとえば​​あなたのキットには自分のオブジェクトがあると仮定します。次に、別の場所を選択しようとするときに、地図上にあるかどうかをチェックし、追加しない場合はメッセージを送信します。

より永続的なストレージが必要な場合は、ファイルに保存する必要があります。

+0

基本的には、プレイヤーがキットを選ぶことができるようにしたいのですが、プレイヤーが死ぬと別のものを選ぶことができます。私はPlayerDeathEventのリスナーが必要だと思っていますが、ハッシュマップ/地図? – CodeIsCool

+1

あなたは本当に死を聞く必要があります。彼らが死ぬと、それらを地図から削除します。いいえ、あなたはそれのためにあるクラスを必要としません、それはどんなクラスにも行くことができます。静的な虐待をしないでください。 – bwfcwalshy

-3

だから、プレイヤーがキットを選んだとき、彼らが死ぬまでキットをもう一度選ぶことはできないと言っているだけです。これを簡単に解決するには、配列に格納します。私は個人的にArraylistsを使用するので、いつでも各プレイヤーのデータを保存できます。

などです。 kitTrueという新しいArraylistを作成したい場合は、このメソッドを使用する必要があります。

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

次に、プレーヤーをarraylistの中に保存するだけです。これは、単に死のイベントでプレイヤーを削除してイベントを残すことができるため、使用するのには良い方法です。プレイヤーが単にキットを選択したら、あなたはそれらをarraylistに追加できます。彼らが死ぬかログアウトすると、彼らはarraylistから削除されます。

kitTrue.remove(p); 

をArrayListにプレイヤーを追加するには:ArrayListのからプレイヤーを削除するには

kitTrue.add(p); 

をだからここはあなたが死のプレーヤーを削除し、イベントを終了します方法の例です。

@EventHandler 
public void onPlayerDeath(PlayerDeathEvent e){ 
    Player p = (Player) e.getEntity(); 
    kitTrue.remove(p); 
} 
@EventHandler 
public void onLogout(PlayerQuitEvent e){ 
    Player p = (Player) e.getPlayer(); 
    kitTrue.remove(p); 
} 

プレイヤーがキットを選択すると、これを実行する方法の選択肢になります。このように見えるかもしれません。しかし、あなたはそのアイデアを得るでしょう。これは、プレイヤーをarraylistに追加する方法です。

@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; 
    } 

次に、プレーヤーが既にキットを選択しているかどうかを確認します。このシステムをセットアップする方法には多くの方法がありますが、すべての仕組みの基本を紹介します。あなたがそのアイデアを得ることを願っています

@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; 
    } 

なぜarraylistsを選択する必要がありますか?まあArraylistsは、プレイヤーやストリングなどの単一の値を格納する能力を持っています。あなたは単にarraylistがリストにプレーヤーまたは文字列を持っているかどうかをチェックして、プレーヤーがリストの中にいるというコードを実行するか、プレーヤーが配列内に存在しません。非常に簡単で常にこれを使用しています。私はこれがあなたが探しているものであることを願っています。

Thx Pixl

+0

UUIDを使用できるときにプレーヤーのオブジェクトを使用するのはなぜですか? – Lightspeed360

+0

あなたはどちらかを使うことができますが、私はUUIDがプレイヤーを識別するためのより良い方法だが、本当に問題ではないことを知っています。 – Pixlation

+1

実際はそうです。あなたはすべてのことを強調していません**なぜ接続解除のリストからプレーヤーを削除するのが重要です**。 PlayerオブジェクトはUUIDの保留チャンクと異なり、切断時に削除されないとロードされます。そのため、大きなRAMリークが発生します。 コードの残りの部分については、それほど優れていません。まず第一に、あなたはキャストを酷使します。プレーヤーをプレイヤーにキャストすることは論理的ではありません。実際にPlayerインスタンスであるかどうかを確かめることなく、**送信者**を**プレーヤー**にキャストすることは同様に論理的ではありません。私に信じてはいけない?コンソールからコマンド/キットを実行し、自分自身を見つけます。 –

関連する問題