うまげーむさん

ゲームの情報を主に投稿します。

【最新版】MinecraftのModPack(モッドパック)の導入方法!【マインクラフト】

はじめに

どうも。
2020年にマインクラフトのモッドパックの導入方法についての記事を投稿しましたが、その方法は現在では使えないため更新版を出します。

私が昔に上げたモッドパックの記事、まじで時代遅れすぎますね。
Twitchデスクトップアプリはもう無いし、TwitchからModPackはもうプレイできませんし。文章もかなり適当です。
約三年間もこれを放置していたわけですね。。。申し訳ない。

導入方法(FTB)

モッドパックを配信しているサイトにはFTB(Feed The Beast)やCurseForgeなどがありますが、今回はFTBの導入方法を解説します。(CurseForgeもほぼ同じような方法で導入可能です)
まずは、https://www.feed-the-beast.comにアクセスします。

メニューから「App」をクリック。

「Download for Windows」をクリックしてインストーラーをダウンロードします。(MacLinux版はその右のボタンからダウンロードできます)
インストーラーの手順に従って、OverwolfとFTB Appをインストールします。
Overwolfというのは様々なゲームのModをプレイできるプラットフォームのようなもので、FTBのアプリはOverwolfのアプリの中の一つです。(説明合ってるか分かりませんが、多分こんな感じです)
FTB Appをインストールできたら開きます。

左のメニューの「Browze」から、プレイしたいモッドパックを検索しましょう。
入れたいモッドパックの右端の緑のボタンからインストールすることができます。

インストールしたモッドパックは、「Library」から確認することができます。

この画面では、モッドパックに含まれるModを確認したり、設定を変えたりできます。(メモリ割り当てもこちらから)
インストールが終わったら、「Play」でゲームを始めることができます。

もちろんマインクラフトのアカウントが必要なので、初回起動時にはこのようにログインするよう言われます。
MicrosoftかMojangアカウントでログインできますが、Microsoftでログインすることを勧めます。
ログインが完了したら、ゲームが起動します。

CurseForgeの場合

CurseForgeの場合も、FTBと同じように導入することができます。
ダウンロードリンク:https://download.curseforge.com

さいごに

今回は以上となります。
この記事は新しく始めるStoneBlock 3の攻略シリーズのために更新しました。
StoneBlockシリーズは近日中に投稿します。

【マインクラフト Modding】1.17で便利系Modを作る #2 - アイテム・レシピ・クリエイティブタブの追加

はじめに

どうも。

今回はいくつかアイテムを追加して、そのレシピも追加していきます。

前回:

www.umagame.info

今回追加するアイテム

まず今回追加するアイテムをさらっと紹介します。

f:id:Umagame:20210909203520p:plain

f:id:Umagame:20210909203518p:plain

「石の塊」と、「強化棒」です。名前・テクスチャはかなり適当に決めました。

どちらもツールの素材になります。

記事内では「強化棒」のほうの追加手順を載せています。

アイテム追加

今回も同様に、ほとんどの手順は1.16のときと同じです。

f:id:Umagame:20210908203618p:plain

アイテムやブロックなどの登録用クラスを置くinitパッケージと、

f:id:Umagame:20210908203736p:plain

アイテムのクラスを置くためのitemパッケージを追加します。

f:id:Umagame:20210908205840p:plain

itemパッケージに新しくクラスを追加します。名前はStrongStickItemにします。

f:id:Umagame:20210909110925p:plain

Itemクラスを継承して、コンストラクタも追加します。

Itemクラスですが、1.16の時は「net.minecraft.item.Item」だったのが1.17では「net.minecraft.world.item.Item」になってますね。

ちなみにアイテムIDは「strong_stick」です。

f:id:Umagame:20210909111526p:plain

登録用クラスの前に、ModIDをfinalフィールドとしてメインクラスに置いておきます。

f:id:Umagame:20210909111528p:plain

initパッケージに新しくクラスを作ります。名前は前回と同じ「ItemInit」です。

f:id:Umagame:20210909111531p:plain

コードも前回のものを流用します。

f:id:Umagame:20210909112916p:plain

メインクラスにコードを追加して、ItemInitクラスのアイテムが登録されるようにします。

f:id:Umagame:20210909114133p:plain

これでアイテムの追加は完了です。

テクスチャの追加

次にテクスチャの設定に移ります。

こちらもほとんど1.16のときと同じなので、さくっといきます。

f:id:Umagame:20210909114753p:plain

src/main/resources/assets/bettertoolsmodにlang、models、texturesというフォルダを追加して、

f:id:Umagame:20210909115727p:plain

そこにjsonファイル、テクスチャの画像ファイルを入れます。(jsonファイルの中身は記事の最後に貼ってあります)

f:id:Umagame:20210909120127p:plain

f:id:Umagame:20210909120132p:plain

ちゃんとテクスチャが反映されているか確認します。

レシピの追加

レシピを追加していきます。

f:id:Umagame:20210909150722p:plain

パッケージを追加して、

f:id:Umagame:20210909151007p:plain

新しくjsonファイルを作ります。

f:id:Umagame:20210909151630p:plain

コードはこんな感じです。

材料に使う原木は種類を問わないので、単純に「minecraft:logs」を使っています。

f:id:Umagame:20210909152021p:plain

起動して確認。

f:id:Umagame:20210909152026p:plain

ちゃんと他の原木でも作れますね。

クリエイティブタブの追加

最後にクリエイティブタブを追加しておきます。

f:id:Umagame:20210909153041p:plain

タブ登録用クラスを作ります。

f:id:Umagame:20210909153814p:plain

中身は1.16のときの流用ですが、タブ自体のクラスの名前がItemGroupからCreativeModeTabに変更されています。注意してください。

アイコンは今後追加するツール系アイテムにするつもりなので、今のところは土に設定しています。

f:id:Umagame:20210909153817p:plain

さっき作ったアイテムをタブに追加します。こちらも同様に、メソッドの名前がgroupからtabに変わっています。

f:id:Umagame:20210909154537p:plain

追加できました。langファイルでローカライズも済ませておきましょう。

f:id:Umagame:20210910072927p:plain

f:id:Umagame:20210910072931p:plain

同じように、「石の塊」も追加しました。

さいごに

今回はここまでです。

次回はツールを追加していきます。

ソースコード

StrongStickItem.java

package com.umagame.bettertoolsmod.item;

import com.umagame.bettertoolsmod.init.CreativeTabInit;

import net.minecraft.world.item.Item;

public class StrongStickItem extends Item{

	public StrongStickItem() {
		super(new Properties().tab(CreativeTabInit.BETTERTOOLSMOD));
	}
}

StoneChunkItem.java

package com.umagame.bettertoolsmod.item;

import com.umagame.bettertoolsmod.init.CreativeTabInit;

import net.minecraft.world.item.Item;

public class StoneChunkItem extends Item{

	public StoneChunkItem() {
		super(new Properties().tab(CreativeTabInit.BETTERTOOLSMOD));
	}
}

ItemInit.java

package com.umagame.bettertoolsmod.init;

import com.umagame.bettertoolsmod.BetterToolsMod;
import com.umagame.bettertoolsmod.item.StoneChunkItem;
import com.umagame.bettertoolsmod.item.StrongStickItem;

import net.minecraft.world.item.Item;
import net.minecraftforge.fmllegacy.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class ItemInit {
	public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS,BetterToolsMod.MOD_ID);

	public static final RegistryObject<Item> STRONG_STICK = ITEMS.register("strong_stick", () -> new StrongStickItem());
	
	public static final RegistryObject<Item> STONE_CHUNK = ITEMS.register("stone_chunk", () -> new StoneChunkItem());
}

BetterToolsMod.java

package com.umagame.bettertoolsmod;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.umagame.bettertoolsmod.init.ItemInit;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

@Mod(BetterToolsMod.MOD_ID)
public class BetterToolsMod
{
    public static final Logger LOGGER = LogManager.getLogger();
    
    public static final String MOD_ID = "bettertoolsmod";

    public BetterToolsMod() {
    	IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
        bus.addListener(this::setup);

        ItemInit.ITEMS.register(bus);

        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event)
    {
    	
    }
}

en_us.json(src/main/resources/assets/bettertoolsmod/lang)

{
	"item.bettertoolsmod.strong_stick": "Strong Stick",
	"item.bettertoolsmod.stone_chunk": "Stone Chunk",
	"itemGroup.bettertoolsmod": "Better Tools Mod"
}

ja_jp.json(src/main/resources/assets/bettertoolsmod/lang)

{
	"item.bettertoolsmod.strong_stick": "強化棒",
	"item.bettertoolsmod.stone_chunk": "石の塊",
	"itemGroup.bettertoolsmod": "Better Tools Mod"
}

strong_stick.json(src/main/resources/assets/bettertoolsmod/models/item)

{
  "parent": "minecraft:item/handheld",
  "textures": {
    "layer0": "bettertoolsmod:item/strong_stick"
  }
}

stone_chunk.json(src/main/resources/assets/bettertoolsmod/models/item)

{
  "parent": "minecraft:item/generated",
  "textures": {
    "layer0": "bettertoolsmod:item/stone_chunk"
  }
}

strong_stick.json(src/main/resources/data/bettertoolsmod/recipes)

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "#",
    "#"
  ],
  "key": {
    "#": {
      "tag": "minecraft:logs"
    }
  },
  "result": {
    "item": "bettertoolsmod:strong_stick",
    "count": 4
  }
}

stone_chunk.json(src/main/resources/data/bettertoolsmod/recipes)

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "###",
    "#X#",
    "###"
  ],
  "key": {
    "#": {
      "tag": "minecraft:stone_crafting_materials"
    },
    "X": {
      "item": "minecraft:coal"
    }
  },
  "result": {
    "item": "bettertoolsmod:stone_chunk"
  }
}

CreativeTabInit.java

package com.umagame.bettertoolsmod.init;

import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;

public class CreativeTabInit {
	public static final CreativeModeTab BETTERTOOLSMOD = new CreativeModeTab("bettertoolsmod") {
	      public ItemStack makeIcon() {
	         return new ItemStack(Items.DIRT);
	      }
	};
}

【マインクラフト Modding】1.17で便利系Modを作る #1 - 環境構築

はじめに

どうも。

皆さんはマインクラフトをサバイバルでやってて、エンチャなしの石・鉄ツルハシの遅さにイライラした経験ってありますか?

私は数え切れないぐらいありますね。

効率5とビーコンがあればストレスフリーに作業ができるんですが、用意するのが結構めんどくさいんですよね。(特にビーコンのための鉱石ブロック)

ということで今回はこれをどうにかModの力で解決しようと思います。

 

1.16とか1.15のときの記事とは違ってこのシリーズはModを作るのがメインなので、解説は少なめです。

作り方自体は1.16のときとほぼ同じなので、詳しいModの作り方の解説がみたい方は1.16の記事をご覧ください。

www.umagame.info

もちろん、仕様が1.16のときと違っていたりした場合はその都度解説します。多分無いと思いますが。。。

このシリーズで作るMod

まず、このシリーズで作っていくModの概要を紹介しておきます。

サバイバルを快適にするModなので、とりあえずコスパの良いツールを追加します。

丸石とか石炭とか、簡単に手に入る素材でできるようにします。

流石に数個で作れちゃうとバランスが崩壊するので、大量のアイテムを圧縮したやつを素材にしようと思います。

(そういえば1.15のModding解説のときも圧縮レシピ作ってましたね。。。)

あと、村人厳選があまりにもめんどくさいので簡単に効率強化や修繕のエンチャントをつけれるようにもしたいと思います。

これは多分新しく鉱石を追加して、それを使ってエンチャント付与できるようにする的な感じになると思います。

ちなみに名前は「BetterToolsMod」にします。めっちゃ適当に決めました。(次回までにレシピなどをちゃんと決めておきます)

Modを作る

1.環境準備

Mod開発環境の構築は1.16のときと同じです。

f:id:Umagame:20210905125224p:plain

Forgeの公式サイトから、1.17.1のMdkをダウンロードします。

f:id:Umagame:20210905125458p:plain

解凍して、setup.batでセットアップを済ませておきます。

f:id:Umagame:20210905130337p:plain

Eclipseを起動して、インポートします。

f:id:Umagame:20210905130601p:plain

runClientでマインクラフトを起動できるか確認してみましょう...あれ?

なんか起動できません。「JREはプロジェクト .class ファイル互換性と矛盾します: 16」と表示されていますね。

JREに問題がありそうです。とりあえずJREのバージョンを16に変えてみます。

f:id:Umagame:20210905140517p:plain

起動できましたが、なんか色々おかしくなりました。

原因がよくわからないので、Eclipseを入れ直してもう一回やることにします。

f:id:Umagame:20210906200959p:plain

Full EditionならすべてのバージョンのJREが一緒に入っているらしいので、Eclipse 2021-06のJava Full Editionをダウンロードします。

f:id:Umagame:20210906201603p:plain

エラーがなくなりました。やっぱりJREの不具合っぽかったですね。

f:id:Umagame:20210906202330p:plainちゃんと起動できました。良かった。

2.Modの設定

Modの設定をしていきます。

f:id:Umagame:20210906203823p:plain

Modのメインクラスと、それが入っているパッケージの名前を変えて(com.umagame.bettertoolsmod.BetterToolsMod.java)、コードをすっきりさせました。

f:id:Umagame:20210906203824p:plain

src/main/resources/META-INF内のmods.tomlもすっきりさせておきます。

やったことは1.16のときと同じです。詳しくは1.16Modding解説パート3を参照。

また、ソースコードは記事の一番下に貼っておきます。

f:id:Umagame:20210906204040p:plain

ちゃんと反映されました。

さいごに

ちょっと短いですが今回はここまでです。

次回からアイテムの追加をしていきます。(投稿日時は未定です)

次回:

www.umagame.info

ソースコード

BetterToolsMod.java

package com.umagame.bettertoolsmod;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

@Mod("bettertoolsmod")
public class BetterToolsMod
{
    public static final Logger LOGGER = LogManager.getLogger();

    public BetterToolsMod() {
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);

        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event)
    {
    	
    }
}

mods.toml

modLoader="javafml" #mandatory
loaderVersion="[37,)" #mandatory
license="All rights reserved"
[[mods]] #mandatory
modId="bettertoolsmod" #mandatory
version="1.0" #mandatory
displayName="Better Tools Mod" #mandatory
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional
displayURL="https://www.umagame.info" #optional
#logoFile="examplemod.png" #optional
#credits="" #optional
authors="うまげーむ(Umagame)" #optional
description=''' 
快適なサバイバルライフのために作られたModです。
'''

【Java版マインクラフト 1.17】激安レンタルサーバーを使ったサーバーの開き方!月1000円以下で快適なマルチプレイ【KAGOYA VPS】

はじめに

どうも。

また最近マインクラフトにはまっています。

ですが、一人でやっていると大体1~2週間ぐらいで飽きちゃうんですよね。

統合版のようにマルチプレイがスムーズにできれば良いのですが、Java版でのサーバーの開き方はかなり難解です。

以前紹介したような無料の方法でサーバーを開いても、ラグが酷くてまともにプレイできなかったりします。。。

www.umagame.info

ですが、レンタルサーバー(VPS)を使えば快適にマルチプレイを楽しむことができます。

ということで今回は、マインクラフトJava版(バージョン1.17.1)でのVPSを使ったサーバーの開き方を紹介します。

KAGOYA CLOUD VPSについて

今回使用するVPSは「KAGOYA CLOUD VPS」です。

KAGOYA VPSはよく使われる他のVPS(ConoHa VPS、さくらのVPS)に比べて料金が安い反面、マインクラフトのサーバーの自動構築機能がないので難易度は高いです。

f:id:Umagame:20210821073636p:plain

料金はこんな感じです。(2021/08/21現在)

1コア1GBではおそらくサーバーが起動できないので、2コア2GBが最低ラインですね。

見て分かる通り料金は一日ごとに発生するので、数日しかプレイしないという方はめっちゃ安くなります。

開き方解説

1.必要なもののダウンロード

まずは、レンタルサーバーを操作するためのソフトウェアを入れておきます。どちらも無料です。

forest.watch.impress.co.jp

forest.watch.impress.co.jp

2.アカウントの作成

KAGOYA公式サイト(https://www.kagoya.jp/cloud/vps/)へ行きます。

f:id:Umagame:20210821074701p:plain

下へスクロールするとお申し込みボタンがあるのでクリックします。(今回は2コア2GBでやります)

f:id:Umagame:20210821074852p:plain

オンラインでのお申し込みを選択。

クリックすると個人情報入力画面に飛ぶので、個人情報・クレジットカード情報を入力して申し込みをして下さい。(この時点では料金は発生しません)

f:id:Umagame:20210821075337p:plain

個人情報の入力の際に、アカウント名を設定しておいたほうが後々楽になります。(ログインの際に使います)

Eメールで本人確認をしたら登録完了です。

3.VPSの作成

https://vps.kagoya.com/で新しくVPSを作ります。さっき作ったアカウントでログインして下さい。

f:id:Umagame:20210821075909p:plain

インスタンス作成」をクリック。

f:id:Umagame:20210821080124p:plain

OSは「Ubuntu 20.04」にします。

アプリケーションセットアップに「Minecraft Server(Java Edition)」という項目がありますが、これは選ばずに「なし」にしてください。

f:id:Umagame:20210821081009p:plain

スペックは前述の通り2コア2GBにします。

f:id:Umagame:20210821081310p:plain

VPSに接続するためには認証キーが必要です。「ログイン用認証キー追加」をクリックして、

f:id:Umagame:20210821081301p:plain

適当な名前をつけて、登録をクリック。

f:id:Umagame:20210821081505p:plain

作成の際に〇〇.keyというファイルがダウンロードされるので、大事に保管しておいて下さい。

f:id:Umagame:20210821081721p:plain

virtioという項目はそのまま(ON)で良いです。

f:id:Umagame:20210821081723p:plain

コンソールログインパスワードはroot権限ログインする際に必要です。設定したパスワードは忘れないように。

f:id:Umagame:20210821081726p:plain

最後にインスタンス名を適当に決めて、

f:id:Umagame:20210821082113p:plain

インスタンス作成をクリック。これをクリックすると、一日分の料金(35円)が発生します。

f:id:Umagame:20210821082507p:plain

インスタンス一覧に戻って、IPを確認しておきます。これはそのままマインクラフトのサーバーのIPアドレスになります。

4.サーバー構築

4-1.~Javaのインストール

それでは、作成したVPS内にマインクラフトのサーバーをセットアップします。

f:id:Umagame:20210821083204p:plain

Tera Termを起動して、「ホスト」にIPを入力してOKをクリック。

f:id:Umagame:20210821084110p:plain

セキュリティ警告がでますが、無視して「続行」をクリック。

f:id:Umagame:20210821084436p:plain

ユーザー名に「root」、「RSA/DSA/ECDSA/ED25519鍵を使う」にさっきダウンロードしたキーの場所を入力します。

f:id:Umagame:20210821085025p:plain

キーの参照の際は、赤く囲ってあるところを「すべてのファイル」にして探しましょう。

f:id:Umagame:20210821100140p:plain

このようにコマンドプロンプトっぽい画面になれば接続完了です。

まずはOSのアップデートをしておきます。以下のコマンドを実行してください。

sudo apt update
sudo apt -y upgrade

そして、Javaを入れます。

sudo apt install openjdk-16-jre screen

f:id:Umagame:20210821101610p:plain

「Do you want to continue?」とでるので、「Y」と入力してEnterを押します。

java -version」でインストールできてるか確認します。

f:id:Umagame:20210821101920p:plain

ちゃんとJava16が入っているのが確認できます。(マインクラフト1.17からはJava16が必須になったので注意)

4-2.~実行ファイル

次にマイクラ用に新しくフォルダを作ります。以下のコマンドを実行して下さい。

sudo adduser minecraft

f:id:Umagame:20210821102216p:plain

「New password:」と出るので、適当にパスワードを決めます。サーバーを借りたときに設定したやつと同じでなくても構いません。

f:id:Umagame:20210821102348p:plain

パスワードの再入力をして、

f:id:Umagame:20210821102437p:plain

そのあとの情報は入力しなくて大丈夫です。5回Enterを押して、「Is the information correct?」が出たら「Y」を入力してEnter。

「su - minecraft」を入力して、作ったフォルダに移動します。

次にマイクラのサーバーの本体をダウンロードします。https://mcversions.netからダウンロードリンクを入手します。

f:id:Umagame:20210821102717p:plain

1.17.1をクリックして、

f:id:Umagame:20210821102948p:plain

Server Jarと書いてある方のリンクのアドレスをコピーします。

f:id:Umagame:20210821103148p:plain

そして、「wget リンクのアドレス」と入力します。

(私の場合は「wget https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar」となります)

f:id:Umagame:20210821103450p:plain

「ls」と入力すると、現在のディレクトリにあるファイルすべてを確認できます。server.jarがあればOKです。

サーバーを起動するためのファイルを作ります。以下のコマンドを入力して下さい。

vi /home/minecraft/run.sh

f:id:Umagame:20210821103836p:plain

ファイルエディタに移るので、「java -Xms1024M -Xmx1536M -jar server.jar nogui」と入力します。

f:id:Umagame:20210821103926p:plain

「:wq」で保存します。

このエディタは使い方が難しいので、よくわからない場合は「linux viewコマンド」とかで検索すると色々出てきます。

以下のコマンドを入力して、さっき作ったrun.shに権限を与えます。

chmod +x /home/minecraft/run.sh

4-3.~EULA同意

早速実行してみましょう。「./run.sh」で起動します。

f:id:Umagame:20210821104313p:plain

初回の起動なので、EULAに同意しろとメッセージが出てきます。

「vi eula.txt」でeula.txtを開きます。

またさっきと同じエディタが開くので、iキーを押して編集モードに切り替えて、方向キーで操作....あれ?

f:id:Umagame:20210821104546p:plain

方向キーを押すとABCD...と表示されてしまいます。

これではEULAに同意できません。直す必要があります。

最初にダウンロードしたWinSCPを開きます。

f:id:Umagame:20210821105638p:plain

ホスト名にサーバーのIP、ユーザー名にrootと入力して、設定をクリック。

f:id:Umagame:20210821105748p:plain

「認証」の、「秘密鍵」にキーの場所を指定します。

f:id:Umagame:20210821105903p:plain

キーの形式を変換しますかと出るので、OKをクリック。

保存した.ppkファイルを指定します。

f:id:Umagame:20210821110032p:plain

設定を閉じて、ログインをクリック。

f:id:Umagame:20210821110133p:plain

警告は無視して「はい」をクリック。

これで、VPSのファイル管理を簡単に行うことができます。

f:id:Umagame:20210821110915p:plain

「home」というフォルダを探して下さい。

f:id:Umagame:20210821111015p:plain

homeの中のminecraftを開いて、

f:id:Umagame:20210821111117p:plain

そこに新しくファイルを作成します。

f:id:Umagame:20210821111412p:plain

ファイル名は「.vimrc」にして下さい。

f:id:Umagame:20210821111504p:plain

set nocompatible
set backspace=indent,eol,start

OKを押すとエディタが開くので、上の2文を入力して保存します。

f:id:Umagame:20210821111728p:plain

Tera Termに戻ってもう一回eula.txtを開くと、方向キーが使えるようになっています。

iキーで編集モードにして、eula=falseをeula=trueに書き換えて、Escキーを押して、「:wq」と入力して閉じます。

4-4.~ポート開放

ようやくサーバーの起動ができます。

「./run.sh」と入力して、サーバーが開けるか確認しましょう。

f:id:Umagame:20210821120253p:plain

「Done!」と表示されたら成功です。ですがまだポート開放をしていないので、一旦「stop」と入力してサーバーを閉じます。

下のコマンドでrootに戻ります。

su - root

f:id:Umagame:20210821120723p:plain

パスワードを入力するよう言われるので、サーバーを借りたときに設定した「コンソールログインパスワード」を入力して下さい。

rootに移動できたら、以下の3つのコマンドを入力します。

iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
iptables -A INPUT -p tcp --sport 25565 -j ACCEPT
sudo apt install iptables-persistent

f:id:Umagame:20210821120902p:plain

この画面が出たらEnterを押します。

これですべての作業は終了です。お疲れさまでした。

「su - minecraft」でminecraftに戻って、「./run.sh」で起動して、サーバーに入れるか試してみましょう。

f:id:Umagame:20210821121438p:plain

f:id:Umagame:20210821121444p:plain

できました。

メモリ不足でエラー...

サーバー起動時に「There is insufficient memory for the Java Runtime Environment to continue...」と表示されてエラーになる場合があります。

この場合は、スワップ領域と呼ばれるものを増やすことで解決します。

rootで、「sudo dd if=/dev/zero of=/swapfile2 bs=1M count=2048」を入力。

f:id:Umagame:20210821121938p:plain

続けて「sudo mkswap /swapfile2」と入力。

f:id:Umagame:20210821122106p:plain

続けて「chmod 600 /swapfile2」と入力。

最後に「sudo swapon /swapfile2」と入力すればOKです。

やめたい場合

もちろんサーバーを借りたまま放置しているとどんどん料金がクレカから引かれていきます。

なので、やめる時はインスタンスを削除する必要があります。

f:id:Umagame:20210821123022p:plain

まずインスタンス一覧から、サーバーを停止します。

f:id:Umagame:20210821123904p:plain

インスタンスの名前をクリックして管理画面へ行き、削除をクリックします。

もちろんプレイしたワールドのデータは消えるので、WinSCPで自分のPCに移してから削除するようにしましょう。

さいごに

今回はここまでです。

ちなみにTera Termを閉じるとサーバーも落ちます。

【マインクラフト 1.17】簡単な高性能ゴーレムトラップの作り方!一晩で鉄インゴット100+【Minecraft Java】

はじめに

今回はマインクラフト1.17における、高性能なアイアンゴーレムトラップの作り方を紹介します。

1.17じゃなくても、1.14以降ならおそらく動きます。(Java版とBedrock版では仕様が異なるので、スマホ版やスイッチ版では作れません)

参考になれば幸いです。

必要なもの

f:id:Umagame:20210807200600p:plain

  • 建材ブロック(今回は丸石)・・・たくさん
  • ハーフブロック(今回は滑らかな石ハーフ)・・・たくさん
  • 塀(今回は石レンガの塀)・・・たくさん
  • 湧き潰し用松明・・・1スタックほど
  • チェスト・・・2個
  • リピーター・・・1個
  • コンパレーター・・・2個
  • レッドストーンダスト・・・14個
  • ホッパー・・・19個
  • 火打ち石と打ち金・・・1個
  • レール・・・3個
  • ホッパー付きトロッコ・・・3個
  • 水バケツ・・・2個
  • 溶岩バケツ・・・1個
  • ガラス・・・40個(画像では32個になっていますが、正しくは40個です)
  • 黒曜石・・・48個
  • ソウルサンド・・・2個
  • ドロッパー・・・1個
  • 名札・・・2個
  • 看板・・・9個
  • ベッド・・・12個

建材ブロックは丸石または石がおすすめです。ラージチェスト1個埋まるくらいあれば十分です。

また、ゴーレムトラップなのでもちろん村人が必要です。建設する場所の近くに12人用意しておいて下さい。

1.湧き層の建築1

まずはゴーレムが湧く場所を作ります。

f:id:Umagame:20210807184911p:plain

まず、地面から10ブロック積み上げます。

f:id:Umagame:20210807201128p:plain

そこから、4方向に5ブロックずつ伸ばします。

f:id:Umagame:20210807184923p:plain

11×11の平面を作って、縁にブロック1段、ハーフブロック1段で壁を作ります。

f:id:Umagame:20210807184929p:plain

床にこのように黒曜石を埋めて、

f:id:Umagame:20210807184935p:plain

そこから4つのネザーゲートを作ります。

2.処理層の建築

処理層はネザーに作ります。

湧いたゴーレムを一瞬でネザーに送って処理することで、スポーンの間隔を短くするためです。

f:id:Umagame:20210807201453p:plain

そのうちの1つだけを着火して、入る前にF3で方角を確認しておきます。

f:id:Umagame:20210807210213p:plain

入ったら一旦ゲートを壊して、

f:id:Umagame:20210807210219p:plain

3×3にしておきます。

f:id:Umagame:20210807212917p:plain

その後覚えておいた方角の方に3×5の穴を5ブロック分掘ります。

f:id:Umagame:20210807210232p:plain

そして、ゲートをこのように塀で囲っておきます。普通のブロックだと、ゴーレムがすり抜けて外に出てしまうバグがあるらしいです。

f:id:Umagame:20210807210238p:plain

f:id:Umagame:20210807213034p:plain

赤く囲ってあるところに穴をあけます。

f:id:Umagame:20210807210254p:plain

そこにホッパーをおいて、

f:id:Umagame:20210807210300p:plain

それにつながるようにホッパーを敷き詰めます。

f:id:Umagame:20210807210306p:plain

このように穴の底まで塀を置きます。

f:id:Umagame:20210807210312p:plain

奥は普通のブロックで壁を作ります。天井は必要ないですが、ガストの攻撃が不安な方は作っておくと良いでしょう。

f:id:Umagame:20210807210318p:plain

看板をこのように配置します。

f:id:Umagame:20210807210324p:plain

真ん中の看板の上に溶岩を置きます。

f:id:Umagame:20210807213535p:plain

ホッパーの先にこれくらいの広さの空間を作っておきます。

f:id:Umagame:20210807213543p:plain

まずホッパーの先にドロッパーを置いて、

f:id:Umagame:20210807213549p:plain

このようにレッドストーン回路を作ります。

f:id:Umagame:20210807213555p:plain

ドロッパーの目の前にゲートを作って、

f:id:Umagame:20210807213603p:plain

着火します。

f:id:Umagame:20210807213608p:plain

後ろに壁を作れば、処理層は完成です。

f:id:Umagame:20210807214347p:plain

オーバーワールドに戻ってからもう一回ゲートに入り、ちゃんと処理層の最初のゲート(スクショのやつ)のとこへワープできることを確認しておいて下さい。

もしオーバーワールドでゲートに入って、ドロッパーのところのゲートにワープしてしまった場合は失敗です。めんどくさいですが、もう一回やり直しになります。

3.湧き層の建築2

f:id:Umagame:20210807214606p:plain

ネザーから戻ったら、着火してゲートの真下にブロックとチェストを配置します。

f:id:Umagame:20210807214611p:plain

ホッパーをチェストにつないで、その上にレールを敷きます。

f:id:Umagame:20210807214617p:plain

レールの上にホッパー付きトロッコを載せます。

f:id:Umagame:20210807214622p:plain

他の3つのゲートを着火します。

f:id:Umagame:20210807214627p:plain

中の3×3の空間はブロックで埋めておいて下さい。

f:id:Umagame:20210807214632p:plain

ハーフブロックで湧き潰しも忘れずに。

f:id:Umagame:20210807214639p:plain

四隅に水を置きます。あとは村人とゾンビを用意するだけです。

4.村人とゾンビの配置

f:id:Umagame:20210807214650p:plain

次に、村人を閉じ込めるスペースを作ります。

f:id:Umagame:20210807214656p:plain

3×3の足場を4つ作ります。

f:id:Umagame:20210807214700p:plain

こんな感じで、ハーフブロックを置きます。

f:id:Umagame:20210807214706p:plain

3ブロック下にソウルサンドを配置します。

f:id:Umagame:20210807214712p:plain

こんな感じでガラスを置いて、

f:id:Umagame:20210807214717p:plain

水を置きます。ここにゾンビを入れます。

f:id:Umagame:20210807214723p:plain

ゾンビを入れる時は、上に穴を開けて入れましょう。トラップドアを使うと簡単にできます。

f:id:Umagame:20210807214728p:plain

反対側にもゾンビを閉じ込める場所を作って、こんな感じでベッドを配置します。

このベッドの配置の仕方は重要です。間違えないようにしましょう。

f:id:Umagame:20210807214733p:plain

村人をベッドで寝かせます。サバイバルの場合は、足場をつなげてあげる必要があります。

f:id:Umagame:20210807214738p:plain

湧き潰し用の松明を忘れずに置いて、

f:id:Umagame:20210807214743p:plain

ハーフブロックで蓋をします。

f:id:Umagame:20210807214748p:plain

他の3つも同じようにして、計12人の村人を閉じ込めます。

f:id:Umagame:20210807214753p:plain

次にゾンビを入れます。デスポーン防止のために名札を使って名前をつけておきます。

f:id:Umagame:20210807214759p:plain

ゾンビを入れたらこのように蓋をして、

f:id:Umagame:20210807214805p:plain

ゾンビの真上にもう一つハーフブロックを置きます。

f:id:Umagame:20210807214812p:plain

ゾンビを入れるとすぐアイアンゴーレムのスポーンが始まります。

f:id:Umagame:20210807220942p:plain

しばらく待って、チェストに鉄インゴットとポピーたくさん入っていたら完成です。お疲れさまでした。(スクショは私がサバイバルワールドで作ったときのものです)

このトラップは、夜にゾンビが村人の近くにいたときにゴーレムが湧く仕様を利用したものなので、夜にしか動きません。注意してください。

 

さいごに

今回はここまでです。

効率の検証はしていませんが、一晩で軽く100個くらいはインゴットがたまります。

増設も可能なので、もっと効率を求める場合は試してみてはいかがでしょうか。(増設する場合は、10ブロックくらい上に同じ湧き層を作って下さい)

【マインクラフト Modding】1.16での自作Modの作り方 #10 jarファイルにエクスポート

はじめに

どうも。お久しぶりです。

今回はModをエクスポートするだけの回なので、かなり短いです。

前回:

www.umagame.info

エクスポート

ほとんど手順は1.15のときと同じです。(久しぶりの投稿にも関わらず内容が薄い上に過去のやつと同じとか手抜きかよ、と言われそうですね。全くその通りです。)

過去の記事:

www.umagame.info

gradleの設定

エクスポートする前に、build.gradleというファイルを編集しておきます。

これはModのビルドの際に必要になるファイルです。

f:id:Umagame:20210227101529p:plain

build.gradleを右クリックして「開く」をクリック。

f:id:Umagame:20210227101532p:plain

この部分はエクスポート後のファイルの名前に影響するので、変更しておきます。

f:id:Umagame:20210227101534p:plain

上からバージョン、グループ(パート3で設定したパッケージの名前と同じもの)、ModIDに設定します。

このgradleの設定はゲーム内には影響しないと思うので(多分)、この手順は省いても良いです。

ビルド

f:id:Umagame:20210227101538p:plain

Forgeのファイルを開いて、新しくbatファイルを作成します。名前は何でもいいです。

f:id:Umagame:20210227101542p:plain

「gradlew build」とだけ入力して保存します。

f:id:Umagame:20210227101546p:plain

作ったbatファイルを開けば、ビルドが始まります。このウィンドウはビルド終了時に自動的に閉じます。

f:id:Umagame:20210227101551p:plain

ビルドが成功したら、build/libsにjarファイルが生成されます。これでエクスポートは完了です。

起動して確認

生成されたjarファイルを、普段Modを導入するときと同じ手順で導入してみます。(modsファイルに移動させる)

f:id:Umagame:20210227101554p:plain

ちゃんとエクスポートされていることがわかりました。これで、配布などをすることができます。

さいごに

今回はここまでです。

このシリーズで作っているMod(UHC Items Mod)の配布は予定していません。希望があれば配布しますが。

あと、一旦このシリーズの投稿を休もうかと思っています。理由は忙しいというのもありますが、あまりこのシリーズの需要を感じていないからです。

基本的に1.15のコードをそのまま書いても普通に認識されるので、わざわざ1.16でシリーズを作る必要はなかったかな...と今更感じました。それだけです。

なので、このシリーズの次の更新はかなり先になると思います。

【マインクラフト Modding】1.16での自作Modの作り方 #9 ツールの追加

はじめに

どうも。

今回はツールアイテムを追加していきます。

前回:

www.umagame.info

今回追加するアイテム

f:id:Umagame:20210131185516p:plain

今回追加するアイテムは、「Dragon Sword」です。(今回は剣だけでなく他のツールも同様に追加しました)

f:id:Umagame:20210131193049p:plain

Dragon Swordはダイヤ剣に黒曜石とブレイズロッドをクラフトすることで作れます。

UHCでは、そこまでクラフトに時間がかからない割に優秀で、今でいうネザライトと同じ性能を発揮します。(攻撃力がダイヤより1高い)

今回追加するにあたって、ネザライトと性能が同じだけど耐久力がダイヤのまま、という性能にしておきました。

ツールの追加

アイテムティア(ItemTier)クラス

まず、アイテムティア(ツールの素材)のクラスを作っていきます。

f:id:Umagame:20210131184804p:plain

itemパッケージに作成します。

f:id:Umagame:20210131184807p:plain

名前はItemTierにしましたが、マインクラフト自体のクラスと被るのであまりおすすめしません。

f:id:Umagame:20210131184810p:plain

今回も前シリーズと同様に、IItemTierを継承したenum型にします。

f:id:Umagame:20210131184813p:plain

IItemTierをインポートして、

f:id:Umagame:20210131184822p:plain

メソッドを追加。

f:id:Umagame:20210131184825p:plain

メソッドは多めです。

f:id:Umagame:20210131184829p:plain

次に、メソッドの戻り値をprivate変数で置き換えます。あとコンストラクタも追加しておきます。

(変数の説明、ソースコードは下記参照)

f:id:Umagame:20210131184833p:plain

そして、一番上に新しくアイテムティアを追加します。今回は「DRAGON」という名前です。

maxUsesは耐久値です。ダイヤと同じ1561にしました。

efficiencyは採掘の効率(速さ)です。こちらはネザライトと同じ8.0にしました。

attackDamageはダメージ量です。こちらもネザライトと同じに。

harvestLevelはブロックのときに解説したように、ツールのランクです。今回はダイヤと同じ3。

enchantabilityは良いエンチャントのつきやすさ...だと思います。(詳しくは知らないので、間違っているかもしれません。とりあえずダイヤと同じにしました)

repairMaterialはツールを金床で修復するときに使う素材です。Ingredient型なので注意。

これらの値がバニラではどうなっているかは、Eclipseでマインクラフトのコードをのぞけばわかります。(下記参照)

コードはこちら。(ItemTier.java

package com.umagame.uhcitemsmod.item;

import net.minecraft.item.IItemTier;
import net.minecraft.item.Items;
import net.minecraft.item.crafting.Ingredient;

public enum ItemTier implements IItemTier{

	DRAGON(1561, 8.0F, 4.0F, 3, 10, Ingredient.fromItems(Items.DIAMOND));

	private final int maxUses;
	private final float efficiency;
	private final float attackDamage;
	private final int harvestLevel;
	private final int enchantability;
	private final Ingredient repairMaterial;

	private ItemTier(int maxUses, float efficiency, float attackDamage, int harvestLevel, int enchantability, Ingredient repairMaterial) {
		this.maxUses = maxUses;
		this.efficiency = efficiency;
		this.attackDamage = attackDamage;
		this.harvestLevel = harvestLevel;
		this.enchantability = enchantability;
		this.repairMaterial = repairMaterial;
	}

	@Override
	public int getMaxUses() {
		return maxUses;
	}

	@Override
	public float getEfficiency() {
		return efficiency;
	}

	@Override
	public float getAttackDamage() {
		return attackDamage;
	}

	@Override
	public int getHarvestLevel() {
		return harvestLevel;
	}

	@Override
	public int getEnchantability() {
		return enchantability;
	}

	@Override
	public Ingredient getRepairMaterial() {
		return repairMaterial;
	}

}

ツールのクラス

ツールのアイテムのクラスを作ります。

f:id:Umagame:20210131184837p:plain

itemパッケージに作ります。

f:id:Umagame:20210131184840p:plain

継承するクラスはツールの種類によって変わります。(ソースコードは下記参照)

f:id:Umagame:20210131184844p:plain

インポートして、

f:id:Umagame:20210131184847p:plain

コンストラクタを追加。

f:id:Umagame:20210131184859p:plain

superの後に、アイテムティア、ダメージ量、振る速さ、Propertiesです。今回はrarityを使ってレアリティをアンコモンにしてみました。

ツールの数だけ、これを繰り返します。(剣、斧、ツルハシ、シャベル、クワなので5個クラスを作ることになります)

f:id:Umagame:20210131184850p:plain

通常のアイテムと同じように、ItemInit(アイテム登録用クラス)でツールのアイテムを追加します。

f:id:Umagame:20210131184853p:plain

modelsのファイルは、parentのところを「handheld」にしておきましょう。

こうしないと、プレイヤーがこのツールを持ったときに小さく表示されてしまいます。

その他のファイル(テクスチャ、langなど)は通常のアイテムと同様にやってください。

コードはこちら。(DragonSwordItem.java、DragonPickaxeItem.java、DragonAxeItem.java、DragonShovelItem.java、DragonHoeItem.java

package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.Rarity;
import net.minecraft.item.SwordItem;

public class DragonSwordItem extends SwordItem{

	public DragonSwordItem() {
		super(ItemTier.DRAGON, 3, -2.4F, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}

}
package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.PickaxeItem;
import net.minecraft.item.Rarity;

public class DragonPickaxeItem extends PickaxeItem{

	public DragonPickaxeItem() {
		super(ItemTier.DRAGON, 1, -2.8F, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}
}
package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.AxeItem;
import net.minecraft.item.Rarity;

public class DragonAxeItem extends AxeItem{

	public DragonAxeItem() {
		super(ItemTier.DRAGON, 5.0F, -3.0F, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}
}
package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.Rarity;
import net.minecraft.item.ShovelItem;

public class DragonShovelItem extends ShovelItem{

	public DragonShovelItem() {
		super(ItemTier.DRAGON, 1.5F, -3.0F, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}

}
package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.HoeItem;
import net.minecraft.item.Rarity;

public class DragonHoeItem extends HoeItem{

	public DragonHoeItem() {
		super(ItemTier.DRAGON, -4, 0, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}
}

バニラのツールの詳細を確認する

バニラでのツールの詳細(ダメージ量など)を確認する方法を紹介しておきます。

大抵のアイテムの情報はnet.minecraft.item.Itemsを見ればわかります。

f:id:Umagame:20210131192341p:plain

「プロジェクトと外部の依存関係」をクリックして、

f:id:Umagame:20210131192343p:plain

その中の「forge...」の下のやつをクリックして、

f:id:Umagame:20210131192347p:plain

net.minecraft.itemの中のItemsを開きます。

f:id:Umagame:20210131192349p:plain

赤く囲ってあるところがツールの部分です。こちらから値を確認しましょう。

起動して確認

f:id:Umagame:20210131184902p:plain

ちゃんとレアリティ(アンコモン)が適応されています。

f:id:Umagame:20210131184908p:plain

持ったときも、ちゃんと表示されているか確認しておきましょう。

さいごに

今回はここまでです。

次回は特殊なアイテム(持つとポーションエフェクト付与...などなど)の追加を予定しています。

次回:

www.umagame.info

【マインクラフト Modding】1.16での自作Modの作り方 #8 鉱石の追加・ルートテーブル

はじめに

どうも。

個人的な事情により、これからの投稿頻度が低くなります。(週1~2ぐらいになります)

前回:

www.umagame.info

今回追加するアイテム

f:id:Umagame:20210124144256p:plain

化石の鉱石を作ります。

f:id:Umagame:20210124150732p:plain

掘ると「頭の化石」と骨が手に入ります。(こちらはルートテーブルのファイルをいじって設定します)

頭の化石をクラフトすることで、UHCでおなじみの「頭」を作ることができます。

シングルプレイでの頭の入手方法を考えた結果、こうなりました。

ブロック・アイテムの追加

まず鉱石となるブロックと、掘ったときのアイテムを追加しておきます。

作り方は以前の記事を参考にしてください。

ブロック:

www.umagame.info

アイテム:

www.umagame.info

と言いたいところですが、ブロックの方のコードに少し問題があります。

f:id:Umagame:20210124190244p:plain

これは鉱石のブロックのクラスです。Propertiesのところに「setRequiresTool」というメソッドを追加します。

これを追加すると、ブロックを採集する際に適正ツールが必要になります。

これを忘れると、素手で壊してもドロップする、という状態になってしまいます。(もちろん、バニラの木材ブロックのように素手で壊しても良いブロックなら記述する必要はありません)

f:id:Umagame:20210124182211p:plain

f:id:Umagame:20210124182251p:plain

こんな感じです。(ブロックのソースコードは下記)

鉱石の生成の設定

生成クラス

それでは鉱石の生成の設定をしていきます。

f:id:Umagame:20210124182216p:plain

まず、新しくパッケージを作ります。

f:id:Umagame:20210124182219p:plain

名前は「world」にします。

f:id:Umagame:20210124182221p:plain

新しくクラスを作ります。「Generation」(生成)という名前にしました。

f:id:Umagame:20210124182225p:plain

まず、このprivateメソッドをコピペしてください。(コードは下記)

これを呼び出すことで鉱石の生成の設定をゲームに追加することができます。(今回は追加する鉱石が一つなのでprivateメソッドなしでも構いませんが、複数の鉱石を追加する場合はこの方法のほうが効率が良いです)

f:id:Umagame:20210124182228p:plain

新しくpublicのメソッドを作ります。ここでさっき作った「genetateOre」を呼び出します。

f:id:Umagame:20210124182233p:plain

if文を使って「バイオームがNETHER(ネザー)またはTHEEND(エンド)でないとき」に鉱石を生成するように設定します。(要するにオーバーワールド内のみ)

f:id:Umagame:20210124182237p:plain

generateOreを呼び出します。引数を一つずつ説明します。

まず最初のbuilder(BiomeGenerationSettingsBuilder)ですが、これはevent(BiomeLoadingEvent)のgetGenerationで得られるものを指定します。

state(BlockState)は、生成される鉱石ブロックのBlockStateです。(.get().getDefaultState()で得ることができます)

veinSize(int)は鉱脈の大きさです。これは鉄鉱石と同じ9にしました。(石炭は17、金は9、ダイヤとRSは8、ラピスは7になっています)

rangeは鉱石が生成される範囲です。Y=0~Y=range-1の範囲になります。(こちらも鉄鉱石とおなじ64にしました)

画像では見切れていますが最後の引数がamountPerChunkです。これは1チャンクに生成される量です。(こちらも鉄鉱石とおなじ20。石炭は20、金は2、RSは8になっています)

コードはこちら。(Generation.java

package com.umagame.uhcitemsmod.world;

import com.umagame.uhcitemsmod.init.BlockInit;

import net.minecraft.block.BlockState;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.GenerationStage;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.OreFeatureConfig;
import net.minecraftforge.common.world.BiomeGenerationSettingsBuilder;
import net.minecraftforge.event.world.BiomeLoadingEvent;

public class Generation {

	public static void generateOres(final BiomeLoadingEvent event) {
		if(!(event.getCategory().equals(Biome.Category.NETHER) || event.getCategory().equals(Biome.Category.THEEND))) {
			generateOre(event.getGeneration(), BlockInit.FOSSIL_ORE_BLOCK.get().getDefaultState(),
					9, 64, 20);
		}
	}

	private static void generateOre(BiomeGenerationSettingsBuilder builder, BlockState state,int veinSize, int range, int amountPerChunk) {
		builder.withFeature(GenerationStage.Decoration.UNDERGROUND_ORES,
				Feature.ORE.withConfiguration(new OreFeatureConfig(OreFeatureConfig.FillerBlockType.BASE_STONE_OVERWORLD,
						state, veinSize)).range(range).square().func_242731_b(amountPerChunk));
	}

}

addListener

f:id:Umagame:20210124182240p:plain

メインクラス(UHCItemsMod.java)でEventBusのaddListenerを呼び出します。

これでGenerationクラスのgenerateOresメソッドが呼び出されるようになります。

起動して確認

f:id:Umagame:20210124182244p:plain

新しくワールドを作成して、スペクテイターモードで探してみます。

見えにくいですが、スクショ内には2つ化石の鉱石があります。

ルートテーブル

次にルートテーブルを設定します。

今回は頭の化石1個と、骨0~2個がドロップするようにします。

今回はjsonファイルを生成することができるサイト(misode.github.io)を利用します。

f:id:Umagame:20210124185105p:plain

まず、「Type」のところをminecraft:blockにします。

f:id:Umagame:20210124185110p:plain

そして「Pools」の+をクリックします。

f:id:Umagame:20210124185115p:plain

「Name」のところを骨(minecraft:bone)に設定します。

f:id:Umagame:20210124185119p:plain

「Rolls」を「Range」に設定します。これは0~2個のように、設定された範囲の中で数がランダムで決まる設定です。

f:id:Umagame:20210124185122p:plain

最小と最大の値を設定します。

f:id:Umagame:20210124185127p:plain

最後に右上のCopyをクリックしてクリップボードにコピーします。

f:id:Umagame:20210124182324p:plain

新しくルートテーブルのjsonファイルを作成します。

f:id:Umagame:20210124182327p:plain

貼り付けます。

f:id:Umagame:20210124182331p:plain

minecraft:stoneとなっていた部分を頭の化石(uhcitems:fossilized_head)に変えておきます。

ルートテーブルの設定はこれで完了です。

コードはこちら。(fossil_ore.json

{
  "type": "minecraft:block",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "uhcitems:fossilized_head"
        }
      ]
    },
    {
      "rolls": {
        "min": 0,
        "max": 2
      },
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:bone"
        }
      ]
    }
  ]
}

起動して確認 その2

f:id:Umagame:20210124182335p:plain

このように頭が1個と、ランダムで骨が出てきたらOKです。

経験値の設定

鉱石を壊したときに、経験値を得られるようにします。

f:id:Umagame:20210124190020p:plain

経験値の設定は簡単で、継承クラスをBlockからOreBlockに変更して「getExperience」メソッドをオーバーライドするだけです。

経験値の量は2~3にしました。(石炭が0~2、ダイヤとエメラルドが3~7、ラピスとネザークォーツが2~5です)

f:id:Umagame:20210124182348p:plain

起動して確認します。

コードはこちら。(FossilOreBlock.java

package com.umagame.uhcitemsmod.block;

import java.util.Random;

import net.minecraft.block.OreBlock;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.common.ToolType;

public class FossilOreBlock extends OreBlock{

	public FossilOreBlock() {
		super(Properties.create(Material.ROCK)
				.hardnessAndResistance(3,3)
				.harvestTool(ToolType.PICKAXE)
				.harvestLevel(1)
				.setRequiresTool()
				.sound(SoundType.STONE));
	}

	@Override
	public int getExperience(Random rand) {
		return MathHelper.nextInt(rand, 2, 3);
	}
}

さいごに

今回はここまでです。

最初にも言ったように、投稿頻度が少なくなるので次回はしばらくお待ち下さい。

次回はツールを予定しています。

次回:

www.umagame.info

【マインクラフト Modding】1.16での自作Modの作り方 #7 食料アイテムの追加

はじめに

どうも。

1.16Moddingパート7です。今回は食料編です。

前回:

www.umagame.info

今回追加するアイテム

f:id:Umagame:20210120205654p:plain

今回は、Hypixel UHCのエクストラレシピ(Extra Utilities)の一つである「Cornucopia」を作っていきます。

Cornucopiaは金リンゴとは違って一瞬で食べることができ(右クリックするだけで食べれる)、衝撃吸収Ⅰが10分間、再生能力Ⅱが10秒間付与されます。

ちなみに「Cornucopia」(コーヌコピア、コルヌコピア)とは、「古代ギリシア・ローマ世界において、食べ物と豊かさの象徴として用いられた角のイメージ」らしいです。(Wikipediaより)

食料の追加

食料はItem.Propertiesの設定をいじるだけで作れます。

なのでほとんどアイテムと手順が同じです。

アイテムのクラス

f:id:Umagame:20210120205717p:plain

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

f:id:Umagame:20210120205720p:plain

名前は「CornucopiaItem」にします。

f:id:Umagame:20210120205723p:plain

Itemクラスを継承して、コンストラクタを追加します。

今、Propertiesのメソッドはクリエイティブタブのもの(group)しか記述していませんが、

f:id:Umagame:20210120205727p:plain

ここにfoodというメソッドを重ねることで、このアイテムを食料アイテムと認識させることができます。

f:id:Umagame:20210120205731p:plain

引数はFoodクラスにあるビルダー(Food.Builder)を使います。

これにメソッドを重ねていく(メソッドチェーン)ことでこの食料の回復量や、付与されるエフェクトなどを設定することができます。

f:id:Umagame:20210120205752p:plain

今回はこんな感じです。一つずつ説明します。

まずhungerは空腹バーの回復量です。UHCでのCornucopiaの回復量がわからなかったので、金リンゴと同じ4にしました。

次にsaturationですが、これは隠し満腹度の回復量です。これも金リンゴと同じ(1.2)にしました。

setAlwaysEdibleはクリエイティブモードで食べれるかどうかです。このメソッドを記述するとクリエイティブでも食べれるようになります。

fastToEatを記述すると、昆布のように通常の食べ物より食べる速度が速くなります。右クリックだけで食べれる仕様にすると間違えて食べてしまいそうなので、こっちにしました。

effectで食べたときに付与されるエフェクトを設定することができます。

今回は2種類のエフェクトが付与されるので、effectも2回呼び出しています。

Effects.○○のところがエフェクトの効果で、その次の数字が効果が続く時間(20で1秒です)で、その次がエフェクトのレベル(0のときⅠ)で、その次が食べたときにエフェクトが付与される確率です。(今回は100%付与されるので1に設定しました)

ちなみに、Propertiesのrarityメソッドでアイテムのレアリティを設定できます。

今回はRARE(レア)にしました。レアに設定すると文字が青くなります。

コードはこちら。(CornucopiaItem.java

package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

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

public class CornucopiaItem extends Item{

	public CornucopiaItem() {
		super(new Properties().rarity(Rarity.RARE).group(ItemGroupInit.UHCITEMS_MOD)
				.food(new Food.Builder().hunger(4).saturation(1.2F).setAlwaysEdible().fastToEat()
						.effect(() -> new EffectInstance(Effects.ABSORPTION,12000,0),1)
						.effect(() -> new EffectInstance(Effects.REGENERATION,200,1),1).build()));
	}
}

f:id:Umagame:20210120205735p:plain

設定が完了したら、ItemInitクラスでアイテムを登録します。

テクスチャ等の反映の作業は割愛します。

起動して確認

f:id:Umagame:20210120205739p:plain

ちゃんとレアリティがついています。

f:id:Umagame:20210120210404p:plain

食べるとエフェクトもちゃんと付きます。

さいごに

今回は短いですがここまでです。

今の所ツール編、鉱石の生成編、特殊な効果のあるアイテム編を予定しています。

バイオームやディメンションの追加は多分やりません。作りたい方は1.15の記事を参考にしてみてください。(要望があれば1.16でもやるかもしれません)

次回:

www.umagame.info

【マインクラフト Modding】1.16での自作Modの作り方 #6 ブロックの追加

はじめに

どうも。

今回はブロックを追加します。

前回:

www.umagame.info

今回追加するブロック

f:id:Umagame:20210117154525p:plain

今回は前々回作った「熱された石炭」のブロックを作ります。

こちらも一応クラフト用です。

レシピの追加

本題に入る前に、ちょっとだけレシピを増やしました。

f:id:Umagame:20210117153706p:plain

1つ目は「Delicious Meal」です。

牛、豚、鶏、羊、うさぎの肉に対応しています。

f:id:Umagame:20210117153711p:plain

2つ目は「Gold Pack」です。

2つとも石炭と木炭に対応させています。

ブロックの追加

ブロックのクラス

それでは作っていきます。

まずはブロックのクラスを作成します。

f:id:Umagame:20210117153728p:plain

新しくパッケージを作成します。

f:id:Umagame:20210117153731p:plain

ブロックのクラス用のパッケージです。名前は「block」。

f:id:Umagame:20210117153737p:plain

その中に新しくクラスを作成します。

f:id:Umagame:20210117153741p:plain

アイテムのときと同じように、Blockクラス(net.minecraft.block.Block)を継承して作ります。

f:id:Umagame:20210117153745p:plain

豆電球をクリックして、「net.minecraft.block」のBlockをimport。

f:id:Umagame:20210117153748p:plain

もう一回豆電球をクリックして、コンストラクタを追加します。

f:id:Umagame:20210117153753p:plain

自動生成されたコンストラクタをこのように書き換えます。

「Properties.create」の後に、ブロックの材質(マテリアル)を入力します。

今回は石と同じ「ROCK」にしました。

f:id:Umagame:20210117153758p:plain

基本的なブロックの設定は、このようにPropertiesの後にメソッドを重ねて行います。(これ、メソッドチェーンっていうらしいです)

「hardnessAndResistance」で、ブロックの硬さと爆発耐性を設定できます。

硬さの値が大きいと、素手やツールでブロックを壊すときにかかる時間が長くなります。今回はバニラの石炭ブロックと同じ5に設定しました。

爆発耐性はTNTなどの爆発にブロックがどれくらい耐えることができるかです。同じように、バニラの石炭ブロックと同じ6にしました。

バニラのブロックの硬さ、爆発耐性についてはMinecraft Wikiを参照してください:
採掘 - Minecraft Wiki
爆発 - Minecraft Wiki

そして「harvestTool」で、このブロックを収集するのに適切なツールを設定します。(今回はツルハシ)

「harvestLevel」はこのブロックを収集するのに必要なツールのレベル(素材)です。

0が木、1が石、2が鉄、3がダイヤ、4がネザライトです。(バニラのブロックでいうと、石炭が0、鉄鉱石が1、金鉱石が2、黒曜石が3です)

「sound」でブロックを置いたり、壊したりしたときの音を設定できます。(今回は石と同じSTONE)

これでブロックのクラスはOKです。(他にも設定項目はありますが、今回はこの4つで十分です)

コードはこちら。(HeatedCoalBlock.java

package com.umagame.uhcitemsmod.block;

import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraftforge.common.ToolType;

public class HeatedCoalBlock extends Block{

	public HeatedCoalBlock() {
		super(Properties.create(Material.ROCK)
				.hardnessAndResistance(5,6)
				.harvestTool(ToolType.PICKAXE)
				.harvestLevel(0)
				.sound(SoundType.STONE));
	}
}

ブロックの登録用クラス

次にブロックを登録するためのクラスを作ります。

f:id:Umagame:20210117153717p:plain

アイテムのときと同じように、「init」パッケージに作ります。

f:id:Umagame:20210117153720p:plain

名前は「BlockInit」です。

f:id:Umagame:20210119222816p:plain

アイテムのときと同じように、「DeferredRegister」のフィールド「BLOCKS」を作って、それにブロックを登録していきます。

f:id:Umagame:20210117153802p:plain

「register」の後の「"heated_coal_block"」がブロックのIDとなります。

f:id:Umagame:20210117153806p:plain

アイテムのときと同じように、メインクラス(UHCItemsMod.java)でEventBusを登録します。

ブロックはこれでゲームに追加されました...が、このままでは/setblockコマンドでしかブロックを出現させることができません。

理由は「ブロックのアイテム」を追加していないからです。(要するにインベントリ内のアイテムとしてのブロック)

f:id:Umagame:20210117153810p:plain

なので、ItemInitクラスでブロックのアイテムを追加します。

このときにgroupメソッドを呼び出してクリエイティブタブを設定するのを忘れないように。

コードはこちら。(BlockInit.java、UHCItemsMod.java、ItemInit.java

package com.umagame.uhcitemsmod.init;

import com.umagame.uhcitemsmod.UHCItemsMod;
import com.umagame.uhcitemsmod.block.HeatedCoalBlock;

import net.minecraft.block.Block;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class BlockInit {
	public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS,UHCItemsMod.MOD_ID);

	public static final RegistryObject<Block> HEATED_COAL_BLOCK = BLOCKS.register("heated_coal_block", () -> new HeatedCoalBlock());
}
package com.umagame.uhcitemsmod;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.umagame.uhcitemsmod.init.BlockInit;
import com.umagame.uhcitemsmod.init.ItemInit;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

@Mod(UHCItemsMod.MOD_ID)
public class UHCItemsMod
{
    // Directly reference a log4j logger.
    public static final Logger LOGGER = LogManager.getLogger();

    public static final String MOD_ID = "uhcitems";

    public UHCItemsMod() {
        // Register the setup method for modloading
        IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
        bus.addListener(this::setup);

        ItemInit.ITEMS.register(bus);
        BlockInit.BLOCKS.register(bus);

        // Register ourselves for server and other game events we are interested in
        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event)
    {
        // some preinit code
    }
}
package com.umagame.uhcitemsmod.init;

import com.umagame.uhcitemsmod.UHCItemsMod;
import com.umagame.uhcitemsmod.item.HeatedCharcoalItem;
import com.umagame.uhcitemsmod.item.HeatedCoalItem;

import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.Item.Properties;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class ItemInit {
	public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS,UHCItemsMod.MOD_ID);

	public static final RegistryObject<Item> HEATED_COAL = ITEMS.register("heated_coal", () -> new HeatedCoalItem());

	public static final RegistryObject<Item> HEATED_CHARCOAL = ITEMS.register("heated_charcoal", () -> new HeatedCharcoalItem());

	public static final RegistryObject<Item> HEATED_COAL_BLOCK = ITEMS.register("heated_coal_block",
			() -> new BlockItem(BlockInit.HEATED_COAL_BLOCK.get(),new Properties().group(ItemGroupInit.UHCITEMS_MOD)));
}

起動して確認

起動して確認してみます。

f:id:Umagame:20210117153814p:plain

ちゃんと追加されました。

f:id:Umagame:20210117153819p:plain

テクスチャなどの設定

テクスチャの追加、ローカライズ(langファイル)をしていきます。

f:id:Umagame:20210117153826p:plain

まず、「assets」に新しくパッケージを作ります。

f:id:Umagame:20210117153829p:plain

名前は「blockstates」です。ここにブロックのモデルを設定するjsonファイルを入れます。

f:id:Umagame:20210117153833p:plain

新しくファイルを作成します。

f:id:Umagame:20210117153836p:plain

名前は「ブロックのID.json」にしてください。

f:id:Umagame:20210119224508p:plain

このように記述します。

f:id:Umagame:20210117153841p:plain

もう一つパッケージを作ります。

f:id:Umagame:20210117153845p:plain

「models」に、「block」というパッケージを作成します。こちらにもブロックのモデルのjsonファイルを入れます。

f:id:Umagame:20210117153849p:plain

同じように、名前は「ブロックのID.json」です。

f:id:Umagame:20210117153852p:plain

このように記述します。

f:id:Umagame:20210117153855p:plain

インベントリ内のアイテムとしてのモデルも必要なので、「models.item」にもjsonファイルを作成します。

f:id:Umagame:20210117153859p:plain

コードはこんな感じ。

f:id:Umagame:20210117153904p:plain

最後にテクスチャの画像ファイルを設定します。「src\main\resources\assets\ModID\textures」に「blocks」というファイルを作ります。

f:id:Umagame:20210117153908p:plain

そこに画像ファイルを置きます。

f:id:Umagame:20210117153911p:plain

Eclipseの方でリフレッシュするのを忘れないように。

起動して確認 その2

起動して確認してみます。

f:id:Umagame:20210117153914p:plain

このように、置いたブロックと手に持っているブロックの両方が正しく描画されていたらOKです。

テクスチャがうまく反映されない場合は、「blockstates」、「models.block」、「models.item」のjsonファイル3つともコードが間違っていないか確認しましょう。

コードはこちら。(blockstatesのheated_coal_block.json、models.blockのheated_coal_block.json、models.itemのheated_coal_block.json

{
	"variants": {
		"": { "model": "uhcitems:block/heated_coal_block" }
	}
}
{
	"parent": "block/cube_all",
	"textures": {
		"all": "uhcitems:blocks/heated_coal_block"
	}
}
{
	"parent": "uhcitems:block/heated_coal_block"
}

ルートテーブル

これでブロックの追加は完了...ですが、このブロックをサバイバルで壊しても何もドロップしません。

これは、ルートテーブルと呼ばれるものをまだ設定していないからです。

f:id:Umagame:20210117153922p:plain

まずパッケージを「data.ModID」に作ります。

f:id:Umagame:20210117153925p:plain

名前は「loot_tables.blocks」にしてください。

f:id:Umagame:20210117153928p:plain

その中にjsonファイルを作ります。名前はブロックのIDと同じにしてください。

f:id:Umagame:20210117153932p:plain

このように記述します。ここをいじると、複数のアイテムをドロップするようにしたり、ドロップ数をランダムにしたりできます。

ルートテーブルの詳しい解説は多分今度やります。

f:id:Umagame:20210117153935p:plain

設定すると、ちゃんとアイテムがドロップすると思います。

コードはこちら。(loot_tables.blocksのheated_coal_block.json

{
	"type": "minecraft:block",
	"pools": [
		{
			"rolls": 1,
			"entries": [
				{
					"type": "minecraft:item",
					"name": "uhcitems:heated_coal_block"
				}
			]
		}
	]
}

おまけ(燃焼時間の設定)

石炭ブロックなので、燃えないとおかしいですよね。

f:id:Umagame:20210119231252p:plain

ItemInitクラスで、このように追記して燃焼時間を設定します。

f:id:Umagame:20210119231131p:plain

これで燃えるようになりました。

さいごに

今回はここまでです。

リクエスト等はTwitterで受け付けています。できる範囲でお答えします。

次回:
www.umagame.info

【マインクラフト Modding】1.16での自作Modの作り方 #5 レシピ・クリエイティブタブの追加

はじめに

どうも。

今回はレシピとクリエイティブのタブを作ります。

前回:

www.umagame.info

今回追加するレシピ

今回は、前回作った「熱された石炭」のレシピと、それを使って鉄を作るレシピを追加します。

「熱された石炭」のレシピは単純で、ただ石炭をかまどで熱するだけです。

f:id:Umagame:20210117104823p:plain
Hypixelサーバーより

そして「鉄を作るレシピ」ですが、これはHypixel UHCのものをちょっと変更して再現します。

もともとのレシピは石炭と鉄鉱石ですが、今回は石炭の部分を熱された石炭に置き換えます。

レシピの追加

製錬レシピ

まず、熱された石炭のレシピから追加していきます。

f:id:Umagame:20210117103748p:plain

「src/main/resources」に新しくパッケージを作成します。

f:id:Umagame:20210117103751p:plain

名前は「data.ModID.recipes」にしてください。

f:id:Umagame:20210117103754p:plain

作ったパッケージに新しくファイルを作成します。

f:id:Umagame:20210117103758p:plain

今回はアイテム(熱された石炭)のIDと同じ名前にしていますが、別に同じでなくてもOKです。

f:id:Umagame:20210117103801p:plain

このように入力します。

「"type"」の要素がレシピの種類です。今回はかまどのレシピなので「"smelting"」(製錬)にしています。

そして「"item"」の要素が材料(かまどの上のスロットに入れるアイテム)で、「"result"」の要素が完成したアイテム(熱された石炭)です。

「"experience"」は製錬時に入手できる経験値の量です。今回はバニラの木炭のレシピと同じ量にしました。(ちなみに鉄インゴットは0.7、ステーキは0.35です)

「"cookingtime"」は製錬にかかる時間です。(バニラではすべてのアイテムが200に設定されています。多分)

コードはこちら。(heated_coal.json

{
	"type": "minecraft:smelting",
		"ingredient": {
	"item": "minecraft:coal"
},
	"result": "uhcitems:heated_coal",
		"experience": 0.15,
	"cookingtime": 200
}

作業台レシピ(shaped)

次に作業台のレシピを追加していきます。

f:id:Umagame:20210117103804p:plain

recipesに新しくjsonファイルを作ります。

UHCではこのレシピが「Iron Pack」という名前なので、「iron_pack」にしました。

f:id:Umagame:20210117103817p:plain

コードを書きます。

今回は形が決まっているレシピなので、「"type"」は「"crafting_shaped"」です。

(火打ち石と打ち金などの形が決まっていないレシピの「"type"」は、「"crafting_shapeless"」になっています)

「"pattern"」の要素にどのようにアイテムを並べるかを入力して、「"key"」でそのアイテムを指定します。

「"pattern"」に使っている「A」とか「B」は、他の文字でも代用できます。

「"count"」がクラフト後のアイテム(鉄インゴット)の量です。

コードはこちら。(iron_pack.json

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "AAA",
    "ABA",
    "AAA"
  ],
  "key": {
    "A": {
      "item": "minecraft:iron_ore"
    },
    "B": {
      "item": "uhcitems:heated_coal"
    }
  },
	"result": {
		"item": "minecraft:iron_ingot",
		"count": 10
	}
}

起動して確認

レシピはこれでOKです。起動して確認してみます。

f:id:Umagame:20210117103811p:plain

f:id:Umagame:20210117103822p:plain

一つでもミスがあると反映されないので、スペルミスには注意。

クリエイティブタブの追加

次に、このModのクリエイティブタブを作ります。

タブのクラス

f:id:Umagame:20210117103828p:plain

「init」パッケージに新しくクラスを作成します。

f:id:Umagame:20210117103831p:plain

名前は「ItemGroupInit」にします。(「ItemGroup」はシステム内でのクリエイティブタブの呼び名です)

f:id:Umagame:20210117103834p:plain

このようにItemGroupのfinalフィールドを作ります。

「new ItemGroup」の後の「"uhcitems"」は、クリエイティブタブのIDです。

f:id:Umagame:20210117103837p:plain

エラーが出るので、豆電球をクリックして「createIcon()」をオーバーライドします。

f:id:Umagame:20210117103840p:plain

自動生成された「createIcon()」の戻り値に、アイコンとなるアイテムを設定します。(戻り値の型は「Item」ではなく「ItemStack」です。)

今回は金のリンゴにしました。

これでタブの追加は完了です。

コードはこちら。(ItemGroupInit.java

package com.umagame.uhcitemsmod.init;

import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;

public class ItemGroupInit {

	public static final ItemGroup UHCITEMS_MOD = (new ItemGroup("uhcitems") {
		@Override
		public ItemStack createIcon() {
			return new ItemStack(Items.GOLDEN_APPLE);
		}
	});
}

アイテムに反映

作ったタブにアイテムを追加します。

f:id:Umagame:20210117103843p:plain

アイテムのクラス(HeatedCoalItem.java)の「new Properties()」の後に「.group(タブ)」と入力します。

これでアイテムにタブを設定できました。(「熱された木炭」でも同じ手順を行いました)

コードはこちら。(HeatedCoalItem.java

package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;

public class HeatedCoalItem extends Item{

	public HeatedCoalItem() {
		super(new Properties().group(ItemGroupInit.UHCITEMS_MOD));
	}

	@Override
	public int getBurnTime(ItemStack itemstack) {
		return 1800;
	}
}

起動して確認 その2

起動して確認してみます。

f:id:Umagame:20210117103845p:plain

ちゃんと追加されていますが、まだローカライズされていません。

langファイル

クリエイティブタブの名前を設定します。

f:id:Umagame:20210117103851p:plain
f:id:Umagame:20210117103853p:plain

langファイルに、「"itemGroup.タブのID": "タブの名前"」と追記します。

コンマ(「,」)を忘れないように。

f:id:Umagame:20210117103857p:plain

ちゃんと反映されました。

コードはこちら。(en_us.json、ja_jp.json

{
	"itemGroup.uhcitems": "UHC Items Mod",

	"item.uhcitems.heated_coal": "Heated Coal",
	"item.uhcitems.heated_charcoal": "Heated Charcoal"
}
{
	"itemGroup.uhcitems": "UHC Items Mod",

	"item.uhcitems.heated_coal": "熱された石炭",
	"item.uhcitems.heated_charcoal": "熱された木炭"
}

さいごに

今回はここまでです。

次回はブロック編です。

次回:

www.umagame.info

【マインクラフト Modding】1.16での自作Modの作り方 #4 アイテムの追加

はじめに

どうも。

来週スナップショットが配信されるらしいです。楽しみです。

前回:

www.umagame.info

今回追加するアイテム

これからは、そのパートで何を追加するかを最初に紹介するようにしたいと思います。(Modの作り方だけ見たい方はとばして構いません)

前回言った通り、このシリーズではHypixelのUHCのアイテムを再現していきます。

ですがUHCには、このパートで扱うのに適しているような「特に特殊効果などがない単純なアイテム」というのがありません。

f:id:Umagame:20210115222832p:plain
テクスチャ

なので新しく考えました。その名も「熱された石炭」です。(「熱された木炭」も作ります。)

その名の通り、かまどで熱された石炭です。クラフト用アイテムで、かまどに入れるとアイテム9個分燃やすことができます。

UHCをやったことがある方なら、このアイテムは何のレシピためのものか分かるかと思います。(レシピの追加は次回やります。多分)

アイテムの追加

ModID

f:id:Umagame:20210116213727p:plain

この先ModIDを使う場面が多々あるので、ModIDをfinalフィールド「MOD_ID」としてメインクラスに置いておきます。

f:id:Umagame:20210116213732p:plain

その上の「@Mod」の部分を、「MOD_ID」に書き換えます。

コードはこちら。(UHCItemsMod.java

package com.umagame.uhcitemsmod;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

@Mod(UHCItemsMod.MOD_ID)
public class UHCItemsMod
{
    // Directly reference a log4j logger.
    public static final Logger LOGGER = LogManager.getLogger();

    public static final String MOD_ID = "uhcitems";

    public UHCItemsMod() {
        // Register the setup method for modloading
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);

        // Register ourselves for server and other game events we are interested in
        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event)
    {
        // some preinit code
    }
}

アイテムのクラス

それでは作っていきます。

f:id:Umagame:20210116213736p:plain

まず、アイテムのクラスを置くためのパッケージを作ります。

f:id:Umagame:20210116213740p:plain

名前は「item」にします。別に「items」でも良いですが、マインクラフト側は「item」なので一応合わせます。

f:id:Umagame:20210116213744p:plain

作った「item」パッケージに、新しくクラスを作ります。

f:id:Umagame:20210116213748p:plain

名前は「HeatedCoalItem」にします。画像では「HeatedCoal」になってますが気にしないでください。後で変えます。

f:id:Umagame:20210116213751p:plain

クラス名の後に「extends Item」と入力します。

アイテムのクラスを作るときはほとんど、Itemクラスないしはその子クラスを継承して作ります。

f:id:Umagame:20210116213755p:plain

まだimportをしていないのでエラーが出ます。

左端の豆電球のアイコンをクリックして、「net.minecraft.item」の「Item」をインポートします。

これからたびたび「Item」という名前のクラスを使いますが、それらはほとんど「net.minecraft.item」の「Item」です。

f:id:Umagame:20210116213800p:plain

インポートすると別のエラーが出ます。

さっきと同じように豆電球をクリックして、「コンストラクター...」と書いてあるやつをクリックします。

f:id:Umagame:20210116213804p:plain

これで自動的にコンストラクタが追加されます。

f:id:Umagame:20210116213807p:plain

このコンストラクタをこのように書き換えます。

これでアイテムのクラスはOKです。

コードはこちら。(HeatedCoalItem.java

package com.umagame.uhcitemsmod.item;

import net.minecraft.item.Item;

public class HeatedCoalItem extends Item{

	public HeatedCoalItem() {
		super(new Properties());
	}
}

アイテム登録用クラス

次にアイテムの登録用クラスを作っていきます。

f:id:Umagame:20210116213810p:plain

新しく「init」というパッケージを作ります。

initとはinitialization(初期化)の略です。結構使います。

f:id:Umagame:20210116213814p:plain

アイテム登録用クラスを作ります。名前は「ItemInit」にします。

f:id:Umagame:20210116213818p:plain

コードを書いていきます。今回は前シリーズとは違った登録方法です。

この「ITEMS」の「register」というメソッドを呼び出すことで、アイテムを登録することができます。

f:id:Umagame:20210116213822p:plain

コードを書きます。

「ITEMS.register」の後の「"heated_coal"」がアイテムのIDとなります。

アイテムIDはテクスチャの反映のときに使うので、スペルミスしないようにしましょう。

またこの「HEATED_COAL」は、作ったアイテムを他のクラスから指定するときに使います。

これでアイテム登録用クラスはOKです。

コードはこちら。(ItemInit.java

package com.umagame.uhcitemsmod.init;

import com.umagame.uhcitemsmod.UHCItemsMod;
import com.umagame.uhcitemsmod.item.HeatedCoalItem;

import net.minecraft.item.Item;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class ItemInit {
	public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS,UHCItemsMod.MOD_ID);

	public static final RegistryObject<Item> HEATED_COAL = ITEMS.register("heated_coal", () -> new HeatedCoalItem());
}

もちろん、ソースコード内のアイテム名は皆さんが追加するものに合わせてください。

EventBus

アイテム登録用クラスはできましたが、このままではまだアイテムが追加されません。

EventBusというものを「ITEMS」に登録する必要があります。

f:id:Umagame:20210116213829p:plain

メインクラス(UHCItemsMod.java)のコンストラクタの中身を書き換えます。

EventBusが何なのかは知らなくても大丈夫です。私も知らないので。

とりあえずこのようにすればアイテムの登録ができる、とだけ知っておいてください。

コードはこちら。(UHCItemsMod.java

package com.umagame.uhcitemsmod;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.umagame.uhcitemsmod.init.ItemInit;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

@Mod(UHCItemsMod.MOD_ID)
public class UHCItemsMod
{
    // Directly reference a log4j logger.
    public static final Logger LOGGER = LogManager.getLogger();

    public static final String MOD_ID = "uhcitems";

    public UHCItemsMod() {
        // Register the setup method for modloading
        IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
        bus.addListener(this::setup);

        ItemInit.ITEMS.register(bus);

        // Register ourselves for server and other game events we are interested in
        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event)
    {
        // some preinit code
    }
}

起動して確認

テクスチャなどがまだ設定できてませんが、起動してアイテムが追加できているか確認してみます。

f:id:Umagame:20210116213836p:plain

/giveコマンドで出します。

f:id:Umagame:20210116213845p:plain

ちゃんと追加されてました。

言語・モデル・テクスチャの設定

アイテムの追加はできたので、次はテクスチャなどを設定していきます。

f:id:Umagame:20210116213852p:plain

「src/main/resources」に、新しくパッケージを作ります。

f:id:Umagame:20210116213855p:plain

名前は「lang」です。ここに言語ファイル(ゲーム内でのアイテムの名前を設定するファイル)を置きます。

f:id:Umagame:20210116213900p:plain

「lang」の他に、「models」、「textures」も作ります。

f:id:Umagame:20210116213906p:plain

まず言語ファイルを作っていきます。

「lang」の中に新しくファイルを作ります。

f:id:Umagame:20210116213910p:plain

まずは英語から。「en_us.json」を作成して、

f:id:Umagame:20210116213913p:plain

このように入力します。

f:id:Umagame:20210116213917p:plain

日本語のファイル(ja_jp.json)も作って、同じように入力します。

f:id:Umagame:20210116213919p:plain

次にモデルを設定します。「models」の中に新しく「item」というパッケージを作成します。

f:id:Umagame:20210116213922p:plain

「アイテムのID.json」という名前でファイルを作成します。

f:id:Umagame:20210116213925p:plain

このように入力します。ModID(「uhcitems」)とアイテムのID(「heated_coal」)の部分はスペルミスしないようにしましょう。

f:id:Umagame:20210116213928p:plain

Forgeのフォルダ\src\main\resources\assets\ModID\texturesに「items」というフォルダを作ります。

f:id:Umagame:20210116213931p:plain

その中にテクスチャとなる画像のファイルを置きます。名前は「アイテムのID.png」にしてください。

f:id:Umagame:20210116225323p:plain

最後に、「src/main/resources」を右クリックして「リフレッシュ」をクリックします。

これをすることでテクスチャのファイルがEclipse内でロードされます。(これをしないと、テストプレイしたときにちゃんと反映されません)

これで言語・モデル・テクスチャの設定はOKです。

コードはこちら。(en_us.json、ja_jp.json、heated_coal.json

{
	"item.uhcitems.heated_coal": "Heated Coal"
}
{
	"item.uhcitems.heated_coal": "熱された石炭"
}
{
	"parent": "item/generated",
	"textures": {
		"layer0": "uhcitems:items/heated_coal"
	}
}

起動して確認 その2

起動して確認してみます。

f:id:Umagame:20210116213934p:plain

ちゃんとテクスチャ、名前が反映されていたら成功です。

f:id:Umagame:20210116213940p:plain

ちゃんと日本語も反映されています。

おまけ(燃焼時間の設定)

アイテム自体はこれで完成ですが、今回作った「熱された石炭」はかまどの燃料として使えるものなので、燃焼時間を設定する必要があります。

f:id:Umagame:20210116213946p:plain

アイテムのクラス(HeatedCoalItem.java)で「getBurnTime」というメソッドをオーバーライドします。

returnの値が燃焼時間になります。200で10秒(アイテム一個精錬するのに必要な時間)です。

f:id:Umagame:20210116213951p:plain

ちゃんとかまどで燃料として使えるか確認します。

f:id:Umagame:20210116225520p:plain

あと、「熱された木炭」も追加しました。テクスチャと名前以外すべて石炭と同じです。

さいごに

今回はここまでです。

もし記事におかしな点などありましたらご報告お願いします。

次回はレシピ・クリエイティブタブの追加を予定してます。

ではでは~

次回:
www.umagame.info

【マインクラフト Modding】1.16での自作Modの作り方 #3 Modの設定

はじめに

どうも。パート3です。

今回はModの設定をしていきます。追加要素などはまた次のパートになります。

前回:
www.umagame.info

Modの構想

本題に入る前に、このシリーズで作っていくModについて少し触れておきます。

今回は、大手マインクラフトサーバー「Hypixel」のゲームの一つ「UHC(Ultra Hardcore)」に登場するアイテムをModで再現しようと思います。

UHCについての説明は省きます。気になる方のために日本語Wikiのページを貼っておきます。

w.atwiki.jp

ただUHCはレシピとアイテムが追加されているだけなので、ブロックやバイオームの解説の際にはUHCとあまり関係がないものを追加することになりそうです。

(その点でいうと、以前のシリーズ(1.15)で作った土Modはかなりやりやすかった)

名前はとりあえず「UHC Items Mod」とします。

Modの設定

リネーム

Modのメインクラスは、Forgeにもとから入っていた「ExampleMod.java」を元に作ります。

なのでまず、ExampleModからUHCItemsModに名前を変更していきましょう。

f:id:Umagame:20210114213058p:plain

パッケージの名前を変更します。「com.example.examplemod」を右クリックして、「リファクタリング」→「名前変更」をクリック。

f:id:Umagame:20210114213313p:plain

今回は「com.umagame.uhcitemsmod」にします。私はcomが何を意味しているのかわかりません。commonですかね?

f:id:Umagame:20210114213610p:plain

「ExampleMod.java」も同じようにリネームします。

f:id:Umagame:20210114213806p:plain

こんな感じ。

メインクラス

メインクラス(UHCItemsMod.java)のコードをいじっていきます。

f:id:Umagame:20210114214351p:plain

まず、画像で選択している部分はいらないのですべて消します。(メソッド「doClientStuff」、「enqueueIMC」、「processIMC」、「onServerStarting」、クラス「RegistryEvents」)

f:id:Umagame:20210114214707p:plain

消すとコンストラクタの中でエラーが起こるので(赤の波線が出ます)、エラーが起こっている部分もすべて消します。

f:id:Umagame:20210114215209p:plain

メソッド「setup」の中身も消します。「setup」は、マインクラフト起動時に呼び出されます。

f:id:Umagame:20210114215426p:plain

そして、「LOGGER」をpublicにしておきます。(「private」と書いていた部分を「public」に書き換えます)

f:id:Umagame:20210114215626p:plain

「@Mod」のところの「examplemod」を、自分のModのModIDで書き換えます。

ModIDはMod固有のIDで、他のModと被るとエラーが起こってしまいます。また、基本的に小文字で設定します。

ModIDはそのModのアイテムなどをゲーム上で指定するときに使われます。(マインクラフトの石ブロックは「minecraft:stone」となるように、〇〇Modのアイテムは「〇〇ModのModID:アイテムのID」と処理されます)

f:id:Umagame:20210114220328p:plain

使われていないimportがあるので、Ctrl+Shift+Oを押してimportのところをスッキリさせます。

package com.umagame.uhcitemsmod;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

// The value here should match an entry in the META-INF/mods.toml file
@Mod("uhcitems")
public class UHCItemsMod
{
    // Directly reference a log4j logger.
    public static final Logger LOGGER = LogManager.getLogger();

    public UHCItemsMod() {
        // Register the setup method for modloading
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);

        // Register ourselves for server and other game events we are interested in
        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event)
    {
        // some preinit code
    }
}

最終的にこんな感じになりました。これでメインクラスはOKです。

コメントは消しても大丈夫です。(私はあまりModdingに詳しくないので、一応コメントを残しています)

Modの説明欄

f:id:Umagame:20210114221149p:plain

src/main/resourcesの「META-INF」の中にある、「mods.toml」を開きます。

f:id:Umagame:20210114221741p:plain

めちゃくちゃややこしそう...と思うかもしれませんが、ほとんどコメントです。

f:id:Umagame:20210114222222p:plain

コメントと、いらない項目を削除しました。めっちゃ短くなりましたね。

このファイルで最も重要なのは、「modId」の部分です。ここはさっき設定したModIDにしましょう。

他の項目は適当に設定していきます。(今回は省きましたが、pngファイルでアイコンを設定したりすることもできます)

modLoader="javafml"
loaderVersion="[35,)"
license="All rights reserved"

[[mods]]
modId="uhcitems"
version="1.0"
displayName="UHC Items Mod"
displayURL="https://www.umagame.info"
credits="ご購読ありがとうございます"
authors="うまげーむ(Umagame)"
description='''
Hypixel UHCのアイテムを再現したModです。
'''

最終的にこんな感じになりました。

これでmods.tomlファイルはOKです。

起動して確認

実際にマインクラフトを起動して、説明欄が反映されているかチェックしましょう。

f:id:Umagame:20210114223105p:plain

ちゃんと反映されていました。

さいごに

今回はここまでです。

次回、ようやくModに要素を追加していきます。

次回:
www.umagame.info

【マインクラフト Modding】1.16での自作Modの作り方 #2 環境構築

はじめに

どうも。

1.16自作Modパート2です。

今回はMod開発に必要な環境を作っていきます。

前回言うのを忘れてましたが、このシリーズはソースコードの貼り付けの関係でいつもと違う方法で記事を書いています。(見たまま→はてな記法

なので、もしかしたらミスるかもしれません。ご了承ください。

前回:

www.umagame.info

Forgeのセットアップ

まず、前回ダウンロードしたForgeのセットアップをします。

f:id:Umagame:20210113200931p:plain

前回作ったForgeのフォルダに、新しく.batファイルを作成します。名前は何でもいいです。

右クリックから「編集」をクリックして、メモ帳で開きます。

そこに以下のコードを貼り付けてください。

gradlew genEclipseRuns --refresh-dependencies&&gradlew eclipse

(今回はEclipseでやるのでEclipse用のコードです。IntelliJVScode用のものもありますが、今回は割愛)

保存したら実行してください。

f:id:Umagame:20210113200951p:plain

実行しても何も起こらない方は、環境変数JAVA_HOME)の設定にミスがあります。このように、前回インストールしたAdoptOpenJDKのパスを設定してください。

詳しいパス設定の方法は以前のシリーズで解説しています。

www.umagame.info

実行するとセットアップが開始します。しばらく待ちましょう。

終わると自動的にウィンドウが閉じます。エラーがあった場合どうなるかはわかりませんが。

Eclipseの準備

f:id:Umagame:20210113203059p:plain

eclipse.exeを起動します。

f:id:Umagame:20210113203214p:plain

エラーが出ました。どうやらEclipseの起動にはJava11が必要なようです。

前回Java11はいらないと言ったばかりなのに...。情弱です。すみません。

f:id:Umagame:20210113205212p:plain

Java11のJDKをインストールします。

インストールしたら、eclipse.exeと同じ場所にある「eclipse.ini」をメモ帳などで開いて、以下のコードを「-vmargs」の直前に貼り付けます。

-vm
C:\Program Files\AdoptOpenJDK\JDKのバージョン\bin\javaw.exe

f:id:Umagame:20210113210057p:plain

私の場合はこんな感じです。これで、Eclipse起動時に使うJVMを指定できました。

f:id:Umagame:20210113210324p:plain

「起動」をクリックしてEclipseを起動します。

f:id:Umagame:20210113210621p:plain

「ファイル」→「インポート」をクリック。

f:id:Umagame:20210113210808p:plain

「Gradle」の「既存のGradleプロジェクト」を選択して、「次へ」をクリック。

f:id:Umagame:20210113211019p:plain

右上の「参照」をクリックして、

f:id:Umagame:20210113210942p:plain

Forgeのルートディレクトリ(今回は「Mod_1.16」)を選択します。

そのあと「完了」をクリックすると、インポートが始まります。

f:id:Umagame:20210113211815p:plain

インポートが終わったら、試しにマインクラフトを起動してみましょう。「実行」のボタン(緑のアイコン)をクリックして、

f:id:Umagame:20210113211941p:plain

「runClient」を選択して、「実行」をクリックします。

f:id:Umagame:20210113212109p:plain

このように、ちゃんとマインクラフト1.16が起動すればOKです。

f:id:Umagame:20210113212201p:plain

Modを確認してみると、「Example Mod」(Forgeにもともと入っている空っぽのMod)が入っていることがわかります。

さいごに

ちょっと短い気もしますが今回はここまでです。

次回からModに着手します。

次回:
www.umagame.info

【マインクラフト Modding】1.16での自作Modの作り方 #1 必要なものの準備

はじめに

どうも。

やるかどうか結構迷いましたが、やることにします。マインクラフトJava版1.16のMod制作解説。

以前やった、1.15.1でMod制作の解説と同じような形で解説を進めていきます。

1.15の記事はこちらにまとめてあります:

umagame.hatenablog.jp

ちなみに、今回はModの構想もちゃんと考えました。(パート3ぐらいで発表します。多分)

必要なもの

Mod制作に必要なものは以下の5つです。

  • やる気
  • Javaの知識(浅くてもOK)
  • Forge

まずやる気ですが、やる気が無い方はこの記事を見てないと思うので、これはOKですね。

Javaの知識は浅くても全然大丈夫です。高度なModを作る場合は別ですが。

Javaの勉強には「やさしいJava」っていう本がめちゃくちゃおすすめです。興味がある方はチェックしてみてください。

Forge(Minecraft Forge)はマインクラフトのModの基礎となるものです。これなしではMod自体が成り立ちません。

IDE統合開発環境)は、簡単に言うとエディタです。有名なJava IDEVSCodeIntelliJEclipseなどがありますが今回はEclipseを使います。

最後にJavaですが、JREJava Runtime Environment)はマインクラフトを動かすのに必要です。(おそらくもともと入っていると思われます)

JDKJava Development Kit)はJavaの開発に必要です。

Forge 1.16.4

まずForgeをダウンロードします。Forgeの公式サイト(http://files.minecraftforge.net)へ行きます。

f:id:Umagame:20210111205253p:plain

1.16.4の、「Mdk」と書いてあるやつをクリックします。

左右どちらでも良いですが、右のほうが安定していると思うので今回は右にします。(左は最新バージョン、右はおすすめバージョンです)

f:id:Umagame:20210111205640p:plain

クリックすると違うページに飛ばされます。5秒ほど待ってから、右上の「SKIP」をクリックします。

クリックするとダウンロードが開始します。すぐに終わります。

f:id:Umagame:20210111210819p:plain

ダウンロードしたzipファイルの中身を適当なフォルダ(今回はデスクトップに作りました)に移動させます。

これでForgeの準備は完了です。

IDEEclipse

次にEclipseをダウンロードします。すでに持っている方は大丈夫です。

Eclipse日本語版のサイト(https://mergedoc.osdn.jp)に行きます。

f:id:Umagame:20210111211234p:plain

最新版(今回は2020)をクリック。

f:id:Umagame:20210111211430p:plain

自分のPCに合ったものを選びます。このバージョンは32bitに対応していないみたいなので、32bitの方は過去バージョンをダウンロードしましょう。

FullとStandardの違いはあまりありません。ダウンロードが早そうなので今回はStandardにします。

f:id:Umagame:20210111212601p:plain

ダウンロードしたら、適当な場所にフォルダを作ってそこにzipの中身を移動させます。(パスが長すぎるとファイルがうまく解凍されないので、Cドライブ直下が望ましい)

中身を移動させるときには、7zipなどのソフトが便利です。

これでEclipseの準備は完了です。

JDK

JDKのダウンロードをする前に、まずJDKJREのバージョンを確認しておきましょう。

f:id:Umagame:20210111213126p:plain

コマンドプロンプトを開いて、「javac -version」と入力するとJDKのバージョンが、「java -version」と入力するとJREのバージョンが表示されます。

私の場合はどちらも11になってますね。Java11だと確かエラーが出るので、両方とも8にダウングレードします。

追記:Java11はEclipseの起動に必要なためアンインストールしないでください。

Java11のJDKを残したままJava8のJDKをインストールして、パスはJava8のものを設定してください。さっそく情弱が露呈してしまいました。すみません

f:id:Umagame:20210112204524p:plain

私のPCにはJava8のJDKJREとJava11のJDKが入っているので、Java11のJDKをアンインストールすればOKです。

f:id:Umagame:20210112204529p:plain

アンインストールするとこのように、どちらもJava8になりました。

ただ、これだとJDKのインストール手順を解説できないので、Java8のJDKをアンインストールしてもう一回入れ直します。

f:id:Umagame:20210112204943p:plain

このようにJDKがインストールされていない状態だと、javacが正しく認識されません。

前回はOracleの公式サイトからJavaをダウンロードしましたが、アカウントを作らないといけなかったりして色々面倒でした。

なので、今回は「AdoptOpenJDK」というサイトから手に入れます。(https://adoptopenjdk.net

f:id:Umagame:20210112205248p:plain

「OpenJDK 8」と、「HotSpot」にチェックを入れて、下の青いボタンをクリックします。(Macなど、他のプラットフォームの場合は下の「Other platforms」をクリック)

するとダウンロードが始まるので、しばらく待ちます。終わったら、それを開いてください。

f:id:Umagame:20210112210156p:plain

「次へ」を2回ほど押すとこの画面に来るので、ここで「Set JAVA_HOME variable」をクリックして「すべてインストール」に設定してください。

これはインストーラーが自動的にパス設定をしてくれる機能です。めちゃくちゃ便利ですね。

設定できたら、「次へ」を押してインストールを開始します。

インストールが完了したら、一応コマンドプロンプトで確認しておきましょう。今回私がインストールしたのは1.8.0_275なので、同じバージョンが表示されればインストール・パス設定は完了しています。

さいごに

今回はここまでです。

次回は開発環境を整えていきます。Mod開発を始めるのはその次のパートです。今の所。

次回:
www.umagame.info