FC2ブログ

    技術

    Minecraft MOD設定ファイルの更新方法

    Forge導入済みクライアントの各種MODの設定更新方法についてです。

    ① Minecraftクライアントから任意のバージョンのゲームファイルフォルダを開く


    画像の赤枠を参考にゲームファイルフォルダを開く。
    minecraft_mod_config1.png
    minecraft_mod_config2.png
    minecraft_mod_config3.png

    configフォルダを開く


    このフォルダにMODの設定ファイル(cfg)が保存されている。
    設定を変更したいMODの設定ファイルをメモ帳等で開き、編集、上書き保存する。
    なお、必要に応じて設定ファイルのバックアップを取っておくとよい。(sampleMod.cfg.bakなど)
    minecraft_mod_config4.png

    身内向けconfig更新方法


    Discordのピン止めされた設定ファイルをダウンロードし、configフォルダのファイルに上書き保存(置き換え)する。

    minecraft_mod_config5.png
    minecraft_mod_config6.png
    スポンサーサイト

    Minecraftマルチプレイサーバの建て方 Forge編

    同様の内容の記事は各所で公開されているが、先日解説する機会があったため記事にまとめておく。

    バニラサーバの建て方とForge導入サーバの建て方と2種類分けて書くので、自分の用途に合わせて読んでください。
    バニラサーバは前の記事で書いています。
    Minecraftマルチプレイサーバの建て方 バニラ編
    http://rinatl.blog.fc2.com/blog-entry-782.html

    サーバを立てる費用は無料ですが、若干のPC操作知識が必要です。

    環境はWindowsを想定しています。

    前準備


    Javaバージョンの確認


    お使いのPCにJavaが導入されているか確認する。
    [Windows key + R]で「ファイルを指名を指定して実行」のウィンドを表示し、名前に[cmd]を入力して[OK]を選択。
    黒い画面(コマンドプロンプト)に[java -version]と入力する。

    こちらの画面の場合は、下記URLからJavaをインストールする。(画像では--versionとなっていますが-versionの誤りです)
    minecraft_server_mae1.png
    Windows版Javaのダウンロード
    https://java.com/ja/download/


    こちらの画面の場合は、バニラまたはForgeサーバの建て方に進む。
    バージョンが若干違う程度であれば問題ない。気になるようであれば上記URLから最新版をインストールする。
    minecraft_server_mae2.png

    バニラ(MODなどを導入しない)サーバの建て方


    ⓪ サーバ建て成功時のファイルやフォルダの配置状況


    この画像の配置になることを目指す。
    minecraft_server_forge9.png

    ① サーバファイル群を置くフォルダを作成する


    フォルダの場所や名前は自由。

    ここでは、Cドライブ直下に[MinecraftServer]フォルダを作成したものとして解説を進める。
    フォルダパス [C:\MinecraftServer]

    ② 遊びたいバージョンのForgeインストーラをダウンロード


    下記URLから使用したいバージョンの[Windows Installer]をダウンロードし、①のフォルダに配置する。
    最新のマインクラフトのバージョン以外は左のメニューからバージョンを指定する必要がある。
    [Latest]ではなく、[Recommended]バージョンのダウンロードをお勧めする。

    ここでは、バージョン1.7.10の1.7.10 - 10.13.4.1558 Windows Installerをダウンロードしたものとして解説を進める。
    Minecraft Forge
    https://files.minecraftforge.net/

    この時点での[MinecraftServer]フォルダ内の状況
    minecraft_server_forge1.png

    ③ Forgeのインストーラーを実行する


    ②でダウンロードしたインストーラーを実行する
    [Install client]から[Install server]に変更し、[...]から①で作成したフォルダを指定する。
    赤文字でエラー文のようなものが出るが無視してよい。
    minecraft_server_forge2.png

    サーバファイルのダウンロードが始まるのでしばらく待ち、下の画面が出たら[OK]を押して閉じる。
    画像の赤枠のファイルとフォルダが作成されていない場合はやり直す。
    minecraft_server_forge3.png


    ④ サーバ起動用batファイルを作成する


    メモ帳を開き、以下を書き込み、[ファイルメニュー]から[名前を付けて保存]を選択し、
    保存場所を[MinecraftServer]に、[ファイルの種類]を[すべてのファイル]として、名前を[ServerStart.bat]として保存する。
    [forge-1.7.10-10.13.4.1558-1.7.10-universal.jar]の部分は各自の状況に合わせて変更すること。
    @echo off
    java -Xms512M -Xmx1024M -jar forge-1.7.10-10.13.4.1558-1.7.10-universal.jar nogui
    pause
    minecraft_server_va2.png

    ⑤ ServerStart.batを起動する


    ④で作成した[ServerStart.bat]をダブルクリックから実行し、「続行するにはキーを押してください」と表示されるまで待つ。
    「続行するにはキーを押してください」と表示されたら、いずれかのキーを入力し黒い画面を閉じる。
    minecraft_server_forge4.png

    この時点での[MinecraftServer]フォルダ内の状況
    minecraft_server_forge5.png

    ⑥ eula(end-user license agreements 利用規約)に同意する


    [MinecraftServer]フォルダ内に作成された、[eula.txt]をメモ帳で開き、
    [eula=false]を[eula=true]に書き換え、上書き保存する。
    minecraft_server_forge6.png

    ⑦ 再度ServerStart.batを起動する


    再び黒い画面に文字が表示されるので、しばらく待つ。

    この画面になれば導入成功、ならなければ手順⓪から見直す。
    minecraft_server_forge7.png

    完成時のファイル配置は画像の通り、正常に動作しない場合は手順⓪から見直す。
    minecraft_server_forge9.png

    Minecraftマルチプレイサーバの建て方 バニラ編

    同様の内容の記事は各所で公開されているが、先日解説する機会があったため記事にまとめておく。

    バニラサーバの建て方とForge導入サーバの建て方と2種類分けて書くので、自分の用途に合わせて読んでください。
    Forge導入変は次の記事で書いています。
    Minecraftマルチプレイサーバの建て方 Forge編
    http://rinatl.blog.fc2.com/blog-entry-783.html

    サーバを立てる費用は無料ですが、若干のPC操作知識が必要です。

    環境はWindowsを想定しています。

    前準備


    Javaバージョンの確認


    お使いのPCにJavaが導入されているか確認する。
    [Windows key + R]で「ファイルを指名を指定して実行」のウィンドを表示し、名前に[cmd]を入力して[OK]を選択。
    黒い画面(コマンドプロンプト)に[java -version]と入力する。

    こちらの画面の場合は、下記URLからJavaをインストールする。(画像では--versionとなっていますが-versionの誤りです)
    minecraft_server_mae1.png
    Windows版Javaのダウンロード
    https://java.com/ja/download/


    こちらの画面の場合は、バニラまたはForgeサーバの建て方に進む。
    バージョンが若干違う程度であれば問題ない。気になるようであれば上記URLから最新版をインストールする。
    minecraft_server_mae2.png

    バニラ(MODなどを導入しない)サーバの建て方


    ⓪ サーバ建て成功時のファイルやフォルダの配置状況


    この画像の配置になることを目指す。
    minecraft_server_va7.png

    ① サーバファイル群を置くフォルダを作成する


    フォルダの場所や名前は自由。

    ここでは、Cドライブ直下に[MinecraftServer]フォルダを作成したものとして解説を進める。
    フォルダパス [C:\MinecraftServer]

    ② 遊びたいバージョンのサーバファイル(jar)をダウンロード


    以下のサイトの左列Stable Releasesから使用したバージョンのServer Jarをダウンロードし、①で作成したフォルダに入れる。
    ダウンロードの際に「この種類のファイルはコンピュータに損害を与える可能性があります~」と表示されることがありますが、サーバを建てたい場合は保存してください。破棄する場合はサーバ建てをあきらめてください。

    ここでは、バージョン1.7.10のServer Jarをダウンロードしたものとして解説を進める。
    MCVersions.net
    https://mcversions.net/

    この時点での[MinecraftServer]フォルダ内の状況
    minecraft_server_va1.png

    ③ サーバ起動用batファイルを作成する


    メモ帳を開き、以下を書き込み、[ファイルメニュー]から[名前を付けて保存]を選択し、
    保存場所を[MinecraftServer]に、[ファイルの種類]を[すべてのファイル]として、名前を[ServerStart.bat]として保存する。
    @echo off
    java -Xms512M -Xmx1024M -jar server.jar nogui
    pause
    minecraft_server_va2.png

    ④ ServerStart.batを起動する


    ③で作成した[ServerStart.bat]をダブルクリックから実行し、「続行するにはキーを押してください」と表示されるまで待つ。
    「続行するにはキーを押してください」と表示されたら、いずれかのキーを入力し黒い画面を閉じる。
    minecraft_server_va3.png

    ⑤eula(end-user license agreements 利用規約)に同意する


    [MinecraftServer]フォルダ内に作成された、[eula.txt]をメモ帳で開き、
    [eula=false]を[eula=true]に書き換え、上書き保存する。
    minecraft_server_va4.png

    ⑥ 再度ServerStart.batを起動する


    再び黒い画面に文字が表示されるので、しばらく待つ。

    待っている間にファイアウォールの設定が表示された場合は、自分の環境に合わせて設定する。
    minecraft_server_va5.png

    黒い画面に黄色枠の表示が出ればサーバが正常に稼働している。
    赤枠はMinecraftのワールド生成の進み具合であり、緑枠でエラーが表示されているが、これは初回サーバ稼働時に作成されるファイルであるため問題はない(2回目起動時には起こらないエラー)。
    minecraft_server_va6.png

    完成時のファイル配置は画像の通り、正常に動作しない場合は手順⓪から見直す。
    minecraft_server_va7.png

    Minecraftクライアントから接続を試す


    Multiplayer -> Add server -> Server Addresに[localhost]と入力 -> Done
    追加したサーバに接続
    接続できれば成功、できなければ手順⓪から見直す。

    東京オリンピックのチケット価格をグラフにしてみた

    Twitterで投稿したが、グラフの作り方忘備録としてこちらでも投稿する。

    価格情報はこちらから
    東京五輪チケット価格決定 最高は開会式の30万円
    tps://www3.nhk.or.jp/news/html/20180720/k10011541651000.html

    「種目ごとのチケット価格は」の項目が見づらすぎたのでなんとかならないのかと思ったのがきっかけ。
    引用すると以下のような文章
    「マラソン」は新国立競技場で観戦するチケットが2500円から6000円
    「競歩」はチケット販売がありません。
    「バドミントン」は4000円から4万5000円となっています。
    「野球」は4000円から6万7500円
    「ソフトボール」は2500円から2万5500円

    「バスケットボール」は3000円から10万8000円
    3人制のバスケットボール「3×3」は3000円から1万8000円
    「ボクシング」は3500円から4万5000円

    カヌーの「スラローム」は3000円から1万円、「スプリント」は3000円から9500円

    自転車の「BMXフリースタイル」は4000円から1万円、「BMXレーシング」は3000円から1万2500円、「マウンテンバイク」は3500円から5000円、「ロード」はゴール地点の静岡県のサーキット施設富士スピードウェイで観戦するチケットが3500円から5500円、「トラック」は4000円から1万4500円

    ここが気になる
    ・変なところで改行
    ・競技名を「」でくくっているのかと思いきやそうでもない
    ・価格は全角半角まぜまぜ
    ・注釈の入れ方も微妙
    ・そもそも表にしろよ(HTMLテーブルが無理でもエクセルでまとめて画像にするくらいできただろう)
    ・「となっています。」の文章が変なところで入る。(どこから引用してコピペしたのか?)

    で、結局、価格帯どのへんなの?がわかりづらいので簡単に可視化した。

    1枚目は開会式から全種目合わせたグラフ、2,3枚目は全種目を半種目ずつで2つの画像に分断した。
    なぜ2つの画像に各種目を分けたのかと言えば、もともとTwitterで投稿するように作った画像なので、縦長すぎると、横軸が見づらいのではと思ったため。

    縦軸「競技名」、横軸「価格」、タイトルは自明であるので省略。
    (タイトルはTwitter用なのでシンプルにしたかった。)
    色付き棒の範囲がチケットの価格帯

    5rin1.png
    5rin2.png
    5rin3.png
    補足
    ・マラソンは国立競技場での観戦
    ・競歩はチケット販売無し
    ・自転車ロードは静岡県サーキット施設富士スピードウェイで観戦
    ・サーフィンは価格未定

    室内競技とか屋外競技とか、場所別で作ればよかったのではとも思うのだが、ソースを見てすぐに可視化してのウケ狙いだったのでそういった手間は掛けていない。
    (まったくウケなかった。)

    ------------------------------

    〇作り方
    方針:
    ・種目名と価格を手動入力するのは避ける
    ・Excelで視覚化

    方法:
    1. 価格情報のテキストをサイトからコピーし、ちょっと高機能なテキストエディタに張り付ける。
    (自分はサクラエディタを使用。)


    2. Excelで使えるように簡単にデータを整える
    ・"、"を"\r\n"で置き換え(\r\nは改行コード)
    ・"「"を""で置き換え
    ・"」は"を"\t"で置き換え(\tはタブ、 Excelに張り付けた際にセルを分けてくれる)
    ・"から"を"\t"で置き換え
    ・"円"を""で置き換え
    ・"となっています。"を""で置き換え
    だいたいこんなところ。


    3. 2を終えた後のテキスト
    上述した「引用すると以下のような文章」の範囲を整えた例
    (ブラウザで表示するため\tはスペース4つで置き換え済み)

    マラソン 新国立競技場で観戦するチケットが2500 6000
    競歩 チケット販売がありません。
    バドミントン 4000 4万5000
    野球 4000 6万7500
    ソフトボール 2500 2万5500

    バスケットボール 3000 10万8000
    3人制のバスケットボール3×3 3000 1万8000
    ボクシング 3500 4万5000

    カヌーのスラローム 3000 1万
    スプリント 3000 9500

    自転車のBMXフリースタイル 4000 1万
    BMXレーシング 3000 1万2500
    マウンテンバイク 3500 5000
    ロード ゴール地点の静岡県のサーキット施設富士スピードウェイで観戦するチケットが3500 5500
    トラック 4000 1万4500

    4. Excelに張り付けデータを整える
    マラソンや自転車のロードが若干変だが、おおむね「種目名、最低価格、最高価格」で並んでいると思う。
    不要な文章の入っているセルを数値のみにし、〇万〇とないっているセルも手動で数値に整える。
    数百行以上あればマクロなど組むほうがいいだろうが、数十行なら手作業のほうが速い。
    5rin_tejun4.png


    5. 4を終えたExcel
    大体こういう表になっているはず。
    「-」は「0」にしておくほうが手間が減る。
    5rin_tejun5.png

    6. 棒グラフを作る
    最低価格から最高価格までだけを色付けしたい。
    とりあえず、ラベル込みで横棒グラフを作る。
    出来るグラフは種目名が省略されているので、グラフの高さ幅を大きくし、すべて表示させる。
    5rin_tejun6.png
    5rin_tejun6-2.png

    7. 6のグラフをさらに加工する
    6のグラフでは最低価格、最高価格が描かれているものの、最低から最大までの間のみの横棒にはなっていない。
    間だけ色を付けるには?
    最低最高価格の棒をかぶせて、最低価格の棒の色を白にすればいい!
    グラフの最高または最小の棒を選択し、選択対象の書式設定を開く。(小さくて選択しづらいのでレイアウトの系列から選択してもOK)
    5rin_tejun7.png


    8. 「系列の重なり」を「重ねる側の100%」にして閉じる
    5rin_tejun8.png


    8-2. 重なりの順番を変える
    8の手順の後、最低価格の棒が最高価格の後ろに隠れてしまっている場合は、重なり方を変える必要がある。
    隠れてしまっている場合のグラフ
    5rin_tejun9.png

    グラフを右クリックし、データの選択をクリック。
    5rin_tejun9-1.png

    矢印ボタンで、系列の順番を変える。
    5rin_tejun9-2.png

    ここまでの手順を行うとこうなっているはず。
    5rin_tejun10.png


    9. 最低価格のグラフの色を白にする
    色を変えるところは解説いらないでしょう。
    はい、完成。
    5rin_tejun10-2.png

    ニコニコ動画の生放送コミュニティを色付けするプラグイン作った

    ニコニコ動画を今更見始めたが、お口が悪かったりする配信者のものは見ていて気持ちの良いものではないので、次回以降見ないように気を付けるのだが、そういうものを登録する機能があるのかないのか・・・とりあえず見つけられなかった。

    強調表示くらいできればよいかなと思いTempermonkyのスクリプトをばばばっと書いた。
    javascriptを書くのは半年に一回くらいなので毎回変数の扱いから要素へのアクセス方法などすべて1から調べるためとても非効率的。

    英語が怪しいのはいつも通り。

    ニコニコ動画の生放送検索画面の放送コミュニティの画像を左クリックするとお気に入り、右クリックするとブロック、中クリックするとお気に入り、ブロック解除する。

    設定してみた画像がこちら。(単純に上からお気に入り、ブロック、指定なしとしているだけで他意はない)

    screencapture-live-nicovideo-jp-search-1519983830676.jpg

    グローバル変数の
    is_block_hideを
    trueでそのコミュニティの表示自体を消す
    falseでそのコミュニティ名をブロック色表示

    colorの
    likeとblockのカラーコードを変更すると表示職の変更を変えられる。
    取りえず2色あればよいだろうと拡張性は考えていない。
    (右クリックメニューを任意に追加してラベル付けとか考えたが、難しそうだったのでやめた。)



    // ==UserScript==
    // @name NiconicoLiveCommunityChecker
    // @namespace http://rinatl.blog.fc2.com/
    // @version 0.1
    // @description try to take over the world!
    // @author rin_jugatla
    // @match http://live.nicovideo.jp/search*
    // @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
    // @grant GM_setValue
    // @grant GM_getValue
    // @grant GM_listValues
    // @grant GM_deleteValue
    // ==/UserScript==

    // グローバル変数
    var debug = false;
    var is_block_hide = false;
    var color = {"like": "#7FFF00", "block": "#FF0000"};
    var like = LoadArray2GM("like");
    var block = LoadArray2GM("block");

    // selector
    var live_block = "#main-for-following-ad > ul:nth-child(4) > li";
    var live_img_block = "div.program-summary-area > div > img";
    var live_span_block = "div.program-summary-area > div > span";

    $(
    function () {
    AddEvent2Image();
    }
    );


    function AddEvent2Image()
    {
    // 各リスト初期化
    // community list 取得
    var communities = document.querySelectorAll(live_block);

    for (var i=0; i<communities.length; i++)
    {
    // コミュニティ番号の取得
    var community_no = communities[i].querySelector(live_img_block).currentSrc.match(/co\d+/);

    // console.log(communities[i].querySelector("img").currentSrc);
    // コミュニティ画像にクリックイベントの追加
    // コンテキストメニューを表示するイベント時のコールバック
    // http://tmlife.net/programming/javascript/javascript-right-click.html
    communities[i].querySelector(live_img_block).addEventListener("contextmenu", function(e){
    // デフォルトイベントをキャンセル
    // これを書くことでコンテキストメニューが表示されなくなります
    e.preventDefault();
    }, false);

    // エレメントをクリックした際に呼ばれる処理
    communities[i].querySelector(live_img_block).addEventListener("mousedown", function(e){
    // 押しているボタンに応じて処理を切り替える
    // ここで2の時に独自のコンテキストメニューを表示したりする
    var community_id = GetCommunityID($(this).attr("src"));
    switch (e.button) {
    case 0 :
    // Left Click
    if(jQuery.inArray(community_id, like) == -1)
    {
    like.push(community_id);
    if(block.indexOf(community_id) > -1)
    block.splice(block.indexOf(community_id), 1);
    console.log("%cadd to like", "color: green");
    }
    break;
    case 1 :
    // Middle Click
    if(like.indexOf(community_id) > -1)
    like.splice(like.indexOf(community_id), 1);
    if(block.indexOf(community_id) > -1)
    block.splice(block.indexOf(community_id), 1);
    console.log("%cdelete from like & block", "color: blue");
    break;
    case 2 :
    // Rrght Click
    if(jQuery.inArray(community_id, block) == -1)
    {
    block.push(community_id);
    if(like.indexOf(community_id) > -1)
    like.splice(like.indexOf(community_id), 1);
    console.log("%cadd to block", "color: red");
    }
    break;
    }

    // リストの保存
    SaveArray2GM("like", like);
    SaveArray2GM("block", block);
    // リストの情報に基づき色の変更
    CheckColor();
    // リストの内容を確認
    if(debug)
    ViewList();
    }, false);

    // コミュニティがリストに存在するか確認
    if(jQuery.inArray(community_no[0], like) > -1)
    {
    communities[i].querySelector(live_span_block).style.color = color.like;
    }
    else if(jQuery.inArray(community_no[0], block) > -1)
    {
    if(is_block_hide)
    communities[i].hide();
    else
    communities[i].querySelector(live_span_block).style.color = color.block;
    }
    else
    {
    communities[i].querySelector(live_span_block).style.color = "black";
    }
    }
    }

    function CheckColor()
    {
    var communities = document.querySelectorAll(live_block);

    for (var i=0; i<communities.length; i++)
    {
    // コミュニティ番号の取得
    var community_no = communities[i].querySelector(live_img_block).currentSrc.match(/co\d+/);

    // コミュニティがリストに存在するか確認
    if(jQuery.inArray(community_no[0], like) > -1)
    {
    communities[i].querySelector(live_span_block).style.color = color.like;
    }
    else if(jQuery.inArray(community_no[0], block) > -1)
    {
    if(is_block_hide)
    communities[i].hide();
    else
    communities[i].querySelector(live_span_block).style.color = color.block;
    }
    else
    {
    communities[i].querySelector(live_span_block).style.color = "black";
    }
    }
    }

    function GetCommunityID(src)
    {
    var temp = src.match(/co\d+/);
    return temp[0];
    }

    function ViewList()
    {
    console.log("%clike", "color: green");
    console.log(like);
    console.log("-----\r\n");
    console.log("%cblock", "color: red");
    console.log(block);
    console.log("-----\r\n");
    console.log("");
    }

    // 変数をローカルに保存
    function SaveArray2GM(key, arr)
    {
    var temp = "";
    for(var i=0; i<arr.length; i++)
    {
    if(i != arr.length - 1)
    {
    temp += arr[i] + ",";
    }
    else
    {
    temp += arr[i];
    }
    }
    GM_setValue(key, temp);
    }

    // ローカルから変数をロード
    function LoadArray2GM(key)
    {
    var temp = GM_getValue(key);
    if(temp != null)
    return temp.split(",");
    return [];
    }