<>>

# 自定义预制物类型

有时候我们需要一个与 item,block 同级的东西。这时候我们就需要自定义预制物类型。

WARNING

大部分时候我们不需要怎么做。

# 怎么做

自定义预制物类型很简单,只需要两步,新建一个ForgeRegistryEntry的子类,然后使用RegistryBuilder包装一下他。

首先我们需要一个类,这就是我们要注册的预制物类型。

public class Rock extends ForgeRegistryEntry<Rock> {
}
1
2

然后我们需要找一个地方把这个类包装一下,获取一个IForgeRegistry

public static IForgeRegistry<Rock> ROCKS = new RegistryBuilder<Rock>().setType(Rock.class).setName(new ResourceLocation("examplemod", "rock")).allowModification().create();
1

最后我们就可以通过上文所说的方法注册预制物。

@SubscribeEvent
public static void onRocksRegistry(final RegistryEvent.Register<Rock> rockRegistryEvent) {
    LOGGER.info("HELLO from Register Rock");
    rockRegistryEvent.getRegistry().register(new Rock().setRegistryName("big"));
    rockRegistryEvent.getRegistry().register(new Rock().setRegistryName("small"));
}
1
2
3
4
5
6

# 最后的提示

在上文代码中我们出现了,IForgeRegistry 这个东西,如果有时候我们需要根据预制物的资源位置(RL)来获取这个预制物,我们就可以到这个地方寻找需要的函数。