用户:MashKJo/1.21.1模组开发教程/3.注册:修订间差异

无编辑摘要
 
第64行: 第64行:
  public class RegistryHandler {
  public class RegistryHandler {
   
   
    //这里T即为你的注册项类型,可以为Item、Block等等。
    //这里T即为你的注册项类型,可以为Item、Block等等。
   
   
    //DeferredRegister字段的命名一般习惯上是这样的:把注册项类型名称全大写,再加S,如DeferredRegister<Item>一般会被命名为ITEMS。
    //DeferredRegister字段的命名一般习惯上是这样的:把注册项类型名称全大写,再加S,如DeferredRegister<Item>一般会被命名为ITEMS。
   
   
    //create方法的第一个参数可以是ResourceKey<Registry<T>>、ResourceLocation或Registry<T>。
    //create方法的第一个参数可以是ResourceKey<Registry<T>>、ResourceLocation或Registry<T>。
   
   
    public static final DeferredRegister<T> DEFERRED_REGISTER_T = DeferredRegister.create(BuiltInRegistries.xxx, TutorialMod.MODID);
    public static final DeferredRegister<T> DEFERRED_REGISTER_T = DeferredRegister.create(BuiltInRegistries.xxx, TutorialMod.MODID);
   
   
    //第一个参数为该注册对象的注册名,第二个参数可以是一个Function<ResourceLocation, ? extends S>,也可以是一个Supplier<? extends S>。
    //第一个参数为该注册对象的注册名,第二个参数可以是一个Function<ResourceLocation, ? extends S>,也可以是一个Supplier<? extends S>。
   
   
    //一般而言填一个Supplier更为常见。
    //一般而言填一个Supplier更为常见。
   
   
    //这个lambda就是DeferredRegister的精髓所在了:实现游戏对象的惰性初始化,或许这个字段被加载得较早,但是lambda里的方法要到RegisterEvent被发布才被调用,这个DeferredHolder才真正可用。
    //这个lambda就是DeferredRegister的精髓所在了:实现游戏对象的惰性初始化,或许这个字段被加载得较早,但是lambda里的方法要到RegisterEvent被发布才被调用,这个DeferredHolder才真正可用。
   
   
    public static final DeferredHolder<T, S extends T> MY_REGISTRY_OBJECT = DEFERRED_REGISTER_T.register("example_name", () -> ...);
    public static final DeferredHolder<T, S extends T> MY_REGISTRY_OBJECT = DEFERRED_REGISTER_T.register("example_name", () -> ...);
   
   
    ...
    ...
   
   
    //将我们的DeferredRegister注册进MOD总线,一般是在Mod主类构造器中调用它。
    //将我们的DeferredRegister注册进MOD总线,一般是在Mod主类构造器中调用它。
   
   
    public static void register(IEventBus bus) {
    public static void register(IEventBus bus) {
        DEFERRED_REGISTER_T.register(bus);
        DEFERRED_REGISTER_T.register(bus);
    }
    }
  }
  }


行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,417

个编辑