2016-12-03 12 views
1

私はSpigot(Minecraft)でプラグインを実行しています。メッセージ/言語や特定のもののステータスも格納するためにenumを使用しています。 ステータスenumはメッセージenumに依存するという問題があります。そして、メッセージ列挙はファイルmessages.ymlに依存します。 ファイルを再読み込みする方法はわかっていますが、実行するとmessages.ymlファイルの翻訳を変更すると更新されますが、ステータスenumに格納されているメッセージは更新されません。enumインスタンスを「リロードする」

したがって、私はそれが可能だ場合、プラグインがリロードされたときにそれがないようにそれらが値更新列挙型のインスタンスを削除し、に再びを、それを生成を知りたいでしょう。

public enum Message { 
 

 
WAITING("Status.Waiting"); 
 

 
private String path; 
 

 
Message(String path) { 
 
this.path = path; 
 
} 
 

 
public String getMessage() { 
 
    return file.getString(path); 
 
} 
 

 
} 
 

 
public enum Status { 
 

 
WAITING(Message.WAITING.getMessage()); 
 

 
private String name; 
 

 
Status(String name) { 
 
this.name = name; 
 
} 
 

 
public getName() { 
 
return name; 
 
} 
 

 
}

私はname.getMessageを行うだろうStatus.WAITING.getNameを()()WAITING(Message.WAITING)を入れて行うことができます答えないでください;.このコードを例として書きましたが、関数ではgetName()関数を使用せず、enumの値だけを使用して、メッセージのenumに名前を書きました。

誰かがこれを解決する場合は、事前に感謝します。 :)

+0

なぜ実際に列挙型を使用する必要がありますか?たとえば、 – Kerooker

+0

のように、すべてのメッセージにゲッターを含むクラスを使用してマップ内に格納して保存することができます。「enums」はメッセージを格納するための素晴らしいアイデアのように聞こえるかもしれませんが、実際はそうではありません。列挙型はリロードされるように設計されておらず、定数であるように設計されているため、一緒に組み込んだハッキングはその価値がありません。私が推奨するのは、ファイルから直接メッセージを取得することです。 –

答えて

0

enumが他のコードで参照されているため、enumに追加/削除することはできません。これは、変数のすべての痕跡を取り除くのと同じですfoo + 1

メッセージファイルをリロードするには、file.reloadConfig()を実行して、ディスクからメッセージをリロードしてからgetMessage()を呼び出すと、新しいファイル内の新しいメッセージが検索されます。

+0

enumの値を変更するのではなく、enumクラスをリロードします。それがストックされている場所を削除し、再度生成するように。 プラグインのリロード時に値が変更されます(ファイルが変更されている場合)ので、強制的にenumまたはすべてのプラグインに対してリロードすることも可能です。私はすでにプラグインをリロードするさまざまな方法をテストしましたが、enumは値を保持していましたが、プラグマプラグインで彼を再起動すると変更されました。 – MrTigreroux

関連する問題