This commit is contained in:
1820982382
2026-08-04 16:34:40 +08:00
parent bb6e4b9446
commit 83143de9d3
27 changed files with 568 additions and 104 deletions
@@ -0,0 +1,45 @@
package thaumicenergistics.common.network;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.world.item.ItemStack;
import net.neoforged.neoforge.network.handling.IPayloadContext;
import thaumicenergistics.ThaumicEnergistics;
import thaumicenergistics.common.container.ContainerDistillationPatternEncoder;
/**
* 客户端→服务端 网络包:蒸馏编码台设置源物品(JEI 拖拽)。
* 源物品槽是真实 SlotItemHandler(非 ghost),拖拽需服务端权威写入 encoder 槽 0 + 刷新 aspects。
*/
public record DistillationEncoderSetSourceC2SPacket(
int containerId,
ItemStack stack
) implements CustomPacketPayload {
public static final Type<DistillationEncoderSetSourceC2SPacket> TYPE =
new Type<>(ThaumicEnergistics.id("de_set_source"));
public static final StreamCodec<RegistryFriendlyByteBuf, DistillationEncoderSetSourceC2SPacket> STREAM_CODEC =
StreamCodec.composite(
ByteBufCodecs.VAR_INT, DistillationEncoderSetSourceC2SPacket::containerId,
ItemStack.OPTIONAL_STREAM_CODEC, DistillationEncoderSetSourceC2SPacket::stack,
DistillationEncoderSetSourceC2SPacket::new
);
@Override
public Type<? extends CustomPacketPayload> type() {
return TYPE;
}
/** 服务端处理:找到对应菜单,写入源物品槽并刷新 aspects。 */
public void handleOnServer(IPayloadContext ctx) {
ctx.enqueueWork(() -> {
if (ctx.player().containerMenu.containerId == this.containerId
&& ctx.player().containerMenu instanceof ContainerDistillationPatternEncoder menu) {
menu.setSourceItemOnServer(this.stack);
}
});
}
}
@@ -29,6 +29,13 @@ public final class ThENetworking {
(pkt, ctx) -> pkt.handleOnServer(ctx)
);
// DistillationEncoderSetSourceC2SPacket — C2S(蒸馏编码台设置源物品——JEI 拖拽)
registrar.playToServer(
DistillationEncoderSetSourceC2SPacket.TYPE,
DistillationEncoderSetSourceC2SPacket.STREAM_CODEC,
(pkt, ctx) -> pkt.handleOnServer(ctx)
);
// CellWorkbenchC2SPacket — C2S(客户端→服务端,源质元件工作台分区操作)
registrar.playToServer(
CellWorkbenchC2SPacket.TYPE,