main() blog

プログラムやゲーム、旅、愛する家族について綴っていきます。

Minecraft MODでオリジナルの「レシピ」を追加してみよう!(Mac編)

Forge MDK 1.12.2 の環境での説明になります。

環境構築などについては下記のページを参考にしてください。

www.main-function.com

前回はオリジナルのブロックを追加したので、今回は新しいレシピを追加したいと思います。

新しいレシピを追加してみよう

レシピの追加についてはコーディングが不要となっています。
以前はコーディングして追加していたらしいです。

Forge MDKを展開したフォルダに以下のフォルダを追加します。

/forge-1.12.2-14.23.5.2768-mdk/src/main/resources/assets/testmod/recipes/

asset/とrecipes/は指定されたフォルダ名である必要があります。
testmod/については任意のフォルダ名でも大丈夫そうです。

recipes/の下にjsonファイルを追加します。
ファイル名は任意で大丈夫そうです。

試しに "土"一つで "ダイアモンド" を作るレシピを追加してみます。 jsonファイルに以下を入力してください。

{
    "type":"minecraft:crafting_shapeless",
    "ingredients": [
        {
            "item": "minecraft:dirt",
            "data": 0
        }
    ],
    "result": {
        "item": "minecraft:diamond",
        "data": 0,
        "count": 1
    }
}

キーがingredients(材料)に必要なアイテムを記述します。
配列指定なので土を一つ指定します。

result(結果)にダイアモンドを指定します。

Eclipseの "src/main/resources" のフォルダ以下にjsonファイルが追加されていることを確認します。

f:id:takezoh_1127:20181102194221p:plain

動かして確認してみよう

早速起動してみます。

起動したらゲームモードを切り替えます。
以下を入力してサバイバルモードに切り替えます。

/gamemode 0

地面を掘って土を入手します。

f:id:takezoh_1127:20181102194000p:plain

[E]キーを押して持ち物画面を開きます。
先程入手した "土" をクラフトにドラッグすると...

f:id:takezoh_1127:20181102194104p:plain

はい、"ダイアモンド" が生成されました。

f:id:takezoh_1127:20181102193852p:plain

無事にオリジナルレシピが追加されました。

Minecraft MODでオリジナルの「ブロック」を追加してみよう!(Mac編)

Forge MDK 1.12.2 の環境での説明になります。

環境構築などについては下記のページを参考にしてください。

www.main-function.com

新しいブロックを作ろう

f:id:takezoh_1127:20181101234054p:plain

"testmod"のPackageにクラスを追加します。
右クリック(もしくはメニューバーのFile)、New、Classで作成ダイアログが開きます。
今回はクラス名を "MyBlock" とします。
空のクラスが作成されました。

package testmod;

public class MyBlock {

}

ここにBlockの実装を追記していきます。
まずは以下のように入力してください。

package testmod;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

public class MyBlock extends Block {
    public MyBlock(String name, Material materialIn) {
        super(materialIn);
        setUnlocalizedName(name);
        setRegistryName(name);
    }
}

簡単に説明をしていきます。
新しくBlockを作成するためにMinecraftのBlockクラスを継承する必要があります。
クラスをインポートして、Blockクラスを継承します。

// ↓Blockクラスをインポートする
import net.minecraft.block.Block;

// ↓extends BlockでBlockクラスを継承する
public class MyBlock extends Block {

次にMyBlockのコンストラクタを書きます。

// ↓Materialクラスをインポートする
import net.minecraft.block.material.Material;

  :

  // コンストラクタ
    public MyBlock(String name, Material materialIn) {
        super(materialIn);
        setUnlocalizedName(name);
        setRegistryName(name);
    }

ブロックの名前とマテリアルを引数で渡します。
Materialクラスを使用するのでインポートが必要です。
親クラスのコンストラクタを super(materialIn) で呼びます。
名前をセットしておきます。

これで新たに作成するBlockクラスが作成できました。

作ったブロックを登録しよう

次に新しく作ったBlockクラスを登録する処理を書きます。

先程と同様に "testmod" のPackageに "ModBlocks" というクラスを追加します。
以下のソースを書きます。

package testmod;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

@Mod.EventBusSubscriber(modid=TestMod.MODID)
public class ModBlocks {
    public static Block myBlock = null;
    
    public static void init() {
        myBlock = new MyBlock("myBlock",Material.ROCK).setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
    }
    
    @SubscribeEvent
    public static void registerBlocks(RegistryEvent.Register<Block> event) {
        event.getRegistry().registerAll(myBlock);
    }
    
    @SubscribeEvent
    public static void registerItemBlocks(RegistryEvent.Register<Item> event) {
        event.getRegistry().register(new ItemBlock(myBlock).setRegistryName(myBlock.getRegistryName()));  
    }
}

init()でMyBlockクラスのインスタンスを生成します。
引数に名前"myBlock"とマテリアル"ROCK"を渡して生成します。

Block登録時に呼ばれるイベント関数でBlockの登録を行います。

最後にModBlocksの初期化関数をTestModの初期化時に呼ぶようにします。

@Mod(modid=TestMod.MODID, version=TestMod.VERSION)
public class TestMod {
    public static final String MODID = "testmod";
    public static final String VERSION = "1.0";
        
    @EventHandler
    public void preInit(FMLPreInitializationEvent event) {
         // ↓ここを追加
        ModBlocks.init();
    }
    
    @EventHandler
    public void init(FMLInitializationEvent event) {      
    }
}

動かして確認してみよう

早速実行してみましょう。

起動したら[E]キーを押して持ち物画面を開きます。
建築ブロックのタブの一番下にスクロールします。
表示がおかしいですが新規に作成したBlockが追加されていることを確認します。

f:id:takezoh_1127:20181101233016p:plain

[R]キーを押してフィールドに配置もできます。

f:id:takezoh_1127:20181101233034p:plain

これで新規のBlockを追加することができました。

Minecraft MODを弄ってみよう!(Mac編)

Forge MDK 1.12.2 の環境での説明になります。

MODの環境構築については以下のページを参考に設定してください。

www.main-function.com

Eclipseを起動して以下のフォルダをワークスペースとして開きます。

minecraftmod/forge-1.12.2-14.23.5.2768-mdk/eclipse

MDKExampleの下のsrc/main/javaの下にPackageを作成します。
該当のフォルダを右クリック、New、Packageを選択するか、もしくはメニューバーのFile、New、Packageを選択します。

f:id:takezoh_1127:20181031014210p:plain

Package作成のダイアログが表示されるので任意の名前を入力します。

f:id:takezoh_1127:20181031014354p:plain

今回は"testmod"という名前でPackageを作成します。

その下にjavaのソースファイルを作成します。
該当のPackageを右クリック(もしくはメニューバーのFile)、New、Classを選択します。

f:id:takezoh_1127:20181031014518p:plain

Class作成のダイアログが開くので任意の名前を入力します。

f:id:takezoh_1127:20181031014627p:plain

今回は"TestMod"というクラス名で作成します。
作成すると空のクラスが書かれた "クラス名.java" ファイルが追加されます。

package testmod;

public class TestMod {

}

ここにMODの基本となる処理を書いていきます。

package testmod;

import net.minecraftforge.fml.common.Mod;

@Mod(modid=TestMod.MODID, version=TestMod.VERSION)
public class TestMod {
    public static final String MODID = "testmod";
    public static final String VERSION = "1.0";
}

上記のコードを書いて実行してみます。

タイトル画面が起動したらModsを選択してください。

f:id:takezoh_1127:20181031014709p:plain

左のMod Listに testmod が追加されていることを確認してください。

f:id:takezoh_1127:20181031014744p:plain

これでブロックやアイテムを弄れる準備が完了しました。

複数のバージョンのXcodeのインストール方法

macOS Mojaveの公開に伴いXcodeも10.0にバージョンアップされました。

iPhoneのバージョンアップを行なっていなかった為にXcode10でビルドしたアプリケーションが動作しなくなってしまったので、
以前のバージョンをインストールしてビルドする必要が出てきました。
今回はXcodeの複数のバージョンをインストールする方法を紹介します。

Apple Developersからインストールする方法

以前のバージョンをダウンロードするには以下のサイトからダウンロードします。

Sign in with your Apple ID - Apple Developer

インストールするXcodeのバージョンを選択してダウンロードします。

f:id:takezoh_1127:20181030002610p:plain

展開されたフォルダをアプリケーションフォルダに移動する際にリネームしておきます。

Xcodeのバージョンを確認する

現在のXcodeのバージョンを確認する場合、以下のコマンドで確認することができます。

$ xcodebuild -version

f:id:takezoh_1127:20181030002520p:plain

Xcodeのバージョンを変更する

以下のコマンドでXcodeを切り替えることができます。

$ sudo xcode-select -switch /Applications/Xcode_9.4.1/Contents/Developer/

もう一度バージョンを確認します。

$ xcodebuild -version

f:id:takezoh_1127:20181030002534p:plain

これで無事に切り替えることができました。

Xcodeをインストールする

Xcodeのインストール方法を解説します。

f:id:takezoh_1127:20181029235347p:plain

インストールする方法は2つあります。

・AppStoreからインストール
Apple Developersからインストール

AppStoreからインストールする方法

最新のバージョンをインストールするにはAppStoreからダウンロード、インストールします。 AppStoreを開いて検索に"Xcode"と入力します。

f:id:takezoh_1127:20181029233645p:plain

入手を押すとダウンロード、インストールが行われます。

f:id:takezoh_1127:20181029233845p:plain

手順に沿ってインストールを進めると完了します。

Apple Developersからインストールする方法

以下のサイトからダウンロードします。

https://developer.apple.com/download/more/

インストールするXcodeのバージョンを選択してダウンロードします。

f:id:takezoh_1127:20181029234654p:plain

ダウンロードしたxipを解凍します。

f:id:takezoh_1127:20181029234835p:plain

展開されたフォルダをアプリケーションフォルダに移動すればインストールが完了します。

Xcodeを起動する

インストールが完了したらXcodeを起動します。

起動すると以下の画面が表示されます。

f:id:takezoh_1127:20181030010516p:plain

「Agree」を選択します。

次にユーザー認証を求めれるのでパスワードを入力します。

f:id:takezoh_1127:20181030010731p:plain

必要なコンポーネントがインストールされます。

f:id:takezoh_1127:20181030010820p:plain

コンポーネントのインストールが完了すると以下の画面に切り替わります。

f:id:takezoh_1127:20181030010939p:plain

これで無事にXcodeのインストールが完了しました。

Minecraft MOD を始めよう!(Mac編)

Minecraft MOD を導入する環境はいくつかあるようですが、今回はJavaの環境でセットアップしてみます。

f:id:takezoh_1127:20181026002221p:plain

以下の環境をインストールする必要があります。

・JDK8.0
Eclipse
・Forge MDK

JDK8.0

JDKのダウンロード

まずはJavaの開発環境をインストールします。
下記のHPより最新版のSDKをダウンロードします。

Java SE Development Kit 8 - Downloads

今回は JDK 8 Update 181.pkg をダウンロードしました。
ダウンロードしたファイルをダブルクリックするとインストールが開始されます。

JDKのインストール

以下の画面で中央の箱のアイコンをダブルクリックします。

f:id:takezoh_1127:20181025230054p:plain

画面の手順に従ってインストールを進めます。

f:id:takezoh_1127:20181025230211p:plain

f:id:takezoh_1127:20181025230305p:plain

f:id:takezoh_1127:20181025230336p:plain

f:id:takezoh_1127:20181025230349p:plain

JDKがインストールされたかを確認

ターミナルで以下のコマンドを入力してバージョンを確認します。

$ java -version

f:id:takezoh_1127:20181025231908p:plain

Eclipse

次にEclipseをインストールします。
以下の公式HPからダウンロードします。

www.eclipse.org

画面右上のDOWNLOADをクリックします。

f:id:takezoh_1127:20181025232440p:plain

次にDownload Packagesをクリックします。

f:id:takezoh_1127:20181025232910p:plain

Eclipseは色々なバージョンが存在しますが、
今回はEclipse IDE for Java and DSL Developersをインストールしてみます。

f:id:takezoh_1127:20181025233528p:plain

ダウンロードしたディスクイメージファイルをダブルクリックします。

eclipse-dsl-2018-09-macosx-cocoa-x86_64.dmg

展開されたフォルダのEclipseをApplicationsのフォルダにドラッグ&ドロップします。

f:id:takezoh_1127:20181025234118p:plain

これでEclipseのインストールは完了です。

Forge MDK

files.minecraftforge.net

以下のページからForge MDKをダウンロードします。

今回は1.12.2 - 14.23.5.2768をダウンロードします。

f:id:takezoh_1127:20181025235147p:plain

以下のzipファイルがダウンロードされます。

forge-1.12.2-14.23.5.2768-mdk.zip

zipを解凍します。

解凍したディレクトリ以下で次のコマンドを実行します。

$ ./gradlew setupDecompWorkspace

f:id:takezoh_1127:20181026001426p:plain

BUILD SUCESSFULが出たら完了です。

次にEclipse用のプロジェクトファイルを作成します。 以下のコマンドを実行します。

$ ./gradlew eclipse

f:id:takezoh_1127:20181026001443p:plain

BUILD SUCESSFULが出たら完了です。

Minecraft MODをEclipseからビルド、実行してみる

Eclipseを起動して、先ほど展開したForgeの以下のディレクトリをワークスペースとして指定します。

f:id:takezoh_1127:20181026002048p:plain

IDEツールバーの緑の再生ボタンのアイコンをクリックすると実行されます。

f:id:takezoh_1127:20181026002126p:plain

以下の画面が出れば起動成功です。

f:id:takezoh_1127:20181026002202p:plain

無事にタイトル画面が表示されました。

f:id:takezoh_1127:20181026002221p:plain

タイトル画面のボタンにModsが追加されています。 MODのバージョンが正しく起動しました。

これでMinecraft MODの環境が整いました。

MinecraftForge Documentation

Forge Documentation

Forge Tutorial

参考サイト

https://suppergerrie2.com/

このサイトのGitHubを参考にしてみる。

github.com

その他参考サイト

www26.atwiki.jp

n5v.net

www.tntmodders.com

nj-clucker.com

MinecraftForge導入手順 - Minecraft Modding Wiki

qiita.com

hawksnowlog.blogspot.com

eng-entrance.com

ruccho.hateblo.jp

ゲームエンジンのプログラム構成の比較

はじめに

ゲームエンジン物理エンジンミドルウェアのコーディング規約やファイル命名規則など比較してみる。 論理構成(フォルダ構成やリソースの命名規則等も含めて)においても問題になってくる話。

以下の項目について確認していく。

  • バージョン
  • ファイル命名規則
  • ファイル文字コード
  • フォルダ構成
  • libファイル命名規則
  • ファイルヘッダ
  • コメント
  • インクルードガード
  • プラットフォーム定義
  • 型定義
  • 名前空間
  • クラス名
  • 関数名
  • 変数名
  • new,allocator
  • TRACE,ASSERT

命名規則については以下の規則のいずれかが適用されている。

  • CamelCase(PascalCase)
    パスカルケース/アッパーキャメルケース(複合語の先頭を大文字にする)

  • camelCase
    キャメルケース/ローワーキャメルケース(複合号の先頭を小文字にする)

  • snake_case
    スネークケース(全て小文字で複合語の間にアンダーバー"_"を入れる)

  • はじめに
  • OGRE
  • irrlicht
  • CrystalSpace
  • OpenSceneGraph
  • UnrealEngine
  • Havok
  • PhysX
  • bullet
  • ODE
  • CRI(ADX)
  • BISHAMON
  • steam
  • cocos2d-x
  • PhyreEngine
続きを読む