こんにちは、私はおそらくプレーヤーのデータを保存することができますか?私は余分なクラスが必要ですか?特定のコードが必要ですか?私はこれをどうやって行うのか分からず、もし誰かがそれを助けることができれば喜ばれるだろう!私はデータを保存したいので、プレイヤーがキットを選ぶと、別のものを選ぶことはできません。Bukkitデータの保存方法
答えて
ユーザーが一時的な保管用に使用しているキットを保管したい場合は、プレーヤーのUUIDとキットでマップを使用することができます。たとえばあなたのキットには自分のオブジェクトがあると仮定します。次に、別の場所を選択しようとするときに、地図上にあるかどうかをチェックし、追加しない場合はメッセージを送信します。
より永続的なストレージが必要な場合は、ファイルに保存する必要があります。
基本的には、プレイヤーがキットを選ぶことができるようにしたいのですが、プレイヤーが死ぬと別のものを選ぶことができます。私はPlayerDeathEventのリスナーが必要だと思っていますが、ハッシュマップ/地図? – CodeIsCool
あなたは本当に死を聞く必要があります。彼らが死ぬと、それらを地図から削除します。いいえ、あなたはそれのためにあるクラスを必要としません、それはどんなクラスにも行くことができます。静的な虐待をしないでください。 – bwfcwalshy
だから、プレイヤーがキットを選んだとき、彼らが死ぬまでキットをもう一度選ぶことはできないと言っているだけです。これを簡単に解決するには、配列に格納します。私は個人的に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
UUIDを使用できるときにプレーヤーのオブジェクトを使用するのはなぜですか? – Lightspeed360
あなたはどちらかを使うことができますが、私はUUIDがプレイヤーを識別するためのより良い方法だが、本当に問題ではないことを知っています。 – Pixlation
実際はそうです。あなたはすべてのことを強調していません**なぜ接続解除のリストからプレーヤーを削除するのが重要です**。 PlayerオブジェクトはUUIDの保留チャンクと異なり、切断時に削除されないとロードされます。そのため、大きなRAMリークが発生します。 コードの残りの部分については、それほど優れていません。まず第一に、あなたはキャストを酷使します。プレーヤーをプレイヤーにキャストすることは論理的ではありません。実際にPlayerインスタンスであるかどうかを確かめることなく、**送信者**を**プレーヤー**にキャストすることは同様に論理的ではありません。私に信じてはいけない?コンソールからコマンド/キットを実行し、自分自身を見つけます。 –
「playername:kitname」というファイルに書き込むことを意味しますか? – Nightfighter001
はい、他のキットを使用できるかどうかを検出できます。 – CodeIsCool