0からModを作りたい

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.214696)

Re: 0からModを作りたい

投稿記事by エリンギ » 2015年2月01日(日) 13:15

elise_blacklab さんが書きました:一応言っておきますが、コードファイルの名前は【MyBlock.java】です。
*.classはコンパイル後の生成物なので、ソースコードファイルの名前に使用してはいけません。

失礼致しました。Eclipseで作っていると.javaファイルを作る時でもCreate Classで作るので
感覚が鈍っていました。
アバター
エリンギ
ID:cfc14fd2
掘り廃人
 
記事: 1674
登録日時: 2013年11月30日(土) 17:18
お住まい: 豆腐建築

  • (PostNo.214924)

Re: 0からModを作りたい

投稿記事by elise_blacklab » 2015年2月02日(月) 21:15

間を開けがちで申し訳ないです。

前回作ったMyBlockを、ゲームに登録する作業を行います。
これで、クリエイティブモードから追加したブロックを取り出せます。

追加するブロックの登録
今度はMyFirstMod.javaの内容を変更します。

MyFirstMod.javaの冒頭のimport 〜が並ぶ箇所に、以下の2つを追加します。
コード: 全て選択
import net.minecraft.block.Block;
import cpw.mods.fml.common.registry.GameRegistry;
前回も使ったBlockクラスと、ブロックを登録するためのGameRegistryをimportしています。

続いて、MyFirstModクラスの冒頭部分
コード: 全て選択
public class MyFirstMod
{
   //この部分に、以下の行を追加してください
   public static Block instance_myBlock;

   @EventHandler
このinstance_myBlockは、MyBlockを登録するために、MyBlockの情報を「置いておく」ためのものです。

最後に、preInitメソッドに
コード: 全て選択
   @EventHandler
   public void preInit(FMLPreInitializationEvent event)
   {
      //-----ここから追加部分----
      //先ほど作ったinstance_myBlockに、MyBlockの情報を入れる。
      //厳密には、MyBlockのインスタンスを生成する。
      instance_myBlock = new MyBlock();
      //instance_myBlockを使って、ゲームにMyBlockを登録する。
      GameRegistry.registerBlock(instance_myBlock, "myBlock");
      //-----ここまで-----
 
   }
これで、MyBlockがゲームに登録されます。
GameRegistry.registerBlockの第二引数("myBlock"の部分)には、基本的に前回MyBlockのコードで入れたsetBlockName()の文字列を使います。今回は"myBlock"です。
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2560
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.214929)

Re: 0からModを作りたい

投稿記事by elise_blacklab » 2015年2月02日(月) 21:23

それでは、作ったMODを入れて試しにプレイしてみましょう。

8.
作業ディレクトリに戻り、以下の内容で「RunClient.bat」を作成します。
コード: 全て選択
call gradlew runClient
pause

RunClient.batをダブルクリックすれば、自分で作ったMODが入った状態でMinecraftが起動します。
クリエイティブでワールドを作って、アイテムの一覧を見てみると、ピンクと黒のテクスチャの「myBlock」があるはずです。
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2560
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215006)

Re: 0からModを作りたい

投稿記事by Mod作りたい人 » 2015年2月03日(火) 13:40

引き続きありがとうございます。

MyFirstMod.javaに3つの枠のコードを入力し、RunClient.batも作成しました。
テストプレイをしようと起動して見ましたが、エラーが起きたみたいです。


C:\forge>call gradlew runClient
****************************
Powered By MCP:
http://mcp.ocean-labs.de/
Searge, ProfMobius, Fesh0r,
R4wk, ZeuX, IngisKahn, bspkrs
MCP Data version : unknown
****************************
:compileApiJava UP-TO-DATE
:processApiResources UP-TO-DATE
:apiClasses UP-TO-DATE
:sourceMainJava
:compileJava
警告: [options] ブートストラップ・クラスパスが-source 1.6と一緒に設定されていま
せん
C:\forge\build\sources\java\com\example\mymod\MyFirstMod.java:20: エラー: シンボ
ルを見つけられません
instance_myBlock = new MyBlock();
^
シンボル: クラス MyBlock
場所: クラス MyFirstMod
エラー1個
警告1個
:compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug
option to get more log output.

BUILD FAILED

Total time: 12.051 secs
続行するには何かキーを押してください . . .】

何がエラーになっているのでしょうか。
Mod作りたい人
ID:a3cc614e
 

  • (PostNo.215018)

Re: 0からModを作りたい

投稿記事by elise_blacklab » 2015年2月03日(火) 16:52

Mod作りたい人 さんが書きました:C:\forge\build\sources\java\com\example\mymod\MyFirstMod.java:20: エラー: シンボ
ルを見つけられません
instance_myBlock = new MyBlock();
^
シンボル: クラス MyBlock
場所: クラス MyFirstMod

とあるので
elise_blacklab さんが書きました:続いて、MyFirstModクラスの冒頭部分
コード: 全て選択
public class MyFirstMod
{
   //この部分に、以下の行を追加してください
   public static Block instance_myBlock;

   @EventHandler

このinstance_myBlockは、MyBlockを登録するために、MyBlockの情報を「置いておく」ためのものです。

この部分を書いてないのだと思われます。

■訂正、下部参照
最後に編集したユーザー elise_blacklab [ 2015年2月04日(水) 11:20 ], 累計 1 回
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:5e28647e
掘り廃人
 
記事: 2560
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215145)

Re: 0からModを作りたい

投稿記事by Mod作りたい人 » 2015年2月04日(水) 07:58

MyFirstMod.javaの中にあるクラスですよね?
【package com.example.mymod;


import net.minecraft.block.Block;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLInitializationEvent;


@Mod(modid="myfirstmod", name="MyFirstMod", version="1.0")
public class MyFirstMod
{
public static Block instance_myBlock;

@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
instance_myBlock = new MyBlock();
GameRegistry.registerBlock(instance_myBlock, "myBlock");
}

@EventHandler
public void init(FMLInitializationEvent event)
{

}
}】

確認したところ、書いてありました。
他に怪しそうなことはありますか?
Mod作りたい人
ID:32985c3e
 

  • (PostNo.215147)

Re: 0からModを作りたい

投稿記事by ryokusitai » 2015年2月04日(水) 08:48

横から失礼します。

エラーが出ているのは「MyBlock」クラスが見つからない。ということのようです。
「MyBlock」クラスは
C:\forge\src\main\java\com\example\mymod\MyFirstMod.java
と同じ場所、
C:\forge\src\main\java\com\example\mymod\MyBlock.java
にあるでしょうか?
また、ある場合、名前はMyBlockクラスで間違いないでしょうか?
Minecraft1.7.10のModderでした9割死亡。公開場所
A.K.さんが製作している1.2.5のEE2アドオンであるEEAAを1.7.10のProjectE環境に対応させたPEAAを公開しています。
その他「OldMassFabricator」、「MoonLightDetector(月光センサーMod)」など。
アバター
ryokusitai
ID:d1f24857
石炭掘り
 
記事: 245
登録日時: 2014年5月24日(土) 11:37

  • (PostNo.215152)

Re: 0からModを作りたい

投稿記事by Mod作りたい人 » 2015年2月04日(水) 11:08

ryokusitaiさんありがとうございます。

直したつもりのMyBlock.javaがMyBlock.classのままになっていたのでMyBlockが見つからずにエラーになっていたみたいです。

お手数をおかけして申し訳ないです。

テストプレイもでき、ピンクと黒のブロック【myBlock】が追加されていました。
Mod作りたい人
ID:32985c3e
 

  • (PostNo.215153)

Re: 0からModを作りたい

投稿記事by elise_blacklab » 2015年2月04日(水) 11:31

ryokusitaiさんご指摘ありがとうございます。

さて、ブロックのテクスチャの指定を解説する前に、先にMODの出力方法を書いておきます。

10.
作業ディレクトリに、以下の内容で「Release.bat」を作成します。
コード: 全て選択
gradlew build --info > buildlog.txt 2>&1
これはプロジェクト内のソースをビルドし、結果をbuildlog.txtに出力するというものです。
Release.batをダブルクリックで実行した後(コマンドプロンプトが出てきてしばらくすると閉じます)、ビルドが成功していれば、作業ディレクトリ\build\libsに、MyFirstMod-1.0.jarという名前のファイルがあるはずです。
これを製品版Minecraftでのmodsディレクトリに入れれば、自作MODが導入できます。配布するときは、このjarファイルをそのまま配布すればOKです。

もしファイルがなければ、buildlog.txtの内容を確認することで、どこでエラーが起きているのかが分かります。
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2560
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215226)

Re: 0からModを作りたい

投稿記事by Mod作りたい人 » 2015年2月04日(水) 22:19

ありがとうございます。

Release.batを作成し、実行したらしっかりjarができました!
Mod作りたい人
ID:32985c3e
 

  • (PostNo.215234)

Re: 0からModを作りたい

投稿記事by elise_blacklab » 2015年2月04日(水) 22:57

MODを配布する場合は、必ずそのjarファイルを製品版Minecraftに導入してテストプレイし、正常にプレイできるか確認してください。

では、ブロック追加の続きで、テクスチャを指定します。
※1.7の場合です

テクスチャを置く場所
まずは何でも良いので、16x16サイズでTrue Colorのpngファイルを用意してください。
※透過部分は完全透明のドットのみを認識しますが、ブロックに使うと置くときに地面が透けるのでお勧めしません

そしてここで、MyBlockクラスのsetTextureNameに注目します。
コード: 全て選択
setBlockTextureName("myfirstmod:myblock");
この指定は、リソース中の「myfirstmod」というドメインにあるmyblockというテクスチャを使用する、という意味です。

作業ディレクトリに戻り、src\main\resources\assets\myfirstmod\textures\blocksという階層でディレクトリを作成してください(途中まではディレクトリが既に存在するかと思います)。
この途中のmyfirstmodというディレクトリが、myfirstmodというドメインを示します。今回はBlockなので、Forgeはこのドメインの中のブロック用のテクスチャを参照します。そのブロック用のテクスチャを置くのが、ドメインのディレクトリの下「textures\blocks」のディレクトリです。
ここに、先ほどのpngファイルを「myblock.png」という名前で置いてください。
※ファイル名は「.png」まで書きますが、setTextureNameの引数には、「.png」を書いてはいけません。

これで、テストプレイでmyblock.pngの画像がmyBlockに表示されているはずです。
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2560
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215262)

Re: 0からModを作りたい

投稿記事by ゲスト » 2015年2月05日(木) 13:19

ありがとうございます。

src\main\resources\assets\myfirstmod\textures\blocksまでのディレクトリを作り、ブロック用のテクスチャをblocksの中にmyblock.pngという名前で入れました。

試しに一部だけ透明にしましたが地面が透けてしまうのは、テクスチャが表面にしか設定されてないからですか?
あと、色ガラスみたいに透けさせようとしたら全部透明になったのですが、それもblockクラスの設定でしょうか?
ゲスト
ID:32985c3e
 

  • (PostNo.215264)

Re: 0からModを作りたい

投稿記事by elise_blacklab » 2015年2月05日(木) 13:22

ゲスト さんが書きました:試しに一部だけ透明にしましたが地面が透けてしまうのは、テクスチャが表面にしか設定されてないからですか?
あと、色ガラスみたいに透けさせようとしたら全部透明になったのですが、それもblockクラスの設定でしょうか?
その理解で問題ありません。
Blockに正しく透過を設定するには、別途レンダリング処理を用意しないといけないのですが、この辺の説明はここではカットで。

次回はアイテムの追加です。ちょっとずつ説明端折っていきます。
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2560
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215356)

Re: 0からModを作りたい

投稿記事by Mod作りたい人 » 2015年2月05日(木) 22:13

わかりました、ありがとうございます。

わからないことは聞くと思いますが、これからもお願いします。
Mod作りたい人
ID:32985c3e
 

  • (PostNo.215989)

Re: 0からModを作りたい

投稿記事by elise_blacklab » 2015年2月08日(日) 20:53

間開けましたごめんなさい。

アイテムの追加(1.7)

■MyFirstMod.java

例として「myItem」というアイテムを追加してみます。

○import追加
コード: 全て選択
import net.minecraft.item.Item;
import net.minecraft.creativetab.CreativeTabs;
■修正、CreativeTabsもimportのこと(クリエイティブタブを登録しないなら不要)

○フィールド追加
Itemを追加するときも、Forgeに「登録」する作業を行います。そのための情報を入れるinstance_myItemというフィールドを追加します。
public static Block instance_myBlockのすぐ下あたりに次のコードを追加します。
コード: 全て選択
public static Item instance_myItem;
これをフィールドを「定義する」と言っています。
フィールドとは、クラスが持つ変数のことです。フィールドの定義は一箇所にまとめておくと、後からコードを見直すときにごちゃごちゃしません。


○アイテムの登録

Itemのコンストラクタはpublicのため、無機能アイテムの場合特にクラスを用意する必要はありません。
先ほどのinstance_myItemに、追加するアイテムの情報を入れてForgeに登録します。
preInit()メソッド内に、以下のコードを追加。
コード: 全て選択
//アイテムのインスタンス生成
      instance_myItem = new Item()
      .setCreativeTab(CreativeTabs.tabMaterials)/*クリエイティブのタブ*/
      .setUnlocalizedName("myItem")/*システム名の登録*/
      .setTextureName("myfirstmod:myitem")/*テクスチャの指定*/
      /*.setFull3D()*//*3D表示で描画させる。ツールや骨、棒等。*/
      .setMaxStackSize(64);/*スタックできる量。デフォルト64*/
      //アイテムの登録
      GameRegistry.registerItem(instance_myItem, "myItem");


○テクスチャの置き場

テクスチャを指定する基本的なコードはBlockと変わりません。
ただし、テクスチャを置く場所は(ドメイン名)\textures\itemsに変わります。
例でのテクスチャは「作業ディレクトリ\src\main\resources\assets\myfirstmod\textures\items\myitem.png」となります。
細かい解説はBlockのところを見てください。
アイテムのテクスチャサイズも16x16、形式はTrue Color pngです。アイテムには透過テクスチャが使えます。
最後に編集したユーザー elise_blacklab [ 2015年2月10日(火) 07:47 ], 累計 1 回
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2560
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.216067)

Re: 0からModを作りたい

投稿記事by Mod作りたい人 » 2015年2月09日(月) 13:15

ありがとうございます。

preInit()メソッド内にコードを追加というのは、この形になりますか?
【 @EventHandler
public void preInit(FMLPreInitializationEvent event)
{
instance_myItem = new Item()
.setCreativeTab(CreativeTabs.tabMaterials)
.setUnlocalizedName("myItem")
.setTextureName("myfirstmod:myitem")
.setFull3D()
.setMaxStackSize(64);
GameRegistry.registerItem(instance_myItem, "myItem");
instance_myBlock = new MyBlock();
GameRegistry.registerBlock(instance_myBlock, "myBlock");
}】

/*.setFull3D()*/の/**/は消してもよかったですか?

テストプレイをしようとしたらまたエラーになってしまいました…
エラーがこう出るので、おそらくこいつが何かしらの影響があるとおもいます
.setCreativeTab(CreativeTabs.tabMaterials)
^

試しにこの行だけ消してテストしたら、起動はしましたがmyitemが見つかりませんでした。

どうしたらいいのでしょうか?お願いします。
Mod作りたい人
ID:0d8c4d04
 

  • (PostNo.216073)

Re: 0からModを作りたい

投稿記事by elise_blacklab » 2015年2月09日(月) 14:41

Mod作りたい人 さんが書きました:エラーがこう出るので、おそらくこいつが何かしらの影響があるとおもいます
.setCreativeTab(CreativeTabs.tabMaterials)
^
ごめんなさい、CreativeTabsもimportしないといけないんでした…
コード: 全て選択
import net.minecraft.creativetab.CreativeTabs;

これをMyFirstMod.javaに追加してください。

Mod作りたい人 さんが書きました:/*.setFull3D()*/の/**/は消してもよかったですか?
描画方法が変わるだけで、あってもなくても構いません。
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2560
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.216181)

Re: 0からModを作りたい

投稿記事by Mod作りたい人 » 2015年2月10日(火) 01:15

そういうことでしたか、ありがとうございます!

バッチリ、アイテムが追加しました。

気になったのですが、ブロックの名前がtile.myBlock.nameと
アイテムが、item.myItem.nameになっているのですが、これを他のアイテム同様に【マイブロック、マイアイテム】みたいな感じにできないですか?
Mod作りたい人
ID:0d8c4d04
 

  • (PostNo.216193)

Re: 0からModを作りたい

投稿記事by elise_blacklab » 2015年2月10日(火) 07:45

Mod作りたい人 さんが書きました:気になったのですが、ブロックの名前がtile.myBlock.nameと
アイテムが、item.myItem.nameになっているのですが、これを他のアイテム同様に【マイブロック、マイアイテム】みたいな感じにできないですか?

1.7.xの場合、.langファイルを作ることで対処できます。
次回それを書いて、このトピックは(私からは)終了という形にしたいと思います。
あまりここに多く書きすぎるとフォーラムの目的を見失いますし、wikiもありますので…
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:f910e005
掘り廃人
 
記事: 2560
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.216522)

Re: 0からModを作りたい

投稿記事by Mod作りたい人 » 2015年2月11日(水) 19:17

遅くなりました。

ありがとうございます。

何も知らない状態から多少Mod開発の知識を得ることができたので、自分でもいろいろ調べて行きたいと思います。

あと、他の人が作ったModを解凍して調べようとしたら、Classファイルばかりでjavaファイルがなく、開いてみても文字化けみたいな状態で参考になりません。

どうにか見る方法はないのでしょうか?
Mod作りたい人
ID:0d8c4d04
 

1つ前へ次へ

Return to 質問:開発・制作関連

x