优化注册类,明确类别
This commit is contained in:
parent
c4af701e70
commit
d95b8ff049
|
|
@ -1,28 +1,24 @@
|
||||||
package com.extendedae_plus;
|
package com.extendedae_plus;
|
||||||
|
|
||||||
import appeng.menu.locator.MenuLocators;
|
import appeng.menu.locator.MenuLocators;
|
||||||
|
import com.extendedae_plus.client.ClientProxy;
|
||||||
import com.extendedae_plus.config.ModConfigs;
|
import com.extendedae_plus.config.ModConfigs;
|
||||||
import com.extendedae_plus.init.ModBlockEntities;
|
import com.extendedae_plus.init.*;
|
||||||
import com.extendedae_plus.init.ModBlocks;
|
|
||||||
import com.extendedae_plus.init.ModCreativeTabs;
|
|
||||||
import com.extendedae_plus.init.ModItems;
|
|
||||||
import com.extendedae_plus.init.ModMenuTypes;
|
|
||||||
import com.extendedae_plus.menu.locator.CuriosItemLocator;
|
import com.extendedae_plus.menu.locator.CuriosItemLocator;
|
||||||
import com.extendedae_plus.network.ModNetwork;
|
import com.extendedae_plus.network.ModNetwork;
|
||||||
import net.minecraftforge.client.ConfigScreenHandler;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.client.event.ModelEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
import net.minecraftforge.eventbus.api.IEventBus;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
import net.minecraftforge.fml.ModLoadingContext;
|
import net.minecraftforge.fml.ModLoadingContext;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.config.ModConfig;
|
import net.minecraftforge.fml.config.ModConfig;
|
||||||
|
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
|
|
||||||
import com.extendedae_plus.client.ClientProxy;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ExtendedAE Plus 主mod类
|
* ExtendedAE Plus 主mod类
|
||||||
|
|
@ -36,20 +32,23 @@ public class ExtendedAEPlus {
|
||||||
|
|
||||||
public ExtendedAEPlus() {
|
public ExtendedAEPlus() {
|
||||||
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||||
|
|
||||||
// 在客户端尽早注册内置模型,保证首次资源加载前映射已建立(仿照 AE2 的 AppEngClient 构造期注册)
|
// 在客户端尽早注册内置模型,保证首次资源加载前映射已建立(仿照 AE2 的 AppEngClient 构造期注册)
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientProxy::init);
|
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientProxy::initBuiltInModels);
|
||||||
|
|
||||||
// 注册mod初始化事件
|
// 注册mod初始化事件
|
||||||
modEventBus.addListener(this::commonSetup);
|
modEventBus.addListener(this::commonSetup);
|
||||||
|
|
||||||
// 注册方块与方块实体
|
// 注册方块与方块实体
|
||||||
ModBlocks.BLOCKS.register(modEventBus);
|
ModBlocks.BLOCKS.register(modEventBus);
|
||||||
ModBlockEntities.BLOCK_ENTITY_TYPES.register(modEventBus);
|
ModBlockEntities.BLOCK_ENTITY_TYPES.register(modEventBus);
|
||||||
ModItems.ITEMS.register(modEventBus);
|
ModItems.ITEMS.register(modEventBus);
|
||||||
|
|
||||||
|
// 在注册阶段将创造模式标签页放入注册表
|
||||||
ModCreativeTabs.TABS.register(modEventBus);
|
ModCreativeTabs.TABS.register(modEventBus);
|
||||||
|
|
||||||
ModMenuTypes.MENUS.register(modEventBus);
|
ModMenuTypes.MENUS.register(modEventBus);
|
||||||
|
|
||||||
// 注册到Forge事件总线
|
// 注册到Forge事件总线
|
||||||
MinecraftForge.EVENT_BUS.register(this);
|
MinecraftForge.EVENT_BUS.register(this);
|
||||||
|
|
||||||
|
|
@ -57,9 +56,9 @@ public class ExtendedAEPlus {
|
||||||
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModConfigs.COMMON_SPEC);
|
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModConfigs.COMMON_SPEC);
|
||||||
|
|
||||||
// 客户端侧延迟注册:在 FMLClientSetupEvent 阶段执行(包含 MenuScreens 绑定等)
|
// 客户端侧延迟注册:在 FMLClientSetupEvent 阶段执行(包含 MenuScreens 绑定等)
|
||||||
modEventBus.addListener((FMLClientSetupEvent e) -> ClientProxy.onClientSetup(e));
|
// 由下面的 ClientModEvents 负责在客户端总线上接收事件并委派
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用初始化设置
|
* 通用初始化设置
|
||||||
*/
|
*/
|
||||||
|
|
@ -78,4 +77,31 @@ public class ExtendedAEPlus {
|
||||||
public static ResourceLocation id(String path) {
|
public static ResourceLocation id(String path) {
|
||||||
return new ResourceLocation(MODID, path);
|
return new ResourceLocation(MODID, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端专用事件订阅类。
|
||||||
|
* 完成客户端相关的延迟注册操作(如菜单界面绑定、渲染器注册、模型加载等),确保这些操作只在客户端执行,避免服务端崩溃。
|
||||||
|
*/
|
||||||
|
@Mod.EventBusSubscriber(
|
||||||
|
modid = ExtendedAEPlus.MODID,
|
||||||
|
bus = Mod.EventBusSubscriber.Bus.MOD,
|
||||||
|
value = Dist.CLIENT
|
||||||
|
)
|
||||||
|
public static class ClientModEvents {
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void onClientSetup(final FMLClientSetupEvent event) {
|
||||||
|
// 直接在此处执行客户端一次性注册(UI/屏幕/渲染器绑定)
|
||||||
|
// 注册客户端配置界面
|
||||||
|
ClientProxy.registerConfigScreen();
|
||||||
|
// 菜单 -> 屏幕 绑定
|
||||||
|
ClientProxy.registerMenuScreens();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void onRegisterGeometryLoaders(final ModelEvent.RegisterGeometryLoaders evt) {
|
||||||
|
try {
|
||||||
|
ClientProxy.initBuiltInModels();
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,6 @@ public final class ClientModelEvents {
|
||||||
event.register(ExtendedAEPlus.id("block/crafting/64x_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/256x_accelerator_formed_v2"));
|
||||||
event.register(ExtendedAEPlus.id("block/crafting/1024x_accelerator_formed_v2"));
|
event.register(ExtendedAEPlus.id("block/crafting/1024x_accelerator_formed_v2"));
|
||||||
ClientProxy.init();
|
ClientProxy.initBuiltInModels();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,12 @@ import appeng.client.render.crafting.CraftingCubeModel;
|
||||||
import com.extendedae_plus.ExtendedAEPlus;
|
import com.extendedae_plus.ExtendedAEPlus;
|
||||||
import com.extendedae_plus.client.render.crafting.EPlusCraftingCubeModelProvider;
|
import com.extendedae_plus.client.render.crafting.EPlusCraftingCubeModelProvider;
|
||||||
import com.extendedae_plus.client.screen.GlobalProviderModesScreen;
|
import com.extendedae_plus.client.screen.GlobalProviderModesScreen;
|
||||||
import com.extendedae_plus.init.ModMenuTypes;
|
|
||||||
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
|
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
|
||||||
import com.extendedae_plus.hooks.BuiltInModelHooks;
|
import com.extendedae_plus.hooks.BuiltInModelHooks;
|
||||||
|
import com.extendedae_plus.init.ModMenuTypes;
|
||||||
|
import net.minecraft.client.gui.screens.MenuScreens;
|
||||||
import net.minecraftforge.client.ConfigScreenHandler;
|
import net.minecraftforge.client.ConfigScreenHandler;
|
||||||
import net.minecraftforge.fml.ModLoadingContext;
|
import net.minecraftforge.fml.ModLoadingContext;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
|
||||||
import net.minecraft.client.gui.screens.MenuScreens;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 客户端模型注册,将 formed 模型注册为内置模型。
|
* 客户端模型注册,将 formed 模型注册为内置模型。
|
||||||
|
|
@ -20,7 +19,10 @@ public final class ClientProxy {
|
||||||
|
|
||||||
private static boolean REGISTERED = false;
|
private static boolean REGISTERED = false;
|
||||||
|
|
||||||
public static void init() {
|
/**
|
||||||
|
* 注册内置模型(formed 模型等)。可被 ModelEvent 或启动阶段直接调用。
|
||||||
|
*/
|
||||||
|
public static void initBuiltInModels() {
|
||||||
if (REGISTERED) return;
|
if (REGISTERED) return;
|
||||||
REGISTERED = true;
|
REGISTERED = true;
|
||||||
// 注册四种形成态模型为内置模型
|
// 注册四种形成态模型为内置模型
|
||||||
|
|
@ -46,17 +48,10 @@ public final class ClientProxy {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 客户端设置阶段:延迟执行需要访问注册对象的客户端注册。
|
* 将菜单类型与对应的屏幕绑定。
|
||||||
*/
|
*/
|
||||||
public static void onClientSetup(final FMLClientSetupEvent event) {
|
public static void registerMenuScreens() {
|
||||||
event.enqueueWork(() -> {
|
MenuScreens.register(ModMenuTypes.NETWORK_PATTERN_CONTROLLER.get(), GlobalProviderModesScreen::new);
|
||||||
// 确保在首次资源加载前完成内置模型注册(REGISTERED 保护避免重复)
|
|
||||||
init();
|
|
||||||
// 仅在客户端设置阶段执行与 UI 相关的一次性绑定
|
|
||||||
registerConfigScreen();
|
|
||||||
// 菜单 -> 屏幕 绑定
|
|
||||||
MenuScreens.register(ModMenuTypes.NETWORK_PATTERN_CONTROLLER.get(), GlobalProviderModesScreen::new);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -68,7 +63,7 @@ public final class ClientProxy {
|
||||||
ModLoadingContext.get().registerExtensionPoint(
|
ModLoadingContext.get().registerExtensionPoint(
|
||||||
ConfigScreenHandler.ConfigScreenFactory.class,
|
ConfigScreenHandler.ConfigScreenFactory.class,
|
||||||
() -> new ConfigScreenHandler.ConfigScreenFactory(
|
() -> new ConfigScreenHandler.ConfigScreenFactory(
|
||||||
(mc, parent) -> new com.extendedae_plus.client.ModConfigScreen(parent))
|
(mc, parent) -> new ModConfigScreen(parent))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user