ホーム > タグ > Minecraft

Minecraft

Minecraftのネットワークコード

Minecraftのマニアックなネタです。

某所でMinecraftのネットワークコードが残念という書き込みを見たので、いろいろ調べてみました。

ネットワーク関連の不具合

Minecraftのネットワーク関連のエラーで有名なのは「サーバを建てて管理者がログインする分には大丈夫だけど、外部のユーザがログインするとネットワークインターフェイスがダウンする。」というものがあります。原因は同様だと思いますが、「外部のユーザがログインしようとするとLogging in …の表示のまま止まる」というのもあります。前者はなったことがありませんが、後者は私のメインPCで発生する症状です。
また、クライアント側でも「破壊したブロックが巻き戻る。」等の所謂通信ラグっぽい不具合が起きることがあり、これもMinecraftのネットワーク周りの実装の問題っぽいです。

原因とか

Florianという方(参考URLを参照)の主張によるとMinecraftのソフトウェアがバッファを使わずにネットワークインターフェイスに処理を投げていることが原因っぽいです。高価なネットワークインターフェイスであれば多少の無茶をしても処理しきれますがデスクトップ用の安価なものだと耐え切れないみたいです。

自分で接続したときはネットワークインターフェイスがダウンせずに、外部の人が接続した場合にだけダウンするのはlocalhostでの接続時にはネットワークインターフェイスではなくループバックインターフェイスというのを使用しているためです。

よく知られている対策方法

NICを弄る

1つはネットワークインターフェイスの送信バッファを多めに設定するということです。これはぐぐれば簡単に出てくると思うのでググってと言おうとしたら簡単に出てきませんでしたね。

まず、デバイスマネージャを開いてネットワークアダプターを探します。

2つ以上ある場合はメインで使ってるっぽい方を選びます。

右クリックメニューからプロパティを選んで、詳細設定タブを開きます。

バッファを多めに設定します。

OKを押すとおkです。押すとネットワークが一時的に切れるので注意しましょう。

これでもダメな場合でサーバを立てたいというのであればNICの購入を検討したほうが良いかもしれません。

1000円程度から購入できます。高いのは数万行きますけど、金に多少余裕があるならintelのデスクトップ向けNIC(4000円程度)がおすすめです。

tcpbuffer

2つ目はtcpbufferを使う方法です。

Florianがこの問題に対する暫定的な解決方法としてtcpbufferという外部ツールを用意してバッファを確保する方法を提案しています。

ダウンロードは参考URLのページから、最新版はv5です。

こんな感じで英語さえ読めれば分かりやすいUIなので説明の必要は少ないかと思います。

あくまで暫定的な手段であり、Mojang(Minecraft開発元)がソフトウェアを修正するべきだと主張しています。

サーバ側、クライアント側の双方で効果があるようです。

ちなみにCUIでも起動できます。

java -jar -Dgui=false -Dport=25500 tcpbufferv5.jar

サーバ側を弄る

3つ目の解決法ということでharuがやってみた方法がサーバソフトウェア自体を改変して内部にバッファを持てるようにするということです。

Florianが内部的にバッファを確保して通信を行うべき、例えばBufferedOutputStreamを使え的なことを言っているので実際にやってみただけです。

公式サーバは弄りにくいのでソースコードが公開されているCraftBukkitを弄ってみました。

弄ったファイルを置いておくので興味があれば使ってみてください。

craftbukkit.jarの中に加えるだけです。

buffered_patch.zip

ソースコードはこちら
https://github.com/haruArc/CraftBukkit

tcpbufferでperiodを50msに設定したのと似たような挙動をします。

同様の手法でクライアントを改変しても良いかもしれませんね。

簡単にできることなのでForumを探せばMODとして誰かがつくっているかもしれませんね。

参考URL

Clients lose connection with exeption “disconnect.overflow” after few seconds on the server.
http://getsatisfaction.com/mojang/topics/clients_lose_connection_with_exeption_disconnect_overflow_after_few_seconds_on_the_server

追記

Minecraft 1.6からネットワークまわりが改善されて、これらの記事の操作をする意味は殆どなくなっています。

イカが大量発生@Minecraft

はい、就職活動中のharuです。

ここ2~3日はスケジュールがハードすぎて死にかけたので土曜日は何も考えずに休養してます。

作ってるソフトウェアなどはしばらく作成休止してますので悪しからず。

もとからちまちま作ってて更新は遅いですけどね。

さて、Minecraftネタです。

バージョン1.4のアップデートとかもあり1.5更新の噂もされて何だか熱い感じのMinecraftですが・・・

先日うちのMinecraftサーバを利用している友人から「鯖が重い」との報告を受けました。

色々と忙しかったのでうちのク○鯖のスペックが足りなくなったのか・・・それとも1.4更新のバグかと悩みつつ放置してました。

少し調査したところ特定のエリアだけ重くなっていることがわかりました。

その周辺を調査したところ、近海に大量のイカが湧いていました。

これは一箇所のスクリーンショットですけど、他にも何箇所かこんな状態になっている場所がありました。

そりゃこんだけmobが密集して湧いてたら重くなるよなぁと思いつつ処理しておきました。

大量発生したイカのせいで重くなっていた関係でラグが半端無く処理中に忘れた頃に来た窒息ダメージとかで死につつもなんとか・・・

イカの処理が完了したらそれまで重かったのが嘘のように平常に戻ったので原因はイカだと推測できます。

ただ、少し待つとまた同じように湧いて近くのエリアが重くなってしまうんですよね。

これは1.4になってイカのスポーン率が調整でもされたんでしょうかね?それともCraftBukkit特有のバグか・・・

同じように1.4になってからサーバの一定箇所、特に海辺が重くなっているのであれば近海を調査してみることをおすすめします。

トラップタワーなんかを作っていると生物の数に偏りがでて全てのモンスターの総数=イカの数くらいになってしまうので海辺にトラップタワーなんかを作るときは注したほうが良いかもしれません。

CraftBukkitならMobControlとかのプラグインを入れてスポーン数を制御すると良いかもしれません。

トロッコブースター

MinecraftでCraftBukkitを使ってサーバを運用している人向けのネタです。

Gitの73647864179cbab9f340あたりの変更からマインカートのブースタがおかしくなります。

こんな感じで4つのマインカートを設置するタイプのブースタです。

全文を読む

Minecraft面白いYO

Minecraftというゲームを最近やっているharuです。

ブログのエントリーが技術的な内容やら開発中のツールの内容ばかりになっているのでたまにはやっているゲームの話などなど。

Minecraft

洋ゲーです。

サンドボックス型ものづくりゲーらしいです。

パソコンで出来るレゴみたいなイメージを持ってくれればわかりやすいかと。

資材を集めて建物を建てる。ただそれだけのゲームですが意外と奥が深く3ヶ月ほどやりこんでます。

全文を読む

WarpGate 1.6a for CraftBukkit

MinecraftサーバのCraftBukkitのプラグイン WarpGateを改良してみました。

まぁ、本来は公式フォーラムにでも書いておくべきなのでしょうけれど継続して開発するつもりが無いので自分のブログでの公開です。

ちなみにWarpGateはプラグインは開発者のnijikokunが開発の継続を放棄していて次期バージョンが出る可能性が無いので自分で作ったわけです。

元のWarpGate 1.5 の情報は公式フォーラムの配布ページから参照してください。

全文を読む

Home > タグ > Minecraft

検索
フィード
メタ情報

Return to page top