diff --git a/src/main/java/com/extendedae_plus/ExtendedAEPlus.java b/src/main/java/com/extendedae_plus/ExtendedAEPlus.java index a2319f1..bdb0611 100644 --- a/src/main/java/com/extendedae_plus/ExtendedAEPlus.java +++ b/src/main/java/com/extendedae_plus/ExtendedAEPlus.java @@ -37,6 +37,9 @@ public class ExtendedAEPlus { public ExtendedAEPlus() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + // 在客户端尽早注册内置模型,保证首次资源加载前映射已建立(仿照 AE2 的 AppEngClient 构造期注册) + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientProxy::init); + // 注册mod初始化事件 modEventBus.addListener(this::commonSetup); diff --git a/src/main/java/com/extendedae_plus/client/ClientModelEvents.java b/src/main/java/com/extendedae_plus/client/ClientModelEvents.java index ad33bef..c867034 100644 --- a/src/main/java/com/extendedae_plus/client/ClientModelEvents.java +++ b/src/main/java/com/extendedae_plus/client/ClientModelEvents.java @@ -1,5 +1,6 @@ package com.extendedae_plus.client; +import com.extendedae_plus.ExtendedAEPlus; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ModelEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -8,13 +9,19 @@ import net.minecraftforge.fml.common.Mod; /** * 确保在模型烘焙/资源重载期间也会注册内置模型,避免在刷新资源后丢失内置模型映射。 */ -@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +@Mod.EventBusSubscriber(modid = ExtendedAEPlus.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public final class ClientModelEvents { private ClientModelEvents() {} @SubscribeEvent public static void onRegisterAdditional(ModelEvent.RegisterAdditional event) { // 在每次模型重载开始时确保内置模型已注册 + // 先显式登记这些模型ID,使其在首次加载阶段被请求,从而触发我们的内置模型拦截 + event.register(ExtendedAEPlus.id("block/crafting/4x_accelerator_formed_v2")); + event.register(ExtendedAEPlus.id("block/crafting/16x_accelerator_formed_v2")); + event.register(ExtendedAEPlus.id("block/crafting/64x_accelerator_formed_v2")); + event.register(ExtendedAEPlus.id("block/crafting/256x_accelerator_formed_v2")); + event.register(ExtendedAEPlus.id("block/crafting/1024x_accelerator_formed_v2")); ClientProxy.init(); } } diff --git a/src/main/java/com/extendedae_plus/client/ClientProxy.java b/src/main/java/com/extendedae_plus/client/ClientProxy.java index 329450e..55f9e5f 100644 --- a/src/main/java/com/extendedae_plus/client/ClientProxy.java +++ b/src/main/java/com/extendedae_plus/client/ClientProxy.java @@ -43,9 +43,6 @@ public final class ClientProxy { BuiltInModelHooks.addBuiltInModel( ExtendedAEPlus.id("block/crafting/1024x_accelerator_formed_v2"), new CraftingCubeModel(new EPlusCraftingCubeModelProvider(EPlusCraftingUnitType.ACCELERATOR_1024x))); - - // 菜单 -> 屏幕 绑定 - MenuScreens.register(ModMenuTypes.NETWORK_PATTERN_CONTROLLER.get(), GlobalProviderModesScreen::new); } /** @@ -53,8 +50,12 @@ public final class ClientProxy { */ public static void onClientSetup(final FMLClientSetupEvent event) { event.enqueueWork(() -> { + // 确保在首次资源加载前完成内置模型注册(REGISTERED 保护避免重复) init(); + // 仅在客户端设置阶段执行与 UI 相关的一次性绑定 registerConfigScreen(); + // 菜单 -> 屏幕 绑定 + MenuScreens.register(ModMenuTypes.NETWORK_PATTERN_CONTROLLER.get(), GlobalProviderModesScreen::new); }); }