From b1a562a7e3fec19dc604ae63b4db8d55beefc063 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Tue, 2 Sep 2025 22:11:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E5=88=B6=E4=BD=9C?= =?UTF-8?q?=E4=B8=AD=E8=B7=B3=E8=BD=AC=E6=A0=B7=E6=9D=BF=E4=BE=9B=E5=BA=94?= =?UTF-8?q?=E5=99=A8=E7=95=8C=E9=9D=A2=E5=90=8C=E6=97=B6=E9=AB=98=E4=BA=AE?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E6=A0=B7=E6=9D=BF=E4=BE=9B=E5=BA=94=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CraftingMonitorOpenProviderC2SPacket.java | 42 +++++++++++++++++++ .../resources/extendedae_plus.mixins.json | 1 - 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java b/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java index f8e198f..6680f2f 100644 --- a/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java @@ -13,14 +13,26 @@ import appeng.menu.me.crafting.CraftingCPUMenu; import appeng.parts.AEBasePart; import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicAccessor; import com.extendedae_plus.util.PatternProviderDataUtil; +import com.glodblock.github.extendedae.util.FCClientUtil; +import com.glodblock.github.glodium.util.GlodUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; import net.minecraftforge.network.NetworkDirection; import net.minecraftforge.network.NetworkEvent; import java.util.Collection; +import java.util.Objects; import java.util.function.Supplier; +import static com.glodblock.github.extendedae.client.render.EAEHighlightHandler.highlight; + /** * 客户端从 CraftingCPUScreen 发送:鼠标下条目对应的 AEKey。 * 服务端在当前打开的 CraftingCPUMenu 所属网络中,定位匹配该 AEKey 的样板供应器, @@ -93,10 +105,15 @@ public class CraftingMonitorOpenProviderC2SPacket { // 部件与方块实体分别选择定位器并打开界面 if (host instanceof AEBasePart part) { host.openMenu(player, MenuLocators.forPart(part)); + highlightWithMessage(pbe.getBlockPos(), part.getSide(), Objects.requireNonNull(pbe.getLevel()).dimension(), 1.0, player); } else { host.openMenu(player, MenuLocators.forBlockEntity(pbe)); + highlightWithMessage(pbe.getBlockPos(), null, Objects.requireNonNull(pbe.getLevel()).dimension(), 1.0, player); } + // 高亮打开的供应器位置并发送聊天提示 + + // 先在该 provider 中定位 pattern 的槽位索引,以便计算页码(尽量早退出,按槽位逐个解码) int foundSlot = PatternProviderDataUtil.findSlotForPattern(ppl, pattern.getDefinition()); if (foundSlot >= 0) { @@ -122,4 +139,29 @@ public class CraftingMonitorOpenProviderC2SPacket { }); context.setPacketHandled(true); } + + private static void highlightWithMessage(BlockPos pos, Direction face, ResourceKey dim, double multiplier, Player player) { + if (pos == null || dim == null) { + return; + } + long endTime = System.currentTimeMillis() + (long) (6000 * GlodUtil.clamp(multiplier, 1, 30)); + if (face == null) { + highlight(pos, dim, endTime); + } else { + var origin = new AABB(2 / 16D, 2 / 16D, 0, 14 / 16D, 14 / 16D, 2 / 16D).move(pos); + var center = new AABB(pos).getCenter(); + switch (face) { + case WEST -> origin = FCClientUtil.rotor(origin, center, Direction.Axis.Y, (float) (Math.PI / 2)); + case SOUTH -> origin = FCClientUtil.rotor(origin, center, Direction.Axis.Y, (float) Math.PI); + case EAST -> origin = FCClientUtil.rotor(origin, center, Direction.Axis.Y, (float) (-Math.PI / 2)); + case UP -> origin = FCClientUtil.rotor(origin, center, Direction.Axis.X, (float) (-Math.PI / 2)); + case DOWN -> origin = FCClientUtil.rotor(origin, center, Direction.Axis.X, (float) (Math.PI / 2)); + } + highlight(pos, face, dim, endTime, origin); + } + + if (player != null) { + player.displayClientMessage(Component.translatable("chat.ex_pattern_access_terminal.pos", pos.toShortString(), dim.location().getPath()), false); + } + } } diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index 5772e34..6e1c457 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -31,7 +31,6 @@ "mixins": [ "ae2.AEProcessingPatternMixin", "ae2.CraftingCPUClusterMixin", - "ae2.IPatternDetailsMixin", "ae2.accessor.MEStorageMenuAccessor", "ae2.accessor.PatternEncodingTermMenuAccessor", "ae2.accessor.PatternProviderLogicAccessor",