minecraft-src/net/minecraft/network/protocol/game/ServerboundSetStructureBlockPacket.java
2025-07-04 01:41:11 +03:00

191 lines
5 KiB
Java

package net.minecraft.network.protocol.game;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Vec3i;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketType;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.Mirror;
import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.entity.StructureBlockEntity;
import net.minecraft.world.level.block.state.properties.StructureMode;
public class ServerboundSetStructureBlockPacket implements Packet<ServerGamePacketListener> {
public static final StreamCodec<FriendlyByteBuf, ServerboundSetStructureBlockPacket> STREAM_CODEC = Packet.codec(
ServerboundSetStructureBlockPacket::write, ServerboundSetStructureBlockPacket::new
);
private static final int FLAG_IGNORE_ENTITIES = 1;
private static final int FLAG_SHOW_AIR = 2;
private static final int FLAG_SHOW_BOUNDING_BOX = 4;
private final BlockPos pos;
private final StructureBlockEntity.UpdateType updateType;
private final StructureMode mode;
private final String name;
private final BlockPos offset;
private final Vec3i size;
private final Mirror mirror;
private final Rotation rotation;
private final String data;
private final boolean ignoreEntities;
private final boolean showAir;
private final boolean showBoundingBox;
private final float integrity;
private final long seed;
public ServerboundSetStructureBlockPacket(
BlockPos pos,
StructureBlockEntity.UpdateType updateType,
StructureMode mode,
String name,
BlockPos offset,
Vec3i size,
Mirror mirror,
Rotation rotation,
String data,
boolean ignoreEntities,
boolean showAir,
boolean showBoundingBox,
float integrity,
long seed
) {
this.pos = pos;
this.updateType = updateType;
this.mode = mode;
this.name = name;
this.offset = offset;
this.size = size;
this.mirror = mirror;
this.rotation = rotation;
this.data = data;
this.ignoreEntities = ignoreEntities;
this.showAir = showAir;
this.showBoundingBox = showBoundingBox;
this.integrity = integrity;
this.seed = seed;
}
private ServerboundSetStructureBlockPacket(FriendlyByteBuf buffer) {
this.pos = buffer.readBlockPos();
this.updateType = buffer.readEnum(StructureBlockEntity.UpdateType.class);
this.mode = buffer.readEnum(StructureMode.class);
this.name = buffer.readUtf();
int i = 48;
this.offset = new BlockPos(Mth.clamp(buffer.readByte(), -48, 48), Mth.clamp(buffer.readByte(), -48, 48), Mth.clamp(buffer.readByte(), -48, 48));
int j = 48;
this.size = new Vec3i(Mth.clamp(buffer.readByte(), 0, 48), Mth.clamp(buffer.readByte(), 0, 48), Mth.clamp(buffer.readByte(), 0, 48));
this.mirror = buffer.readEnum(Mirror.class);
this.rotation = buffer.readEnum(Rotation.class);
this.data = buffer.readUtf(128);
this.integrity = Mth.clamp(buffer.readFloat(), 0.0F, 1.0F);
this.seed = buffer.readVarLong();
int k = buffer.readByte();
this.ignoreEntities = (k & 1) != 0;
this.showAir = (k & 2) != 0;
this.showBoundingBox = (k & 4) != 0;
}
/**
* Writes the raw packet data to the data stream.
*/
private void write(FriendlyByteBuf buffer) {
buffer.writeBlockPos(this.pos);
buffer.writeEnum(this.updateType);
buffer.writeEnum(this.mode);
buffer.writeUtf(this.name);
buffer.writeByte(this.offset.getX());
buffer.writeByte(this.offset.getY());
buffer.writeByte(this.offset.getZ());
buffer.writeByte(this.size.getX());
buffer.writeByte(this.size.getY());
buffer.writeByte(this.size.getZ());
buffer.writeEnum(this.mirror);
buffer.writeEnum(this.rotation);
buffer.writeUtf(this.data);
buffer.writeFloat(this.integrity);
buffer.writeVarLong(this.seed);
int i = 0;
if (this.ignoreEntities) {
i |= 1;
}
if (this.showAir) {
i |= 2;
}
if (this.showBoundingBox) {
i |= 4;
}
buffer.writeByte(i);
}
@Override
public PacketType<ServerboundSetStructureBlockPacket> type() {
return GamePacketTypes.SERVERBOUND_SET_STRUCTURE_BLOCK;
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
public void handle(ServerGamePacketListener handler) {
handler.handleSetStructureBlock(this);
}
public BlockPos getPos() {
return this.pos;
}
public StructureBlockEntity.UpdateType getUpdateType() {
return this.updateType;
}
public StructureMode getMode() {
return this.mode;
}
public String getName() {
return this.name;
}
public BlockPos getOffset() {
return this.offset;
}
public Vec3i getSize() {
return this.size;
}
public Mirror getMirror() {
return this.mirror;
}
public Rotation getRotation() {
return this.rotation;
}
public String getData() {
return this.data;
}
public boolean isIgnoreEntities() {
return this.ignoreEntities;
}
public boolean isShowAir() {
return this.showAir;
}
public boolean isShowBoundingBox() {
return this.showBoundingBox;
}
public float getIntegrity() {
return this.integrity;
}
public long getSeed() {
return this.seed;
}
}