package net.minecraft.network.protocol.common.custom; import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.game.DebugEntityNameGenerator; import net.minecraft.world.level.pathfinder.Path; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; public record BeeDebugPayload(BeeDebugPayload.BeeInfo beeInfo) implements CustomPacketPayload { public static final StreamCodec STREAM_CODEC = CustomPacketPayload.codec(BeeDebugPayload::write, BeeDebugPayload::new); public static final CustomPacketPayload.Type TYPE = CustomPacketPayload.createType("debug/bee"); private BeeDebugPayload(FriendlyByteBuf buffer) { this(new BeeDebugPayload.BeeInfo(buffer)); } private void write(FriendlyByteBuf buffer) { this.beeInfo.write(buffer); } @Override public CustomPacketPayload.Type type() { return TYPE; } public record BeeInfo( UUID uuid, int id, Vec3 pos, @Nullable Path path, @Nullable BlockPos hivePos, @Nullable BlockPos flowerPos, int travelTicks, Set goals, List blacklistedHives ) { public BeeInfo(FriendlyByteBuf buffer) { this( buffer.readUUID(), buffer.readInt(), buffer.readVec3(), buffer.readNullable(Path::createFromStream), buffer.readNullable(BlockPos.STREAM_CODEC), buffer.readNullable(BlockPos.STREAM_CODEC), buffer.readInt(), buffer.readCollection(HashSet::new, FriendlyByteBuf::readUtf), buffer.readList(BlockPos.STREAM_CODEC) ); } public void write(FriendlyByteBuf buffer) { buffer.writeUUID(this.uuid); buffer.writeInt(this.id); buffer.writeVec3(this.pos); buffer.writeNullable(this.path, (friendlyByteBuf, path) -> path.writeToStream(friendlyByteBuf)); buffer.writeNullable(this.hivePos, BlockPos.STREAM_CODEC); buffer.writeNullable(this.flowerPos, BlockPos.STREAM_CODEC); buffer.writeInt(this.travelTicks); buffer.writeCollection(this.goals, FriendlyByteBuf::writeUtf); buffer.writeCollection(this.blacklistedHives, BlockPos.STREAM_CODEC); } public boolean hasHive(BlockPos pos) { return Objects.equals(pos, this.hivePos); } public String generateName() { return DebugEntityNameGenerator.getEntityName(this.uuid); } public String toString() { return this.generateName(); } } }