MinecraftのMODを作りたい~刀をクラフト編~

~玉鋼と木の棒を組み合わせて...!!~

前回、アイテム精錬編にて玉鋼インゴットをアイテムとして追加しました。

そして今回は、その玉鋼インゴットと木の棒を組み合わせて刀(KATANA)という武器にクラフティングします。

どのようにアイテム同士を組み合わせて別のアイテムにするか、その決められたアイテムの並べ方を「レシピ」といいます。

ということで、刀(KATANA)を作成するためのレシピを作っていく!!


~レシピ作り~

アイテムのレシピを作ると意気込んだものの、MineCraftのバージョン1.12からとても簡単になっている様子。(開発中のバージョンは1.12.2)

なんとなんと、たった一つの設定ファイル(jsonファイル)を作るだけでよいのです。

『katana.json』というファイルを作成し、以下のようなコードを書き込む。

{

  "type": "minecraft:crafting_shaped",

  "pattern": [

    "  Y",

    " Y ",

    "X  "

  ],

  "key": {

    "X": { "item": "minecraft:stick" },

    "Y": { "item": "katanamod:tamahagane_ingot" }

  },

  "result": {

    "item": "katanamod:katana"

  }

}

それでは、各パラメータの説明に入っていきましょう。

 

“type”:

 ⇒レシピの型の宣言で、定形であるため必ず「crafting_shaped」となる

“pattern”:

 ⇒3×3のスロットで置く形を指示

  何も置かない箇所は半角スペースで埋める

  今回は、/の形にアイテムを並べている

“key”:

 ⇒"pattern"で使ったアルファベットに対応させて素材を指示

  『X』にはデフォルトで存在するアイテムである木の棒(stick)

  『Y』には当MODで作成した玉鋼インゴット(tamahagane_ingot)

“item”:

 ⇒素材アイテムのほか、ブロックも ItemBlock として処理を行うため

  item:で指示する必要がある

  今回で言うと、「stick」や「tamahagane_ingot」の部分

“result”:

 ⇒クラフトで出来るものを指示

  このクラフトによってなんというアイテムが出来上がるのか

  今回なら、「katana」の部分

 

上記パラメータの他にも、クラフトするアイテムによって使うパラメータもあります。

“group”、“data”、“count”などなど...

 

と言うわけで、このjsonファイルを作成したことで

刀(KATANA)がクラフトできるようになりました!!

・・・刀(KATANA)をアイテムとして作らなきゃ!!


~刀(KATANA)を作成~

新たに刀(KATANA)というアイテムの定義を作成していくわけですが、流れとしては玉鋼インゴットのときと同じ。

 

まず、刀(KATANA)をアイテムとして定義

ToolKatana.java

その定義を呼び出す処理を作って、アイテムの見た目となるモデルも定義

katanaModTools.java

貼り付けるテクスチャも定義

katana.json

{

  "parent": "item/handheld",

  "textures": {

    "layer0": "katanamod:items/katana"

  }

}

刀(KATANA)は武器なので、必ずparentには『handheld』と設定します。

(訳すと、片手で持って使える...みたいな意味らしい)

 

「ToolKatana.java」でアイテムとしての情報を登録している関数でaddToolMaterial『addToolMaterial』とあります。

これの引数に設定した数値で、そのツール(今回は武器)の性能が決定されます。

正式な引数は、以下。

『addToolMaterial(String name, int harvestLevel, int maxUses, float efficiency, float damage, int enchantability)』

それぞれの引数の意味は以下のような感じ。

”name”:

 ⇒ツールの名前。わかりやすく、KATANA

”harvestLevel”:

 ⇒採掘レベル。レベルが高ければ、採掘可能なブロックが増える。

  今回は武器なのであんまり意味がない。

”maxUses”:

 ⇒耐久値。何回使用したら壊れるかを設定。10なら10回で壊れる

”efficiency”:

 ⇒効率。レベルが高ければ、採掘速度が速くなる

  武器なのでやっぱりあんまり意味がない。

”damage”:

 ⇒攻撃力。高くすればどんなモンスターでも一刀両断!!

”enchantability”:

 ⇒エンチャントの付きやすさ。

  高ければ高いほど、少ないレベルで良い効果が付けられる。

 

こうしてアイテムとしての刀(KATANA)を作成することで、

ようやっとゲーム内でクラフトできるようになります。


~いざクラフト~

まずは、玉鋼インゴットと木の棒を用意。

そして、設定ファイルで設定した形に並べてクラフト!!

刀(KATANA)が出来上がりました。

デザインセンスの欠片もない刀(KATANA)の完成です。

ドットで絵を描くセンスは私にはまったくありませんでした。


~ちょっとした検証~

今回、addToolMaterialで設定した攻撃力は15だけれど、

ゲーム上では19となっている。

どうしてなのか確かめるべく、ちょっと細かな数字を確かめてみる。

 

「damege」部分に以下で設定してみる。

攻撃力:1⇒ゲーム内攻撃力:5

 

ふむ、1だとゲーム内では5ということは、

ソース上の設定値にプラス4されるということかな?

試しに0にしてみたら、ゲーム内では4になったので間違いなさそう。

それじゃあマイナスは...?

ってことでマイナス4にしてみたら、ゲーム内では0に。

マイナス10にして、ゲーム内ではマイナス6となった状態でMOBを殴ろうとしてみたところ、殴れない。

まぁ、マイナスにしたところでプレイヤーとしては何の得もないからやるだけ無駄だったか...

ちなみに下は、10万を設定してみた結果。

これならボスモンスターもワンパンだわ...

次に、エンチャントレベルの検証をしていってみる。

いまの設定値が「10」となっており、これはダイヤモンドの剣と同じ。

この数値を段階的に上げて、その状態でレベル1のエンチャントをして

どう変化していくのかを見ていってみよう。

エンチャントレベル:10

1回目⇒虫特効Ⅰ

2回目⇒ノックバックⅠ

3回目⇒ノックバックⅠ、範囲ダメージ増加Ⅰ

虫のモンスターに効果的な虫特効や、殴った際に敵を遠くまで飛ばすノックバック。

いずれにしても性能レベルはⅠなのでやはり強くはない。

エンチャントレベル:20

1回目⇒ダメージ増加Ⅰ

2回目⇒ダメージ増加Ⅱ

3回目⇒ダメージ増加Ⅱ

 

エンチャントレベル:30

1回目⇒ダメージ増加Ⅱ、耐久力Ⅰ

2回目⇒ノックバックⅠ

3回目⇒耐久力Ⅲ

 

エンチャントレベル:50

1回目⇒耐久力Ⅰ

2回目⇒アンデッド特効Ⅱ、ドロップ増加Ⅰ

3回目⇒耐久力Ⅲ、ダメージ増加Ⅲ

 

エンチャントレベル:100

1回目⇒アンデッド特効Ⅱ

2回目⇒ダメージ増加Ⅴ、ドロップ増加Ⅲ、ノックバックⅡ、火属性Ⅱ

3回目⇒ノックバックⅡ、ダメージ増加Ⅲ

 

エンチャントレベル:200

1回目⇒範囲ダメージ増加Ⅲ、火属性Ⅱ

2回目⇒火属性Ⅱ、耐久力Ⅲ、ドロップ増加Ⅲ

3回目⇒火属性Ⅱ、ダメージ増加Ⅴ、耐久力Ⅲ

 

エンチャントレベル:500

1回目⇒ダメージ増加Ⅴ、ノックバックⅡ

2回目⇒アンデッド特効Ⅱ、火属性Ⅰ

3回目⇒ノックバックⅡ、ダメージ増加Ⅴ、火属性Ⅱ

こうやってみたところ、エンチャントレベル100以上でほぼほぼ

最高峰のエンチャントがレベル1で付けれるようになるっぽい?

ちなみに、エンチャントレベル200や500で試行しているときに

『Limited Enchantability』と出てエンチャントできないときがあった。

500のときはほぼほぼ出来なかった。

調べてみたところ、日本語で書かれた情報はまったくなく...

仕方なしに、英語のページを翻訳表示して眺めてみました。

んで、恐らくこういうことだろうっていうのを見つけたので自分なりに解釈。

 

エンチャントレベルを上げすぎたことにより、システム的には

設定したエンチャントレベルに見合うような性能をつけようとする。

だけれど、高いエンチャントレベルに見合う性能の組み合わせが少ないのか、

そのタイミングで付けれる性能が見つからなかった!!

みたいな感じなんじゃないかと想像しております。そう、かってな想像。

 

まぁ結論は、エンチャントレベルは100くらいにしとくべきだ!ってことかな?


~次回~

刀(KATANA)というと、使っていくうちにどんどん切れ味が鈍っていくイメージがありますよね?

そんなイメージが私にはあったので、刀(KATANA)の耐久値が半分になったら攻撃力も半分になる!!

そんなようなことがしたいと思っております。

アイテムやレシピを追加するという、ゲーム起動時に読み込まれる部分ではなくて、実際にゲームを操作していく中でプレイヤーが特定の行動をしたときに発火する処理を加えるという、個人的には少し難易度が高まると感じます。

なんとか実現させたいところですな!!

 

以上、MineCraftのバージョンは1.12.2でお送りしました。