見出し画像

mod config,notebetter resource書き方講座(json書き方講座)

Twitterをみているとこんな投稿があった。

notebetterのconfigの書き方がわからない。音がならない。

実はnotebetterを含め数多くのmodのconfigは普段見慣れない書式で記述されていて、そのためconfigを書き間違える人がおおいのだ。特にnotebetterはゲーム内で設定することができず、直接configをいじらないといけないため必ずと言っていいほど通る道だろう。

そんなわけで、今回はmod config,notebetter resource書き方講座、もといjson書き方講座を開こうと思う。
しかしjsonの中でもmodのconfigの部分にしか触れないため、プログラミングガチ勢には参考になりづらいだろう。

今回使用するテキストエディタはnote pad ++だ。teraよりこっちのほうがいいと個人的には思う。

コピペ用のものもあるが、そちらは参考程度に。

config、お前は何者だ

ここまできて分からない人はいないとは思うが、configとは設定のことである。単純に直訳しただけであるが、それ以外に言いようがない。ほかに私が持っている情報といえば、configはconfigueの略であることぐらいなものだ。

Minecraftの該当ディレクトリに移動すると必ずconfigというフォルダが生成されているはずだ。この中にほとんどのmodのconfigが揃っている。
たまにconfigフォルダのなかに新しい専用のフォルダを作ってそこにconfigを生成するmodもある。notebetterもそのうちのひとつだ。だからといって自分で勝手にconfigファイルを移動させてはだめである。その場合configファイルが認識されず、新しい初期値のconfigファイルが生成されることになる。

と、そんなことは読者は知っているのだ、いやそもそも読者なんているのだろうか。

notebetter - config

notebetterのconfigから説明する。
拡張子が.jsonであることからもわかるように、notebetterのconfigはjson形式で記述されている。そのためあくまでもこれは一行、それを整形しただけであることを頭の片隅に入れておいてほしい。

まずはconfigから。ファイル/フォルダ名はnotebetter/default.json。notebetter導入後初回起動時はこのファイルがテンプレートとともに自動生成される。
以下のスクリーンショット、コピペ用コードを参照。

{
 "blocks": [
   {
     "block""minecraft:diamond_block",
     "sound": {
       "name""minecraft:block.note.hharp",
       "volume"3.0
     }
   },
	{
     "block""minecraft:diamond_ore",
     "sound": {
       "name""minecraft:block.note.lharp",
       "volume"3.0
     }
   },
	{
     "block""minecraft:hay_block",
     "sound": {
       "name""minecraft:block.note.banjo",
       "volume"3.0
     }
   }
 ]
}

それぞれ変更すべき値を種類ごとに色わけをした。
まず青字はその下のブロックのIDである。これは平坦化をする前であってもダメージ値を記述することはできないため、英語表記のブロック名を記述すればよい。英語以外はスペースも含め不可、必ず頭にminecraft:がつかなくてはならない。
また、数字以外の値(string)はjsonではダブルクオーテーション(" ")で囲む必要がある。これがなければ正常に動作してくれない。というよりconfigにあるものはたいていなくてはならないものだが。
よって、一般化したものは以下のようになる。

"minecraft:block_id"

次に赤紫色で囲った部分だ。こちらも当然stringなのでダブルクオーテーションで囲む必要がある。この赤紫色の部分はsound event名の指定である。すなわちゲーム内で/playsoundや/stopsoundなどで指定するevent名である。ここも、もちろん英語以外はスペースも含め不可だ。のちのちこのevent名がリソースパックで要求されることになる傍ら、自由度が青文字と比べ高い。そのため一貫性をもったわかりやすい名前がいいだろう。一般化するとこうなる。identifierの場所はドットで区切るなどして見やすくすることができる(例参照)。

"namespace:identifier"

volumeも変更することができるが、ほとんどの人は変えることがないと思われるので解説は軽くする。

volumeはこの数値*16ブロック先まで音を聞くことができるようにする数値変数である。したがって3.00のとき48ブロック先、つまり通常の音ブロックと同じ距離まで聞こえるようになる。気をつけてほしいのは、ここでいじっても音量が変わるわけではなく、音の聞こえる最大の距離が変わるだけである。これは少数もふくめて数字で指定することができる。ただ、基本的には3.0のままでいいだろう。

そして意外と忘れがちなのが、カンマである。もともとjson形式なので、これは一行のコードだ。それを整形して見やすくしているだけなので、改行時もカンマが必要なことが多々ある。とくに{}のあとのカンマは忘れずに。{}を閉じたあともう一度開くにはカンマが必要だ。

たとえばこのスクリーンショットで、緑色の丸の位置は括弧を閉じたあと次の文字で括弧を開いているため必要であるが、緑色の点線の位置は括弧を閉じたあと次の文字で括弧を開いていないので、ここの位置にはカンマを打ってはいけない。また、赤色の丸の位置は括弧を閉じても開いてもいないが、変数の列挙の途中のためカンマを打つ必要がある。

注意してほしいのはこのスクリーンショット、テキストでは23行目の括弧の次である。一番最後のデータ設定は括弧をまた開くことはないので、カンマを打ってはいけない。

text
{
   {
       text
   },
   {
       text{
           "p1" : "text",
           "p2" : "text"
           }
   }
}

当然これらがひとつでも抜けると正しく読み込めない。
これらの書式がすべて正しい人は、リソースパックに問題があるはずである。次の項で解説、フォーマットの配布をする。

notebetter - resource pack

リソースパックもまた、json形式で記述する必要がある。

sound.jsonは、soundフォルダがあるディレクトリに必ず置かれていなくてはならない。というのも、sounds.jsonはconfigで設定したsound event名がコールされたときにどのファイルを参照するかの定義をしているファイルだからだ。このファイルがない、もしくはどこかが間違っていると、どのsound eventがどのファイルに対応しているかがわからないためそのリソースパックで指定している音すべてが無音になってしまう。さらにこのファイルは記述が難しいのでここで悩む人も多いだろう。

まずはスクリーンショットとコピペ用コードだ。

{
   "block.note.hharp": {
       "category""record",
       "replace"false,
       "sounds": [
           "block/note/hharp"
       ]
   },
   "block.note.lharp": {
       "category""record",
       "replace"false,
       "sounds": [
           "block/note/lharp"
       ]
   },
   "block.note.banjo": {
       "category""record",
       "replace"false,
       "sounds": [
           "block/note/banjo"
       ]
   }
}

色はconfigの色と合わせてある。つまり、赤紫色の部分はsound event名をいれるところである。ここでは名前空間(namespace)がminecraftのときのみ省略が必須である。そのため名前空間の部分はコロンも含めて消してからコピーしよう。名前空間がminecraft以外の場合は省略不可なので書く必要がある。名前空間を書く場合はconfigと書式が同じなのでそちらを参考にしてほしい。もちろんstring型なのでダブルクオーテーションで囲う必要がある。とはいえここまでくれば言わなくてもわかることだろう。

次に青色の部分である。ここは赤紫色のsound eventがコールされたときの参照ファイルを記述する。ここで注意すべき点は、soundフォルダ以下の階層のみを記述する点である。つまり、一般化すると以下のようになる。フォルダの数は任意で、なくてもいい。が、見やすいようにhigh,medium,lowで分ける程度にはしておいたほうがいいように思える。

"folder1/folder2/folder3/.../file"

ここで、この前後の括弧を変えてはならない。{}だと機能しない可能性が高い。

もちろんここでも、緑色の実線、点線の丸、赤色の丸も注意して記述してほしい。

さらにこれはconfigでもいえることなのだが、括弧はしっかりと対応させて記述しなくては認識されない。ここまできてなお無音な場合これが考えられる。というよりほかにあるのだろうか。notepadの括弧の対応が見やすいので、これをおすすめしたい。

おまけ:pack.mcmeta

jsonの解説をするのであれば、ここは避けては通れないだろうと思い、おまけにいれた。あまり、というかまったくいらない。pack,mcmetaはjsonなので実際のところいままででの応用で可能である。

pack.mcmetaは拡張子が.jsonと違うため本来はjson形式であるがほとんどのテキストエディタはこれをただのテキストファイルと読み込んでしまう。そんなときは言語から変えることができるので、そうしたほうが見やすいだろう。

{
	"pack": {
		"pack_format"1,
		"description""text"
	}
}

ここのtextに英語でpackの紹介をいれれば完成だ。formatは調べてくれ。
そんなこと言ってしまってはすべて調べてくれで終わってしまうだろう...

宣伝

youtubeで不定期で動画を出しています。

ほかの動画は概要欄、またはチャンネルから。クオリティは低い。

twitterでもたまに音ブロック関連のツイートをしています。

いいなと思ったら応援しよう!