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

ここまでやってできることは、コマンドでアイテムを呼び出すこと
pic1

クリエイティブインベントリに追加する

今回は適当に「Redstone」タブに追加することに

ItemGroupEvents.modifyEntriesEvent(ItemGroups.REDSTONE).register {
    it.add { item }
}

一瞬で追加できました。

note

ItemGroups みたいに、複数形のやつは enum(列挙型)なのかな?

note

ここまでやってできることは、クリエイティブインベントリでアイテムを呼び出すこと
pic2

次回

テクスチャをつけたい。