うまげーむさん

うまげーむさん

超適当な雑記+ゲームブログ

【マインクラフト Modding】1.15対応 自作MODの作り方 #8 特殊アイテム・エクスポート

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

<このブログをご覧の皆様へ>

この動画をできるだけ多くの人に拡散してください。お願いします。

あなたの行動が、命を救います。

https://www.youtube.com/watch?v=UfmqaqmKuNk

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

このシリーズのまとめはこちら:

umagame.hatenablog.jp

どうも。

はじめに

今回は特殊なアイテムの作り方を軽く紹介して、Modのエクスポート方法もやります。

前回:

umagame.hatenablog.jp

特殊アイテム

食べ物

今回は土を粉にして食べれるようにします。

itemパッケージにクラスを作ります。

f:id:Umagame:20200320115559p:plain

 食べ物はPropertiesをいじれば作れるので、継承するクラスはItemです。

package com.umagame.dirtmod.item;

import net.minecraft.item.Item;

public class ItemDirtPowder extends Item{

    public ItemDirtPowder(Properties properties) {
        super(properties);
    }
}

FoodクラスのBuilderを使うことで、アイテムの設定をすることができます。

今回は満腹度の回復を3に、隠し満腹度の回復を1.2に、食べたときに吐き気エフェクトが一瞬つくようにします。

満腹度についてはこちらのサイトを参考にしてください。

https://minecraft-ja.gamepedia.com/満腹度Minecraft Wiki

Builderのhungerとeffectを使って設定します。あとIDも設定します。

package com.umagame.dirtmod.item;

import net.minecraft.item.Food;
import net.minecraft.item.Item;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Effects;

public class ItemDirtPowder extends Item{

    public ItemDirtPowder() {
        super(new Properties().food(new Food.Builder().hunger(3).saturation(1.2F).effect(new EffectInstance(Effects.NAUSEA,120,1),0.8F).build()));
        this.setRegistryName("dirt_powder");
    }
}

エフェクトの数字についてですが、最初の40は秒数(20で1秒なので今回は6秒)、

隣の1はレベル(0でレベルⅠなので今回はレベルⅡ)、最後の1はこのエフェクトにかかる確率です。(1で100%なので今回は80%)

設定したら、以前の記事を参考に登録、テクスチャの設定を済ませます。

umagame.hatenablog.jp

起動して食べれるか確認します。

f:id:Umagame:20200320123841p:plain

その他の設定

次は、Itemクラス内にあるメソッドを使った設定をいくつか紹介します。

燃料

getBurnTimeを使うことでアイテムを燃料として使えるようにできます。

時間は上にも書いたように20で1秒です。

詳しくはこちら:

https://minecraft-ja.gamepedia.com/製錬Minecraft Wiki

@Override public int getBurnTime(ItemStack itemStack) { 
    return 時間; 
}
説明

addInformationを使うことでアイテムに説明を入れることができます。

今回は、さっき作った土の粉に説明を入れたいと思います。

@Override
public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
    tooltip.add(new StringTextComponent("テキスト"));
    super.addInformation(stack, worldIn, tooltip, flagIn);
}

"テキスト"の部分に好きなテキストを入れると表示されます。

ですが、これだと言語関係なしにこのテキストが表示されてしまいます。

言語に対応したテキストを表示させるようにしたいのですが、これが調べても出てきませんでした。

なのでマインクラフト内部データから確認するしかありません。

addInformationが使われているミュージックディスクのファイルを覗いてみると、getTranslationKeyと".desc"を組み合わせている事がわかります。

@OnlyIn(Dist.CLIENT)
public void addInformation(ItemStack stack, @Nullable World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
   tooltip.add(this.getRecordDescription().applyTextStyle(TextFormatting.GRAY));
}

@OnlyIn(Dist.CLIENT)
public ITextComponent getRecordDescription() {
   return new TranslationTextComponent(this.getTranslationKey() + ".desc");
}

 また、langファイルを覗くと、ミュージックディスクのところに.descを発見しました。

f:id:Umagame:20200320140603p:plain

これを参考につくればできそうです。

まず、ミュージックディスクのコードをちょっと変えてさっきのアイテムのクラスに入れます。(applyTextStyleで文字を灰色にもしてます)

import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.Food;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Effects;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;

public class ItemDirtPowder extends Item{

    public ItemDirtPowder() {
        super(new Properties().food(new Food.Builder().hunger(3).saturation(1.2F).effect(new EffectInstance(Effects.NAUSEA,120,1),0.8F).build()));
        this.setRegistryName("dirt_powder");
    }

    @Override
    public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
        tooltip.add(new TranslationTextComponent(this.getTranslationKey() + ".desc").applyTextStyle(TextFormatting.GRAY));
        super.addInformation(stack, worldIn, tooltip, flagIn);
    }
}

そのあと、日本語のlangファイルに次の一行を追加。

"item.ModのID.アイテムのID.desc": "説明"

今回の場合はこんな感じ。

"item.dirtmod.dirt_powder.desc": "勇気を出せば食べれるかも"

英語のlangファイルにも追加しておきます。

これで起動すると、ちゃんと説明がついています。

f:id:Umagame:20200320141621p:plain

レアリティ・エフェクト

getRarityでレアリティを設定できます。

@Override
public Rarity getRarity(ItemStack stack) {
    return Rarity.RARE;
}

マインクラフトにレアリティなんてあるのか、と思うかもしれませんがアイテムの名前の色が変わるみたいです。(金りんごがいい例ですね)

Rarity.createで好きな色にできたりもするみたいです。

また、hasEffectでエンチャントされたアイテムのようなエフェクトをかけることもできます。

@Override public boolean hasEffect(ItemStack stack) { 
    return true; 
}

エクスポート

ではModをjarファイルに出力してみましょう。

Modのワークスペースにbatファイルを作ります。今回はbuild.batとしておきます。

f:id:Umagame:20200320142805p:plain

これに「gradlew build」と入力して保存。

f:id:Umagame:20200320144221p:plain

起動するとエクスポートが始まります。

終わると、build/libsにjarファイルが生成されます。

ですが、設定をしてなかったので「modid-1.0.jar」という名前になってしまいました。

build.gradleというファイルをいじれば直ります。

f:id:Umagame:20200320144708p:plain

これでbuild.batを起動するだけでエクスポートができるようになります。

さいごに

今回はここまでです。

今回は特殊なアイテムについて少ししか触れていませんでしたが、詳しい紹介がほしいという方がいればまた作ります。

次回:

umagame.hatenablog.jp