2017-01-11 11 views
2

現在、私はRPGプラグインを作成しています。私は、プレーヤーのUUID、騎士とアーチャーのようなキャラクタークラス、プレーヤーの属性を変更するスキルを格納するPlayerInfoクラスを作成しました。 vitalityはプレイヤーの健康状態を向上させ、strengthはプレイヤーの物理的なダメージを増加させます。ここでBukkit:プレイヤーとクラスの情報を過度に保存する方法は?

は、これまでクラスです:

public class PlayerInfo { 
    public String suuid; 
    public String charClass; 
    public int vitality; 
    public int strength; 
    public int defense; 
    public int dexterity; 
    public int intelligence; 
    public int faith; 

    public PlayerInfo() { 

    } 

    public PlayerInfo(String UUID, String characterClass, int VIT, int STR, int DEF, int DEX, int INT, int FAI) { 
     suuid = UUID; 
     charClass = characterClass; 
     vitality = VIT; 
     strength = STR; 
     defense = DEF; 
     dexterity = DEX; 
     intelligence = INT; 
     faith = FAI; 
    } 

私も、私は主にPythonとJavascriptのプログラマだと言いたいです。私は約2日前にJavaを拾いました。私のコードが非衛生的であれば、お詫びします。私はまだ言語とその実践を理解しようとしています。あなたが望むなら、それについてのアドバイスもありがとうと思います。しかし、私の基本的な質問にはちょうど答えてください。将来私はコードレビューにも投稿しています。今後

...

このプラグインの基本的な枠組みに取り組んでいる間は、私はPlayerInfoクラス内の情報は、サーバーが停止されたときに保存されていない可能性が高いことに気づきました。私はおそらく、FileOutputStreamObjectOutputStreamを使ってファイルに情報を書き込んで、それをconfigフォルダに保存し、後でこれらのモジュールのバージョンInputで取得できると考えました。しかし、フォルダとファイルを作成しようとしたときにアクセスが拒否されたと私のサーバーから通知されたので、jarファイルのパスを動的に取得しようとすると問題が発生しました。

私の最後の問題は、読み込まれた情報を使用しようとしたときです。私のプラグインのコマンドは/staticで始まります。ユーザの統計情報を表示する/static statsというコマンドがあると、ユーザのUUIDと保存ファイルに保存されているものを比較するだけで簡単ですか?例:

Player player = (Player) sender; 
String suuid = player.getUniqueId().toString(); 
if (character.suuid == suuid) { 
// Load stats here... 
} 

または別の方法でこれを行う方法はありますか?


Playerとクラス情報を効果的に保存するにはどうしたらいいですか?また、後で情報に使用するデータを取得して、現在のプレーヤーが保存されたオブジェクトと一致するかどうかを確認できますか?これはSQLのようなものが使われていますか?

答えて

2

サーバーに接続するときに各プレーヤーをメモリにロードします(それぞれのPlayerInfoオブジェクトを、たとえばHashMapやListなどを使用して作成します)。

プレーヤーの切断時には、すべての情報をファイル/データベース(SQLを含む)に保存する必要があります。このファイルは、指定したプレーヤーの次回の接続時に復元され、再度読み込まれます。

サーバーが停止すると情報が失われるため、必要なときに情報をどこかに格納して取得する必要があります。

あなたはHashMapの

HashMap<String, PlayerInfo> allplayers = new HashMap<String, PlayerInfo>(); 


public PlayerInfo getPlayer(Player player){ 
    if(allplayers.containsKey(player.getName())){ 
    return allplayers.get(player.getName()); 
    }else{ 
    return null; 
    } 
} 

に基づいてPlayerInfoを取得するために、そして、私はSQLデータベースにこのHashMapを対応するであろうどのようにHashMap

public void addPlayer(Player player){ 
    if(!allplayers.containsKey(player.getName())){ 
    //Load playerInfo 
    PlayerInfo p = new PlayerInfo(....); 
    //put into hashmap 
    allplayers.put(player.getName(), p); 
    } 
} 

//saving PlayerInfo can be called on PlayerDisonnect/Server shutdown 
public void savePlayer(Player player){ 
    if(allplayers.containsKey(player.getName())){ 
     PlayerInfo p = allplayers.get(player.getName()); 
    //Save information 
     ..... 
    //remove player from HashMap 
    allplayers.remove(player.getName()); 
    } 
} ` 
+0

に選手を配置する簡単な関数を作成することができますか?それが複雑な答えであれば、長い答えで応答しないことを心配しないでください。私はちょうど新しい質問スレッドを開始します。 – staticCoffee

+0

@staticCoffeeあなたはHashMapからSQLデータベースに情報をどのように転送するのでしょうか? – elving

+0

はい、申し訳ありませんが、それは明確ではありません。それは複雑なプロセスですか? – staticCoffee

-1

あなたのクラスでシリアライゼーションを使用することができますが、私はそのようにプリミティブを持っていると思います。そして、UはSQLのデータベースにシリアライズファイルを作成し、Uが必要です。再びそれを読んで、クラスオブジェクトにキャストしてください。次に、iterationを呼び出してプロパティをループし、urプレーヤの.equalsメソッドとの一致を見つけ出すことができます。

関連する問題