client包

This commit is contained in:
GaLicn 2025-09-06 15:48:13 +08:00
parent e04a18b6cc
commit 2e15c6d326
5 changed files with 32 additions and 23 deletions

View File

@ -5,11 +5,12 @@ import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ModelEvent;
import net.minecraft.client.resources.model.ModelResourceLocation;
/**
* 确保在模型烘焙/资源重载期间也会注册内置模型避免在刷新资源后丢失内置模型映射
*/
@EventBusSubscriber(modid = ExtendedAEPlus.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
@EventBusSubscriber(modid = ExtendedAEPlus.MODID, value = Dist.CLIENT)
public final class ClientModelEvents {
private ClientModelEvents() {}
@ -17,11 +18,11 @@ public final class ClientModelEvents {
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"));
event.register(ModelResourceLocation.standalone(ExtendedAEPlus.id("block/crafting/4x_accelerator_formed_v2")));
event.register(ModelResourceLocation.standalone(ExtendedAEPlus.id("block/crafting/16x_accelerator_formed_v2")));
event.register(ModelResourceLocation.standalone(ExtendedAEPlus.id("block/crafting/64x_accelerator_formed_v2")));
event.register(ModelResourceLocation.standalone(ExtendedAEPlus.id("block/crafting/256x_accelerator_formed_v2")));
event.register(ModelResourceLocation.standalone(ExtendedAEPlus.id("block/crafting/1024x_accelerator_formed_v2")));
ClientProxy.init();
}
}

View File

@ -9,10 +9,15 @@ import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
import com.extendedae_plus.hooks.BuiltInModelHooks;
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraft.client.gui.screens.MenuScreens;
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
/**
* 客户端模型注册 formed 模型注册为内置模型
*/
@EventBusSubscriber(modid = ExtendedAEPlus.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
public final class ClientProxy {
private ClientProxy() {}
@ -50,8 +55,13 @@ public final class ClientProxy {
event.enqueueWork(() -> {
// 确保在首次资源加载前完成内置模型注册REGISTERED 保护避免重复
init();
// 菜单 -> 屏幕 绑定
MenuScreens.register(ModMenuTypes.NETWORK_PATTERN_CONTROLLER.get(), GlobalProviderModesScreen::new);
});
}
@SubscribeEvent
public static void onRegisterScreens(RegisterMenuScreensEvent event) {
// 菜单 -> 屏幕 绑定
event.register(ModMenuTypes.NETWORK_PATTERN_CONTROLLER.get(),
(menu, inv, title) -> new GlobalProviderModesScreen(menu, inv, title));
}
}

View File

@ -5,7 +5,6 @@ import appeng.client.gui.me.common.MEStorageScreen;
import com.extendedae_plus.ExtendedAEPlus;
import com.extendedae_plus.integration.jei.JeiRuntimeProxy;
import com.extendedae_plus.mixin.ae2.accessor.MEStorageScreenAccessor;
import com.extendedae_plus.network.ModNetwork;
import com.extendedae_plus.network.OpenCraftFromJeiC2SPacket;
import com.extendedae_plus.network.PullFromJeiOrCraftC2SPacket;
import mezz.jei.api.ingredients.ITypedIngredient;
@ -16,6 +15,7 @@ import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ScreenEvent;
import net.neoforged.neoforge.network.PacketDistributor;
import org.lwjgl.glfw.GLFW;
import java.util.Optional;
@ -61,7 +61,7 @@ public final class InputEvents {
GenericStack stack = toGenericStack(typed);
if (stack != null) {
// 发送到服务端若网络有库存则拉取一组到空槽否则若可合成则打开下单界面
ModNetwork.CHANNEL.sendToServer(new PullFromJeiOrCraftC2SPacket(stack));
PacketDistributor.sendToServer(new PullFromJeiOrCraftC2SPacket(stack));
// 消费此次点击避免 JEI/原版对左键的其它处理
event.setCanceled(true);
return;
@ -89,7 +89,7 @@ public final class InputEvents {
if (stack == null) return;
// 发送到服务端让其验证并打开 CraftAmountMenu
ModNetwork.CHANNEL.sendToServer(new OpenCraftFromJeiC2SPacket(stack));
PacketDistributor.sendToServer(new OpenCraftFromJeiC2SPacket(stack));
// 消费此次点击避免 JEI/原版对中键的其它处理
event.setCanceled(true);

View File

@ -79,12 +79,10 @@ public class ModConfigScreen extends Screen {
int gap = 8;
int buttonsY = y + row * rowHeight + 18;
this.addRenderableWidget(Button.builder(Component.translatable("gui.done"), b -> saveAndClose())
.pos(centerX - btnW - gap/2, buttonsY)
.size(btnW, 20)
.bounds(centerX - btnW - gap/2, buttonsY, btnW, 20)
.build());
this.addRenderableWidget(Button.builder(Component.translatable("gui.cancel"), b -> onClose())
.pos(centerX + gap/2, buttonsY)
.size(btnW, 20)
.bounds(centerX + gap/2, buttonsY, btnW, 20)
.build());
}
@ -126,7 +124,7 @@ public class ModConfigScreen extends Screen {
@Override
public void render(GuiGraphics g, int mouseX, int mouseY, float partialTick) {
this.renderBackground(g);
this.renderBackground(g, mouseX, mouseY, partialTick);
super.render(g, mouseX, mouseY, partialTick);
int centerX = this.width / 2;

View File

@ -2,11 +2,11 @@ package com.extendedae_plus.client.screen;
import com.extendedae_plus.menu.NetworkPatternControllerMenu;
import com.extendedae_plus.network.GlobalToggleProviderModesC2SPacket;
import com.extendedae_plus.network.ModNetwork;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.neoforged.neoforge.network.PacketDistributor;
public class GlobalProviderModesScreen extends AbstractContainerScreen<NetworkPatternControllerMenu> {
private static final Component CUSTOM_TITLE = Component.literal("样板供应器状态控制器");
@ -29,7 +29,7 @@ public class GlobalProviderModesScreen extends AbstractContainerScreen<NetworkPa
// 行1三个单项切换
addRenderableWidget(Button.builder(Component.translatable("gui.extendedae_plus.global.toggle_blocking"), b ->
ModNetwork.CHANNEL.sendToServer(new GlobalToggleProviderModesC2SPacket(
PacketDistributor.sendToServer(new GlobalToggleProviderModesC2SPacket(
GlobalToggleProviderModesC2SPacket.Op.TOGGLE,
GlobalToggleProviderModesC2SPacket.Op.NOOP,
GlobalToggleProviderModesC2SPacket.Op.NOOP,
@ -37,7 +37,7 @@ public class GlobalProviderModesScreen extends AbstractContainerScreen<NetworkPa
))).bounds(x, y, w, h).build());
addRenderableWidget(Button.builder(Component.translatable("gui.extendedae_plus.global.toggle_adv_blocking"), b ->
ModNetwork.CHANNEL.sendToServer(new GlobalToggleProviderModesC2SPacket(
PacketDistributor.sendToServer(new GlobalToggleProviderModesC2SPacket(
GlobalToggleProviderModesC2SPacket.Op.NOOP,
GlobalToggleProviderModesC2SPacket.Op.TOGGLE,
GlobalToggleProviderModesC2SPacket.Op.NOOP,
@ -45,7 +45,7 @@ public class GlobalProviderModesScreen extends AbstractContainerScreen<NetworkPa
))).bounds(x + w + s, y, w, h).build());
addRenderableWidget(Button.builder(Component.translatable("gui.extendedae_plus.global.toggle_smart_doubling"), b ->
ModNetwork.CHANNEL.sendToServer(new GlobalToggleProviderModesC2SPacket(
PacketDistributor.sendToServer(new GlobalToggleProviderModesC2SPacket(
GlobalToggleProviderModesC2SPacket.Op.NOOP,
GlobalToggleProviderModesC2SPacket.Op.NOOP,
GlobalToggleProviderModesC2SPacket.Op.TOGGLE,
@ -58,7 +58,7 @@ public class GlobalProviderModesScreen extends AbstractContainerScreen<NetworkPa
int totalW2 = w * 2 + s;
int x2 = this.leftPos + (this.imageWidth - totalW2) / 2;
addRenderableWidget(Button.builder(Component.translatable("gui.extendedae_plus.global.all_on"), b ->
ModNetwork.CHANNEL.sendToServer(new GlobalToggleProviderModesC2SPacket(
PacketDistributor.sendToServer(new GlobalToggleProviderModesC2SPacket(
GlobalToggleProviderModesC2SPacket.Op.SET_TRUE,
GlobalToggleProviderModesC2SPacket.Op.SET_TRUE,
GlobalToggleProviderModesC2SPacket.Op.SET_TRUE,
@ -66,7 +66,7 @@ public class GlobalProviderModesScreen extends AbstractContainerScreen<NetworkPa
))).bounds(x2, y2, w, h).build());
addRenderableWidget(Button.builder(Component.translatable("gui.extendedae_plus.global.all_off"), b ->
ModNetwork.CHANNEL.sendToServer(new GlobalToggleProviderModesC2SPacket(
PacketDistributor.sendToServer(new GlobalToggleProviderModesC2SPacket(
GlobalToggleProviderModesC2SPacket.Op.SET_FALSE,
GlobalToggleProviderModesC2SPacket.Op.SET_FALSE,
GlobalToggleProviderModesC2SPacket.Op.SET_FALSE,
@ -95,7 +95,7 @@ public class GlobalProviderModesScreen extends AbstractContainerScreen<NetworkPa
@Override
public void render(net.minecraft.client.gui.GuiGraphics gfx, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(gfx);
this.renderBackground(gfx, mouseX, mouseY, partialTicks);
super.render(gfx, mouseX, mouseY, partialTicks);
gfx.drawString(this.font, CUSTOM_TITLE, this.leftPos + 10, this.topPos + 8, 0xFFFFFF, false);
}