225 lines
12 KiB
Java
225 lines
12 KiB
Java
package thaumicenergistics;
|
||
//
|
||
//AlkSur
|
||
import appeng.api.features.GridLinkables;
|
||
import appeng.api.features.P2PTunnelAttunement;
|
||
import appeng.api.parts.PartModels;
|
||
import appeng.api.stacks.AEKeyType;
|
||
import appeng.api.stacks.AEKeyTypesInternal;
|
||
import appeng.api.upgrades.Upgrades;
|
||
import appeng.client.gui.style.StyleManager;
|
||
import appeng.core.definitions.AEItems;
|
||
import net.minecraft.network.chat.Component;
|
||
import net.minecraft.resources.ResourceLocation;
|
||
import net.minecraft.world.entity.player.Inventory;
|
||
import appeng.api.AECapabilities;
|
||
import net.neoforged.bus.api.IEventBus;
|
||
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
|
||
import net.neoforged.fml.common.Mod;
|
||
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
|
||
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent;
|
||
import org.slf4j.Logger;
|
||
import org.slf4j.LoggerFactory;
|
||
import thaumicenergistics.common.container.*;
|
||
import thaumicenergistics.common.features.RecipeRegistration;
|
||
import thaumicenergistics.common.integration.appeng.AEssentiaKeyType;
|
||
import thaumicenergistics.common.integration.appeng.ThEAppliedEnergistics;
|
||
import thaumicenergistics.common.integration.tc.ThEThaumcraft;
|
||
import thaumicenergistics.common.items.ItemGolemWirelessBackpack;
|
||
import thaumicenergistics.common.parts.ArcaneCraftingTerminalPart;
|
||
import thaumicenergistics.common.parts.EssentiaExportBusPart;
|
||
import thaumicenergistics.common.parts.EssentiaImportBusPart;
|
||
import thaumicenergistics.common.parts.EssentiaLevelEmitterPart;
|
||
import thaumicenergistics.common.parts.EssentiaStorageBusPart;
|
||
import thaumicenergistics.common.parts.EssentiaTerminalPart;
|
||
import thaumicenergistics.common.parts.VisInterfacePart;
|
||
import thaumicenergistics.init.*;
|
||
|
||
@Mod(ThaumicEnergistics.MODID)
|
||
public final class ThaumicEnergistics {
|
||
public static final String MODID = "thaumicenergistics";
|
||
public static final Logger LOG = LoggerFactory.getLogger("ThaumicEnergistics");
|
||
|
||
public ThaumicEnergistics(IEventBus modBus) {
|
||
LOG.info("ThaumicEnergistics loading...");
|
||
ModBlocks.REGISTRY.register(modBus);
|
||
ModItems.REGISTRY.register(modBus);
|
||
ModBlockEntities.REGISTRY.register(modBus);
|
||
ModMenuTypes.REGISTRY.register(modBus);
|
||
ModCreativeTab.REGISTRY.register(modBus);
|
||
modBus.addListener(this::registerScreens);
|
||
modBus.addListener(this::commonSetup);
|
||
modBus.addListener(this::registerKeyTypes);
|
||
modBus.addListener(this::registerUpgrades);
|
||
|
||
if (net.neoforged.fml.loading.FMLLoader.getDist().isClient()) {
|
||
modBus.addListener(thaumicenergistics.client.ClientInit::onClientSetup);
|
||
}
|
||
ThEAppliedEnergistics.init();
|
||
|
||
appeng.api.networking.GridServices.register(
|
||
thaumicenergistics.api.grid.IEssentiaGrid.class,
|
||
thaumicenergistics.common.grid.EssentiaGridService.class
|
||
);
|
||
|
||
thaumicenergistics.common.network.ThENetworking.init(modBus);
|
||
|
||
thaumicenergistics.common.blocks.ThEWrenchHandler.register();
|
||
|
||
modBus.addListener(this::registerCapabilities);
|
||
|
||
PartModels.registerModels(
|
||
EssentiaImportBusPart.RL_BASE, EssentiaImportBusPart.RL_OFF,
|
||
EssentiaImportBusPart.RL_HAS_CHANNEL, EssentiaImportBusPart.RL_ON
|
||
);
|
||
PartModels.registerModels(
|
||
EssentiaExportBusPart.RL_BASE, EssentiaExportBusPart.RL_OFF,
|
||
EssentiaExportBusPart.RL_HAS_CHANNEL, EssentiaExportBusPart.RL_ON
|
||
);
|
||
PartModels.registerModels(
|
||
EssentiaStorageBusPart.RL_BASE, EssentiaStorageBusPart.RL_OFF,
|
||
EssentiaStorageBusPart.RL_HAS_CHANNEL, EssentiaStorageBusPart.RL_ON
|
||
);
|
||
PartModels.registerModels(
|
||
EssentiaTerminalPart.RL_BASE, EssentiaTerminalPart.RL_OFF, EssentiaTerminalPart.RL_ON
|
||
);
|
||
PartModels.registerModels(
|
||
ArcaneCraftingTerminalPart.RL_BASE, ArcaneCraftingTerminalPart.RL_OFF,
|
||
ArcaneCraftingTerminalPart.RL_HAS_CHANNEL, ArcaneCraftingTerminalPart.RL_ON
|
||
);
|
||
PartModels.registerModels(
|
||
EssentiaLevelEmitterPart.RL_BASE_OFF, EssentiaLevelEmitterPart.RL_BASE_ON,
|
||
EssentiaLevelEmitterPart.RL_STATUS_HAS_CHANNEL, EssentiaLevelEmitterPart.RL_STATUS_ON,
|
||
EssentiaLevelEmitterPart.RL_STATUS_OFF
|
||
);
|
||
PartModels.registerModels(VisInterfacePart.MODEL_VIS_INTERFACE);
|
||
|
||
LOG.info("ThaumicEnergistics setup complete");
|
||
}
|
||
|
||
public static ResourceLocation id(String path) {
|
||
return ResourceLocation.fromNamespaceAndPath(MODID, path);
|
||
}
|
||
|
||
private void commonSetup(FMLCommonSetupEvent event) {
|
||
appeng.blockentity.AEBaseBlockEntity.registerBlockEntityItem(
|
||
ModBlockEntities.ESSENTIA_PROVIDER.get(), ModItems.ESSENTIA_PROVIDER_ITEM.get());
|
||
appeng.blockentity.AEBaseBlockEntity.registerBlockEntityItem(
|
||
ModBlockEntities.INFUSION_PROVIDER.get(), ModItems.INFUSION_PROVIDER_ITEM.get());
|
||
|
||
event.enqueueWork(() -> {
|
||
RecipeRegistration.registerAll();
|
||
ThEThaumcraft.init();
|
||
P2PTunnelAttunement.registerAttunementTag(ModItems.VIS_INTERFACE.get());
|
||
GridLinkables.register(ModItems.GOLEM_WIFI_BACKPACK.get(), ItemGolemWirelessBackpack.LINKABLE_HANDLER);
|
||
GridLinkables.register(ModItems.WIRELESS_ESSENTIA_TERMINAL.get(),
|
||
appeng.items.tools.powered.WirelessTerminalItem.LINKABLE_HANDLER);
|
||
});
|
||
}
|
||
|
||
private void registerUpgrades(FMLCommonSetupEvent event) {
|
||
event.enqueueWork(() -> {
|
||
// 注:不传 group——带 group 会在卡 tooltip 中与 AE2 原版 IO 总线合并显示为
|
||
// "ME Import/Export Bus"(同 group 跳过),ThE 设备名不显示。与存储总线一致,各自显示设备名。
|
||
var importBusItem = ModItems.ESSENTIA_IMPORT_BUS.get();
|
||
Upgrades.add(AEItems.FUZZY_CARD, importBusItem, 1);
|
||
Upgrades.add(AEItems.REDSTONE_CARD, importBusItem, 1);
|
||
Upgrades.add(AEItems.CAPACITY_CARD, importBusItem, 5);
|
||
Upgrades.add(AEItems.SPEED_CARD, importBusItem, 4);
|
||
Upgrades.add(AEItems.INVERTER_CARD, importBusItem, 1);
|
||
|
||
var exportBusItem = ModItems.ESSENTIA_EXPORT_BUS.get();
|
||
Upgrades.add(AEItems.FUZZY_CARD, exportBusItem, 1);
|
||
Upgrades.add(AEItems.REDSTONE_CARD, exportBusItem, 1);
|
||
Upgrades.add(AEItems.CAPACITY_CARD, exportBusItem, 5);
|
||
Upgrades.add(AEItems.SPEED_CARD, exportBusItem, 4);
|
||
Upgrades.add(AEItems.CRAFTING_CARD, exportBusItem, 1);
|
||
|
||
var storageBusItem = ModItems.ESSENTIA_STORAGE_BUS.get();
|
||
Upgrades.add(AEItems.FUZZY_CARD, storageBusItem, 1);
|
||
Upgrades.add(AEItems.INVERTER_CARD, storageBusItem, 1);
|
||
Upgrades.add(AEItems.CAPACITY_CARD, storageBusItem, 5);
|
||
Upgrades.add(AEItems.VOID_CARD, storageBusItem, 1);
|
||
|
||
// 神秘装配台:加速卡(AEItems.SPEED_CARD = Acceleration Card,tooltip 名单 + 装配台升级槽可装——加快合成)
|
||
Upgrades.add(AEItems.SPEED_CARD, ModItems.ARCANE_ASSEMBLER_ITEM.get(), 4);
|
||
});
|
||
}
|
||
|
||
private void registerScreens(RegisterMenuScreensEvent event) {
|
||
event.register(ModMenuTypes.ESSENTIA_CELL_WORKBENCH.get(), GuiEssentiaCellWorkbench::new);
|
||
event.register(ModMenuTypes.EVC.get(), GuiEssentiaVibrationChamber::new);
|
||
event.register(ModMenuTypes.ARCANE_ASSEMBLER.get(), GuiArcaneAssembler::new);
|
||
event.register(ModMenuTypes.ESSENTIA_TERMINAL.get(),
|
||
(EssentiaTerminalMenu menu, Inventory inv, Component title)
|
||
-> new GuiEssentiaTerminal(menu, inv, title,
|
||
StyleManager.loadStyleDoc("/screens/terminals/terminal.json")));
|
||
event.register(ModMenuTypes.WIRELESS_ESSENTIA_TERMINAL.get(),
|
||
(EssentiaTerminalMenu menu, Inventory inv, Component title)
|
||
-> new GuiEssentiaTerminal(menu, inv, title,
|
||
StyleManager.loadStyleDoc("/screens/terminals/wireless_terminal.json")));
|
||
event.register(ModMenuTypes.KNOWLEDGE_INSCRIBER.get(), GuiKnowledgeInscriber::new);
|
||
event.register(ModMenuTypes.DISTILLATION_ENCODER.get(), GuiDistillationPatternEncoder::new);
|
||
|
||
event.register(ModMenuTypes.ESSENTIA_IMPORT_BUS.get(),
|
||
(ContainerEssentiaImportBus menu, Inventory inv, Component title)
|
||
-> new GuiEssentiaImportBus(menu, inv, title,
|
||
StyleManager.loadStyleDoc("/screens/import_bus.json")));
|
||
|
||
event.register(ModMenuTypes.ESSENTIA_EXPORT_BUS.get(),
|
||
(ContainerEssentiaExportBus menu, Inventory inv, Component title)
|
||
-> new GuiEssentiaExportBus(menu, inv, title,
|
||
StyleManager.loadStyleDoc("/screens/export_bus.json")));
|
||
|
||
event.register(ModMenuTypes.ESSENTIA_STORAGE_BUS.get(),
|
||
(ContainerEssentiaStorageBus menu, Inventory inv, Component title)
|
||
-> new GuiEssentiaStorageBus(menu, inv, title,
|
||
StyleManager.loadStyleDoc("/screens/storage_bus.json")));
|
||
|
||
event.register(ModMenuTypes.ARCANE_CRAFTING_TERMINAL.get(),
|
||
(ContainerArcaneCraftingTerminal menu, Inventory inv, Component title)
|
||
-> new GuiArcaneCraftingTerminal(menu, inv, title,
|
||
StyleManager.loadStyleDoc("/screens/arcane_crafting_terminal.json")));
|
||
|
||
event.register(ModMenuTypes.ESSENTIA_LEVEL_EMITTER.get(),
|
||
(ContainerEssentiaLevelEmitter menu, Inventory inv, Component title)
|
||
-> new GuiEssentiaLevelEmitter(menu, inv, title,
|
||
StyleManager.loadStyleDoc("/screens/essentia_level_emitter.json")));
|
||
}
|
||
|
||
private void registerKeyTypes(net.neoforged.neoforge.registries.RegisterEvent event) {
|
||
LOG.info("registerKeyTypes fired, registryKey={}", event.getRegistryKey());
|
||
if (event.getRegistryKey() == AEKeyType.REGISTRY_KEY) {
|
||
AEKeyTypesInternal.register(AEssentiaKeyType.INSTANCE);
|
||
LOG.info("AEssentiaKeyType registered successfully!");
|
||
}
|
||
}
|
||
|
||
private void registerCapabilities(RegisterCapabilitiesEvent event) {
|
||
LOG.info("Registering AE2 grid node capabilities...");
|
||
event.registerBlockEntity(
|
||
AECapabilities.IN_WORLD_GRID_NODE_HOST,
|
||
ModBlockEntities.ESSENTIA_PROVIDER.get(),
|
||
(be, context) -> (appeng.api.networking.IInWorldGridNodeHost) be);
|
||
event.registerBlockEntity(
|
||
AECapabilities.IN_WORLD_GRID_NODE_HOST,
|
||
ModBlockEntities.INFUSION_PROVIDER.get(),
|
||
(be, context) -> (appeng.api.networking.IInWorldGridNodeHost) be);
|
||
event.registerBlockEntity(
|
||
AECapabilities.IN_WORLD_GRID_NODE_HOST,
|
||
ModBlockEntities.ESSENTIA_VIBRATION_CHAMBER.get(),
|
||
(be, context) -> (appeng.api.networking.IInWorldGridNodeHost) be);
|
||
// 装配器也实现 IInWorldGridNodeHost,必须注册 capability,否则 AE2 线缆连不上 →
|
||
// 装配器孤立成自己的网格,ME 终端看不到它提供的可合成配方。
|
||
event.registerBlockEntity(
|
||
AECapabilities.IN_WORLD_GRID_NODE_HOST,
|
||
ModBlockEntities.ARCANE_ASSEMBLER.get(),
|
||
(be, context) -> (appeng.api.networking.IInWorldGridNodeHost) be);
|
||
// 注魔监视器:连接 AE 网络(network 状态)需要网格节点 capability
|
||
event.registerBlockEntity(
|
||
AECapabilities.IN_WORLD_GRID_NODE_HOST,
|
||
ModBlockEntities.INFUSION_MONITOR.get(),
|
||
(be, context) -> (appeng.api.networking.IInWorldGridNodeHost) be);
|
||
}
|
||
}
|