Minecraft 1.18.1、1.18.2模组开发 02.方块和物品

今天我们在1.18.1版本下制作属于自己的方块和物品

1.新建init文件夹 -> init包中新建BlockInit.java和ItemInit.java

cr0.jpg

BlockInit.java

package com.joy187.re8joymod.init;

import java.util.function.Function;
import com.google.common.base.Supplier;
import com.joy187.re8joymod.Main;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.level.material.MaterialColor;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

public class BlockInit {
    //注册机
	public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS,
			Main.MOD_ID);
	public static final DeferredRegister<Item> ITEMS = ItemInit.ITEMS;

    //定义一个属于我们的方块
	public static final RegistryObject<Block> EXAMPLE_BLOCK = register("example_block",
			() -> new Block(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_PURPLE).strength(3.0f)
					.sound(SoundType.METAL).requiresCorrectToolForDrops()),
			object -> () -> new BlockItem(object.get(), new Item.Properties().tab(Main.TUTORIAL_TAB)));
	
    
	private static <T extends Block> RegistryObject<T> registerBlock(final String name,
			final Supplier<? extends T> block) {
		return BLOCKS.register(name, block);
	}

	private static <T extends Block> RegistryObject<T> register(final String name, final Supplier<? extends T> block,
			Function<RegistryObject<T>, Supplier<? extends Item>> item) {
		RegistryObject<T> obj = registerBlock(name, block);
		ITEMS.register(name, item.apply(obj));
		return obj;
	}
}

ItemInit.java

package com.joy187.re8joymod.init;


import com.google.common.base.Supplier;
import com.joy187.re8joymod.Main;
import com.joy187.re8joymod.items.ItemPreAttack;

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

public class ItemInit {
    //注册机
	public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS,
			Main.MOD_ID);
    
    //定义一个属于我们自己的物品
	public static final RegistryObject<Item> EXAMPLE_ITEM = register("example_item",
			() -> new Item(new Item.Properties().tab(Main.TUTORIAL_TAB)));
	

	private static <T extends Item> RegistryObject<T> register(final String name, final Supplier<T> item) {
		return ITEMS.register(name, item);
	}
		
}

2.在Main文件中添加初始化信息

package com.joy187.re8joymod;

import com.joy187.re8joymod.entity.EntityRe8Dimi;
import com.joy187.re8joymod.init.BlockInit;
import com.joy187.re8joymod.init.EntityInit;
import com.joy187.re8joymod.init.ItemInit;

import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

@Mod("re8joymod")
public class Main {
	
	
	public static final String MOD_ID = "re8joymod";
	public static final CreativeModeTab TUTORIAL_TAB = new CreativeModeTab(MOD_ID) {
		@Override
		@OnlyIn(Dist.CLIENT)
		public ItemStack makeIcon() {
			return new ItemStack(BlockInit.EXAMPLE_BLOCK.get());
		}
	};
	
	public Main() {
		IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
        //添加物品,方块的初始化信息
		ItemInit.ITEMS.register(bus);
		BlockInit.BLOCKS.register(bus);
		MinecraftForge.EVENT_BUS.register(this);
	}
	
    public static void setup() {
        IEventBus bus = MinecraftForge.EVENT_BUS;
    }
 
}

3.在resources/assets/模组名称/下新建一格blockstates文件夹 -> 在该文件夹中新建方块名.json文件(名称与BlockInit.java中你自定义的方块名称保持一致)

cr1.jpg

example_block.json

{
	"variants": {
		"": {
			"model": "re8joymod:block/example_block"
		}
	}
}
同样的新建models文件夹 -> 在models中新建block和item两个文件夹

cr2.jpg

在block中新建方块名.json文件(名称与BlockInit.java中你自定义的方块名称保持一致)

example_block.json(指明你方块的贴图)

{
	"parent": "block/cube_all",
	"textures": {
		"all": "re8joymod:block/example_block"  
	}
}
在item中新建物品名.json文件(名称与ItemInit.java中你自定义的方块名称保持一致)

example_item.json

{
	"parent": "item/generated",
	"textures": {
		"layer0": "re8joymod:item/example_item"
	}
}

注:方块也是特殊的物品,所以要为方块新建一个属于它的.json文件:

example_block.json

{
	"parent": "re8joymod:block/example_block"
}
同样的新建textures文件夹 -> 在textures中新建block和item两个文件夹

分别将我们的方块贴图和物品贴图放入文件夹中:
cr3.jpg

4.在resources/data文件夹下新建2个文件夹,一个叫minecraft,另一个是你的模组名称(以re8joymod为例)

在minecraft文件夹中新建 -> tags文件夹 -> tags包中新建blocks文件夹 -> blocks包中新建mineable文件夹 ->在mineable中新建 pickaxe.json(定义方块是否可挖掘)
pickaxe.json
{
	"replace": false,
	"values": [
		"re8joymod:example_block"   //这里面的方块都是可以被挖掘的
	]
}
在re8joymod中新建loot_tables文件夹 -> 在loot_tables中新建blocks文件夹 -> 在blocks文件夹中新建 方块名.json(名称与BlockInit.java中你自定义的方块名称保持一致)
example_block.json(挖掉之后方块的掉落物)
{
	"type": "minecraft:block",
	"pools": [
		{
			"rolls": 1.0,
			"entries": [
				{
					"type": "minecraft:item",
					"name": "re8joymod:example_block"   //掉落物格式:模组名称:物品、方块的名称,原版默认是minecraft:xxx
				}
			]
		}
	]
}

5.保存所有文件,刷新项目,启动游戏

cr5.jpg

OK,完美!

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay_fearless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值