【お知らせ】USLサーバーの運営になりました!

運営になったのは結構前になります。

RPGでプラグイン開発を行っています。(バグが怖くてヒヤヒヤしながら運営として活動している無能です)

私が実装した機能が以下になります。

  • スコアボードの作成
  • ランキングの作成
  • パーティー機能の追加
  • ボスバーの追加
  • クエスト機能の追加
  • ポーション(レベルアップでもらえる)効果の追加
  • 投票時にもらえるアイテム/エフェクト追加
  • FLY / GM <GameMode> などの便利コマンド追加
  • エンダーチェストを開くコマンドやごみ箱を開くコマンドの追加
  • プレイヤーをレポートする機能の追加
  • OP間同士でのチャットツールの追加
  • その他機能追加

 

これからは、

VIPランク導入に伴い、

  • ランクの表示
  • パーティクルの表示
  • ニックコマンドの強化

を行っていきたいと思っています。

UHCや自鯖の更新につきまして、少し遅延が出てしまうと思われます。

ですが、なるべく出ないように頑張ってやっていきます。

※既存のゲームに関しまして、一部をGitHubに公開しています。

 興味のある方や協力したいという方はぜひチェックしてみてください。

【Minecraft】マイクラが固まる理由

マインクラフトを遊んでいるときに時々フリーズするようなことはありませんか?

 

1.メモリの問題

まず最初の問題がメモリの問題です。

これは相性などの難しいことではなく、ただ単にメモリが足りない、確保できていないという状態です。

この時、新たにメモリを取得したいのですが、空きがないので、古くなった使わないデータを開放します。

が、この開放する処理が大変重い処理で、これがフリーズの原因になっていることが多いです。

この問題の解決方法は

  • メモリの割り当てを増やす
  • メモリ開放のチューニングを行う

 

メモリの割り当てを行う方法はマインクラフトのランチャーを開き、

起動構成を開きます。

お使いのプロファイルでホバーし「編集」をクリック。

「その他のオプション」をクリックして開きます。

「JVMの引数」から「-Xmx〇G」というのを見つけます。

この〇Gが1Gだったら 現在 1GB のメモリが割り当てられています。

増やすにはただ数字を大きくすれば大丈夫です。

 

メモリ開放のチューニングは上記と同じように「JVMの引数」というところを編集します。

以下コピペで大丈夫です。

-Xmx2G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -Duser.country=US -Duser.language=en

上の場合メモリは2GBしか割り当てていないので、もっと割り当てたい場合はその都度編集してください。

2.グラフィックの問題

この問題は単純にパソコンの性能が足りません

やりたいことにパソコンが追い付いていない、という状況です。

しかし、メモリの問題のチューニングで紹介したように、チューニング方法によってはこの問題は解決してしまう可能性もあります。(保障はしません。)

しかし、それでも直らない場合にはパソコンの買いなおしなど必要になってくる場合もあります。

【Bukkit/Spigot】ランダムなプレイヤーを取得する方法

Java には最初から乱数を生成するためのクラス 

Random.class

がありますが、実はこれには欠点があり、同じシード(種)の場合には結果が同じになってしまいます。

しかし今回ご紹介する2通りの方法であれば、結果が同じになることはなく、完全にランダムな値を取得することが可能です。

1. シードを変える

一番手っ取り早い方法ですが、シードを変えることです。

シードを変えれば、結果が同じになることはありませんから。

Random rand = new Random(System.nanoTime());
List<Player> players = new ArrayList<Player>(Bukkit.getOnlinePlayers());
Player player = players.get(rand.nextInt(players.size());

2. シャッフル

結局プレイヤーを個別に取得するには一度配列にする必要があります。

その際に、配列にするのと同時にシャッフルしてしまおうという方法です。

List<Player> players = new ArrayList<Player>(Bukkit.getOnlinePlayers());
Collections.shuffle(players);
Player player = players.get(0);