[释放]修正研究节点未解锁时可以使用已有合成的漏洞;修复要素中继接口状态栏;删除源质发信器多余渲染。

This commit is contained in:
1820982382
2026-08-08 13:00:16 +08:00
parent 3573873518
commit 2d93c9d256
30 changed files with 415 additions and 22 deletions
@@ -0,0 +1,41 @@
package thaumicenergistics.common.network;
import net.minecraft.client.Minecraft;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.neoforged.neoforge.network.handling.IPayloadContext;
import thaumicenergistics.ThaumicEnergistics;
import thaumicenergistics.client.ResearchGateOverlay;
/**
* 服务端→客户端 网络包:告知玩家"研究未解锁"拦截发生,并携带具体研究键。
*
* 服务端在 submitJob 拦截(MixinCraftingService)时发送到对应玩家;
* 客户端收到后由 {@link ResearchGateOverlay} 在最上层渲染提示。
*/
public record ResearchGateErrorPacket(String research) implements CustomPacketPayload {
public static final Type<ResearchGateErrorPacket> TYPE =
new Type<>(ThaumicEnergistics.id("research_gate_error"));
public static final StreamCodec<RegistryFriendlyByteBuf, ResearchGateErrorPacket> STREAM_CODEC = StreamCodec.of(
(buf, pkt) -> buf.writeUtf(pkt.research),
buf -> new ResearchGateErrorPacket(buf.readUtf())
);
@Override
public Type<? extends CustomPacketPayload> type() {
return TYPE;
}
/**
* 客户端处理:记录最近一次研究未解锁拦截的研究键,供渲染层读取。
*/
public void handleOnClient(IPayloadContext ctx) {
ctx.enqueueWork(() -> {
// 无论当前在什么界面,记录研究键
ResearchGateOverlay.setPendingResearch(this.research);
});
}
}
@@ -49,5 +49,12 @@ public final class ThENetworking {
CellWorkbenchSyncPacket.STREAM_CODEC,
(pkt, ctx) -> pkt.handleOnClient(ctx)
);
// ResearchGateErrorPacket — S2C(服务端→客户端,研究未解锁拦截提示,携带研究键)
registrar.playToClient(
ResearchGateErrorPacket.TYPE,
ResearchGateErrorPacket.STREAM_CODEC,
(pkt, ctx) -> pkt.handleOnClient(ctx)
);
}
}