自称中級者のMinecraft日記 Eclipseで艦これMOD(仮)に挑戦 ブロックの追加1 ブロックの登録まで
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

自称中級者のMinecraft日記 Eclipseで艦これMOD(仮)に挑戦 ブロックの追加1 ブロックの登録まで

2016-10-28 18:01
  • 4
<目 次>
開発環境の構築編
最初に書くメインクラスの基本形
防具の追加1 登録用Armorクラス
アイテムの追加1 アイテムの登録まで
クリエイティブタブの追加

ブロックの追加1 ブロックの登録まで
ブロックの追加2 リソースの追加
ブロックの追加3 中をくり抜く当たり判定
ブロックの追加4 外を削る当たり判定
ブロックの追加5 向きのあるFacingブロック
LetterTrayDecoration の移植
ブロックの追加6 当たり判定に向きをつける
装飾ブロックを幾つか

レシピの追加1 作業台を使うクラフト
MODのリリーステストの準備
鉱石ブロック1 アイテムをドロップするブロック
鎮守府MOD の配布はじめました
――――――――――――――――――――――――――――――――――――――――

登録用クラスの準備

initパッケージ の中に、ブロック登録用の ChinjufuModBlocksクラス を作ります。

基幹となるコードは防具やアイテムの追加とだいたい同じですが、
public static void register() {} 」というブロックの登録を行うコードを、init から分離させています。

register と registerRender には、それぞれの登録を助けるメソッドを追加します。


ClientProxy にコードを追加して、Blocksクラス とつなげます。

アイテムでは、init と registerRender だけでしたが、今回は register も追加します。

追加するブロックの登録

今回は、BlockEmptyBox 空箱 を追加していきます。

public static Block EMPTY_BOX; 」とブロック名を宣言して、init、register、registerRender の3項目で必要なコードを書いていきます。

小さくて解りにくいかもしれませんが、BlockEmptyBox の下に赤い波線が出ています。これは、BlockEmptyBoxで設定すべき要素がまだ残っているためで、新たにクラスを作ることで解決します。

いまのところ特性を持たせないため、BlockEmptyBoxクラスでは、
Material、RegistryName、UnlocalizedName、CreativeTab を追加します。


Blocksクラスに戻ったら、BlockEmptyBoxクラスを import してエラーを解決します。


実行テストをしよう

実行テストをしてみると、tile.empty_box.name というブロックが追加されていました。


giveコマンドでも、ちゃんと呼び出しが出来ます。



ということで、次回は、ブロックのリソース(モデルやテクスチャ)を追加します。

(つづく)
広告
×
コメント失礼します。 GameRegistry.register(block);とGameRegistry.register(item);のregisterの部分に波線がでて、「メソッドregister(K)は型GameRegistryで不可視です」と出るのですがどうすればよいのでしょうか?
18ヶ月前
×
>>1
情報が断片過ぎて答えようがありません。

この時のブロマガの記事は、1.9用であるため、バージョンが異なればエラーが起きることは多々あります。

1.10.2や1.12.2なら、こちらを
https://ayutakimm.wp-x.jp/universal-jp/contents-tree-jp/

鎮守府MODで用いている最新のコードであれば、こちらを
https://github.com/Ayutaki-Shou
18ヶ月前
×
返信ありがとうございます。
一応https://ayutakimm.wp-x.jp/universal-jp/contents-tree-jp/に乗っているものをコピペしてみましたが、エラーが出ました。(Mod名などは自分のMod名に変えました。)
なのでバージョンが1.12.2ですが、前に送ったコメントでは情報が断片過ぎたので、クラスパッケージの内容すべてを送らせていただきます。

package tubusuke.artificialsatellitemod.init;

import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class ArtificialsatelliteModBlocks {



public static void init() {}



public static void register() {}

public static void registerBlock(Block block) {
GameRegistry.register(block);
ItemBlock item = new ItemBlock(block);
item.setRegistryName(block.getRegistryName());
GameRegistry.register(item);

}


public static void registerRenders() {}


public static void registerRender(Block block) {

Minecraft.getMinecraft().getRenderItem().getItemModelMesher()
.register(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(), "inventory"));
}

}

お忙しい中とは思いますがどうかよろしくお願いします。
18ヶ月前
×
>>3
1.10.2の場合と、1.12.2の場合とで、わざわざページを分けて解説を書いている意図は伝わっていますか?

1.10.2では、確かに GameRegistry.register(block); を使っています。
しかし、1.12.2では、RegistrationHandler.BLOCKS.add(block); という別の方法を使っています。

なぜなら、元となる Minecraft の仕様が、1.10.2 から 1.12.2 になった際に変わったからです。

GameRegistry.register(block); を使うことにこだわりがあるなら、他の方が公開しているソースを探すことをおすすめします。
18ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。