From be0d548238a3ef087a1ed4bd3246354b9ca543b1 Mon Sep 17 00:00:00 2001 From: GaLicn <133291877+GaLicn@users.noreply.github.com> Date: Sun, 7 Sep 2025 13:58:02 +0800 Subject: [PATCH] 1.4.0 --- gradle.properties | 2 +- .../NetworkPatternControllerBlock.java | 6 +++-- .../com/extendedae_plus/hooks/WrenchHook.java | 26 ++++++++++++++----- .../templates/META-INF/neoforge.mods.toml | 9 +++++++ 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/gradle.properties b/gradle.properties index 92393db..1f29295 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,7 +32,7 @@ mod_name=ExtendedAE-Plus # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=1.0.0 +mod_version=1.4.0 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/com/extendedae_plus/content/controller/NetworkPatternControllerBlock.java b/src/main/java/com/extendedae_plus/content/controller/NetworkPatternControllerBlock.java index f6fc8d6..33e3aa4 100644 --- a/src/main/java/com/extendedae_plus/content/controller/NetworkPatternControllerBlock.java +++ b/src/main/java/com/extendedae_plus/content/controller/NetworkPatternControllerBlock.java @@ -31,7 +31,8 @@ public class NetworkPatternControllerBlock extends Block implements EntityBlock if (!level.isClientSide && player instanceof ServerPlayer sp) { BlockEntity be = level.getBlockEntity(pos); if (be instanceof MenuProvider provider) { - sp.openMenu(provider); + // 关键:将方块位置写入缓冲,客户端菜单读取以便按钮发包附带正确坐标 + sp.openMenu(provider, buf -> buf.writeBlockPos(pos)); } } return ItemInteractionResult.sidedSuccess(level.isClientSide); @@ -42,7 +43,8 @@ public class NetworkPatternControllerBlock extends Block implements EntityBlock if (!level.isClientSide && player instanceof ServerPlayer sp) { BlockEntity be = level.getBlockEntity(pos); if (be instanceof MenuProvider provider) { - sp.openMenu(provider); + // 同上:无手持物品时也写入 BlockPos + sp.openMenu(provider, buf -> buf.writeBlockPos(pos)); } } return InteractionResult.sidedSuccess(level.isClientSide); diff --git a/src/main/java/com/extendedae_plus/hooks/WrenchHook.java b/src/main/java/com/extendedae_plus/hooks/WrenchHook.java index 5f328eb..c5a4a22 100644 --- a/src/main/java/com/extendedae_plus/hooks/WrenchHook.java +++ b/src/main/java/com/extendedae_plus/hooks/WrenchHook.java @@ -90,12 +90,26 @@ public final class WrenchHook { // 未潜行 + 扳手:切换锁定状态 BlockEntity be = level.getBlockEntity(hit.getBlockPos()); if (be instanceof WirelessTransceiverBlockEntity te) { - boolean newLocked = !te.isLocked(); - te.setLocked(newLocked); - // 提示玩家 - player.displayClientMessage(Component.literal(newLocked ? "已锁定收发器" : "已解锁收发器"), true); - // 轻微反馈音效 - level.playSound(player, hit.getBlockPos(), SoundEvents.LEVER_CLICK, SoundSource.BLOCKS, 0.5F, newLocked ? 0.6F : 0.9F); + // 仅在服务端切换与同步,避免仅客户端生效导致看起来“无效果” + if (!level.isClientSide) { + boolean newLocked = !te.isLocked(); + te.setLocked(newLocked); + // 同步方块更新到客户端 + var pos = hit.getBlockPos(); + BlockState state = level.getBlockState(pos); + try { + level.sendBlockUpdated(pos, state, state, 3); + } catch (Throwable t) { + ExtendedAEPlus.LOGGER.debug("sendBlockUpdated failed: {}", t.toString()); + } + // 提示玩家(服务端消息下发到客户端) + player.displayClientMessage(Component.literal(newLocked ? "已锁定收发器" : "已解锁收发器"), true); + // 轻微反馈音效 + level.playSound(player, hit.getBlockPos(), SoundEvents.LEVER_CLICK, SoundSource.BLOCKS, 0.5F, newLocked ? 0.6F : 0.9F); + ExtendedAEPlus.LOGGER.debug("Wrench toggle lock at {} -> {}", pos, newLocked); + } else { + ExtendedAEPlus.LOGGER.debug("Client received wrench toggle intent (no-op on client)"); + } event.setCanceled(true); event.setCancellationResult(InteractionResult.sidedSuccess(level.isClientSide)); diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml index 75838c9..79dddab 100644 --- a/src/main/templates/META-INF/neoforge.mods.toml +++ b/src/main/templates/META-INF/neoforge.mods.toml @@ -86,6 +86,15 @@ config="${mod_id}.mixins.json" ordering="NONE" side="BOTH" +# Require ExtendedAE (ExtendedAE-1.21-2.2.21-neoforge) to be present +[[dependencies.${mod_id}]] + modId="extendedae" + type="required" + # Use a permissive range to tolerate upstream version string variations (e.g. 1.21-2.2.21-neoforge) + versionRange="*" + ordering="AFTER" + side="BOTH" + # Features are specific properties of the game environment, that you may want to declare you require. This example declares # that your mod requires GL version 3.2 or higher. Other features will be added. They are side aware so declaring this won't # stop your mod loading on the server for example.