我想在Minecraft里开发MOD

我会在Minecraft游戏中进行MOD开发,这将变成一种不断尝试和错误的过程。

总览

添加一个没有特殊功能的方块。

2021年5月12日的活動場所

VersionMac OS Big Sur11.1IntelliJ IDEA2021.1.1AdoptOpenJDK (HotSpot)1.8.0_282Minecraft1.16.5Forge36.1.0

目录

    • プログラムの記述

 

    • Block Stateの記述

 

    • ブロックモデルの記述

 

    • アイテムモデルの記述

 

    • テクスチャの配置

 

    • 翻訳設定

 

    • ルートテーブルの記述

 

    確認

编程代码

package com.tntmodders.examplemod;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.material.MaterialColor;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraftforge.common.ToolType;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
@Mod(ExampleMod.MOD_ID)
public class ExampleMod {
    public static final String MOD_ID = "examplemod";

    public ExampleMod() {
        IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
        Blocks.register(modEventBus);
        Items.register(modEventBus);
    }

    public static class Blocks {
        private static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MOD_ID);
        public static final RegistryObject<Block> EXAMPLE_BLOCK = BLOCKS.register("example_block", () -> new Block(AbstractBlock.Properties
                .of(Material.METAL, MaterialColor.METAL)
                .requiresCorrectToolForDrops()
                .strength(5.0F, 6.0F)
                .sound(SoundType.METAL)
                .harvestTool(ToolType.PICKAXE)
                .harvestLevel(1)
        ));

        public static void register(IEventBus eventBus) {
            BLOCKS.register(eventBus);
        }
    }

    public static class Items {
        private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID);
        public static final RegistryObject<Item> EXAMPLE_BLOCK = ITEMS.register("example_block", () -> new BlockItem(Blocks.EXAMPLE_BLOCK.get(), new Item.Properties()
                .tab(ItemGroup.TAB_BUILDING_BLOCKS)));
        public static final RegistryObject<Item> EXAMPLE_INGOT = ITEMS.register("example_ingot", () -> new Item(new Item.Properties()
                .tab(ItemGroup.TAB_MATERIALS)));

        public static void register(IEventBus eventBus) {
            ITEMS.register(eventBus);
        }
    }
}

在 Chinese 中,BLOCKS.register(“example_block”, …) 用来指定注册一个名为”example_block”的方块。
方块的 ID 将会是 examplemod:example_block。

Block类的实例表示Minecraft方块的类型,它保持着根据方块类型而变化的特性,如硬度和爆破耐性。

使用AbstractBlock.Properties.of(Material.METAL, MaterialColor.METAL)函数,指定了具有基本特性如是否可燃烧的Material,以及地图上显示的颜色MaterialColor。

在 requiresCorrectToolForDrops 中,设置了回收方块所需的正确工具必不可少的条件。

以5.0F和6.0F指定方块的硬度和爆破耐力。
第一个参数是硬度,数值越大代表需要更长的时间来破坏。
第二个参数是爆破耐力,数值越大代表更不容易在爆炸中破坏。

使用SoundType.METAL来指定在放置方块、破坏方块和行走在方块上时产生的声音类型。

harvestTool(ToolType.PICKAXE)でブロックを回収するための適正な道具の種類を指定
斧(AXE)、ツルハシ(PICKAXE)、シャベル(SHOVEL)、クワ(HOE)の中から選ぶ
指定しない場合は、どの道具を使っても早く壊せなくなる

指定需要工具材料水平以收集方块的harvestLevel(1)。
初始值为-1,0表示木头或金子,1表示石头,2表示铁,3表示钻石工具需求。

BlockItem是表示作为道具的方块的类,例如当它在玩家的背包中时。
大多数方块在被破坏时会掉落相应的道具,右键点击相应的道具会将方块放置到世界中。
为了表示这种对应关系,它继承了Item类。

使用tab(ItemGroup.TAB_BUILDING_BLOCKS)来指定创造模式下的建筑方块标签,与普通物品的用法类似。

Block State的描述

{
  "variants": {
    "": {
      "model": "examplemod:block/example_block"
    }
  }
}

在JSON中描述块的状态与模型之间的对应关系。
由于本次不涉及状态处理,因此只需指定一个模型。

区块模型的描述

{
  "parent": "minecraft:block/cube_all",
  "textures": {
    "all": "examplemod:block/example_block"
  }
}

这次使用正六面体的完整块来使用相同的纹理。

物品模型的描述

{
  "parent": "examplemod:block/example_block"
}

本次选择了模型的块。

纹理的布局

在src/main/resources/assets/examplemod/textures/block下构建文件结构,
并放置一个16×16像素的png图片文件example_block.png,
该文件将显示在每个方块的各个面上。

中文翻译设定

英语翻译
src/main/resources/assets/examplemod/lang/zh_cn.json
{
“block.examplemod.example_block”: “示例方块”,
“item.examplemod.example_item”: “示例物品”
}

日本語翻訳
src/main/resources/assets/examplemod/lang/ja_jp.json
{
“block.examplemod.example_block”: “試験用ブロック”,
“item.examplemod.example_item”: “試験用アイテム”
}

路由表的描述

{
  "type": "minecraft:block",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "examplemod:example_block"
        }
      ],
      "conditions": [
        {
          "condition": "minecraft:survives_explosion"
        }
      ]
    }
  ]
}

使用适当的工具摧毁方块时,用JSON描述掉落的物品。
本次指定始终掉落一个试用物品作为物品。
要注意文件夹名称为复数形式。

通过”condition”: “minecraft:survives_explosion”,与其他方块一样,当方块被爆炸破坏时,以1/(爆炸力)的概率掉落物品。

确定

スクリーンショット 2021-05-13 18.14.57.png

虽然可以确认为阻塞状态,但没有发生丢弃。

参考资料
广告
将在 10 秒后关闭
bannerAds