1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPTにMinecraftのMODを作ってもらう(前編)

Last updated at Posted at 2022-12-08

ChatGPTにMODを作ってもらおうと思います。前編はChatGPTに任せきりにして、後編で手直ししていこうと思います。結論から申し上げますとあまりうまくいきませんでした。

はじめに

ChatGPTを使ってUnityでゲームを作っている記事を読んだので、それならMineraftのMODも作れるではないかと思いました。

Forgeを導入する手順をすっ飛ばしている気がしますが、このように丁寧に教えてくれます。
私はIntelliJの方が慣れているので、IntelliJでのやり方を聞いてみましょう。
このように説明してくれました。

実際に作ってみる

どんなMODを作るか、ChatGPTに訊いてみました。

自分で考えろと言われてしまいました。
試しに、工業MODを作ってみましょう。
このように説明してくれました。
次に、コードを生成してもらいましょう。
ご丁寧に鉄のピッケルの作り方を解説してくれました。
質問を変えてみます。

急にそれっぽいコードを出してくれました。
見切れてしまったので、以下に載せておきます。

IronGenerator.java
public class IronGenerator extends Block {
    public IronGenerator() {
        super(Properties.create(Material.IRON)
            .hardnessAndResistance(5.0f, 6.0f)
            .sound(SoundType.METAL));
        setRegistryName("iron_generator");
    }

    @Override
    public boolean hasTileEntity(BlockState state) {
        return true;
    }

    @Nullable
    @Override
    public TileEntity createTileEntity(BlockState state, IBlockReader world) {
        return new IronGeneratorTileEntity();
    }

    public class IronGeneratorTileEntity extends TileEntity {
        private int fuelAmount = 0;
        private int electricityAmount = 0;
        private int maxFuelAmount = 1000;
        private int maxElectricityAmount = 10000;
    
        @Override
        public void tick() {
            if (!world.isRemote) {
                if (fuelAmount > 0) {
                    fuelAmount--;
                    electricityAmount += 100;
                    if (electricityAmount > maxElectricityAmount) {
                        electricityAmount = maxElectricityAmount;
                    }
                }
            }
        }
    
        public int getFuelAmount() {
            return fuelAmount;
        }
    
        public int getElectricityAmount() {
            return electricityAmount;
        }
    
        public int getMaxFuelAmount() {
            return maxFuelAmount;
        }
    
        public int getMaxElectricityAmount() {
            return maxElectricityAmount;
        }
    
        public boolean isBurning() {
            return fuelAmount > 0;
        }
    
        public boolean isFull() {
            return electricityAmount >= maxElectricityAmount;
        }
    
        public void setFuelAmount(int fuelAmount) {
            this.fuelAmount = fuelAmount;
        }
    
        public void setElectricityAmount(int electricityAmount) {
            this.electricityAmount = electricityAmount;
        }
    }
}

レシピを登録する方法も教えてくれました。

動かない

しかしこのコード、動きません。
Forgeはバージョンによってクラス名やメソッド名がコロコロ変わるので、「こんなクラス無いよ」「@Override書いてるのにオーバーライドしてないよ」などと怒られます。
手元に作ってあった最新の環境(1.18.1)だと例えばTileEntityクラスなんかがありません。たまたま残っていた古い環境(1.10.2)だとBlockStateとかIBlockRenderとかが見つかりません。
赤字になっている箇所がConnot resolve symbolです(1.10.2の場合)。

@Overrideを付けたメソッドが親クラス(Block)に無いと言われています。

オーバーライドについては、@Overrideを付けておくとオーバーライドできなかったとき(指定したメソッドが存在しないとき)にコンパイルエラーが出ます。付けなかった場合はオーバーライドできていてもいなくても通ってしまいます。

前編はこれにて終了です。後編ではこれを動くようにしていこうと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?