fabric 編 part1 仕様が大きく変わっちまったぜ
生まれて 23 年、まさかのブロックすら作ったことないってマ? 作ろうとしたらトラブったので。
🎥 今日の RT
どるるるるる
我サーバーにて
我、個人サーバーやってるナリ
気づいたら使わないブロックだと行って無理やりスポンジが畳に変貌してたナリ
テクスチャもらってきたので、fabric でブロックにしてしまうナリ
warning
※なお、当サイトにあるテクスチャ画像の無断使用は NG でお願いします。
一応。
fabric の wiki を参考にアイテムを追加してみる。
package org.adw39.myfabricmods
import net.fabricmc.api.ModInitializer
import net.minecraft.item.Item
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.util.Identifier
class Myfabricmods : ModInitializer {
companion object {
lateinit var CUSTOM_ITEM: Item
}
override fun onInitialize() {
CUSTOM_ITEM = Item(Item.Settings())
Registry.register(Registries.ITEM, Identifier.of("myfabricmods", "custom"), CUSTOM_ITEM)
}
}
tip
Identifier の属性が Private とエラー!
copilot 曰く1.21 以降はIdentifier.of()
でやるんだってさ。 ~~しるかそんなもん~
tip
kotlin では**java と初期化のタイミングが異なり、**lateinit を使う方が賢い場合があります。
なんて TIP を書くのに 30 分。 これくらいならすぐ起動するやろとやってみらー
Caused by: java.lang.NullPointerException: Item id not set
あまりにも有名で、かつシンプルなエラーが帰ってきた。 原因がわからん。
kotlin のせいか?
ドキュメントがあった
Creating Your First Item - fabric documentation
ドキュメントを見つけたらまるでコードが違くてびっくり。バージョン違いでこんくらい変わるの?
急いで kotlin で書き直す。
package org.adw39.myfabricmods
import net.fabricmc.api.ModInitializer
import net.minecraft.item.Item
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
import net.minecraft.util.Identifier
class Myfabricmods : ModInitializer {
companion object {
lateinit var item: Item
}
override fun onInitialize() {
val itemKey = RegistryKey.of<Item>(RegistryKeys.ITEM, Identifier.of("myfabricmods", "myfabricmods"))
var settings = Item.Settings()
settings.registryKey(itemKey)
item = Item(settings)
Registry.register(Registries.ITEM, itemKey, item);
}
}
とりあえず 1 つのファイルに無理やり納めてみるとこうなった。
note
まとめると、Item の settings に registryKey が必要になった? ということらしい。
note
ここまでやってできることは、コマンドでアイテムを呼び出すこと
クリエイティブインベントリに追加する
今回は適当に「Redstone」タブに追加することに
ItemGroupEvents.modifyEntriesEvent(ItemGroups.REDSTONE).register {
it.add { item }
}
一瞬で追加できました。
note
ItemGroups みたいに、複数形のやつは enum(列挙型)なのかな?
note
ここまでやってできることは、クリエイティブインベントリでアイテムを呼び出すこと
次回
テクスチャをつけたい。