跳转至

Java 集成

你可以从我们的 maven 获取最新版本。

repositories{
    maven {
        name "firstdarkdev"
        url "https://maven.firstdark.dev/snapshots"
    }
}

dependencies {
    implementation fg.deobf("com.lowdragmc.ldlib:ldlib-forge-{minecraft_version}:{latest_version}") { transitive = false }
    implementation fg.deobf("com.lowdragmc.multiblocked2:Multiblocked2:{minecraft_version}-{latest_version}") { transitive = false }
}

Multiblocked2 注册事件

Multiblocked2 提供了一个 Forge 事件 (MBDRegistryEvent) 用于注册。

public class MBDEvents {

    @SubscribeEvent
    public void onRegisterMachine(MBDRegistryEvent.Machine event) {
        System.out.println("Registering machine");
    }

    @SubscribeEvent
    public void onRegisterRecipeType(MBDRegistryEvent.MBDRecipeType event) {
        System.out.println("Registering recipe type");
    }

    // other events....
}

public void modInit() {
    IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();
    eventBus.register(new MBDEvents());
}

通过 Java 代码注册机器

除了直接将项目文件放在 .minecraft/assets/ldlib/mbd2/machine_type 目录下,还有两种方式可以通过代码注册机器。

1. 通过原生代码创建并注册机器

@SubscribeEvent
public void onRegisterMachine(MBDRegistryEvent.Machine event) {
    var renderer = new IModelRenderer(MBD2.id("block/pedestal"));
    event.register(MBDMachineDefinition.builder()
            .id(MBD2.id("test_machine"))
                    .rootState(MachineState.builder()
                            .name("base")
                            .renderer(renderer)
                            .shape(Shapes.block())
                            .lightLevel(0)
                            .build())
            .blockProperties(ConfigBlockProperties.builder().build())
            .itemProperties(ConfigItemProperties.builder().build())
            .build());
}

2. 从模组资源文件中注册项目文件

例如,你在资源文件中拥有如下项目。

image

注册机器项目

event.registerFromResource(mod class, project type, project resource)

可用的 project types 如下:

  • 单机项目:single_machine
  • 多方块机器项目:multiblock
  • Create 动力机器项目:create_machine
@SubscribeEvent
public void onRegisterMachine(MBDRegistryEvent.Machine event) {
    event.registerFromResource(this.getClass(), "single_machine", "mbd2/machine/machine_project_file.sm");
}

注册配方类型项目

event.registerFromResource(mod class, project resource)

@SubscribeEvent
public void onRegisterRecipeType(MBDRegistryEvent.MBDRecipeType event) {
    event.registerFromResource(this.getClass(), "mbd2/recipe_type/recipe_type_file.rt");
}