サーチ…


前書き

Forgeでシンプルなアイテムを作成することは、夢のモダンが学ばなければならない最初のタスクの1つです。それを行う方法は、さまざまなバージョンのMinecraftで変更されており、特にレンダリングを適切に行うことで、簡単に間違いを犯すことがあるため、1.7.10の「中程度の」難易度になります。

備考

何かがうまくいかず、カスタムアイテムに欠けているテクスチャ(黒色/紫色)またはモデル(保持されている場合は大きすぎるデフォルトのキューブ)がある場合は、ログを確認してください。物事を正しく登録していれば、この種の問題はほとんどの場合ログに表示されます。

最初に表示されるのは、 "Exception loading model for variant..."行または同様のもので、どのブロックまたは項目が正しく読み込まれなかったかを示します。 at...始まる十数行ほどの行が、別の行が始まるCaused by...となりCaused by...

この「原因」行は重要な行です。どのファイルが正しく読み込まれなかったかを示し、次のようないくつかのエラーの1つになることがあります。

  • 不正な形式のJSON(JSONファイルが無効で、タイプミスがあります)
  • ファイルが見つかりません(Minecraftが探しているファイルの名前が適切でないか、正しい場所にありません)
  • 不足しているバリアント例外(ブロックステートJSONが不完全)

1回の間違いで2つ以上のエラーが発生することさえあります。どの項目が問題か分からない場合は、動作しているすべてのブロックと項目をコメントアウトし、問題のブロック(またはブロック)までエラーリストを減らしてください。あなたはこれを何度もしなければならないかもしれません。

さらに、ミキシングテクスチャは、特定のドメイン(mod ID)の欠落しているリソースのすべてを単純なリストとして表示する方法とは異なります。

アイテムクラス

この部分は、Minecraftのバージョン全体ではほとんど変更されていませんが、正確なメソッドシグニチャーとクラス階層にはいくつかの変異があります。基本的な項目(スティックやインゴットのような機能を持たないもの:そうですが、どちらも何もしない項目です)

public class CustomItem extends Item {

    public CustomItem () {
        super();
        this.setMaxDamage(0);
        this.setCreativeTab(CreativeTabs.MISC);
    }
}

この時点では、ブロックとは異なり、カスタマイズの余地はあまりありません。アイテムがダメージを受けるかどうか(ツールでこれを使用するかどうか)と存在するクリエイティブタブを変更するだけです。GameRegistryにアイテムを登録するときに処理する名前とテクスチャです。

しかし、これはアイテムを保持し、運び、落とし、手作業で製錬し、他の方法で利用するために必要なすべてです。 Minecraftの一部のアイテム(スティックなど)には独自のクラスがなくても、単にnew Item()使用するだけです。ここではこれを行うことができますが、追加の機能を持つアイテムにはクラスが必要です。

アイテムモデル

ブロックと同様、アイテムもモデルが必要です。

{
    "parent": "item/generated",
    "textures": {
        "layer0": "example:items/basic"
    }
}

アイテムが登録されると、それが動作するために必要なことはほぼすべてです。唯一重要なのは、ファイル名がブロックを登録するために使用されたレジストリ名と一致し、すべて小文字であることです(1.11+ファイル名は大文字小文字を区別する前に小文字である必要があります)。

「layer0」は必要なテクスチャだけであり、他のテクスチャはまったく指定されない可能性が非常に高いことに注意してください(ただし、ポーションや皮革のようなアイテムには「レイヤ1」があります)。すべての名前は、ブロックと異なり、 item/builtinitem/builtinの内部最上位の親モデル)によって定義されitem/builtin

モデルJSONファイルの名前をmy_item.jsonmy_item.jsonするレジストリ名と一致する)、 src\main\resources\assets\example\models\item\保存しsrc\main\resources\assets\example\models\item\exampleは、メインModクラスの@Modアノテーション)。

さらにアイテムのテクスチャを作成し、 basic.pngという名前を付けてsrc\main\resources\assets\example\textures\items\保存しsrc\main\resources\assets\example\textures\items\

ここでのアイテムモデルはitem / generatedの親を使用します。つまり、単一の提供されたテクスチャが(ほとんどの非ブロックアイテムの場合と同様に)使用され、プレイヤーの手でデフォルトの方向に保持されます。また、さまざまな表示方向(ツール用)を指定するアイテム/ハンドヘルドもあります。アイテムは、親からの表示属性を上書きする独自の「表示」属性を提供することもできますが、使用の99.9%では不要です。

アイテム登録

アイテムの登録は、メインmodクラス、またはpreInit中にメインmodクラスから呼び出されたModItemsクラスメソッドから実行されます。

Item item = new CustomItem();
string registryname = "my_item";
item.setRegistryName(registryname);
item.setUnlocalizedName(item.getRegistryName().toString());
GameRegistry.register(item);

item.setUnlocalizedName(item.getRegistryName().toString());を使用する重要な理由がありitem.setUnlocalizedName(item.getRegistryName().toString());同様に! MODの言語ファイルの競合を避けるため、アイテムのローカライズされていない名前にmod IDが含まれていることを保証します。

アイテムにはモデルも必要です。これは1.7.10のポストが難しいところです。これはちょうどMinecraftにロードするテクスチャの名前を伝え、アイテムのコンストラクタで指定することができます。

final ModelResourceLocation fullModelLocation = new ModelResourceLocation(item.getRegistryName().toString(), "inventory");
ModelBakery.registerItemVariants(item, fullModelLocation);
ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
    {
        public ModelResourceLocation getModelLocation(ItemStack stack)
        {
            return fullModelLocation;
        }
    });

このセクションは、参照されるクラスの多くが専用サーバー上に存在しないため、クライアント側のみ(つまり、クライアントプロキシ)に配置する必要があります。

バリアント例えば苗木でアイテムを登録、使用して、別の方法を行う必要がありModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation)それは私たちが( 多くの代替に好まれている)私たちのバリアントを指定するには、ブロック状態のファイルを使用することができますが。私たちのアイテムは変種を使用していないので、完了です。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow