1.4.0
This commit is contained in:
parent
6369e2f280
commit
be0d548238
|
|
@ -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.
|
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||||
mod_license=All Rights Reserved
|
mod_license=All Rights Reserved
|
||||||
# The mod version. See https://semver.org/
|
# 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.
|
# 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.
|
# This should match the base package used for the mod sources.
|
||||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,8 @@ public class NetworkPatternControllerBlock extends Block implements EntityBlock
|
||||||
if (!level.isClientSide && player instanceof ServerPlayer sp) {
|
if (!level.isClientSide && player instanceof ServerPlayer sp) {
|
||||||
BlockEntity be = level.getBlockEntity(pos);
|
BlockEntity be = level.getBlockEntity(pos);
|
||||||
if (be instanceof MenuProvider provider) {
|
if (be instanceof MenuProvider provider) {
|
||||||
sp.openMenu(provider);
|
// 关键:将方块位置写入缓冲,客户端菜单读取以便按钮发包附带正确坐标
|
||||||
|
sp.openMenu(provider, buf -> buf.writeBlockPos(pos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ItemInteractionResult.sidedSuccess(level.isClientSide);
|
return ItemInteractionResult.sidedSuccess(level.isClientSide);
|
||||||
|
|
@ -42,7 +43,8 @@ public class NetworkPatternControllerBlock extends Block implements EntityBlock
|
||||||
if (!level.isClientSide && player instanceof ServerPlayer sp) {
|
if (!level.isClientSide && player instanceof ServerPlayer sp) {
|
||||||
BlockEntity be = level.getBlockEntity(pos);
|
BlockEntity be = level.getBlockEntity(pos);
|
||||||
if (be instanceof MenuProvider provider) {
|
if (be instanceof MenuProvider provider) {
|
||||||
sp.openMenu(provider);
|
// 同上:无手持物品时也写入 BlockPos
|
||||||
|
sp.openMenu(provider, buf -> buf.writeBlockPos(pos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return InteractionResult.sidedSuccess(level.isClientSide);
|
return InteractionResult.sidedSuccess(level.isClientSide);
|
||||||
|
|
|
||||||
|
|
@ -90,12 +90,26 @@ public final class WrenchHook {
|
||||||
// 未潜行 + 扳手:切换锁定状态
|
// 未潜行 + 扳手:切换锁定状态
|
||||||
BlockEntity be = level.getBlockEntity(hit.getBlockPos());
|
BlockEntity be = level.getBlockEntity(hit.getBlockPos());
|
||||||
if (be instanceof WirelessTransceiverBlockEntity te) {
|
if (be instanceof WirelessTransceiverBlockEntity te) {
|
||||||
boolean newLocked = !te.isLocked();
|
// 仅在服务端切换与同步,避免仅客户端生效导致看起来“无效果”
|
||||||
te.setLocked(newLocked);
|
if (!level.isClientSide) {
|
||||||
// 提示玩家
|
boolean newLocked = !te.isLocked();
|
||||||
player.displayClientMessage(Component.literal(newLocked ? "已锁定收发器" : "已解锁收发器"), true);
|
te.setLocked(newLocked);
|
||||||
// 轻微反馈音效
|
// 同步方块更新到客户端
|
||||||
level.playSound(player, hit.getBlockPos(), SoundEvents.LEVER_CLICK, SoundSource.BLOCKS, 0.5F, newLocked ? 0.6F : 0.9F);
|
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.setCanceled(true);
|
||||||
event.setCancellationResult(InteractionResult.sidedSuccess(level.isClientSide));
|
event.setCancellationResult(InteractionResult.sidedSuccess(level.isClientSide));
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,15 @@ config="${mod_id}.mixins.json"
|
||||||
ordering="NONE"
|
ordering="NONE"
|
||||||
side="BOTH"
|
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
|
# 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
|
# 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.
|
# stop your mod loading on the server for example.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user