From 0e90d9825a928959b5be77c9d868d77ff21709cb Mon Sep 17 00:00:00 2001 From: GaLi <133291877+GaLicn@users.noreply.github.com> Date: Sat, 30 Aug 2025 11:22:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9D=90=E8=B4=A8=E6=A6=82?= =?UTF-8?q?=E7=8E=87=E8=BF=9B=E6=B8=B8=E6=88=8F=E7=B4=AB=E9=BB=91=E5=9D=97?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/extendedae_plus/ExtendedAEPlus.java | 3 +++ .../com/extendedae_plus/client/ClientModelEvents.java | 9 ++++++++- .../java/com/extendedae_plus/client/ClientProxy.java | 7 ++++--- 3 files changed, 15 insertions(+), 4 deletions(-) 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); }); }