スキップしてメイン コンテンツに移動

Minecraft(1.12.2)Mod作成 環境構築&ブロック作成

初心者でも簡単にModを作成する環境と自作ブロックの追加する方法を書いていきます。
今回、作りこむ気はないので簡単に何の効果もないブロックを作成します。
「こうやってブロックをつくるんだなぁ」程度にわかってもらえればと思います。

前提条件

開発環境

  • windows10(macでもほぼ同じように環境を整えられる:動作確認済み)
  • JDK 8u211
  • IntelliJ
  • Minecraft Forge(1.12.2)

参考記事

環境のセットアップ

JDKのダウンロード&インストール

まずは下記のURLからJDKをダウンロードしインストールしていきます。

www.oracle.com

画像の手順でダウンロードしてください。  

Oracleのプロファイルを持っている人はメールアドレスとパスワードを入力後サインインボタンを押すことで数秒後、ダウンロードが開始します。
Oracleのプロファイルを持っていない人は画像下のプロファイル作成を行ってください。学生や企業ではない方は下記のURLを参考にプロファイル作成をしてください。
作成後、登録した情報を入力しダウンロードしてください。

qiita.com

その後ダウンロードしたファイルを実行しインストーラに従ってインストールしてください。

IntelliJのダウンロード&インストール

下記URLにアクセス
www.jetbrains.com画像の手順でダウンロード
 数秒後にダウンロードが開始される。
ダウンロード後、下記の参考サイトからの画像があるのでその手順でインストールと初期設定してください。  その後プラグインの設定をしていきます。 初回起動時にはWelcome to IntelliJ IDEAのウィンドウが出てくるはずなので下記の画像に従って操作する。   ウィンドウが出てくるのでacceptをクリックしインストールできればリスタートボタンが出現するので再起動したら成功です。

プロジェクトの作成

再起動後またWelcome to IntelliJ IDEAウィンドウが開かれるので下記画像に従って操作する。

     最後に"finish"ボタンを押すことでプロジェクトの作成が開始されます。
プロジェクト作成に少し時間がかかる場合があるので止まったとは思わず気長に待ちましょう。
作成終了後、ウィンドウか右下にgradleに関しての通知が来るのでその場合はウィンドウに何もせずOKを押してインポートしてください。
ウィンドウも何も出てこない場合はintellijを再起動してもう一度確かめれば出てくるはずです。
詳しくは参考サイトのImport Module from Gradleを参照してください。
 上記画像のようなgradleのウィンドウが開けたら成功です。

  • 注意:windows defenderが問題でログが出た場合はfiXを選び対応する
    windowsのonedriveが有効なディレクトリの場合エラーを出してくることがある?
    書き込みや読み出し、実行の権限がないユーザーやディレクトリで作るとエラーなど正常に動作しないので注意。

動作確認

ここまでで環境は整えられたので実際にMinecraftを起動させてみましょう。 画像の赤く下線が引かれたもの上から順番にクリックし最後の赤下線を左クリック  一番上の青くなっているRun...をクリックすると起動準備に入ります。
pcのスペックによっては途中で止まることもありますがもういちど同じ方法で何回か試すと起動できるようになります。ある程度時間がかかる場合があるので気長に待ちましょう。
起動出来たらマインクラフトの最初の画面が表示されます。
 赤枠をクリック  先ほど自分が設定した名前にmod名がなっていたら成功です。(やっとここまで来ました...)

Mods作成

Mod詳細設定

手始めにmodの情報を編集していきます。
今後のブロック作成には関係のないことなので飛ばしたい方は無視してください。

halake_mod/src/main/resources/mcmod.info

というファイルがあるのでこれを書き換えることによって先ほど確認した画像のmod詳細を変えることができる。
例えばこんな感じ。

[
  {
    "modid": "halake_mod",
    "name": "Halake mod",
    "description": "HaLaKe is lots of fun.",
    "version": "${version}",
    "mcversion": "${mcversion}",
    "url": "https://www.halake.com/",
    "updateUrl": "",
    "authorList": ["halaker"],
    "credits": "",
    "logoFile": "assets/halake_mod/logo.png",
    "screenshots": [],
    "dependencies": []
  }
]

もともとあったファイルの中身と見比べるとところどころ変わっているのがわかるでしょうか?
同じように書き換えることによって自由に表示させることができます。 上記のmod詳細の画像と比べると変わっているのがわかります。  もしロゴ画像を登録したい場合はすでに上記のプログラムに記載済みなのですが、"logoFile"の欄の右側に記載されているようにロゴにしたい画像の相対パスを記入することで登録できます。パスのようにファイルを作って画像を保存していきましょう。

  • Tips:コマンドプロンプトtreeと入力し調べたいフォルダをプロンプトのウィンドウにドラッグ&ドロップし実行することでファイルの階層関係を視覚化できる。同じようになっているか確認してみよう!最後にオプションの/fを付けてください。 <例>tree C:\Users\M.Shinoda\Desktop\halake_mod /f
halake_mod
│
省略
│
└─src
    ├─main
    │  ├─java
    │  │  └─halake
    │  │      └─halake_mod
    │  │              Halake_mod.java
    │  │
    │  └─resources
    │      │  mcmod.info
    │      │
    │      └─assets                   ←追加
    │          └─halake_mod           ←追加
    │                  logo.png       ←追加
    │
    └─test
        ├─java
        └─resources

使う画像はこちら

logo.png

サイズは縦横120ピクセルくらいでいいと思います。自由な画像を使う場合、windowsだったら標準アプリのペイント3Dあたりを使えば大きさを変更できます。
成功例がこちら  いい感じにできました!

ブロック作成

今回の本題、ブロック作成に入っていきたいと思います。

まずはメインとなるプログラムをいじっていきます。
初めにサンプルとして記述されているので思い切ってすべて削除していきましょう。

halake_mod/src/main/java/halake/halake_mod/halake_mod.java

をすべて削除し、下のプログラムをコピペする。

package halake.halake_mod;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.registry.GameRegistry;


@Mod(
        modid = Halake_mod.MOD_ID,
        name = Halake_mod.MOD_NAME,
        version = Halake_mod.VERSION
)
public class Halake_mod {

    public static final String MOD_ID = "halake_mod";
    public static final String MOD_NAME = "Halake_mod";
    public static final String VERSION = "2019.3-1.3.4";

    /*
    メンバーの追加
     */
    @GameRegistry.ObjectHolder(MOD_ID)
    public static class Items {
        public static final Item halakeblock = null;
    }
    @GameRegistry.ObjectHolder(MOD_ID)
    public static class Blocks{
        public static final Block halakeblock = null;
    }

    /*
    アイテムの登録
     */
    @Mod.EventBusSubscriber
    public static class ObjectRegistryHandler {
        @SubscribeEvent
        public static void addItems(RegistryEvent.Register<Item> event) {
            event.getRegistry().registerAll(
                    new ItemBlock(Blocks.halakeblock)
                            .setRegistryName("halakeblock")
            );
        }

        /*
        ブロックの登録
         */
        @SubscribeEvent
        public static void addBlocks(RegistryEvent.Register<Block> event) {
            event.getRegistry().registerAll(
                    new Block(Material.ROCK)
                            .setRegistryName(MOD_ID,"halakeblock")
                            .setCreativeTab(CreativeTabs.BUILDING_BLOCKS)
                            .setTranslationKey("halakeblock")
                            .setHardness(1.5F)
                            .setResistance(1.0F)
                            .setLightLevel(1.0F)
            );

        }

        /*
        モデルの登録
         */
        @SubscribeEvent
        public static void registerModels(ModelRegistryEvent event) {
            ModelLoader.setCustomModelResourceLocation(Items.halakeblock, 0, new ModelResourceLocation(Items.halakeblock.getRegistryName(), "inventory"));
        }
    }
}
  • 注意:プログラムにコメントが記述されているとエラーがでるが問題なく動くことは確認済みなので気になるかたはコメント部分を削除してください。

次に必要なファイルを作成してきます。

halake_mode
│
省略
│
└─src
    ├─main
    │  ├─java
    │  │  └─halake
    │  │      └─halake_mod
    │  │              Halake_mod.java
    │  │
    │  └─resources
    │      │  mcmod.info
    │      │
    │      └─assets                     ←mod詳細設定で説明済み(飛ばしていれば追加)
    │          └─halake_mod             ←mod詳細設定で説明済み(飛ばしていれば追加)
    │              │  logo.png          ←mod詳細設定で説明済み(なくてもOK)
    │              │
    │              ├─blockstates        ←追加
    │              │
    │              ├─models             ←追加
    │              │  ├─block           ←追加
    │              │  │
    │              │  └─item            ←追加
    │              │
    │              └─textures            ←追加
    │                  └─blocks          ←追加
    │
    └─test
        ├─java
        └─resources

ファイル作成はwindowsエクスプローラーで行うとやりやすい。(気がする) 前述のtreeコマンドで同じような階層になっているか確認する

ブロックのモデルを設定

先ほどのロゴに使った画像を名前をhalakeblock.pngに変えて下記のように配置する

/src/main/resources/assets/halake_mod/textures/blocks/halakeblock.png

jsonファイルは

/src/main/resources/assets/halake_mod/models/block/halakeblock_model.json

に配置し、以下を記述。

{
    "parent":"block/cube_all",
    "textures":{"all":"halake_mod:blocks/halakeblock"}
}

ブロックの状態設定

jsonファイルは

/src/main/resources/assets/halake_mod/blockstates/halakeblock.json

に配置し、以下を記述。

{
    "variants": {
        "normal": { "model": "halake_mod:halakeblock_model" }
    }
}

アイテムのモデル設定

sonファイルは /src/main/resources/assets/halake_mod/models/item/halakeblock.json に配置し、以下を記述。

{
    "parent":"halake_mod:block/halakeblock_model"
}

ここまで出来たらもう一度treeコマンドを使って同じようになっているか確認しましょう。

halake_mod
│
省略
│
└─src
    ├─main
    │  ├─java
    │  │  └─halake
    │  │      └─halake_mod
    │  │              Halake_mod.java
    │  │
    │  └─resources
    │      │  mcmod.info
    │      │
    │      └─assets
    │          └─halake_mod
    │              │  logo.png
    │              │
    │              ├─blockstates
    │              │      halakeblock.json
    │              │
    │              ├─models
    │              │  ├─block
    │              │  │      halakeblock_model.json
    │              │  │
    │              │  └─item
    │              │          halakeblock.json
    │              │
    │              └─textures
    │                  └─blocks
    │                          halakeblock.png
    │
    └─test
        ├─java
        └─resources

名前や階層が違うだけで動作しないのでよく確認しエラーが出たときは内容に応じてもう一度確認してみることをお勧めします。
これらすべての設定が終わったら前述の方法でMinecraftがエラーを出さずに起動出来れば完成です。   こんな感じ!
ワールドをクリエイティブ、スーパーフラット、チートオン、で作成するとブロックの呼び出しとサバイバルの切り替えなどデバッグしやすいのでお勧めです。
起動時の動作の軽減には表示チャンク数を下げるのと難易度をピースフルに設定するのもいいかも。

l名前の指定とレシピの追加(おまけ)

プレイ中のアイテム名の表示を言語に応じて変えてみる。

src/main/resources/assets/halake_mod/lang

を作成し、この中に以下の二つを追加する。
en_US.lang

# English Language File
tile.halakeblock.name=HaLaKe Block

ja_JP.lang

# 日本語言語ファイル
tile.halakeblock.name=ハレイクブロック

これらを追加することで言語を日本語に設定したとき”ハレイクブロック”と表記される。
次にレシピに追加をしていきます。

resources/assets/halake_mod/recipes/halakeblock_recipe.json

を作成し下記を記述。

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "BBB",
    "BBB",
    "BBB"
  ],
  "key": {
    "B": [
      {
        "item": "minecraft:water_bucket",
        "data": 0
      }
    ]
  },
  "result": {
    "item": "halake_mod:halakeblock",
    "data": 0,
    "count": 1
  }
}

水のバケツ9個を作業台でクラフトするとハレイクブロックを作れるようなレシピをつくりました。(ハ....レイクだけに水で....)スベリorz
Minecraftを起動しクラフトしてみるとできるはずです。

まとめ

プログラムの細かい説明は省きましたが序盤にも申し上げた通りこんな風にできてるんだなぁと思ってもらうためにかきました。(自分が一番理解できてないだけ)
正直に言うと今後はMinecraftのmodは触りたくないと思うほどめんどくさかった。バージョンが少し違うだけでプログラムの書き方が変わるので記事があっても使えなかったり...
簡単な仕組みと流れは理解できたのでプログラミング初心者の私からすると良い体験ができました。

コメント

このブログの人気の投稿

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その2

前回の記事 に引き続きPhaser3+Typescriptを使って RPG の基礎を作っていきます。 この記事は前回の記事を呼んだ前提で説明していきますので、ぜひそちらを先に読むことをお勧めします。 また、今回の記事は前回よりも難易度と内容量が上がっていますが、記事の最後に作業後の リポジトリ のリンクがありますので、そちらを先にダウンロードしてそちらと比較しながら学習することができます。 前回まで作成した状態のプログラムが以下の リポジトリ からダウンロードできますので前回まででうまくいっていない方は参考にしてみてください。 github.com 最終目標(再掲) ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・ゲームの作り方の断片を知る ・キャラの表示できるようにする ・キャラを移動できるようにする ・当たり判定をつける ・ NPC の追加してみる ・話しかけられるようにする 開発前提(再掲) ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール(再掲) ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 当ブログ仕様の画像素材の注意点 当ブログで使用する画像素材は『 ピポヤ倉庫 』より許可なしで無償再配布・改変が認められたものを改変して作成されたものです。 中には許可なく再配布・改変してはいけない素材もインターネット上には多く存在するのでそれらを使用するときは十分に規約を呼んでから使用しましょう。 1. キャラの表示 想定画面 今回は、はじめにキャラつまり操作

M5Stackで、においセンサー(TGS2450)を使ってみる。(LCDに表示編)

今回は、においセンサー(TGS2450)から取得したデータをM5Stackの LCD にグラフ表示をしていきます。 今回主に使用したもの M5Stack 10Ω抵抗 5本 Pch  MOSFET  2SJ334(スイッチとして利用) M5StackSideBB(ブレッドボード) M5Stackのピンはそのままだと配線するとき手間がかかるかと思いますので、今回はM5StackSideBBを利用しました。 ブレッドボードも付いているので、手軽に電子工作できるので個人的にオススメです。 SideBB for M5Stack www.switch-science.com 諸注意 本ブログのプログラムはArduinoIDEまたはPlatformIOでM5Stackの開発ができる状態であること前提のものですので、各自導入をお願いします。 過去に Windows のArduinoIDEで M5Stackの開発環境を構築する記事 があるので、参考にしてください。 においセンサー(TGS2450)について 今回使用したセンサーは 秋月電子通商 で購入できます。 http://akizukidenshi.com/catalog/g/gP-00989/ akizukidenshi.com TGS2450には4つのピンがあり、使用するのはそのうちの3本でヒーターを温めるピン、センサー情報を得るピン、GNDがあります。 ここで注意したいのは、ヒーター電圧は1.6Vと記述されているのでM5Stackで利用するときは分圧して3.3Vを1.6V近くまでに降圧することをお勧めします。 TGS2450のセンサーは可変抵抗になっており、データシートには5.62kΩ〜56.2kΩの間を抵抗が変化し、においが強いとより低くなると記述されていました。 よって、センサーの値をM5Stackで取得するにはセンサー抵抗と外部に接続する任意の値の抵抗による分圧回路によって求めることができます。 TGS2450の動作方法は、250ms周期でセンサーに電圧を5ミリ秒on、245ミリ秒offの状態にしてヒーターは8ミリ秒on、242ミリ秒offにすることで値を取得します。 配線 においセンサーとM5Stackの配線 上の図が配線図です。 30Ωの抵抗は10Ωの抵抗を三つ直列に接続して作成しました。 また、上部の抵抗10Ω二

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その1

今回はPhaser3とTypescriptを使って簡単な RPG ゲームを作る方法を紹介していきます。 内容はPhaser3およびゲーム作りについての記事なので、Nodejsの周辺モジュールなどの説明は一部省いての説明になりますのでご了承ください。 またこの記事では Phaser2 ではなく Phaser3 を使用するので注意してください。 この記事は二部構成になりますので、この記事を読んだ際はぜひ次の記事も読むことをお勧めします。 最終目標 ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・開発環境を整える ・Phaser3の開発構成を知る ・スタート画面を作る ・マップ表示をさせる 開発前提 ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 1. 最低限の開発環境の準備 今回最低限の環境を整えるために、『Typescript + Phaser3』の開発テンプレートを github リポジトリ で公開しました。 以下からZIPをダウンロードするか、 git clone コマンドで各自環境に展開してみてください。 ここから先は リポジトリ のプログラムを元に説明していきます。 github.com 展開するとファイル構造は以下のようになっているかと思われます。 注: 他にもファイルやフォルダがあるかと思われますが、表記されているのは今回使うものになっています。 - src/ (これから書くプログラムの保存領域)